IP分組和分片


本文討論兩個問題①IP數據報的首部②IP數據報的分片

TCP/IP模型分為五層,從上到下依次是應用層、傳輸層、網絡層、數據鏈路層和物理層。

IP數據報是網絡層的概念。

  • IP數據報的首部

版本號:0~3  共占4位,是IP協議的版本號,IPV4和IPV6,所以只能是0100、0110兩個選項

首部長度:4~7 共占4位,共 有2的4次方,就是最多可以表示0~15個數,而IP數據報首部的固定部分都有20個字節了,所以0~15是不夠用的,所以首部長度按4字節為一個單位。例如:首部長度0110=6,就是首部長度有6*4=24個字節。

服務類型Tos:8~15 共占8位,

總長度:16~31  共占16位,2的16次方=65536,也就是0~65535,IP分組的總長度,最長的IP分組是65535個字節。

生存時間TTL:63~70 共占8位,2的8次方=256,就是這個IP分組最多經過256個路由器。

協議:71~78 共占8位。該IP分組中裝的是傳輸層哪個協議的數據包。6是TCP協議的,17是UDP協議的

首部校驗和:79~94 共占16位。對首部錯誤的一個校驗

標識、標志位、片偏移占32位,共4個字節,和IP數據報的分片有關。

 

  • 分片

分片的原因:在網絡層,因為要向下層也就是數據鏈路層傳輸,而數據鏈路層幀有最大傳輸單元(Max Transport Unit  MTU)限制,超過這個值就得降數據報分組。

比如以太網的MTU是1500B,PPP(Point to Point Prootocol)的MTU是296B,FDDI(Fiber Distributing Data Interface 光纖分布式數據接口)的MTU是4352,令牌環的MTU是4464B。

如果數據報的長度大於MTU,就可以分片了。至於允許不允許分片,需要看IP數據報首部的標志位。

 

標識(ID):32~47 共占16位,IP分組的標識(ID),IP協議利用一個計數器,每產生一個IP分組加1,作為該分組的標識。

標志位:48~50 占3位,保留位、DF、MF。DF=Don't Fragment,DF=1時,不允許分片;DF=0時,允許分片。MF=1時,非最后一片;MF=0時,最后一片或者未分片。

這兩位只有三種可能。10:不允許分片;01:允許分片,不是最后一片;00:允許分片,是最后一片。不存在11.

 

片偏移:占13位,這個分片在原IP分組中的相對位置,以分片的首字節表示。IP分組總長度是占16個字節,而片偏移占143個字節,所以片偏移是以(2的16次方)除以(2的13次方)=2的3次方=8字節為單位的。

 

舉個例子:假設IP數據分組的長度是L,數據鏈路層的MTU是M,IP數據報首部的長度是20個字節(沒有可選部分),每個分片都是按數據鏈路層可以傳輸的最大長度來切片的。那么:

每個分片中封裝的數據:

d={向下取整【(M-20)/8】}*8 

式子中20是首部數據長度,8:片偏移是以8字節為單位。

 

需要的總片數:

n=向上取整[(L-20)/d]   

 

 

每片的片偏移字段取值:

Vi=(d/8)*(i-1) i=1,2,3...,n

 

每片的總長度字段:

li=d+20   i=1,2,。。。,n-1

li=L-(i-1)*d  i=n

 

把IP分組的標識作為每個分片的標識。

 

等IP數據報的所有分片到達接收端時,會按照片偏移把其重新組裝起來。如果丟失了一片怎么辦?接收方計算機會等待一段時間,如果還接收不到這個分片,就會把IP分組的所有分片全部丟掉。

思考一下:

接收端計算機怎么樣才能唯一確定一個分片?

①源IP地址

②目的IP地址

③標識(ID)

④片偏移字段

⑤協議

歡迎大家指正~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM