現今網路速度越來越快的情況下,為了減少路由器的負擔(不讓路由器負責封包重組、分割的動作)
以及提升路由器處理的工作效能,會使用路徑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

則能成功被接收端接收了。
沒想到因為楓之谷外掛而對程式感興趣XD
看到about me的那張角色圖回憶湧上心頭...
+1 勾起童年的回憶~