發新話題

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 進位喔!)。

TOP

Linux 用ping 追蹤路徑中的最大MTU 數值

好了,現在我們知道網路卡的 MTU 修改可以透過 ifconfig 或者是 ip 等指令來達成,那麼追蹤整個網路傳輸的最大 MTU 時,又該如何查詢?呵呵!最簡單的方法當然是透過 ping 傳送一個大封包, 並且不許中繼的路由器或 switch 將該封包重組,那就能夠處理啦!沒錯!可以這樣的:

# 範例二:找出最大的 MTU 數值
[root@www ~]# ping -c 2 -s 1000 -M do 192.168.1.254
PING 192.168.1.254 (192.168.1.254) 1000(1028) bytes of data.
1008 bytes from 192.168.1.254: icmp_seq=1 ttl=64 time=0.311 ms
# 如果有回應,那就是可以接受這個封包,如果無回應,那就表示這個 MTU 太大了。

[root@www ~]# ping -c 2 -s 8000 -M do 192.168.1.254
PING 192.168.1.254 (192.168.1.254) 8000(8028) bytes of data.
From 192.168.1.11 icmp_seq=1 Frag needed and DF set (mtu = 1500)
# 這個錯誤訊息是說,本地端的 MTU 才到 1500 而已,你要偵測 8000 的 MTU
# 根本就是無法達成的!那要如何是好?用前一小節介紹的 ip link 來進行 MTU 設定吧!

不過,你需要知道的是,由於 IP 封包表頭 (不含 options) 就已經佔用了 20 bytes ,再加上 ICMP 的表頭有 8 bytes ,所以當然你在使用 -s size 的時候,那個封包的大小就得要先扣除 (20+8=28) 的大小了。 因此如果要使用 MTU 為 1500 時,就得要下達『 ping -s 1472 -M do xx.yy.zz.ip 』才行啊!

另外,由於本地端的網路卡 MTU 也會影響到偵測,所以如果想要偵測整個傳輸媒體的 MTU 數值, 那麼每個可以調整的主機就得要先使用 ifcofig 或 ip 先將 MTU 調大,然後再去進行偵測, 否則就會出現像上面提供的案例一樣,可能會出現錯誤訊息的!

不過這個 MTU 不要隨便調整啊!除非真的有問題。通常調整 MTU 的時間是在這個時候:

    * 因為全部的主機群都是在內部的區網,例如叢集架構 (cluster) 的環境下, 由於內部的網路節點都是我們可以控制的,因此可以透過修改 MTU 來增進網路效能;
    * 因為作業系統預設的 MTU 與你的網域不符,導致某些網站可以順利連線,某些網站則無法連線。 以 Windows 作業系統作為連線分享的主機時,在 Client 端挺容易發生這個問題;


如果是要連上 Internet 的主機,注意不要隨便調整 MTU ,因為我們無法知道 Internet 上面的每部機器能夠支援的 MTU 到多大,因為......不是我們能夠管的到的嘛 ^_^! 另外,其實每種連線方式都有不同的 MTU 值,常見的各種介面的 MTU 值分別為︰

網路介面        MTU
Ethernet        1500
PPPoE        1492
Dial-up(Modem)        576

TOP

發新話題

本站所有圖文均屬網友發表,僅代表作者的觀點與本站無關,如有侵權請通知版主會盡快刪除。