當 IP 網路中的某個節點(主機或路由器)要傳送數據封包(packet)至下一個節點,但發現原封包超過與下一個節點之鏈結(link)的最大傳輸單元(MTU)時,該節點會對此封包進行分段處理,這個過程稱為 IP 分片(IP Fragmentation)。
IP 分片(IP Fragmentation)的處理過程
分片:
當封包的大小超過鏈路的 MTU 時,該節點會將封包拆分成若干個較小的片段(fragments),每個片段的大小均不超過 MTU。
每個片段都會包含原始 IP 封包的一部分數據,並且每個片段都具有自己的 IP 頭(header),但這些片段共享原始封包的 IP 頭信息,如來源地址和目的地址。
標記和標識:
每個片段在 IP 頭中有一個相同的標識(Identification),用於標識這些片段屬於同一個原始封包。
每個片段在 IP 頭中包含一個片段偏移量(Fragment Offset),用於標識這個片段在原始封包中的位置。
最後一個片段的 IP 頭中有一個標誌位(More Fragments 位)被設為 0,以指示這是最後一個片段。其他片段的這個標誌位被設為 1。
傳輸:
這些片段被分別傳輸到目的地節點。每個片段都是一個完整的 IP 封包,可以獨立傳輸和處理。
重組:
當片段到達目的地節點時,目的地節點會根據標識和片段偏移量將這些片段重新組合成原始封包。
如果重組過程中有任何片段丟失或出現錯誤,整個封包將被丟棄。
Path MTU Discovery(路徑 MTU 發現)
Path MTU Discovery 是一種機制,用於發現從來源到目的地之間的最小 MTU,以避免分片。當這個機制啟用時,如果封包大小超過路徑中的任何一個鏈路的 MTU,則路由器會丟棄該封包並向來源主機返回一個 ICMP "Fragmentation Needed" 消息。
來源主機收到這個消息後,可以調整封包大小,使其適應路徑中的最小 MTU,從而避免分片。
總結
當 IP 網路中的某個節點發現封包大小超過鏈路的 MTU 時,該節點會對封包進行分片處理,將封包拆分成多個較小的片段,每個片段的大小均不超過 MTU。這些片段被獨立傳輸並在目的地重新組合成原始封包。通過這種方式,IP 網路可以有效地處理大封包,使其適應不同鏈路的 MTU 限制。