1. 程式人生 > >MTU對IP協議、UDP協議、TCP協議的影響

MTU對IP協議、UDP協議、TCP協議的影響

認識MTU

    MTU(最大傳輸單元)是指一種通訊協議的某一層上面所能通過的最大資料包大小(以位元組為單位)。最大傳輸單元這個引數通常與通訊介面有關(網路介面卡、串列埠)。

     乙太網幀中的資料長度規定最小46位元組,最大1500位元組,ARP資料包的長度不夠46位元組,要在後面補填充位。最大值1500稱為乙太網的最大傳輸單元(MTU),不同的網路型別有不同的MTU。

     注:如果一個數據包從乙太網路由到撥號鏈路上,資料包長度大於撥號鏈路的MTU了,則需要對資料包進行分片

MTU對IP協議的影響

   由於資料鏈路層MTU的限制,對於較大的IP資料包要進行分包。將較大的IP包分成多個小包,並給每個小包打上標籤,到達對端時再將這些小包按順序重組,拼裝到一起返回給傳輸層。一旦這些小包中任意一個小包丟失,接收端的重組就會失敗。但是IP層不會負責重新傳輸資料。

   在這裡我們需要注意的是,1. IP包會進行分包  2. IP包丟失後,不會負責重新傳輸資料。

   這裡提到ICMP協議,是一個網路層協議。由於IP協議並不提供可靠傳輸,如果丟包了,IP協議並不能通知傳輸層是否丟包以及丟包的原因,1. ICMP正式確認IP包是否到達目標地址   2. 通知在傳送過程中IP包被丟棄的原因。

MTU對UDP協議的影響

   由於UDP資料包不會自已進行分片,一旦UDP攜帶的資料超過1472(1500-20(IP首部)-8(UDP首部)),那麼就會 在網路層分成多個IP資料報。

  注:這多個IP資料報中任意一個丟失,都會引起接收端網路層重組失敗。即如果UDP資料包在網路層被分片,整個資料被丟失的概率就大大增加了。

MTU對UDP協議的影響

    MSS(最大分段大小)

    MSS是TCP裡的一個概念(首部的選項欄位中)。MSS是TCP資料包每次能夠傳輸的最大資料分段,TCP報文段的長度大於MSS時,要進行分段傳輸。TCP協議在建立連線的時候通常要協商雙方的MSS值,每一方都有用於通告它期望接收的MSS選項(MSS選項只出現在SYN報文段中,即TCP三次握手的前兩次)。MSS的值一般為MTU值減去兩個首部大小(需要減去IP資料包包頭的大小20Bytes和TCP資料段的包頭20Bytes)所以如果用鏈路層乙太網,MSS的值往往為1460。而Internet上標準的MTU(最小的MTU,鏈路層網路為x2.5時)為576,那麼如果不設定,則MSS的預設值就為536個位元組。很多時候,MSS的值最好取512的倍數。TCP報文段的分段與重組是在運輸層完成的。

    到了這裡有一個問題自然就明瞭了,TCP分段的原因是MSS,IP分片的原因是MTU,由於一直有MSS<=MTU,很明顯,分段後的每一段TCP報文段再加上IP首部後的長度不可能超過MTU,因此也就不需要在網路層進行IP分片了。因此TCP報文段很少會發生IP分片的情況。

總結:UDP不會分段,就由IP來分。TCP會分段,當然就不用IP來分了!