最近在看traceroute源码,在这里总结以下涉及到了PMTU,MTU,MSS相关知识,以及traceroute源码的分析。
1. MTU
MTU,Maximum Transmission Unit,最大传输单元。数据链路层允许的最大的payload ,即IP报文大小,通常为1500字节。
MTU对UDP/TCP数据包大小限制,分两种情况:
- 局域网下
UDP数据长度 = 1500 - 20(IP首部) - 8(UDP首部) = 1472字节
TCP数据长度 = 1500 - 20(IP首部) - 20(TCP首部) = 1460字节
大于则在IP层分片(具体看IP首部的DF标志,MF标志)
- Internet下
Internet标准MTU大小为576 字节[RFC791]。
UDP数据长度 = 576 - 20 - 8 = 548字节,一般取2^9 = 512字节(便于内存分配)
2. MSS
MSS,Maximum Segment Size,最大报文大小。TCP 对`数据段`(payload)的最大长度,即对应用层协议的限制。
建立TCP连接时需要协商双方的MSS值,实现时往往用MTU值推算(即MSS=MTU-20-20,通
常为1460字节),连接双方根据一方MSS值的最小值作为本次连接最大的MSS值。
3. PMTU
PMTU,Path MTU。当两台主机之间通信要通过多个网络时,每个网络的链路层可能会有不同的MTU,路径中这些网络的MTU中的最小值即该路径的PMTU。将MSS设置为PMTU,可以避免在主机以及网络中任何一个节点处发生IP分片。利用traceroute可以探测PMTU。