前言
??先回顧一下TCP/IP協(xié)議棧
??網(wǎng)絡(luò)層的協(xié)議有IP協(xié)議改基、ARP協(xié)議霞赫、ICMP協(xié)議和IGMP協(xié)議。其中IP協(xié)議是最主要也是最重要的協(xié)議稚叹,所以本文先從IP數(shù)據(jù)報的格式開始介紹动雹。
本文內(nèi)容
1 IP數(shù)據(jù)報格式
??一個IP數(shù)據(jù)報由首部和數(shù)據(jù)兩個部分組成槽卫。
??其中首部的前一個部分是固定部分,長度固定共20字節(jié)胰蝠,這是所有IP數(shù)據(jù)報必須具有的歼培。后一部分是可變部分,其長度是可變的茸塞,不是必須的躲庄。
2 IP數(shù)據(jù)報首部格式
??2.1 固定部分
??(1) 版本:占4位,指IP協(xié)議的版本钾虐。目前廣泛使用的IP協(xié)議版本有兩種IPv4和IPv6噪窘。
??(2) 首部長度:占4位,其單位是4B效扫。所以首部長度必須是4B的整數(shù)倍倔监。如首部長度字段的4個二進制位分別是1111(對應(yīng)十進制是15)无切,則IP協(xié)議首部的長度是15 × 4B = 60B(字節(jié))。由于IP數(shù)據(jù)報首部的固定部分長度固定是20丐枉,所以首部字段最小從0101開始。
??(3) 區(qū)分服務(wù):占8位掘托,一般情況下不使用該字段瘦锹。只有使用區(qū)分服務(wù)時,這個字段才起作用闪盔,如要求當前的數(shù)據(jù)報設(shè)置高優(yōu)先級優(yōu)先發(fā)送弯院。
??(4) 總長度:占16位,表示首部和數(shù)據(jù)部分長度之和泪掀,單位是字節(jié)听绳。
??(5) 標識、標志异赫、片偏移是關(guān)于IP數(shù)據(jù)報分片的椅挣,見下文。
??(6) 生存時間:占8位塔拳,表示數(shù)據(jù)報在網(wǎng)絡(luò)中的壽命鼠证。由發(fā)送數(shù)據(jù)報的源點設(shè)置這個字段,其目的是為了防止那些無法交付的數(shù)據(jù)報無限制的在互聯(lián)網(wǎng)中兜圈子(例如從路由器R1轉(zhuǎn)發(fā)到R2靠抑,再轉(zhuǎn)發(fā)到R3量九,然后又轉(zhuǎn)發(fā)到R1),因而白白浪費網(wǎng)絡(luò)資源颂碧。數(shù)據(jù)報每經(jīng)過一個路由器荠列,這個值就會減1,當減至0時载城,就丟棄該數(shù)據(jù)報肌似。
??(7) 協(xié)議:占8位,協(xié)議字段是指出次數(shù)據(jù)報所攜帶的數(shù)據(jù)是使用的協(xié)議诉瓦。這里記兩個協(xié)議字段的值:6表示TCP協(xié)議锈嫩,17表示UDP協(xié)議。
??(8) 首部校驗和:占16位垦搬,只校驗數(shù)據(jù)報的首部呼寸,不檢驗數(shù)據(jù)部分。數(shù)據(jù)報每經(jīng)過一個路由器都要重新計算一下首部校驗和(一些字段猴贰,如生存時間对雪、標志、片偏移可能發(fā)生了變化)米绕。
??(9) 源地址和目的地址:各占32位瑟捣。
??2.2可變部分
??(1) 可選字段:長度可變馋艺,從1字節(jié)~40字節(jié)÷跆祝可變部分是為了增加IP數(shù)據(jù)報的功能捐祠,如用來支持排錯、測量以及安全等措施桑李。
??(2) 填充:IP數(shù)據(jù)報的首部長度必須是4B的整數(shù)倍踱蛀,所以如果首部長度不滿足4B整數(shù)倍時,就使用填充字段將首部填充到4B的整數(shù)倍贵白。
3 IP數(shù)據(jù)報分片
??數(shù)據(jù)鏈路層將網(wǎng)絡(luò)層傳送的數(shù)據(jù)報添加頭部和尾部封裝成以太網(wǎng)幀率拒,數(shù)據(jù)鏈路層封裝數(shù)據(jù)幀長度是有限制的,以太網(wǎng)規(guī)定其最大傳送單元MTU的值是1500字節(jié)禁荒,如果從網(wǎng)絡(luò)層傳輸下來的數(shù)據(jù)報長度超過MUT值猬膨,就必須把過長的數(shù)據(jù)報進行分片處理舌界。
??而上節(jié)IP數(shù)據(jù)報首部固定部分的標識遵班、標志和片偏移就是用于數(shù)據(jù)報分片的。
??(1) 標識:占16位洗搂,所有分片的數(shù)據(jù)報的標識必須要和原數(shù)據(jù)報的標識相同热康。假如一個數(shù)據(jù)報的標識是12345召耘,這個數(shù)據(jù)報過大,分片后將它分為3個小的數(shù)據(jù)報褐隆,這3個較小的數(shù)據(jù)報的標識也必須是12345污它,可以理解這3個數(shù)據(jù)報是一個家族的。相同的標識字段的值可以使分片后的各個數(shù)據(jù)報最后能正確的重裝成原來的數(shù)據(jù)報庶弃。
??(2) 標志:占3位衫贬,目前只有兩位有意義。
??1) 最低位即第3位記為MF(More Fragment)歇攻,意思是是否還有更多分片固惯。當值為1時,表示該分片不是最后一片缴守,后面還有分片葬毫,當值為0時,表示這是原數(shù)據(jù)報分片后的最后一片數(shù)據(jù)報屡穗,后面已經(jīng)沒有更多的分片了贴捡。
??2) 中間位即第2位記為DF(Don't Fragment),意思是原數(shù)據(jù)報能否分片村砂。當值為1時烂斋,表示該數(shù)據(jù)報不允許分片,當值為0時,表示該數(shù)據(jù)報允許分片汛骂。
??(3) 片偏移:占13位罕模,以8B為單位。其表示較長分組分片后帘瞭,某一片在原分組中的相對位置淑掌,也就是說相對于用戶數(shù)據(jù)字段的起點,該片從何處開始蝶念。這也就是說抛腕,除了最后一個分片,每個分片的長度一定是8B的整數(shù)倍祸轮。
??舉個例子說明一下,假設(shè)一個數(shù)據(jù)報的總長度是3820個字節(jié)侥钳,其數(shù)據(jù)部分為3800字節(jié)長(首部僅僅使用固定部分)适袜,需要分片為長度不超過1420字節(jié)的數(shù)據(jù)報片。因固定首部長度為20字節(jié)舷夺,因此每個數(shù)據(jù)報片的長度不超過1400字節(jié)苦酱。于是分為3個報片,其數(shù)據(jù)部分的長度分別為1400给猾、1400疫萤、1000字節(jié)。原始數(shù)據(jù)報首部被復(fù)制為各個數(shù)據(jù)報的首部敢伸,但是必須修改有關(guān)字段扯饶。
??對于原始數(shù)據(jù)報、數(shù)據(jù)報片1池颈、2尾序、3的首部部分信息如下圖,(原始數(shù)據(jù)報的標識取12345)
??注意區(qū)分幾個字段的單位:
(1) 首部長度:單位是4B躯砰,表示數(shù)據(jù)報的首部的長度每币。
(2) 總長度:單位是B,標識整個數(shù)據(jù)報的長度琢歇。
(3) 片偏移量:單位是8B兰怠,表示某一分片相對于用戶數(shù)據(jù)字段的起點。