MTU及路徑MTU探索

現今網路速度越來越快的情況下,為了減少路由器的負擔(不讓路由器負責封包重組、分割的動作)

以及提升路由器處理的工作效能,會使用路徑MTU探索(Path MTU Discovery)的概念

 

MTU是什麼

在進入路徑MTU探索之前,先介紹什麼是MTU,英文:Maximum Transmit Unit

就是在路由器收到一個訊框(Frame)後,能直接替換訊框表頭後轉發的最大封包(Packet)大小


(訊框與封包示意圖,未按比例畫製)

因為路由器不用做重組、分割的動作,因此大大降低封包等待轉發的時間

 

路徑MTU探索(Path MTU Discovery)

理解了MTU後,我們可以盡量把每次要發送的封包大小控制在接近MTU的值,如此就可以獲得封包傳送的最大效率(因為路由器只要轉發,不用負責重組、切割)

可是,封包從傳送端到接收端不一定只會經過一個路由器呀

所以,我們要找出所有封包走過的路徑裡最小的MTU,這個動作就叫路徑MTU探索

 

運作說明

要找出路徑裡最小的MTU,我們會將要傳送的封包IP表頭裡的Don't Fragment Bit設為1

然後往路由器送,如果夠幸運,得到了接收端的ACK,那就代表封包的大小比走過的路徑裡最小的MTU

如果不幸地,某個路由器發現這個封包大小超過下一段路徑所設定的MTU,就會將此封包丟棄

並回傳一個ICMP訊息給發送端,請原發送端將封包大小縮小後再重發


(示意圖)
ICMP錯誤訊息Type3, Code4內容為:Fragmentation required, but Don’t Fragment Flag is set.

來回個幾次後,當路由器不再回傳ICMP訊息時,代表我們已經找到了路徑裡最小的MTU

而以上整個過程即為路徑MTU探索

 

模擬操作

我們可以利用terminal裡的ping指令模擬路徑MTU探索

ping -Ds 封包大小 主機位址

p.s. -D是將Don't Fragment Bit設為1-s後面則是接要設定的封包大小

像我故意把封包大小調成8192個bytes

可以看到回傳的訊息表示資料太長

如果往下調成1024個bytes

則能成功被接收端接收了。


發佈留言