2014年10月22日 星期三

[Linux 小技巧] 設置 Jumbo frame

前言 :
這是一種廠商標準的超長封包格式,專門為千兆以太網(GBE)而設計,目前還沒有獲得IEEE標準委員會的認可。以太網標準的最大封包長度為1518字節,而Jumbo Frame的長度各廠商有所不同,從9000字節~64000字節不等. 採用Jumbo Frame能夠令千兆以太網性能充分發揮,使數據傳輸效率提高50%~100%.

Jumbo Frame需要在相互通訊的2個通訊端口(交換機端口或網卡端口)上同時支持,而且與以前的以太網產品不兼容。 交換機把JumboFrame格式的數據轉發向不兼容Jumbo Frame的端口時應進行封包格式的轉換,即把Jumbo Frame封包格式的數據轉換成標準以太網的封包格式,從而保證其正常工作。相反,從不兼容Jumbo Frame的端口向支持Jumbo Frame的端口轉發數據時,交換機可以把多個標準以太網封包合併成超長Jumbo Frame封包,從而提高傳輸效率.

但使用巨型封包也有一些比較明顯的缺點,首先,封包越長意味著如果丟失一封包數據,則是一次更為嚴重的網絡事件,而重新傳送丟失的數據包成為更為耗費時間的工作. 其次,網絡中的每種設備都必須支持超長封包,超長封包才能使用。第三,因特網連接不支持超長封包:一個長度超過Internet連接所支持長度的封包將在發送前被分段,從而大大降低了Internet 連接的性能和可靠性。這導致需要每一個工作站都必須知道哪個數據包傳送到本地網絡,哪個數據包傳送到 因特網.

由此可知,在長封包的(大檔案)情況下,使用Jumbo Frame 可以有效增加效率(當然一路上都要有支援)。如果你的對象不支援此項功能,那麼使用Jumbo Frame有很大的可能會造成封包遺失

設定 Linux 上的 Jumbo frame :
要在 Linux 設定 Jumbo frame 需要以下條件滿足 :
1. 確定你的 driver 是否支援 MTU 的設定
2. 要有 Giga 網卡
3. 輸入以下指令來改變 MTU (Jumbo Frame)
# ifconfig eth0 mtu 9000

這是直接改掉的方法,如果想要永久改變的話,有幾個方法 :
1. CentOS / RHEL / Fedora Linux :
編輯 /etc/sysconfig/network-script/ifcfg-eth0
# vi /etc/sysconfig/network-script/ifcfg-eth0
MTU 9000 <-- font="">
...

2. Debian/Ubuntu
在 /etc/network/interfaces 加入 MTU=9000. 將檔案存檔並重啟網路介面 :
# /etc/init.d/networking restart


要確認 MTU 是否有被成功改變,可以使用 ip 這個指令 :
# ip route get 192.168.1.1 <假設要檢視的 IP 為 192.168.1.1>
192.168.1.1 dev eth0 src 192.168.1.100
cache mtu 9000 advmss 1460 hoplimit 64

補充說明 :
Linux Configure Jumbo Frames to Boost Network Performance / Throughput
Windows 上設定 Jumbo frame
RTNETLINK answers: Invalid argument
My guess is that you have changed your IP address. Please ensure that the IP address,Mask, and Gateway are of the same class (class A or B or C)

My next guess is that you have changed from a "DHCP" to a "static" address. If this the case then make sure that the administrator has removed the IP address from the DHCP scope, because the DHCP scope is the owner of the address....


沒有留言:

張貼留言

[Git 常見問題] error: The following untracked working tree files would be overwritten by merge

  Source From  Here 方案1: // x -----删除忽略文件已经对 git 来说不识别的文件 // d -----删除未被添加到 git 的路径中的文件 // f -----强制运行 #   git clean -d -fx 方案2: 今天在服务器上  gi...