2007年4月9日 星期一

[筆記] 使用 ping 指令測試 MTU 最佳數 值

MTU(Maximum Transmission Unit):最大傳輸單元。一般時候它的預設值為:1500。不過因應不同網路環境,其實它應該有適合該網路特性的數值。這裡示範使用ping指令來找出最適合該網路的MTU數值。
ping -f -l [packet size] [IP]

#[packet size]:封包大小 1~1500
以使用HiNet ADSL為例:
#開啟「命令提示字元」鍵入
ping -f -l 1500 168.95.192.1

這裡我們從最大值開始測試,試驗連線的對象為HiNet的DNS Server。(連線對象選一個變數最少的吧!gateway ip 是不錯的選擇。)
~如果回應訊息為:Packet needs to be fragmented but DF set
~就試著再減少封包大小數值。

#Binary Search是個不錯的選擇。1500不行就向下砍一半=750。假設這時出現回應(Reply from 168.95.192.1: Bytes=750 time=?ms TTL=?),那就再向上加=1125,反之則向下減=375。(說到這就想到以前每次看「全能估價王」看來賓在猜價錢都不知道用這種方法,有夠...)。

#如此反覆嘗試直到找到最大的那個數值為止。
#另外由於ping指令所送出的封包包含了IP header (20 Bytes)、ICMP header (8 Bytes)。所以得到的數值必須在減28。例如我ping所得到數值為1472的話,最佳MTU數值應該是1472-28=1444。

還有一個參數必須提到:MSS(Maximum Segment Size):最大分段。因為TCP/IP協定在傳送時會將原始的資料一層一層的加上訊框(這裡自行參考TCP/IP原理或看看OSI模型吧)。所以最後出去的封包其實是多出了TCP header (20 Bytes)、IP header (20 Bytes)。故所謂的MSS就是減掉這40Bytes的數值~1472-40=1432。

沒有留言: