一. 以太网
以太网是现有局域网最常用的通信协议标准
以太网链路传输的数据包称作以太帧(以太网数据帧), 在以太网中,网络访问层的软件必须把数据转换成能够通过网络适配器硬件进行传输的格式。
以太网帧格式
-
目的地址和源地址是网卡的硬件地址(MAC地址), 长度为48位
-
不同的数据请求对应不同的类型, 0800的数据是IP数据、0806代表ARP请求/响应数据、8035代表RARP请求/响应数据
-
数据表示要交给上层的数据. 以太网帧数据长度最小为46字节, 如果不够46字节, 则会填充到最小长度. 最大为1500字节。最大值也叫最大传输单元(MTU)
-
帧末尾是CRC校验码
特殊MAC地址:如果将目的MAC地址设为全1,是广播。每一个局域网内的主机,都能收到数据,并且向上解析。
以太网工作机制
当以太网从网络层收到数据报之后, 首先会根据需要把网络层数据分解为较小的块, 以太网整体长度必须是46 - 1500字节之间, 把数据打包成帧, 每一帧都包含数据以及其他信息, 然后把这些帧传递到物理层转换为比特流, 通过传输介质发送出去。
二. MTU
最大传输单元(MTU), 以太网帧中的数据长度规定最小46字节, 最大1500字节. 不同的网络类型有不同的MTU
MTU对IP协议的影响
-
将较大的IP包分成多个小包, 并给每个小包打上标签
-
同一个数据报被分解的小包标识都是相同的
-
每个小包的IP协议头的3位标志字段中, 第2位置0, 表示允许分片, 第3位表示结束标记(当前是最后一个小包则为1)
-
到达对端时, 会按顺序重组这些小包返回给传输层
-
如果某一个小包丢失接收端重组失败, 但是IP层也不会重传
MTU对UDP协议的影响
-
一旦UDP携带的数据超过1472(1500 - 20(IP首部) - 8(UDP首部)), name就会在网络层分成多个数据报
-
如果数据报丢失, 接收端网络层重组失败, 而UDP也不会重传, 则整个数据丢失的概率大大增加了
MTU对TCP协议的影响
-
TCP单个数据的最大消息长度称为MSS
-
TCP在建立连接的过程中,通信双方会进行MSS协商。
-
最理想的情况下,MSS的值正好是在IP不会被分片处理的最大长度(这个长度仍然是受制于数据链路层的MTU)。
-
双方在发送SYN的时候会在TCP头部写入自己能支持的MSS值。
-
然后双方得知对方的MSS值之后,选择较小的作为最终MSS。
-
MSS的值就是在TCP首部的40字节变长选项中(kind=2)