MTU:通信術語
最大傳輸單元(Maximum Transmission Unit)是指一種通信協議的某一層上面所能通過的最大數據包大小(以字節為單位)。
我們在使用互聯網時進行的各種網絡操作,都是通過一個又一個“數據包”傳輸來實現的。而MTU指定了網絡中可傳輸數據包的最大尺寸,在我們常用的以太網中,MTU是1500字節。超過此大小的數據包就會將多余的部分拆分再單獨傳輸 。
MTU的設置不是一個值天下通用,所以需要我們合理設置特殊場景的MTU 。
首先確認什么是不合理的 :
1.本地MTU值大於網絡MTU值時,本地傳輸的數據包過大導致網絡會拆包后傳輸,不但產生額外的數據包,而且消耗了“拆包、組包”的時間 。
2.本地MTU值小於網絡MTU值時,本地傳輸的數據包可以直接傳輸,但是未能完全利用網絡給予的數據包傳輸尺寸的上限值,傳輸能力未完全發揮 。
這樣我們就知道:
所謂合理的設置MTU值,就是讓本地的MTU值與網絡的MTU值一致,既能完整發揮傳輸性能,又不讓數據包拆分。
檢測需要設置的合理的值:
大部分網絡設備都是1500。如果本機的MTU比網關的MTU大,大的數據包就會被拆開來傳送,這樣會產生很多數據包碎片,增加丟包率,降低網絡速度。把本機的MTU設成比網關的MTU小或相同,就可以減少丟包
Linux OS:
# ping -s 1472 -M do 172.21.0.118
含義:
發送大小包大小是1472(+28)字節,禁止路由器拆分數據包。 【 1472 + 8(ICMP回顯示請求和回顯應答報文格式長度) + 20(IP首部) = 1500 】
回復結果:
1.如果正常回復,說明網絡允許最大MTU就是1500字節,與系統默認相同,只需將自己的路由的MTU也設置為1500即可。
2.如果沒正常回復,說明數據包大小超過了網絡限定的MTU大小。需要減小探測包大小再次嘗試。
MTU設置與查看:
1、設置本機的mtu,即時生效,重啟后失效
# ifconfig eth0 mtu 1472
2、永久生效的修改方法,缺點是需要重啟網卡
# vim /etc/sysconfig/network-scripts/ifcfg-eth0 增加如下內容
- MTU="9000"
# service network restart
查看設置后的結果
# netstat -i 或使用ifconfig也可以查看得到
--------------------------------------------------------------------
MSS: Maxitum Segment Size 最大分段大小
MSS最大傳輸大小的縮寫,是TCP協議里面的一個概念。
MSS就是TCP數據包每次能夠傳輸的最大數據分段。為了達到最佳的傳輸效能TCP協議在建立連接的時候通常要協商雙方的MSS值,這個值TCP協議在實現的時候往往用MTU值代替(需要減去IP數據包包頭的大小20Bytes和TCP數據段的包頭20Bytes), 通訊雙方會根據雙方提供的MSS值得最小值確定為這次連接的最大MSS值。
而一般以太網MTU都為1500, 所以在以太網中, 往往TCP MSS為1460。