OSI模型每层的数据单元名称

  1. 第一层:物理层;二进制比特流传输;bit(比特流)
  2. 第二层:数据链路层;介质访问控制;frame(帧)
  3. 第三层:网络层;确定地址和路由选择;packet(包),又叫做分组
  4. 第四层:传输层;端到端连接;也叫作数据包。TCP的数据单元叫数据段,segment(段),而UDP协议的数据单元称为数据报(datagram)
  5. 每层有特殊叫法,这种叫法是PDU(Protocol Data Unit 协议数据单元)。物理层的PDU叫做比特流,数据链路层的-PDU叫做帧;网络层的PDU叫做包;传输层的PDU叫做段,高层的PDU叫做数据(Data)

数据链路层

  1. 以太网有一个重要的参数 $a$,它必须保持为很小的数值。这里 t 是以太网单程端到端时延, T0 是帧的发送时间。我们知道, T0 是帧长与发送速率之比,可见为了保持参数 a 不变,可以使t 与发送速率的乘积不变。在帧长一定的条件下,若数据率提高到 10 倍,可把网络电缆长度(因而使 t )减小到原有数值的十分之一
  2. 以太网帧的最小长度 64 Byte 是由 CSMA/CD 限制所致
    1. 最早的以太网工作方式:载波多路复用/冲突检测(CSMA/CD),因为网络是共享的,即任何一个节点发送数据之前,先要侦听线路上是否有数据在传输,如果有,需要等待,如果线路可用,才可以发送。
    2. 假设A发出第一个bit位,到达B,而B也正在传输第一个bit位,于是产生冲突,冲突信号得让A在完成最后一个bit位之前到达A。规定以太网中这个一来一回的时间间隙 slot time 是51.2μs(争用期)
    3. 信号在以太网上传播信号大概是 1km 需要 5μs,以太网最大端到端时延必须小于争用期的一半(25.6μs),这相当于以太网最大端到端长度为 5km,实际上以太网覆盖范围没有这么大
    4. 在10Mbps(指的是传输速率)的网络中,要求以太网帧最小长度为512个bits,从而让最极端的碰撞都能够被检测到。换算一下就是 64 Byte,以太网帧的最小长度为 64 Byte。
  3. 以太网帧的最大长度 1518 Byte 是为了传输效率
    1. 由于线路质量差而引起的丢包,发生在大包的概率也比小包概率大得多,所以大包在丢包率较高的线路上不是一个好的选择。
    2. 但是如果选择一个比较小的长度,传输效率又不高,拿TCP应用来说,如果选择以太网长度为 218 Byte,TCP payload = 218 - Ethernet Header - IP Header - TCP Header = 218 - 18 - 20 - 20 = 160 Byte。那有效传输效率 = 160 / 218= 73%。而如果以太网长度为 1518 ,那有效传输效率 = 1460 / 1518 = 96%
    3. 通过比较,选择较大的帧长度,有效传输效率更高,而更大的帧长度同时也会造成上述的问题,于是最终选择一个折衷的长度:1518 Byte 对应的 IP packet 就是 1500 Byte,这就是 最大传输单元MTU 的由来。
  4. 以太网的 MAC 帧格式

