Routing

區域網路中忽略了 IPv6 MTU 和 MSS?

  • January 17, 2012

我有一個帶有(sixxs)IPv6 隧道的伺服器和一個本地網路。隧道的 MTU 為 1470,帶有此 MTU 的前綴由 radvd 通告,並由本地客戶端獲取:

root@host:~# ip -6 route
2001:xxxx:xxxx::/64 dev eth1  proto kernel  metric 256  expires 298sec mtu 1470
fe80::/64 dev eth1  proto kernel  metric 256  mtu 1470
default via fe80::dad3:85ff:feaf:7e77 dev eth1  proto kernel  metric 1024  expires 28sec mtu 1470 hoplimit 64

像往常一樣,客戶端的介面的 MTU 為 1500。現在,當我將文件傳輸到遠端 IPv6 主機時,會發生以下情況(伺服器上的wireshark 數據包轉儲,LAN 介面,相關部分):

15.034320 host -> remote SSHv2 Encrypted request packet len=2796
15.034408 server -> host ICMPv6 Too big
15.241163 host -> remote SSHv2 [TCP Retransmission] Encrypted request packet len=1398
15.252193 remote -> host TCP ssh > 58188 [ACK] Seq=2658 Ack=121902 Win=64128 Len=0 TSV=2205083594 TSER=4294965684
15.252480 host -> remote SSHv2 [TCP Retransmission] Encrypted request packet len=2796
15.252558 server -> host ICMPv6 Too big
15.461151 host -> remote SSHv2 [TCP Retransmission] Encrypted request packet len=1398

所以,主機發送一個大小為 2796 的數據包(甚至應該不可能,鏈路 MTU 為 1500),伺服器正確回复 ICMPv6 Too big。然後以正確的大小重新傳輸數據包並確認。但是,下一個數據包又太大了,這個過程無限重複,而文件以蝸牛的速度傳輸……這裡發生了什麼?路由記憶體顯示路由的 MTU 被正確拾取(IPv6 地址替換為名稱):

root@host:~# ip -6 route show cached
remote via fe80::dad3:85ff:feaf:7e77 dev eth1  metric 0 
   cache  mtu 1470 hoplimit 64
server via server dev eth1  metric 0 
   cache  mtu 1470

好的,在家裡,網路中發生了更多奇怪的問題。我採取了微軟的方式並重新啟動了伺服器。問題似乎消失了。

引用自:https://serverfault.com/questions/350651