返回列表 回復 發帖

[分享] MTU 簡介及調整(客戶端網路卡的 MTU 值)

[分享] MTU 簡介及調整(客戶端網路卡的 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
這樣就可以了
------------------------------------------------------
有許多用 ADSL 的使用者,當有用 ICS 開啟 NAT 功能時,常常會抱怨為什麼 Client 端的電腦無法收郵件,或是無法瀏覽某些網頁(但是其它的網頁是正常的),其實只要調整 Client 端網路卡的 MTU 值,即可完全解決此一問題,而且可以藉由調整 MTU 值,也可以增進網路效率。

MTU 為 Maximum Transmission Unit 的縮寫, 一般預設值為 1,500。但是在不同的網路環境中,應該是有不同的數值。以下列出各種 Maximum MTU

EtherNet Used:1,500(一般的預設值)
EtherNet Acutally:1,496(因為1,500比較方便記憶)
PPPoE(撥接 ADSL 用的):1,492
Dial-up(Modem 用的):576

以上所列出的為最大值,但實際上要採用的應該是個別的網路情況來設定,而測試 MTU 值的做法如下(請進入 DOS 模式):

ping -f -l [packetsize] [www.yourisp.com]

[packetsize]:看您是用何種的網路環境,從最大值開始試吧!可用的範圍是 1 ~ 1,500。
[www.yourisp.com]:不限定啦!可以用你的 gateway IP,或是 gateway 之外的任何有效網址或IP。

如果出現了 "Packet needs to be fragmented, but DF set",那就請你把 [packetsize] 的數值減小吧!直到不會出現此一訊息為止。

在此另外說其它的東西。因為此封包(packet)包含了 20 bytes 的 IP header 及 8 bytes 的 ICMP header,所以上面得到的數值加上 28,才是我們要的 Maximum MTU。

MSS 為 Maximum Segment Size 的縮寫,也就是實際傳輸的資料量。他和 MTU 的關係是 MTU = MSS + TCP&IP headers。而 TCP header 及 IP header 的大小均為 20 bytes,所以若是可以最大化的 PPPoE 環境,MTU 值為 1,492, 而我們用 ping 所得出來的數值是 1,492 - 28 = 1,464,而 MSS 為 1,492 - 40 = 1,452。

--------------------------------------------------------------------
以上是 MTU 的介紹, 現在我們來說明要如何調整. 這必須要用改登錄檔(Registry),而用的工具是 regedit.exe or regedt32.exe (or other third-party programs)。

Win98
先找出你要調整的網路卡是在哪裡,HKEY_Local_Machine\System \CurrentControlSet\Services\Class\NetTrans\000n\,n 為數字 (1 ~ 不定,視您的網路設備數目。),可以從其中IPAddress or IPMask or DefaultGateway......來判斷。
然後在那個機碼內加入 DWOED,並命名為 MaxMTU,然後輸入您剛才所得到的數值(要注意16進位還是10進位喔!)。

Win2K
先找出你要調整的網路卡是在哪裡,HKEY_Local_Machine\SYSTEM\CurrentControlSet\Services \Tcpip\Parameters\Adapters\<interface>,<interface> 為 GUID 碼,進去裡面根據前面所說的,找出您要設定的網路卡之 GUID 碼。
然後在 HKEY_Local_Machine\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\<interface> 之下(<interface>為剛剛找出之GUID碼),加入 DWORD,並命名為 MTU,然後輸入您剛才所得到的數值(要注意 16 進位還是 10 進位喔!)。
返回列表