计算机网络知识点总结


知识点总结

各种地址及长度:

  • 传输层,port: 2B, 0-65535
  • 网络层,IP地址: 4B, 分成5类 (A类,B类,C类,D类, E类)
  • 数据链路层,mac地址: 6B,一般写成12位的Hex字符串。

网络协议:

所在层级 协议名称 全称 作用 端口
网络层 DHCP Dynamic Host Configuration Protocol 分配ip地址
应用层 SMTP simple mail transfer protocol email (基于tcp) 25
应用层 DNS Domain Name System 根据域名查询IP (基于udp) 53
应用层 POP Post Office Protocol authorization (agent <–>server) and download
应用层 IMAP Internet Mail Access Protocol 从mail server获取邮件
应用层 FTP File Transfer Protocol 本地机器和服务器间传输文件 21/20

头部结构表示长度的

  • UDP: Length: 占用2B, 最大值 2^16 –1 = 65535, 它包含UDP头部的8B,单位是字节。上层应用层的数据大小是,length - 8B
  • TCP: tcp头部的header size的占用4bit,总共可以表达0-15. 单位是 4B-word.
    含义是: the number of 4-byte words in the TCP header. 所以最多是15*4B = 60B头部
  • 网络层IP报文:
    • hdr length: 占用4-bit,表示范围0-15, 单位是4B-word, 可以表达的头部长度范围是: 20-60B
    • total length: 占用2B,表示范围0-65565,单位是字节,表示的是整个IP表文的字节数(包括IP头部)

总结,对比TCP Tahoe 和 TCP Reno

  • TCP Tahoe = Slow Start + AIMD + Fast Retransmit
    image-20220413194949316
  • TCP Reno = TCP Tahoe + Fast Recovery [触发的时机: 重复的ack]
    image-20220413195053964
  • Since TCP Reno is the extension of TCP Tahoe, the slow start and AIMD phase are the same. 对比如下:
    image-20220413195137484
  • 最先有TCP Tahoe,现在已经基本不用了,后来提出了TCP Reno,性能会好很多。

分层结构

  • OSI的七层模型

    • 各层使用的数据以及地址:

      数据 通信 地址
      物理层 比特 - Bit hop-to-hop,hop之间通信
      数据链路层 桢 - Frame hop-to-hop,hop之间通信 mac地址
      网络层 包 - Packet / Datagram host-to-host,主机之间的通信
      source node to destination node
      ip地址
      传输层 段 - Segment process-to-process,进程之间的通信 端口
    • 不同层对数据称呼不一样,使用的地址也不一样(往头部添加的内容不同)

    • OSI的七层模型,上面三层不是很熟悉,尤其是展示层(Presentation)和会话层(session)。 下面的4层熟悉一点。

  • 相关术语

    • 用于两人沟通的系统:Source – Transmitter — Transmission System – Receiver – Destination
    • 网络:Source, Destination, Transmitter, Hub, Router, Wireless Access Point, Receiver
    • 计算机网络:mobile network, global ISP, regional ISP, institutional network, home network

应用层

  • 大部分应用层协议使用TCP,所以只要记住哪些协议使用了udp即可: DNS

  • 各个应用层协议使用的端口和传输层协议

    协议 端口 传输层协议
    HTTP 80 tcp
    Mail Server 25 tcp
    SSH 22 tcp
    DNS 53 udp
    FTP 21-cmd, 20-data tcp

HTTP协议

需要了解报文格式 / 无状态 / 不同版本差异 / 持久和非持久连接 / Cookie / Cache / 常见状态码

  • HEAD 请求方法的作用?只请求页面的首部,用来获取请求中隐含的元信息,而不用传输实体本身。也经常用来测试超链接的有效性、可用性和最近的修改。
  • 一个HEAD请求的响应可被缓存,也就是说,响应中的信息可能用来更新之前缓存的实体。如果当前实体跟缓存实体的阈值不同(可通过Content-Length、Content-MD5、ETag或Last-Modified的变化来表明),那么这个缓存就被视为过期了。
    参考:https://www.jianshu.com/p/49ebc4a78474

