歡迎參觀我的賣場 歡迎參觀我的賣場

2011年10月13日 星期四

MTU 的最佳化

MTU :最大傳輸單位(Maximum Transmission Unit )

如果 MTU 超過媒體所負荷的,封包在傳送時會一再的重組
這會使網路傳輸效能低落,因此我們最好將網路介面作最佳化

下表是一些媒體使用的MTU :


網路介面 MTU
EtherNet (一般的網路介面,這是預設值)1500
PPPoE(ADSL用的)1492
Dial-up(modem)576


由表可知,我們網卡預設的 MTU 與 adsl 使用的並不相符
我們的作法就是在 client 端調整其 mtu

一、首先找出client端最大 MTU 值
我們分兩大系統
1.windows
使用ms-dos 命令提示視窗
ping -f -l 1500 192.168.0.1

1500是預設的值 
192.168.0.1 指向NAT主機 (這裡不限定)

如果回應 
packet needs to be fragmented but DF set.
packet needs to be fragmented but DF set.
packet needs to be fragmented but DF set.
packet needs to be fragmented but DF set.
則為超過
MTU需要設更小

ping -f -l 1464 192.168.0.1
回應
Reply from 192.168.0.1 : bytes=1464 time=10ms TTL=128
則ok

往上再慢慢遞增,找到最大值為止
這樣才可以達傲最佳的網路速度

另外我們還需計算 MTU 實際的數值
因為標頭佔用了28bytes
包含了 20 bytes 的 IP header 及 8 bytes 的 ICMP header,所以上面得到的數值加上 28,才是我們要的 Maximum MTU

所以這個例子最終的MTU為 1464+28=1492

2.linux
linux 的 client 端作法也一樣
不過指令改一下

ping -c -3 -M do -s 1472 192.168.0.1
其他找最大MTU 方法一樣


二、接著我們來動手修改MTU值
windows2K / XP:
開始 -> 執行 regedit

HKEY_Local_Machine
SYSTEM
CurrentControlSet

Services 
Tcpip
Parameters
Adapters

底下有很多介面,一個個去看,會有一個與網卡ip相同
在該介面上選編輯 - 新增 - DWORD值
建立一個名為 MTU 的機碼,
按右鍵修改 選擇10進位
填入我們剛剛找到的最大MTU 值 ( 是已經加 28bytes 那個)
完成!

linux client端上比較簡單
ifconfig eth0 mtu xxxx
這樣就可以了

沒有留言: