關於最大傳輸單元(MTU)的整理


MTU設置不當,可能會導致許多網絡問題,如某些網絡應用無法使用,某些網站無法訪問等。下面是在網上搜索整理的關於MTU設置的東西,某些可能未作驗證,僅供參考。

1. 如何確定網絡MTU

某些ISP接入的MTU可能會比常規使用的MTU小,這時如果設置了過大的MTU,就可能會導致很多服務無法使用的問題。可以通過ping程序確定MTU的值。

Windows可以打開命令提示符,使用 PING -l <MTU> -f <HOST>的方式確定MTU

ping -l 1400 -f www.baidu.com

如果能ping通,說明詞MTU是可以的,可適當加大MTU值,直到最大;否則就要適當調小MTU值。設置最大的MTU值可以有效的提高網絡吞吐量。

相關實驗可見下圖:


2. 常見MTU值

根據寬帶連接方式的不同,MTU可能不盡相同,如下所示:

1)PPPoE/ADSL: 1360-1492

2) PPTP VPN: 1400-1460

3) L2TP VPN: 1400-1460

4) Fixed IP: 1400-1500

5) DHCP: 1400-1492

3. Windows 修改MTU

Windows直接連接的,可在注冊表中修改MTU,具體方法為:

1)【開始】-【運行】-【regedit】打開注冊表

2) 選擇【HKEY_Local_Machine】-【SYSTEM】-【CurrentControlSet】-【Services】-【Tcpip】-【Parameters】-【interface】

3) 在 interface 底下可能有很多的選項,一個一個的去看,會有一個選項IPaddress與當前網卡的 IP 相同,然后在該選項上選擇【編輯】-【新建】-【DWORD值】,建立一個名為【MTU】的DWORD,然后雙擊修改,選擇十進制,填入合適 MTU 值


4. 路由器中設置MTU


如果是通過路由器共享上網,可以查看路由器是否支持MTU設置,如果支持,那么恭喜你,直接修改MTU為合適的數值即可。

1)TP-LINK 路由器設置

2)JCG路由器設置


4. TCP MSS 與大包通信的關系 

用戶在使用路由器訪問Internet時,經常會反饋不能訪問網頁(或部分網頁)以及使用Outlook收發郵件(這些應用是基於TCP或UDP的),但進行Ping包時沒有問題,這時候檢查配置時也沒有錯誤。出現這種情況的時候,多半是因為在設備上進行了NAT應用,同時設備對報文進行了分片操作。
IP報文里是有五元組的,但報文要進行分片時,只有第一片報文帶有IP的五元組信息(源目的ip位址,源目的端口號,協議號),后續的分片不會保留TCP/UDP報文所有的標識信息,如端口號信息等,這種情況下,如果設備又實現了NAT轉換操作(NAT轉換過程中,會隨機地做埠轉換),並且應用又是基於TCP/UDP的,這就導致報文不能正確組包,會出現上述的問題現象。
TCP/IP連接時建立的過程中會協商很多參數的,其中TCP MSS參數就是用於協商TCP報文大小的,如果協商出來的TCP MSS的參數值小於設備的MTU的值時,TCP報文在設備上就不會被分片,否則就會出現報文分片並導致上述現象的發生,因此,為了避免上述情況的發生,一定要保證協商的TCP MSS參數小於設備的MTU的值。為此,Quidway路由器上有一個設置TCP MSS值的命令,如果配置了這條命令,路由器設備在建立TCP/IP連接的過程中就按照這個配置的值來修改協商報文中關於TCP MSS的值,在同對端協商的過程中也就能夠協商出這個值來,如果不配置這條命令,路由器設備就不會修改報文中的這個值(有時對端設備發送過來的協商報文中的這個值會很大,如8000)。一般來說,默認或配置的MTU的值一般在1500左右,將TCP MSS的值設備為小於1500就可以,如1400或1024等。 
如果TCP MSS值設置的過小,報文數量明顯增多又導致效率下降,特別是沒有配置NAT應用的情況下,限制TCP報文大小更沒有必要,由於應用情況比較復雜,設置默認的TCP MSS的值也不是特別合適(設備會在建立連接時均要修改TCP MSS的值),因此,還是在應用中加以注意比較好,思科設備也是有這個配置命令的

MTU: Maxitum Transmission Unit 最大傳輸單元

MSS: Maxitum Segment Size 最大分段大小

MSS最大傳輸大小的縮寫,是TCP協議里面的一個概念。
MSS就是TCP數據包每次能夠傳輸的最大數據分段。為了達到最佳的傳輸效能TCP協議在建立連接的時候通常要協商雙方的MSS值,這個值TCP協議在實現的時候往往用MTU值代替(需要減去IP數據包包頭的大小20Bytes和TCP數據段的包頭20Bytes), 通訊雙方會根據雙方提供的MSS值得最小值確定為這次連接的最大MSS值。

而一般以太網MTU都為1500, 所以在以太網中, 往往TCP MSS為1460。

協商TCP MSS大小具體過程如下:
TCP client發出SYN報文,其中option選項填充的MSS字段一般為(MTU-IP頭大小-TCP頭大小),同樣TCP server收到SYN報文后,會發送SYN+ACK報文應答,option選項填充的mss字段也為(MTU-IP頭大小-TCP頭大小);協商雙方會比較SYN和SYN+ACK報文中MSS字段大小,選擇較小的MSS作為發送TCP分片的大小。

對於涉及PPPOE+NAT、IPsec、L2TP、GRE等組網,通常由於報文太大需要分片,這樣會降低傳輸速率; 所以選擇一個合適的MSS對傳輸數據來說比較重要. linux中一般可以通過netfilter iptables設置TCP MSS來解決。

iptables -A FORWARD -p tcp- -tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

這條規則的目的就是改變TCP MSS以適應PMTU(Path MTU)

iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN- j TCPMSS --set-mss 128

設置MSS為128


5. 設置網絡接口MTU

1)Linux主機接口MTU可通過如下命令設置

ifconfig <interface> mtu <MTU>

2)PPPoE MTU設置,可以通過在配置文件中添加

mtu <MTU>

mru <MTU>

3)NAT自動設置MSS值

iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu


參考

http://hi.baidu.com/wel_bd/blog/item/88c96401ca25cb0c1d9583ed.html

http://hi.baidu.com/ybbmdf/blog/item/287d878b498e04d6fc1f1079.html


轉自:http://blog.csdn.net/wangxg_7520/article/details/7301205



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM