TCP/IP之MTU、MSS

1. 初識 MTU

查看服務器的 MTU 配置:服務器

客戶端 MTU 配置:網絡

經過上圖咱們能夠觀察到, 每一個網卡均可以設置本身的 MTU.3d

2. 爲何 MTU 是 1500 字節

以太網Ethernet最大的數據幀是1518字節。以太網幀的幀頭14字節和幀尾CRC校驗4字節(共佔18字節),剩下承載上層協議的地方也就是Data域最大就只剩1500字節. 這個值咱們就把它稱之爲MTU。cdn

IP層很是關心MTU,由於IP層會根據MTU來決定是否把上層傳下來的數據進行分片.blog

你可能會想, 若是我將 MTU 拓大是否是就能夠減小分片, 增大網絡傳輸啦?get

理想很豐滿, 現實很骨感it

若是過大,就會增長解析拆包的消耗,太大會擁塞。(這個過大指的是一次過大,就要分片分紅兩次傳送) 過小,就會形成傳輸效率降低。io

你能夠這麼理解,一條運輸公路,車太少,下降運輸量。class

過大,就會堵車,形成傳輸緩慢,太大,堵車了,誰都過不了。效率

3. 從抓包角度看 TCP 鏈接

全局四大層

咱們看到一共分爲四大層, 分別對應了(物理層)、(數據鏈路層)、(網絡層)、(傳輸層).

  1. 物理層: 關注數據字節寫入, 收到 1514 bytes, 這已是我當前環境配置最大包了, 最大包爲何是 1514 bytes, 咱們稍後再說.
  2. 數據鏈路層: 來源 MAC 地址、目標 MAC 地址
  3. 網絡層: Ipv4 標記 IP 來源地址、目標 IP 地址
  4. 傳輸層: TCP 標記來源、目的端口號及其餘數據標識.

因爲以太網EthernetII最大的數據幀是1518Bytes這樣,刨去以太網幀的幀頭(DMAC目的地址MAC48bit=6Bytes+SMAC源MAC地址48bit=6Bytes+Type域2bytes)14Bytes和幀尾CRC校驗部分4Bytes(這個部門有時候你們也把它叫作FCS),那麼剩下承載上層協議的地方也就是Data域最大就只能有1500Bytes. 這個值咱們就把它稱之爲MTU。

4. 又見 MSS

MSS (Maxitum Transmission Unit) 最大傳輸單元

這裏咱們的 MSS 值爲 1448 字節.

MTU是協商制的, 因此對應的 MSS 在 TCP 鏈接創建時就協商好了, 以最小值爲準

MSS 爲何是1448

MSS就是TCP數據包每次可以傳輸的最大量, 決定TCP的單包傳輸量。爲了達到最佳的傳輸效能,TCP協議在創建鏈接的時候一般要協商雙方的MSS值,這個值TCP協議在實現的 時候每每用MTU值代替(須要減去IP數據包包頭的大小20Bytes和TCP數據段的包頭20Bytes)因此每每MSS爲1460(如圖1中紅色方框所示的SYN包中的MSS值)。通信雙方會根據雙方提供的MSS值的最小值肯定爲此次鏈接的最大MSS值。 MSS爲1460是由1500-20(IP頭)-20(TCP頭)計算出的。 實際場景下,TCP包頭中會帶有12字節的選項----時間戳。 這樣,單個TCP包實際傳輸的最大量就縮減爲1448字節。1448=1500-20(IP頭)-32(20字節TCP頭和12字節TCP選項時間戳)

簡單公式:

(IP頭 + TCP頭 + 時間戳) + MSS = MTU

參考圖

5. 文章推薦

www.imperva.com/blog/mtu-ms…

本文大部分來源於網絡上的零碎知識, 因水平有限可能理解有誤, 望指證.

相關文章
相關標籤/搜索