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