天天看點

TCP之路徑MTU(PMTU)發現過程詳解什麼時路徑MTU(簡稱PMTU)為什麼要有PMTUPMTU發現過程定時更新PMTU

本文目錄

  • 什麼時路徑MTU(簡稱PMTU)
  • 為什麼要有PMTU
  • PMTU發現過程
  • 定時更新PMTU

什麼時路徑MTU(簡稱PMTU)

當在同一個網絡上的兩台主機互相進行通信時,如果兩台主機之間的通信要通過多個網絡,那麼每個網絡的鍊路層就可能有不同的MTU。是以重要的不僅是兩台主機所在網絡的MTU的值,最重要的是兩台通信主機路徑中的最小MTU。它被稱作路徑MTU。注意:兩台主機之間的路徑MTU不一定是個常數,因為二個主機之間的路由選路是動态變化的,是以路徑MTU取決于當時所選擇的路由路徑。還有路由選路也不一定是對稱的(從A到B的路由可能與從B到A的路由路徑不一樣),是以路徑MTU在兩個方向上不一定是一緻的。

為什麼要有PMTU

通過文章TCP的MSS的計算與詳解,我們已經知道因為發送端或者接收端的MTU受限,或者是網絡中任何一個路由器的任何一個端口的MTU受限,都可能會引發IP分片,而IP分片可能會使得網絡性能變差。這時就要求我們設定正确的MSS以避免IP分片的發生。那麼在TCP的MSS的計算與詳解中的第二章:MSS協商中,我們已經知道了接收方和發送方以及中間經過的路由器支援的情況下如何協商MSS以避免IP分片的。但如果路由器沒有參與到TCP層做替換MSS的功能,那麼MSS協商過程并不能解決網絡中的路由器的端口的MTU受限而引發的IP分片問題。PMTU就是為解決這個問題而産生的,簡單的說:發送端如果能知道PMTU,那麼發送端就可以按照PMTU,即兩台通信主機路徑中的最小MTU對TCP進行分段,将MSS設定成适合PMTU的值,則在通信過程中就可以避免在主機以及網絡中和任何一個節點處産生IP分片。

PMTU發現過程

這個過程利用的是:

  1. 主機發送一個IP首部的分片禁止标志位設定為1的IP資料報
  2. 路由器在收到IP首部的分片禁止标志位設定為1的IP資料報時,如果發現需要分片才能處理的大包,它不會去分片,而是将包丢棄,并給發送方主機傳回一個ICMP差錯封包,告之發送端發生了一個不能分片錯誤,并帶回自己所能支援的最大MTU。
  3. 主機收到ICMP封包後,把自己的出口MTP改小,修改為ICMP差錯封包告之的MTU值,再次發送一個IP首部的分片禁止标志位設定為1的IP資料報。
  4. 重複上面2.3二個步驟,直到不再從網絡中的收到ICMP差錯封包,說明已經收到了整個路徑上的最小MTU, 既路徑MTU(PMTU)

定時更新PMTU

我們所知IP路由路徑是會動态變化的,PMTU變小的情況不要緊,會有新的ICMP差錯封包觸發新一輪PMTU發現與更新過程,

但我們知道 随着路由路徑的變化,PMTU可能也會變大,如果發送方不及時更新PMTU,那麼就會導緻一直用一個較小的MTU在發送,進而導緻較低的網絡使用率,是以IP協定規定每隔壁10分鐘,就要重新開機PMTU發現過程,以便定時完成PMTU的更新。

繼續閱讀