1. 程式人生 > >IP協議(2)--協議格式和IP分片

IP協議(2)--協議格式和IP分片

IP協議

IP協議工作在網路層,是TCP/IP協議族中一個重要協議,另外IP協議不保證資料的可靠傳輸,其不保證資料的正確性它只有首部的檢驗和,不管其資料的正確,另外如果在傳送過程中出現錯誤,其會丟棄資料包,然後傳送ICMP指明錯誤,不進行處理錯誤如重傳,這些會交個上層處理,另外IP協議是無連線的即每個資料包的傳遞均為單獨傳遞,就算目的端和源端相同也可能會有不同的路由,

IP協議格式

在這裡插入圖片描述

其中版本指的是使用的協議版本,協議版本號是4即ipv4, 另外ipv6採用另外的協議報頭和這個不相同

4位首部長度:這裡的首部長度是以4個位元組為基本單位因此其能表示的最大長度為15即60位元組,故首部長度最大60位元組,另外這裡涉及到位元組序的問題,TCP/IP協議族其在網路中傳遞資料時是以網路位元組序進行傳輸,高位使用低地址進行存放,即0~7 存放最高位,8 ~ 15存放次高位,16 ~ 23存放次低位,24 ~ 31 存放最低位,這種存放方式成為大端,而主機的位元組序取決於CPU因此,在程式設計中需要注意位元組序的轉換,另一種位元組序為小端,即低地址存放低位。

服務型別: 服務型別有8位其中三位為優先順序現在已棄用,案後最後一位是保留位,剩下的四位為TOS欄位即服務型別,分別代表最小時延,最大吞吐量,最高可靠性,最小成本,並且這四位之間相互互斥,只能選擇一位為1,如果全為0表示一般服務。

總長度:總長度佔16位,表示整個資料報長度,單位是位元組和首部長度單位不相同,通過總長度和首部長度可以確定資料報中資料部分起始位置和其大小。16為能表示的最大長度為65535位元組,不過因為在鏈路層受到MUT的限制,如果其總長度大於MTU IP資料報會進行分片,

標識: 欄位唯一標識發出的每個資料報,通常每發出一個就會加1,還有三位標誌和13位片偏移均用於IP分片下面統一說明

生存時間(TTL):生存時間指的是資料報在路由過程中最多的跳數,每被一個路由器轉發其值會減一,如果值變為0,路由器會將其丟棄,並給信源返回一個ICMP(超時) 資訊。

協議:這裡的協議指的IP資料報中的資料使用的協議,即TCP UDP ICMP 等用於資料的分用

首部檢驗和:這裡的首部檢驗是根據IP首部計算的檢驗和,不計算資料部分,計算方法是反碼求和,先將首部校驗和置為0,按後將其餘每16位進行反碼求和,其結果存放在首部校驗和中,當路由器收到資料報時包含首部校驗和進行結算,如果結果為全1則表示沒有出現差錯,如果結果不全為1 表示資料出錯,會將資料包丟棄,但是不產生差錯報文。

最後一個欄位是任選項

,是資料報中的一個可變長的可選資訊,這個需要注意的是,選項必須滿足四個位元組的整數倍,如果不夠需要填充,首部長度是以四位元組為基本單位,選項有:時間戳(讓每個路由器都記下它的I P地址和時間),安全和處理限制,寬鬆的源站選路(為資料報指定一系列必須經過的I P地址),嚴格的源站選路(與寬鬆的源站選路類似,但是要求只能經過指定的這些地址,不能經過其他的地址 )等。

IP分片

當一個IP資料報,需要進行傳送時需要先進行判斷從哪個網路介面進行傳送(選路),然後獲得需要進行傳送的介面的MTU值,和資料報大小進行比較,如果資料報大小大於MTU那麼此時就需要進行分片,資料分片後,到達下一路由器或主機,會根據報頭進行重組(注意下一站就會進行重組,而不是在到達目的地重組,)然後再轉發時會進行相同的步驟,整個過程對傳輸層透明,在這裡需要注意的是資料報在傳送端沒有分片,在中間路由過程中是有可能會發生分片的,因此在不想分片時需要考率路徑MTU。另外在分片時會為每個分片新增IP首部。

在IP首部有三個欄位,16位標示這個欄位指的資料報的唯一標識,當IP資料報分片後,它的每個分片的標識是相同的。
三位標誌,其中第一位是保留位;第二位為禁止分片,如果其資料報大於MTU,會將資料報丟棄,傳送一個ICMP差錯報文;第三位表示更多分片,如果分片的話第三位置1,最後一個分片置0。
最後一個片偏移表示,當前分片偏移原始資料起始的位置,也就是當前分片在原始資料中的位置,實際偏移的位元組數是這個值*8的值,因此在分片時,除最後一片外,其他每一片中的資料部分(除I P首部外的其餘部分)必須是8位元組的整數倍。
在這裡插入圖片描述

最後就是IP分片丟失重傳問題,因為在網路層不提供重傳機制,需要到更高層進行重傳(TCP有超時重傳機制,UDP沒有,但是有些UDP程式會支援超時重傳)當一個TCP報文段進行,傳送時如果在IP層進行了分片,在傳輸過程中如果其中一個分片丟失的話,就需要重傳整個報文段(如果在中間路由分片,源端是不知道如何分片的)因為這個原因經常要避免分片。使用UDP很容易導致IIP分片,

MSS(Maxitum Segment Size)最大分段大小的縮寫,是TCP協議裡面的一個概念就是 TCP 資料包每次能夠傳輸的最大資料分段。為了達到最佳的傳輸效能TCP 協議在建立連線的時候通常要協商雙方的 MSS 值,並且MTU會限制MSS大小,而這個值限制了TCP報文段的大小使得,TCP報文段不會被分片。

參考 《TCP/IP詳解卷1:協議》 LawrenceBerkeley