本文已参与「新人创作礼」活动,一起开启掘金创作之路。
认识MTU:
- 数据链路层MTU,最大传输单元 ,是物理层产生的**
数据传输最大容量限制**,通常与通信接口有关。 - 以太网帧中数据最小长度是46字节,最大长度是1500,称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU。
- 如果数据包的长度不够46字节,要在后面要填充,数据包长度大于MTU,则要对其进行分包。
MTU对IP协议的影响:
由于数据链路层MTU的限制,对于较大的IP数据包要进行分包
- 将较大的IP包分为多个小包,并给每个小包打上标签,每个小包16位的IP协议头是相同的,小包IP协议头的三位标志字段中,第一位保留,第二位置DF=0,表示允许切片,第三位表示结束标志MF=0表示结束,MF=1表示未结束。
- 数据到达对端将这些小包按顺序重组,拼装在一起返回给传输层,若这些小包中任意一个丢失,接受端重组就会失败,但是IP层不会重传(IP协议无连接,不可靠)
MTU对UDP协议的影响:
一旦UDP携带的数据超过1472(1500-20(IP首部) - 8(UDP首部) ),那么UDP数据就会在网络层被分成多个IP数据报。
MTU对TCP协议的影响:
- MSS:TCP的一个数据报受制于MTU,TCP单个数据报的最大长度,称为MSS
- TCP在建立连接的过程中,双方会进行MSS协商,双方在发送SYN的时候会在TCP的头部写入字节能支持的MSS值,双方得知对方的MSS值之后,选择较小的作为最终MSS。
- MSS的值就在TCP首部的40字节变长选项中(kind=2)
- 最理想的情况下,MSS的值正好是在IP不会被分片处理的最大长度(这个长度受限于数据链路层的MTU)
MTU和MSS的关系
MTU:数据链路层的最大传输单元,以太网的MTU=1500
MSS:TCP单个数据报的最大长度。
MSS的取值受限于MTU