DNS 协议

  • 两种查询方式(iterative迭代方式,recursive),查询到后也会缓存,

    • iterative方式查询域名: 除了本地计算机外,发起域名请求查询的全部是本地的DNS server。
    • recursive方式,则是询问的目标server,继续发起请求,得到结果之后,再返回给本地DNS服务器。【类似于函数的递归调用】
  • DNS record

    • Resource Record格式:(name, value, type, ttl)
    • 四种类型: A or AAAA-hostname to IP, CNAME - alias name, NS-domain-to-hostname, MX-mail server
  • TLD and Authoritative Servers

    • Top-level domain (TLD) servers: 顶级域名服务器, 例如 .com, .org, .net, .edu, .uk, .jp, .fr等等
    • Authoritative DNS servers:权威域名服务器,例如:一个组织的服务器,github.com
    • Local Name Server: 一般每个ISP运营商,公司,大学都有各自的server

电子邮件服务

SMTP,POP3,IMAP

  • email三个组成部分: user agent, mail server, SMTP协议
  • user agent (smtp client) 和mail server之间使用的协议是? HTTP, Pop3, 或者IMAP
    • 这三个协议之间有什么区别?
  • mail server <——> mail server 使用的是: SMTP
  • SMTP 协议细节 (HELO, MAIL FROM, RCPT TO, DATA, QUIT commands 各个作用)
    • DATA: indicate start of mail message. 命令之后,输入email内容
    • HELO: 客户端为标识自己的身份而发送的命令(通常带域名)
    • EHLO: 使服务器可以表明自己支持扩展简单邮件传输协议 (ESMTP) 命令。
    • MAIL FROM: 标识邮件的发件人;
    • RCPT TO: 标识邮件的收件人;
    • QUIT: 终止会话 (参考: https://www.cnblogs.com/cocowool/archive/2012/03/14/2395390.html)
    • SMTP server uses CRLF.CRLF to determine end of message. [其实就是 a dot by itself on a line]

传输层

问题:传输层实现可靠传输,为什么使用sequence number?

回答:解决3个问题:丢包,包损坏, 乱序

tcp

  1. 头部信息
    image-20220413112556521

    • tcp头部的header size的作用是?大小是4bit,总共可以表达0-15.
      含义是: the number of 4-byte words in the TCP header. 所以最多是15*4B = 60B头部
  2. Sliding window protocal: 滑动窗口协议

    • 目的:为了解决传输的不可靠性

      • packet损坏了: corrupt packet
      • packet顺序错乱了: out of sequence packet
      • packet丢失: 使用timeout机制
        • 没有timeout,怎么判断丢失了? sender收到receiver的两个相同的ack报文
        • 有了timeout机制,对于sender发出的每个packet,都要启动一个timer, 当timer结束之前,收到ack则认为发送成功。否则,会重发packet。(两种超时重发策略)
      • timeout expired
    • 两种策略:

      • Go-back-N 没有缓冲,直接丢弃掉corrupt packet以及之后的所有packet。【实现简单】
      • Selective Repeat: 有缓冲,只丢弃corrupt packet,对于后续的packet会缓冲起来 【实现复杂】
  3. Connection Management, 连接管理

    1. 三次握手
      1. 前面两次不能包含数据,第3次可以。
      2. 使用SYN 和 ACK标志: SYN; SYN, ACK; ACK.
    2. 四次挥手
      1. 发送和接收双方各自单独发起结束连接。
      2. 使用FIN标志,使用Timed wait来处理延迟的segment。【最后接收FIN的一方,发送的ACK,要使用time wait来处理,避免这个ack对方没有收到,从而对方再次发送FIN请求】
    3. 状态变迁:发起连接,等待建立连接,传输数据,结束连接。
      1. listen, syn_rcvd, established, close_wait, last_ack, closed
  4. TCP Congestion Control, 拥塞控制

    1. 网络拥堵的两个表现:丢包(lose packets) 和 长延时 (long delays)
    2. 解决拥塞的方法:
      1. 网络协助: 路由器给终端计算机反馈拥堵情况
      2. 端到端系统控制: [TCP采用]
        1. 逐步增加(幅度小)窗口大小,当有包丢失时,缩减窗口大小(幅度大)
        2. Additive-Increase Multiplicative-Decrease (AIMD)
        3. 如何知道Loss event? Timeout 或者 重复的Ack
        4. TCP传输的不同阶段
          1. 慢开始 (Slow start)
          2. 拥塞避免 (Congestion Avoidance)
          3. 拥塞控制 (Congestion Control)
          4. 快重传 / 快恢复 (Fast Retransmit / Recovery) 【只在TCP reno中出现,只跟dup acks关联】
        5. TCP Tahoe vs TCP Reno 看上面的总结。
          image-20220413195940285
  5. 疑问

    • RTT包含?发送 + ack确认,RTT = 2 * (Total Time), Total Time = 发送delay + 传输delay + 排队delay + 处理delay
    • 接受方的ack 确认的是已经收到的packet的编号? 不对,表示期待的下一个编号

udp

  • 常见使用UDP的应用层协议有: Skype等实时语音视频通话,NFS(网络文件系统)、SNMP(简单网络管理系统)、DNS(主域名称系统)、TFTP(通用文件传输协议)等。
  • UDP的头部
    image-20220413112629972
    • Length: 2B, 最大值 2^16 –1 = 65535, 它包含UDP头部的8B,单位是字节。
  • 特点

网络层

  • IP 报文的格式(IP datagram)
    image-20220413162402244

    • hdr length: 占用4-bit,表示范围0-15, 单位是4B-word? 总共能表达头部长度20-60B
    • total length: 占用2B,表示范围0-65565,单位是字节,表示的是整个IP表文的字节数(包括IP头部)
  • 分成5类,A,B,C,D,E
    image-20220413152745259

    • 给定一个ip地址,判断是哪一类的话?只需要把第一个字节写成二进制,看前几个bit有几个1,2个1是C,3个1是D。

    • 网络号占的字节数,ABC分别是1,2,3。对应的主机号字节数则是3,2,1.

    • IP地址划分:子网划分,拿B类举例,B类地址,主机号是2B =16位

      子网编号 子网个数 子网掩码
      1 2 128
      11 4 192
      111 8 224
      1111 16 240
      1111 1 32 248
      1111 11 64 252
      1111 111 128 254
      1111 1111 256 255

      有了上面的表格,给定一个ip和子网掩码就能得到: 200.45.34.56/20. (这是C类地址,第3个字节的4位作为子网号)

    • 特殊的IP地址
      image-20220413162156413

    • 划分子网
      image-20220413162251738

  • 常见的网络层协议:DHCP,IP,NAT

  • 当传输层的fragment传递到IP层时,如果数据比较大,那么IP层会给它分段。 MTU- max transmission unit

    • 因为不同的网络线路能传递的最大的网络报文长度不一样
    • IP头部有3个flg标志位指示是否分段: bit 0 保留,bit 1: DF (don’t fragment), bit 2: MF (more fragments)
    • 划分之后,会在目的机器上,重新组装成一个大的IP报文

数据链路层

基本数据单位是桢。

物理层

传输光电信号的。数据单位是bit。

实践

  • 使用wireshark观察各种协议的packet
  • 如果要实时抓取网卡数据的话,需要sudo权限启动Wireshart: sudo wireshark

相关计算

  • RTT计算:
    • 注意RTT表示一个往返(发送 + ack确认报文)
  • IP地址划分:
    • 给定一个address 和 mask 能计算出来三个信息,该网段的地址范围,以及总共多少个地址
      • 举例:167.199.170.82/27
        • 使用ubuntu自带的计算器,Programming mode,很方便地根据二进制计算10进制的值,然后根据10进制算出2进制。

非常好的网络资源

  1. IP Fragmentation in Detail - Packet Pushers
  2. IP Time to Live (TTL) and Hop Limit Basics - Packet Pushers
  3. 802.11 协议介绍 | Jiansoft
    1. 802.11 协议是位于最下两层(数据链路层 + 物理层)
    2. IEEE 802协议簇是指IEEE标准中关于局域网(LAN)和城域网(MAN)的一系列标准。
    3. IEEE 802中定义的服务和协议限定在OSI七层网络模型的最低两层,即数据链路层和物理层。
  4. Active_vs_Passive_FTP

文章作者: IT神助攻
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 IT神助攻 !
  目录