UDP 最大分段大小

UDP 最大分段大小

環境:我正在編寫一個 UDP 客戶端-伺服器應用程式。客戶端和伺服器之間的路徑 MTU 為 1500 位元組(它們之間只有無線鏈路,因此該值非常穩定)。我的系統預設設定不分段位,並且在客戶端和伺服器上,SO_SENDBUF為16384,SO_RECVBUF = 87380。

問題:客戶端使用sendto一次向伺服器發送8192位元組。但是給定路徑 MTU = 1500,我不應該能夠在每個資料包中發送 1500-20(IP 標頭)-8(UDP 標頭)= 1472 位元組的資料嗎?當我對 TCP 執行同樣的操作時,結果正是我所期望的。每個TCP 封包最多可容納1448 字節,即1500-20(IP 標頭)-32(帶有時間戳選項的TCP 標頭) 我的問題是:為什麼UDP 在每個封包中不放置1472字節,而不是1023 位元組?這只是次要的實作細節嗎?還是我忽略了一些系統限制?

備註:即使我在同一台機器上進行實驗(環回介面為127.0.0.1),也可以觀察到相同的結果。

答案1

您只需扣除 L4(UDP) 和 L3(IP) 圖層的開銷。我猜測乙太網路訊框(L2)中包含前導碼、MAC 尋址、類型欄位和校驗和的開銷將佔其餘部分?

http://www.doc.ic.ac.uk/~nd/surprise_97/journal/vol4/mhl/ether01.gif

相關內容