透過 MCP 連接 →

輸入計算

數學公式

廣告

結果

最大區段大小(MSS)
1,460
每個區段的 TCP 資料負載位元組數
MTU 1,500 bytes
IP 標頭 20 bytes
TCP 標頭 20 bytes
總負擔 40 bytes

什麼是 MTU 與 MSS 計算器?

這個工具能把網路的最大傳輸單元(MTU,Maximum Transmission Unit)換算成 TCP 所使用的最大區段大小(MSS,Maximum Segment Size)。MTU 指的是一條鏈路一次能承載的最大封包(以位元組計);MSS 則是扣掉 IP 與 TCP 標頭後,封包裡真正能裝載的 TCP 資料量。把 MSS 設定正確,可以避免封包分片、重新傳輸,以及那個惡名昭彰、會讓連線卡死的「PMTUD 黑洞」問題。

如何使用

輸入鏈路的 MTU(乙太網路預設值為 1500),選擇 IPv4(基本標頭 20 位元組)或 IPv6(基本標頭 40 位元組),如有需要可再加上 IP 選項或 TCP 選項(如時間戳記與 SACK,常見為 12 位元組)的位元組數。計算器會扣除所有標頭負擔,回傳以位元組為單位的 MSS。

公式說明

三者的關係很單純:

$$\text{MSS} = \text{MTU} - \text{IP 標頭} - \text{TCP 標頭}$$

標準的 TCP 標頭為 20 位元組,標準的 IPv4 標頭同樣是 20 位元組,因此最常見的簡化算法就是\(\text{MSS} = \text{MTU} - 40\)。IPv6 採用 40 位元組的固定標頭,故 \(\text{MSS} = \text{MTU} - 60\)。任何協商出來的選項都會加進對應的標頭,進一步壓縮可用的資料量。

Advertisement
展示 MTU 中 IP 標頭、TCP 標頭與 MSS 負載的 IP 封包示意圖
MTU 是整個封包;MSS 是扣除 IP 與 TCP 標頭後剩下的資料。

實例演算

標準乙太網路的 MTU 為 1500 位元組。以 IPv4 為例:IP 標頭 20、TCP 標頭 20,總負擔為 40,因此

$$\text{MSS} = 1500 - 40 = 1460 \text{ 位元組}$$

若啟用 TCP 時間戳記、額外佔用 12 位元組選項,TCP 標頭就變成 32,MSS 則降為

$$\text{MSS} = 1500 - 20 - 32 = 1448 \text{ 位元組}$$

常見問題

為什麼我的 MSS 常常是 1460?因為多數鏈路採用 1500 位元組的 MTU,扣掉 IPv4 加 TCP 標準的 40 位元組標頭後,剛好剩下 1460 位元組可裝載資料。

MSS 有包含標頭嗎?沒有。MSS 純粹是 TCP 的資料負載大小;IP 與 TCP 標頭會另外加在它前面,組成完整的封包。

PPPoE 或通道(tunnel)該怎麼算?封裝會降低有效 MTU(PPPoE 會多 8 位元組,使 MTU 變成 1492;VPN 佔用更多)。請把這個縮小後的 MTU 填進來,就能得到正確的 MSS。

最後更新: