IPV4報頭及IP分片

IP協議是無連接,不可靠,無狀態的。
無連接就是指通訊時不能長久的維持對方信息,保持連接。
不可靠就是不能保證數據準確的發送給接受方,可能會丟失,變錯,截斷等。
無狀態就是指發送的數據可能是亂序的重複的。

至於爲什麼IP協議的特性是這樣的。爲什麼TCP協議又是有連接的,可靠的,無狀態的。
那就得從控制協議的報頭段來分析原因了。
不同的協議,不同的報頭,因此表現出來的特性也是區別很大的。

IPv4的報頭示意圖是這樣的。
 
4位版本號:IP協議的版本,ipv4就值爲4

4位頭部長度:指這個報頭一共有多少個字節,其中1個數表示4字節
4位能表示到15,因此報頭最多4*15=60個字節

8位服務類型
其中3位表示優先權字段,現在已經忽略。
  然後4位爲TOS字段,這四位互斥,只能一位取1,分別表示最小延遲,最大吞吐量,最高可靠性和最小消費。
然後還有1位保留,必須爲0;

16位總長度:指整個ip數據報即報頭+數據的大小。
其中一個數表示一個字節。由於ip所在網絡層 的 下一層鏈路層封裝爲幀,而幀的最大傳輸單元(MTU)的上限爲1500個字節(這裏都用以太網的幀舉例)。


因此這個2^16個字節的長度就遠遠超過了它下層的限制,所以ip數據報如果超過1500個字節,會被分片傳輸。
這就會有一個問題,如果ip數據報的大小爲1501,那麼就會被分爲2片。一個片的數據爲1500字節,另一片的數據爲1字節,後者顯然很不划算

16位標識:標識了每個發送的數據報,初值是隨機的,之後每發一個數據報值+1。

3位標識字段
第一位保留
第二位表示是否禁止下層鏈路層把ip封裝成幀的時候使用分片機制,如果這個設置了,那麼ip數據報就不會分片,如果ip數據報超過1500字節(以太網是1500,其他的不一定),那麼這個ip數據報就被丟棄,返回差錯報文。
第三位表示 此ip數據報是否有 更多的數據報分片。
Ip分片什麼意思呢?就是比如我們原本打算髮的數據報爲4000個字節,由於mtu的1500字節的限制,會被分割,如圖所示。


因此我們要把這個數據報拆分爲3個數據報才能正常發送。
前兩個數據報①② 的標識字段的第三位都是1,表示後面還有分片,最後一個數據報③是0,表示是分片的尾巴。因此這位標識字段和前面的16位標識共同作用下,就可以把 被分片成很多ip數據報們 還原成原始的很大的(超過1500字節)的ip數據報

13位片偏移表示的是這個數據報相對於分片前的數據報的偏移位置。這個由於是13位,爲啥不是16?因爲有3位被標識字段佔了。因此表示的是實際偏移的1/8,也就是說這個偏移乘以8 (即2^3,佔得那3位) 纔是真正的偏移,拿上圖的距離。
第一個數據報①就是分片前數據報的初始位置,因此沒有偏移是0
第二個數據報②是分片前的第1440個字節的位置,但這個值要除以8,因此爲180。
第三個數據報③是分片前 第2880個字節的位置,因此偏移爲360。

因此ip數據報的數據部分(不算報頭那60個字節)的大小應該是8的倍數,否則到時候會無法整除的,1440就是180的8倍,如果報頭沒有選項部分,即40個字節,則數據部分的大小不能取1460個字節,應該取1456個字節。


8位生存時間:就是路由器的跳數,能轉幾次路由器,這樣主要是爲了防止ip數據報一直無限在路由器間循環跳轉,影響整個網絡環境。
一般設爲64,經過一次路由器就減一,直到爲0,這個ip數據報就被路由器處決了。

8位協議表示的是上層使用什麼協議。TCP 爲6,UDP爲17 ,ICMP爲1

16位校驗和,接受ip數據報的端檢測這個ip數據報的頭部是否損壞。

32位源端ip地址和32位目的端ip地址 意思顯而易見,不解釋!

最後爲40個字節的選項


因此我們可以大概瞭解IP協議的特性了。
IP協議不可靠,即不保證數據正確的傳輸。其主要原因還是沒有檢測數據是否損壞的步驟,16位校驗和也僅僅檢查的是ip數據報的報頭是否損壞。
無狀態是由於數據報式的服務並沒有控制接受順序的步驟,16位標識只是爲了ip分片相關的。
無狀態雖然讓數據可能亂序重複,但換來的卻是高效和簡潔,沒有那麼多的控制選項,傳送速率來說也是相對較快。

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