路由器分片拆分大網路包

除卻巫山不是雲灬發表於2020-12-07

網路是怎麼連結的

  3.37 路由器通過分片功能拆分大網路包

  路由器的埠並不只有乙太網一種,也可以支援其他區域網或專線通用技術,不同的線路和區域網型別各自傳輸的最大包長度也不同。

  因此輸出埠的最大包長度可能會小於輸入埠。即便兩個埠的最大包長度相同,但也可能出現因為新增了一些頭部而導致包的實際長度發生變化。

  無論哪種情況,一旦轉發包的長度超過了傳送埠包的最大長度,就無法直接傳送這個包了。

  遇到這種情況,可以使用IP協議中定義的分片功能對包進行拆分,縮短每個包的長度。

  需要注意,這裡和TCP對資料拆分的機制是不同的。TCP拆分資料是在將資料裝到包之前進行的,它把已經拆分好的資料塊再裝到包裡,而分片則是對一個已經拆分好的完整的資料包,因為其長度,而再次拆分。

   

  從上圖可知,首先,我們需要知道輸出埠的MTU(Maximum Transmission Unit,最大傳輸單元,用這個最大長度減去頭部的長度),

  看轉發的這個包是否在長度範圍之內,如果在則直接傳送,如果不在則分片處理。

  但在此之前還需要檢視IP頭部中的標誌欄位Flag,確認是否可以分片,該欄位有3個位元,其中2個位元有效,分別代表是否允許分片,以及當前包是否為分片包。

  有兩種情況不能分片,一為傳送方應用程式設定了不允許分片,二是該包已經是分片包。

  如果存在不能分片,那麼就只能丟棄這個包,並通過ICMP(Internet Control Message Protocol,網路控制報文協議,IP協議中的子協議,簡單的說就是報告錯誤)訊息通知傳送方。

  需要注意的是,包的構成是頭部加資料,所以對於IP包來說,它的構成就是IP包 + 資料(TCP頭部加使用者資料),所以在分片的時候,TCP頭部也是資料的一部分。

  從上圖可知,資料被分片後,每一份資料前面會加上IP頭部,其大部分內容都和原本的IP頭部一摸一樣,但其中有部分欄位需要更新,這些欄位用於記錄分片相關的資訊。

  

 

相關文章