理解MTU、MSS和有效载荷
MTU(最大传输单元)是指数据包在网络上传输的最大长度,不包括IP包头.最常见的MTU设置是1500字节.
MSS(最大段大小)是TCP数据包中可以传输的最大数据部分的大小.它应该设置为MTU减去IP和TCP头部的大小.IP头部通常是20字节,TCP头部也是20字节.
在网络通信中,有效载荷指的是实际传输的数据部分,不包括协议头部分.
在没有PPPoE拨号的情况下:
- MTU:1500字节
- MSS:1460字节(MTU 1500 - IP头 20 - TCP头 20)
- ICMP有效载荷:1472字节(MTU 1500 - ICMP头 8 - IP头 20)
在需要PPPoE拨号的情况下:
- MTU:1492字节(1500 - PPPoE协议头 8)
- MSS:1452字节(MTU 1492 - IP头 20 - TCP头 20)
- ICMP有效载荷:1464字节(MTU 1492 - ICMP头 8 - IP头 20)
TCP有效载荷的计算方式与此类似,即MTU减去IP头部(20字节)和TCP头部(20字节).
如果你的网络不需要PPPoE拨号,你可以直接将MTU设置为1500,MSS设置为1460.
如果你的网络需要PPPoE拨号,你应该将MTU设置为1492,MSS设置为1452.
Ping命令发送的ICMP数据包中,除了数据部分,还包含了ICMP头(8字节)和IP头(20字节).所以,Ping命令不分包的最大值应该是MTU减去ICMP头和IP头的大小.
例如,如果你的MTU是1492字节,那么Ping命令不分包的最大值应该是1464字节.
在Windows上,你可以使用以下命令测试Ping命令的有效载荷部分包:
ping -l <有效载荷大小> <目标IP地址>
例如,要测试有效载荷大小为1000字节的Ping命令部分包,可以使用以下命令:
ping -l 1000 <目标IP地址>
在Linux上,你可以使用以下命令测试Ping命令的有效载荷部分包:
ping -s <有效载荷大小> <目标IP地址>
例如,要测试有效载荷大小为1000字节的Ping命令部分包,可以使用以下命令:
ping -s 1000 <目标IP地址>
测试Ping命令的有效载荷部分包可以帮助你确定网络的最大传输能力.通过逐渐增加有效载荷大小,你可以找到网络的瓶颈,并确定最大可靠传输的数据大小.这对于网络性能优化和故障排除非常有用.
MTU不仅仅是网络层的概念,每一层都有自己的MTU,例如链路层的MTU、IP层的MTU等.在这个教程中,我们主要讨论的是IP层的MTU.
在实际网络环境中,不同的链路可能有不同的MTU,数据包在网络中传输时可能需要经过MTU不同的链路.这时候,如果数据包的大小超过了某个链路的MTU,就需要进行分片处理.
在IPv6中,为了避免分片处理带来的复杂性和性能问题,规定所有链路的MTU都必须至少为1280字节.如果数据包的大小超过了1280字节,就需要在发送端进行分片处理,而不是在网络中途.
MSS是TCP协议中的一个概念,它是在TCP连接建立时,双方协商确定的.如果网络中的某个链路的MTU小于这个MSS,那么就需要在TCP层进行分片处理.
在实际应用中,为了避免分片处理,通常会将MSS设置得比MTU小一些.例如,在很多情况下,会将MSS设置为MTU减去40字节(IP头部20字节+TCP头部20字节).
在使用Ping命令测试网络性能时,需要注意的是,Ping命令发送的是ICMP数据包,而不是TCP数据包.ICMP数据包的头部大小是8字节,所以在计算有效载荷大小时,需要将这个头部大小考虑进去.