网络层

  1. 一个链路层帧能承载的最大数据量叫作 最大传输单元MTU,即 IP 数据报总长度(首部 + 数据部分)
  2. 数据报的分片重新组装工作在 端系统,而不是网络路由器
  3. IP 数据报分片,其中 标识 字段标识号相同的分片属于同一数据报;最后一个片 标志 字段置0,其余片置1;偏移 字段指定该片应放在初始数据报的哪个位置,以 8 个字节为单位
  4. IP 数据报格式:
    1. 首部长度(以4字节为单位):因为IP数据报包含一些可变数量的选项,所以该字段用以确认IP数据报中载荷(如被封装的运输层报文段)实际开始的地方。一般的IP数据包具有 20 字节的首部(不包含选项)
    2. 数据报长度(以1字节为单位):首部加上数据。16比特,理论上最大长度为65535字节。然而,数据报很少有超过 1500 字节的。
    3. 协议:指示该数据报的数据部分应交给哪个特定的传输层协议
    4. 首部校验和:帮助路由器检测收到的IP数据报中的比特错误。注意在每台路由器上必须重新计算校验和,因为TTL字段会变。
      • 计算方法:在发送方,先把IP数据报首部划分成许多16位字的序列,并把检验和字段置零。用反码算术运算把所有的 16 位字相加后,将得到的和的反码写入检验和字段。接收方收到数据报后,把首部的所有 16 位字在使用反码算术想加一次,将得到的和取反码得到结果。若此结果为 0 ,说明首部未发生任何变化。

  1. IP 广播地址:255.255.255.255,会转发给同一网络中的所有主机。路由器也会有选择地向临近的子网转发该报文(虽然它们通常不这样做)
  2. IP 数据包越短,路由器转发越快。协议 IP 规定,在互联网中所有的主机和路由器必须能够接受长度不超过 576 字节的数据报。这是规定上层交下来的数据长度有 512 字节(合理的长度),加上最长的 IP 首部 60 字节,再加上 4 字节的富余量,得到 576 字节

运输层

UDP

  1. UDP报文段格式(UDP首部只有四个字段,每个字段由2个字节构成)(首部固定 8 个字节):
    1. 长度:UDP报文段中的字节数(首部 + 数据),以 字节 为单位
    2. 检验和:UDP计算检验和的方法和计算IP数据报首部检验和的方法相似。
      1. 在发送方,首先是先把全零放入检验和字段,再把伪首部(12个字节)以及UDP数据报看成是由许多 16 位的字串接起来的。若UDP数据部分不是偶数个字节,则要填入全零字节(但此字节不发送)。然后按二进制反码计算出这些 16 位字的和,将此和的二进制反码写入检验和字段。
      2. 在接受方,把收到的UDP用户数据报连同伪首部(以及可能的填充全零字节)一起按二进制反码求这些 16 位字的和。若结果全 1,说明无差错。
      3. 伪首部(12 字节):
        1. 4 字节的 源IP地址 字段
        2. 4 字节的 目的IP地址 字段
        3. 1 字节的 全0 字段
        4. 1 字节的 IP首部中的协议(如UDP) 字段
        5. 2字节的 IP首部中的数据长度(IP首部 + IP数据) 字段

TCP

  1. MSS 是 TCP 报文段中的 数据字段 的最大长度,数据字段 + TCP 首部 = TCP 报文段
    1. 由于 IP 数据报所经历的路径是动态变化的,因此在某条路径上不需要分片的 MSS,如果是另一条路径,将可能需要分片。因此最佳 MSS 难以确定。
    2. 在连接建立的过程中,双方都把自己能够支持的 MSS 写入TCP MSS 可选字段,以后就按照该数值传送数据,两个传送方向可以由不同的 MSS 值
    3. 若主机未填写这一项,默认值为 536 字节 (576 字节的 IP数据报 - 20 字节 IP固定首部 - 20 字节 TCP固定首部)
  2. TCP 的有限状态机
    1. 粗实线箭头表示对客户进程的正常变迁
    2. 粗虚线箭头表示对服务器进程的正常变迁
    3. 细线箭头表示异常变迁

  1. TCP 报文段格式
    1. 数据偏移:单位为 4 字节,它指出TCP报文段的数据起始处距离TCP报文段的起始处有多远

4. TCP 拥塞控制
5. 三次握手
6. 四次挥手

推荐阅读



  • 《网络是怎样连接的》
  • 《图解 HTTP》
  • 《图解TCP/IP(第5版)》
  • 《计算机网络(第8版)》
  • 《计算机网络:自顶向下方法》
  • 《TCP/IP详解 卷1:协议》
  • 《Wireshark网络分析就这么简单》
  • 《Wireshark网络分析的艺术》