Routing
區域網路中忽略了 IPv6 MTU 和 MSS?
我有一個帶有(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
好的,在家裡,網路中發生了更多奇怪的問題。我採取了微軟的方式並重新啟動了伺服器。問題似乎消失了。