如果 PC 收到 ICMP Fragmentation required 消息,PC 必须重新发送任何流量。通常只有 TCP 处理重传(包括 MTU 问题造成的丢失);TCP 还包括对路径 MTU 发现的支持。
对于编写支持 PMTU 发现和重传的非 TCP 应用程序,PC 可以知道要重新发送哪些数据包,因为 ICMP 错误包括产生错误的数据包的上下文……这是从tshark -Vi eth0 icmp
……转储下图MTU of next hop
显示了这个 ICMP 消息是为了响应到 172.16.255.1(设置了 DF)的 UDP 数据包而收到的,该数据包太大。
Internet Protocol, Src: 172.16.1.1 (172.16.1.1), Dst: 172.16.1.5 (172.16.1.5)
Version: 4
Header length: 20 bytes
Differentiated Services Field: 0xc0 (DSCP 0x30: Class Selector 6; ECN: 0x00)
1100 00.. = Differentiated Services Codepoint: Class Selector 6 (0x30)
.... ..0. = ECN-Capable Transport (ECT): 0
.... ...0 = ECN-CE: 0
Total Length: 56
Identification: 0x6297 (25239)
Flags: 0x00
0.. = Reserved bit: Not Set
.0. = Don't fragment: Not Set
..0 = More fragments: Not Set
Fragment offset: 0
Time to live: 255
Protocol: ICMP (0x01)
Header checksum: 0xfe46 [correct]
[Good: True]
[Bad : False]
Source: 172.16.1.1 (172.16.1.1)
Destination: 172.16.1.5 (172.16.1.5)
Internet Control Message Protocol
Type: 3 (Destination unreachable)
Code: 4 (Fragmentation needed)
Checksum: 0x8813 [correct]
MTU of next hop: 1420
Internet Protocol, Src: 172.16.1.5 (172.16.1.5), Dst: 172.16.255.1 (172.16.255.1)
Version: 4
Header length: 20 bytes
Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00)
0000 00.. = Differentiated Services Codepoint: Default (0x00)
.... ..0. = ECN-Capable Transport (ECT): 0
.... ...0 = ECN-CE: 0
Total Length: 1500
Identification: 0x3aff (15103)
Flags: 0x02 (Don't Fragment)
0.. = Reserved bit: Not Set
.1. = Don't fragment: Set
..0 = More fragments: Not Set
Fragment offset: 0
Time to live: 1
[Expert Info (Note/Sequence): "Time To Live" only 1]
[Message: "Time To Live" only 1]
[Severity level: Note]
[Group: Sequence]
Protocol: UDP (0x11)
Header checksum: 0xe0ea [correct]
[Good: True]
[Bad : False]
Source: 172.16.1.5 (172.16.1.5)
Destination: 172.16.255.1 (172.16.255.1)
User Datagram Protocol, Src Port: 60742 (60742), Dst Port: 33437 (33437)
Source port: 60742 (60742)
Destination port: 33437 (33437)
Length: 1480
Checksum: 0xf73f [unchecked, not all data available]
[Good Checksum: False]
[Bad Checksum: False]