回覆列表
-
1 # 喲喲吼說科技
-
2 # 愛答問題的小星星
專業問題我來回答一下,去年為做專案看了《TCP/IP卷一》,現在回答一下題主的問題也算是總結一下前面的知識:
正如題主所述,在通訊過程中確實會發生對資料包的分段與分片,其主要是由於鏈路層層的電氣特性和傳輸層的傳輸機制所決定的。對於分段來說主要發生在傳輸層的UDP協議上,而TCP傳輸協議很少出現這種情況,分段分片的目的就是對過長的報文截斷髮送,在接收端進行重灌。
MTU和MSS介紹MTU(Maximum Transmission Unit,最大傳輸單元):MTU是網路層的一個特性,因此資料包的分片發生在網路層,該特性是由乙太網的電氣特性決定,是鏈路層對資料幀的一個限制,通常在乙太網中該值MTU=1500位元組;MSS(Maxitum Segment Size,最大分段大小):MSS是傳輸層TCP協議的一個特性,因為它是TCP首部的一個欄位,其表明傳輸層每次能夠傳送的最大分段大小,其通常在三次握手發送SYN(發起連線請求時)出現。由於通常MSS<MTU,所以通常,MSS=1460;計算關係:MTU=MSS - 20(IP首部長度) - 20(tcp首部長度)。總結:IP分片是由於MTU,而TCP分段是由於MSS,UDP不會分段,當其傳輸的資料包過大,則有IP分片。IP分片後,只有第一片帶有UDP首部和ICMP首部,其餘片只有UDP首部,到了對端以後根據IP的頭部資訊在網路層進行重續,而TCP分段每一段都有TCP首部,到了對端以後按照TCP首部資訊在傳輸層進行重組;IP分片只有到了目的地才會重新組裝,而TCP在下一站(路由器)就可能進行重組。
因為MTU大小是由乙太網的電器屬性決定,在傳輸過程中經過的路由器等的不同MTU會發生變化,如傳輸中有一段X.25網,它的MTU是576,此時會發生什麼呢?沒辦法只能再分片,就像很多人去乘火車,先分到每列火車,火車載人比較多,在到終點站後因為火車不在開動,只能用再分成一小隊用客車轉運。
總結:產生原因:MTU是因為資料鏈路層的限制,MSS產生是因為TCP的握手過程中協商。所處OSI層不同:MTU處在網路層層,稱為IP分片,MSS層處在傳輸層,稱為TCP分段。數量關係:MSS<MTU,MTU=MSS+IP報文頭長度(20)+ TCP報文頭(20)組裝位置:IP分片在組中目的地,TCP分段在下一站。如果對我的回答對你有幫助,請點贊轉發和加關注,你們的支援是我堅持下去的動力,也可以留言一起探討一起成長。
如題,MTU和MSS都是決定資料包分片的,兩者的區別是什麼?
喲喲認為兩者最重要的區別是針對資料包分片的層次不一樣。一種是由資料鏈路層傳輸至網路層決定的資料包大小,另一種是由傳輸層至網路層決定的資料包大小。
下面喲喲來詳細介紹一下兩種分片的方式及區別:
MTU(Maximum Transmit Unit,最大傳輸單元)主要是指資料報文從資料鏈路層提供到網路層最大傳輸資料的大小;MTU值的設定主要是鏈路層對於網路層資料包大小的約束,假設MTU值設定為1500Byte,那麼當資料包大小大於1500位元組時就會對其進行分片操作,每個分片的IP Header ID相同,用於在接收端進行重組。
MSS(Maximum Segment Size,最大報文段長度)是用於在TCP建立連線時,雙方協商通訊的報文段最大長度;MSS值其實就是指TCP/IP協議棧所能允許的最大資料包,是在TCP建立連線時雙方會協商MSS值的大小。舉個例項來說明兩者的區別:
首先要確認MTU和MSS值的關係:MTU=MSS+IP Header+TCP Header
假設主機A與主機B通訊,主機A的MTU值為1500位元組,主機B的MTU值為1492位元組,那麼可以根據公式算出主機A傳送主機B的MSS值為1460位元組,主機B傳送主機A的MSS值為1452位元組;
當兩端建立TCP連線,那麼主機A傳送TCP SYN資訊時會告知對端允許傳送的最大MSS值(假設為1460位元組)。同樣,主機B也會告知主機A允許傳送的最大MSS值(假設為1452位元組)。顯然,主機B的MSS值要比主機A的MSS值要小,為保證正常通訊,要取兩端較小的一方MSS值,即1452位元組;
從上通訊可以看出通訊雙方最終的MSS值=較小MTU-IP Header-TCP Header