Windows和Linux下的MTU查看和修改


Windows和Linux下的MTU查看和修改




Windows下:

https://jingyan.baidu.com/article/ad310e80ff9bf81849f49ea9.html





linux下修改mtu值

1、jumbo frames 相關

一、什麼是jumbo frames

  Jumbo frames 是指比標準Ethernet Frames長的frame,即比1518/1522 bytes大的frames,Jumbo frame的大小是每一個設備廠商規定的,不屬於IEEE標準;Jumbo frame 在full-duplex 的Ethernet網絡上運行;Jumbo frame定義了一個「link negotiation」協議,來和對端的設備協商,是否對端設備支持使用Jumbo frames;標準的以太網IP報文大小是:1500 bytes,不包含以太網頭和FCS的18 bytes(6+6+2+4),若是包含以太網頭和FCS,則爲1518 bytes;Jumbo frame 通常指的是二層封裝三層IP報文的值大於9000bytes的報文。 
  Jumbo frames的提出背景:在1998年,Alteon Networks 公司提出把Data Link Layer最大能傳輸的數據從1500 bytes 增長到9000 bytes,這個提議雖然沒有獲得IEEE 802.3 Working Group的贊成,可是大多數設備廠商都已經支持。html

二、使用jumbo frames的優勢

  在數據傳輸時,因爲IEEE的規定最大的幀規定爲1,500比特(主機在早期的半雙功網絡中),因此須要數傳輸須要通過 數據的切要 --- 傳輸 ---數據組合 的過程。而使用的最大幀越小,傳輸包的量就越大,計算量相應會多,而產生的後果是: 
  a:增長主機的計算量,消耗CPU資源; 
  b:影響網絡傳輸的速度。 
  而使用大幀優勢天然也不言而喻 ———— 下降CPU計算量、加快數據傳輸。linux

2、修改MTU值

  上面囉嗦了一大堆,修改幀大小實際須要的操做就是修改MTU(Maximum Transmission Unit)值,即修改最大傳輸單元。修改方法以下:網絡

一、ifconfig命令修改

ifconfig ${Interface} mtu ${SIZE} up
ifconfig eth1 mtu 9000 up

 

  • 1
  • 2

  這個是最通用的方法,對全部的linux 發行版本都有效。缺點就是重啓後失效,須要在開機項中加載。ide

二、修改配置文件

CentOS / RHEL / Fedora Linux 下測試

# vi /etc/sysconfig/network-scripts/ifcfg-eth0 #增長以下內容 MTU="9000" #保存後重啓網卡生效 # service network restart #啓用IPv6地址的,修改IPv6 mtu的參數爲 IPV6_MTU="1280"

 

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

Debian / Ubuntu Linux 下操作系統

# vi /etc/network/interfaces #增長以下值 mtu 9000 #保存後,重啓網絡生效 # /etc/init.d/networking restart

 

  • 1
  • 2
  • 3
  • 4
  • 5

3、爲何MTU最大值爲9000字節

  從理論上計算,4 bytes的CRC最大支持12000 bytes大小的字節,超過了就沒有辦法檢查了。另外還有其餘一些協議如NFS等的限制。 
  最後須要注意的是,在通過交換網絡設備時,僅僅修改主機端的MTU值是不行的,還須要交換網絡設備上開啓jumbo frames功能。rest

4、MTU測試

  使用ping命令,-l 指定包大小,-f 選項爲通知操做系統不能私自更改該數據包大小 htm

這裏寫圖片描述
  使用英文操做系統時的提示爲:Packet needs to be fragmented but DF set .  blog



  另外的,部分Linux系統還能夠經過以下方式查看、修改MTU值。 
  查看:cat /sys/class/net/eth0/mtu 
  設置:echo "1460" > /sys/class/net/eth0/mtu

圖片

默認的ANDROID系統中不帶BUSYBOX,因此沒法用BUSYBOX IFCONFIG來查看修改MTU值。其實網卡的MTU值是保存在/sys/class/net/eth0/mtu文件中,因此能夠經過查看和修改文件達到修改MTU的目的:

 

如下以查看和修改eth0爲例:

1. 查看MTU值

# cat /sys/class/net/eth0/mtu

 

2.  修改MTU值

# echo "1460" > /sys/class/net/eth0/mtu

 

順便說一句,在/sys/class/net/eth0/目錄中還有不少文件,對應了eth0的各個參數,能夠手動的修改裏面的值達到配置網卡參數的目的。




修改 Win7 MTU 值



對於 MTU(Maximum Transmission Unit,最大傳輸單元)的簡單說明:

網絡上傳輸的並不是連續的數據流,而是一個個的數據包,MTU的值限定了這個數據包的最大值。
若是電信運營商設定的數據包最大值爲1480字節,而你的電腦經過路由器上網,默認是使用1500字節(若是是直連Modem,則會自動採用電信提供的 MTU值),那麼你發送的數據包將超過電信的規定,而被退回,因而系統只好從新組成符合電信要求的數據包來發送,這樣就浪費了時間,增長了處理工序,甚至有人所以網絡很是不穩定,打開網頁龜速。

最好的作法就是將本身電腦和路由器的 MTU 設置成電信容許的限值。

1、測試電信 MTU 值

以管理員身份運行命令提示符,「局域網」的MTU值默認爲1500,「寬帶」的MTU值則各地區不一樣,可經過嘗試來獲取所在地的MTU值,方法以下:

ping www.sina.com.cn -f -l 1500

 

"-f" 在數據包中設置「不分段」標誌。強制系統將數據包一次性發送出去。
"-l 1500" 表明 length 長度,1500 表明數據包長度爲 1500 個字節。
返回結果是:須要拆分數據包。
修改 length 值,直到找出最大可傳輸數據包的長度(例如本機是 1464)。
上面獲得的值並不能直接用於本地設置上(由於這裏獲得的實際上是 MSS 而非 MTU),還應在此基礎上加上 28(包頭大小),所以最終的 MTU 值爲:1464 + 28 = 1492

2、修改 Win7 MTU 值

查詢目前系統的 MTU 值:

netsh interface ipv4 show subinterfaces

 

修改:

netsh interface ipv4 set subinterface "本地鏈接" mtu=1492 store=persistent

 

至此,Win7 MTU 值修改完畢(不要忘了修改路由的 MTU 值)。

相關文章
相關標籤/搜索