重溫TCP/IP

    今天看了下有關TCP/IP包的知識,汗!發現自己以前就沒怎麼好好學過,有些東西只知道有怎麼回事卻沒怎麼真正理解:

MTU:

MTU是Maximum Transmission Unit的縮寫。用來表示網絡上傳送的數據包最大數據量,單位是字節。不同的接入方式,MTU值是不一樣的,下面是常用的幾種接入方式默認的MTU值:
EtherNet (以太網)1500
PPPoE(ADSL) 1492
Dial-up(modem) 576 
 

測試網關MTU大小:ping -f -l 14xx 192.168.1.1

協議分析網中有篇文章: http://www.cnpaf.net/Class/TCPANDIP/05103121170033821979.htm寫得不錯.

 

MSS:


MSS就是TCP數據包每次能夠傳輸的最大數據分段。爲了達到最佳的傳輸效能TCP協議在建立連接的時候通常要協商雙方的MSS值,這個值TCP協議在實現的時候往往用MTU值代替(需要減去IP數據包包頭的大小20Bytes和TCP數據段的包頭20Bytes)所以往往MSS爲1460。通訊雙方會根據雙方提供的MSS值得最小值確定爲這次連接的最大MSS值

IP分片:

以太網EthernetII最大的數據幀是1518Bytes這樣,刨去以太網幀的幀頭(DMAC目的MAC地址48bit=6Bytes+SMAC源MAC地址48bit=6Bytes+Type域2bytes)14Bytes和幀尾CRC校驗部分4Bytes(這個部門有時候大家也把它叫做FCS),那麼剩下承載上層協議的地方也就是Data域最大就只能有1500Bytes這個值我們就把它稱之爲MTU。這個就是網絡層協議非常關心的地方,因爲網絡層協議比如IP協議會根據這個值來決定是否把上層傳下來的數據進行分片。就好比一個盒子沒法裝下一大塊麪包,我們需要把麪包切成片,裝在多個盒子裏面一樣的道理。

當兩臺遠程PC互聯的時候,它們的數據需要穿過很多的路由器和各種各樣的網絡媒介才能到達對端,網絡中不同媒介的MTU各不相同,就好比一長段的水管,由不同粗細的水管組成(MTU不同 )通過這段水管最大水量就要由中間最細的水管決定。

對於網絡層的上層協議而言(我們以TCP/IP協議族爲例)它們對水管粗細不在意它們認爲這個是網絡層的事情。網絡層IP協議會檢查每個從上層協議下來的數據包的大小,並根據本機MTU的大小決定是否作“分片”處理。


IP首部包含了分片和重組所需的信息:

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       Identification     |R|DF|MF|   Fragment Offset   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|<-------------16-------------->|<--3-->|<---------13---------->|

Identification:發送端發送的IP數據包標識字段都是一個唯一值,該值在分片時被複制到每個片中。
R:保留未用。
DF:Don't Fragment,“不分片”位,如果將這一比特置1 ,IP層將不對數據報進行分片。
MF:More Fragment,“更多的片”,除了最後一片外,其他每個組成數據報的片都要把該比特置1。
Fragment Offset:該片偏移原始數據包開始處的位置。偏移的字節數是該值乘以8。

另外,當數據報被分片後,每個片的總長度值要改爲該片的長度值。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章