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
在數據傳輸時,因爲IEEE的規定最大的幀規定爲1,500比特(主機在早期的半雙功網絡中),因此須要數傳輸須要通過 數據的切要 --- 傳輸 ---數據組合 的過程。而使用的最大幀越小,傳輸包的量就越大,計算量相應會多,而產生的後果是:
a:增長主機的計算量,消耗CPU資源;
b:影響網絡傳輸的速度。
而使用大幀優勢天然也不言而喻 ———— 下降CPU計算量、加快數據傳輸。linux
上面囉嗦了一大堆,修改幀大小實際須要的操做就是修改MTU(Maximum Transmission Unit)值,即修改最大傳輸單元。修改方法以下:網絡
ifconfig ${Interface} mtu ${SIZE} up ifconfig eth1 mtu 9000 up
這個是最通用的方法,對全部的linux 發行版本都有效。缺點就是重啓後失效,須要在開機項中加載。ide
CentOS / RHEL / Fedora Linux 下測試
# vi /etc/sysconfig/network-scripts/ifcfg-eth0 #增長以下內容 MTU="9000" #保存後重啓網卡生效 # service network restart #啓用IPv6地址的,修改IPv6 mtu的參數爲 IPV6_MTU="1280"
Debian / Ubuntu Linux 下操作系統
# vi /etc/network/interfaces #增長以下值 mtu 9000 #保存後,重啓網絡生效 # /etc/init.d/networking restart
從理論上計算,4 bytes的CRC最大支持12000 bytes大小的字節,超過了就沒有辦法檢查了。另外還有其餘一些協議如NFS等的限制。
最後須要注意的是,在通過交換網絡設備時,僅僅修改主機端的MTU值是不行的,還須要交換網絡設備上開啓jumbo frames功能。rest
使用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的各個參數,能夠手動的修改裏面的值達到配置網卡參數的目的。
網絡上傳輸的並不是連續的數據流,而是一個個的數據包,MTU的值限定了這個數據包的最大值。
若是電信運營商設定的數據包最大值爲1480字節,而你的電腦經過路由器上網,默認是使用1500字節(若是是直連Modem,則會自動採用電信提供的 MTU值),那麼你發送的數據包將超過電信的規定,而被退回,因而系統只好從新組成符合電信要求的數據包來發送,這樣就浪費了時間,增長了處理工序,甚至有人所以網絡很是不穩定,打開網頁龜速。
最好的作法就是將本身電腦和路由器的 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
查詢目前系統的 MTU 值:
netsh interface ipv4 show subinterfaces
修改:
netsh interface ipv4 set subinterface "本地鏈接" mtu=1492 store=persistent
至此,Win7 MTU 值修改完畢(不要忘了修改路由的 MTU 值)。