
我的筆記型電腦與路由器之間有千兆位元乙太網路連接,還有與互聯網的有效 ipv6 連接。我可以從網路上的網站接收非常大的資料包,大小至少可達 10000 位元組(根據wireshark)。(編輯:原來是 Linux 的「通用接收卸載」)但是,當嘗試發送任何內容時,我的本機電腦的 ipv6 碎片僅低於 1500 位元組。 (在 ipv4 上,我可以將至少 1514 位元組的 tcp 封包發送到互聯網,我可以使用高達配置的 mtu 6128 的封包進行 ping 操作,但它們是黑洞。)
我用的是ubuntu 12.04。我已經使用 NetworkManager applet gui 為 eth0 配置了 6128 的 mtu(它接受的最大值),ip link set dev eth0 mtu 6128
並重新啟動了連接。ip link show eth0
顯示 6128 mtu 確實已設定。ip -6 route
顯示內核所知道的所有路徑都沒有設定 MTU。我可以透過 ipv4 執行 ping 操作,封包最大為 6128 位元組(儘管我沒有收到回應),但是當我這樣做時,ping6 myrouter -c3 -s1500 -Mdo
我收到錯誤回覆從我自己的電腦上說資料包太大,mtu是1480。
那麼,如何讓我的計算機使用更大的 MTU?
答案1
您看到的很可能不是巨型幀。畢竟,99.9% 的 Internet 都運行在 1500 位元組及更低的 MTU 上。它可能只是您的核心或網路卡在進行資料包合併。
它使用通常稱為通用接收卸載 (GRO) 或大型接收卸載 (LRO) 的功能來實現此目的。其工作原理是識別並合併單一流中的資料包,然後將其饋送到 TCP/IP 堆疊。這可以節省大量的 CPU 週期,因為它減少了堆疊的往返次數。
試試這個: ethtool -K $INTERFACE gro off
這會關閉此功能並使wireshark更快樂(儘管不是你的CPU)
您仍然可以在本地使用更高的 MTU,但由於這樣的功能以及當然更快的硬件,它不再為您帶來太多好處。這也可能是一場管理噩夢。有許多有缺陷的驅動程式和硬件,並且在作業系統中透過 DHCP 或 RA 設定 MTU 的支援程度不同。由於您希望給定廣播域中的所有設備都運行相同的 MTU,這通常會使巨型幀變得不切實際。
答案2
MTU 主要在本地使用。在多個網路躍點(如路由器+網路)上使用巨型幀很棘手,而且很可能不起作用。例如,DSL 通常會限制路徑MTU至 1492 位元組。作為一般規則,路徑 MTU 由任何參與路由器之間的最小連結 MTU 決定。除非您控制整個路徑並為每個連結設定較大的 MTU,否則僅增加電腦上的 MTU 沒有任何作用(除了可能提高 LAN 速度)。
答案3
我根據 Stefan Seidel 的評論找到瞭如何做到這一點。結果發現該ip
指令未顯示另一個 mtu 設定。在/proc/sys/net/ipv6/conf/eth0/mtu
(命令中設定一個更高的值sudo sh -c "echo 0 > /proc/sys/net/ipv6/conf/eth0/mtu"
做了我想要的。(並不是說它有很大幫助,路由器確實丟棄了更大的幀。) 該值通過路由器廣告定期更新/重置。可以通過在同一資料夾中寫入0
來。accept_ra
/proc