摘自:http://blog.163.com/hlz_2599/blog/static/1423784742011112195857956/</>
TCP/IP協議定義了一個在因特網上傳輸的包,< xmlnamespace prefix ="o" ns ="urn:schemas-microsoft-com:office:office" />
稱為IP數據報 (IP Datagram)。這是一個與硬件無關的虛擬包,
由首部和數據兩部分組成。首部的前一部分是固定長度,共 20 字節,
是所有IP數據報必須具有的。在首部的固定部分的后面是一些可選字段,
其長度是可變的。首都中的源地址和目的地址都是 IP 協議地址。
那么IP數據報格式又是怎樣要求的呢?
1. IP數據報首部的固定部分中的各字段
①版本:占4位,指IP協議的版本。通信雙方使用的
IP協議版本必須一致。日前廣泛使用的 IP協議版本號為 4 (即 IPv4)。
IPv6 目前還處于起步階段。
②首部長度:占 4 位,可表示的最大十進制數值是 15。請注意,
這個字段所表示數的單位是32位字 ( 1 個32位字長是4 字節),
因此,當 IP 的首部長度為 1111 時 (即十進制的 15),
首部長度就達到 60字節。當 IP 分組的首部長度不是4字節的整數倍時,
必須利用最后的填充字段加以填充。
因此數據部分永遠在 4字節的整數倍開始,
這樣在實現 IP協議時較為方便。
首部長度限制為 60字節的缺點是有時可能不夠用。
這樣做的目的是希望用戶盡量減少開銷。
最常用的首部長度就是 20 字節 (即首部長度為 0101),
這時不使用任何選項。
③服務:占 8 位,用來獲得更好的服務。
這個字段在舊標準中叫做服務類型,但實際上一直沒有被使用過。
1998年IETF把這個字段改名為區分服務 DS (DifferentiatedServices)。
只有在使用區分服務時,這個字段才起作用。
④總長度:總長度指首都及數據之和的長度,單位為字節。
因為總長度字段為 16位,所以數據報的最大長度為 216-1=65 535字節。 在IP層下面的每一種數據鏈路層都有自己的幀格式,其中包括幀格式中的數據字段的最大長度,即最大傳送單元 MTU (Maximum Transfer Unit)。當一個數據報封裝成鏈路層的幀時,此數據報的總長度 (即首部加上數據部分)一定不能超過下面的數據鏈路層的MTU值。
⑤標識 (Identification):占 16位。
IP軟件在存儲器中維持一個計數器,每產生一個數據報,
計數器就加 1,并將此值賦給標識字段。但這個“標識”并不是序號,
因為 IP是無連接的服務,數據報不存在按序接收的問題。
當數據報由于長度超過網絡的 MTU 而必須分片時,
這個標識字段的值就被復制到所有的數據報的標識字段中。
相同的標識字段的值使分片后的各數據報片最后能正確地重裝成為
原來的數據報。
⑥標志 (Flag):占3 位,但目前只有2位有意義。
標志字段中的最低位記為 MF (More Fragment)。
MF=1即表示后面“還有分片”的數據報。MF=0表示這已是若干數據報片
中的最后一個。
標志字段中間的一位記為 DF(Don't Fragment),
意思是“不能分片”。只有當 DF=0時才允許分片。(指示原數據報能不能分片)
⑦片偏移:占 13位。較長的分組在分片后,
某片在原分組中的相對位置。也就是說,相對用戶數據字段的起點,
該片從何處開始。片偏移以 8個字節為偏移單位。
這就是說,每個分片的長度一定是 8字節 (64位)的整數倍。
⑧生存時間:占 8位,生存時間字段常用的英文縮寫是
TTL (Time To Live),其表明數據報在網絡中的壽命。
由發出數據報的源點設置這個字段。
其目的是防止無法交付的數據報無限制地在因特網中兜圍子,
因而白白消耗網絡資源。最初的設計是以秒作為 TTL的單位。
每經過一個路由器時,就把TTL減去數據報在路由器消耗掉的一段時間。
若數據報在路由器消耗的時間小于 1 秒,就把TTL值減 1。
當 TTL值為 0時,就丟棄這個數據報。
⑨協議:占 8 位,協議字段指出此數據報攜帶的數據是使用何種協議,以便使目的主機的IP層知道應將數據部分上交給哪個處理過程。
⑩首部檢驗和:占 16位。這個字段只檢驗數據報的首部,
但不包括數據部分。這是因為數據報每經過一個路由器,都要重新計算一下首都檢驗和 (一些字段,如生存時間、標志、片偏移等都可能發生變化)。不檢驗數據部分可減少計算的工作量。
⑾源地址:占32位。
⑿目的地址:占 32位。
2. IP數據報首部的可變部分
IP首都的可變部分就是一個可選字段。選項字段用來支持排錯、測量以及安全等措施,內容很豐富。此字段的長度可變,從 1 個字節到40個字節不等,取決于所選擇的項目。某些選項只需要 1 個字節,它只包括 1 個字節的選項代碼。但還有些選項需要多個字節,這些選項一個個拼接起來,中間不需要有分隔符,最后用全0 的填充字段補齊成為 4字節的整數倍。 增加首都的可變部分是為了增加 IP數據報的功能,但這同時也使得 IP 數據報的首部長度成為可變的。這就增加了每一個路由器處理數據報的開銷。實際上這些選項很少被使用。新的 IPv6就將 IP數據報的首部長度做成固定的。
IP數據包指的是第三層的PDU,
IP首部只是其中的一部分,是在第三層網絡層上加上去的,是給路由器看的。
IP數據包的總長度過大,超過鏈路的最大MTU時,數據包就會被分成多片,
而在如今的IPv4的網絡中,數據傳輸時不可靠的,是盡力而為的,
所以這些分片的數據單元到達對端的鏈路和時間都是不同的,
對端根據IP首部中的標示符(Identification)、標志(Flag)、段偏置值字段
重組數據包。
文章列表