IP 數(shù)據(jù)包的解析-計算機(jī)網(wǎng)絡(luò)
一、?實驗?zāi)康?/span>
1.1 ?學(xué)習(xí)并分析 IP 數(shù)據(jù)包的結(jié)構(gòu)、含義
二、?實驗環(huán)境
2.1 ?Wireshark 網(wǎng)絡(luò)分析軟件 ?
2.2 ?實驗文件“計算機(jī)網(wǎng)絡(luò)實驗.cap”
三、?實驗內(nèi)容
3.1 ARP 地址解析協(xié)議數(shù)據(jù)
打開文件“計算機(jī)網(wǎng)絡(luò)實驗”,這是一個網(wǎng)絡(luò)通信記錄,詳細(xì)記錄了分組的序號、相對時間、源地址、目標(biāo)地址、協(xié)議類型、內(nèi)容,如圖 1 是對第 26 個分組的詳細(xì)信息。在協(xié)議框內(nèi),分別顯示了該分組的各層協(xié)議:接口層以太網(wǎng)協(xié)議(eth)、arp 地址解析協(xié)議。
?

從圖中的 Frame 26 為例,可以發(fā)現(xiàn)該 MAC 幀目標(biāo) address 是 ff:ff:ff:ff:ff:ff,是一個廣播幀(broadcast),源地址是 00 25 11 4e 02 34 ,幀類型是地址解析協(xié)議 ARP(0806),本機(jī)查詢網(wǎng)關(guān)的物理地址。

第 27 個分組是對 26 分組的應(yīng)答,網(wǎng)關(guān)給出了其物理地址發(fā)給本地主機(jī),數(shù)據(jù)字段的長度小于 46 字節(jié),在數(shù)據(jù)字段的后面加入整數(shù)字節(jié)的填充字段 Trailer,以保證以太網(wǎng)的MAC 幀長不小于 64 字節(jié)(含 FCS)。(注意:最下欄左面的序號為 16 進(jìn)制,如 0010 是 16十進(jìn)制),填充內(nèi)容一般常見是連續(xù)的 0。
3.2 IP 數(shù)據(jù)包的解析
觀察文件內(nèi)第 71 個分組的 IP 數(shù)據(jù)包詳細(xì)信息,見圖 3。
l 它的前 8 位是 45(H)=0100 0101(B),其中 0100(B)=4 ,表示 IP 協(xié)議的版本是4; 0101(B)=5,表示首部長度是 20 字節(jié)(一個單位為 4 字節(jié),合計 5 個單位)。
l 差異服務(wù)類型字段為 00000000(B),沒有使用。
l 總長度——占 16 bit,指首部和數(shù)據(jù)之和的長度,00 40(H)=64 字節(jié)(64byte)
l 標(biāo)識(identification) 占 16 bit,它是一個計數(shù)器,用來產(chǎn)生數(shù)據(jù)報的標(biāo)識,便于重裝分片的同一數(shù)據(jù)報,當(dāng)前值為 4EA8;
l 標(biāo)志(flag) 占 3 bit,,當(dāng)前值是 000,表明可以分片(注:如果數(shù)據(jù)報的長度超過網(wǎng)絡(luò)的MTU,需將數(shù)據(jù)包分片;否則事實上不進(jìn)行分片),該分組是最后的一個分片,再結(jié)合后面的片偏移,可以確定它是完整的未分片。
l 片偏移占 13 bit,當(dāng)前值是 0 0000 0000 0000 ;
l 生存時間(8 bit)記為 TTL (Time To Live),這是為了限制數(shù)據(jù)報在網(wǎng)絡(luò)中的生存時間,當(dāng)前值是 127,數(shù)據(jù)報每經(jīng)過一個路由器,其值就減 1;
l 協(xié)議(8 bit)字段指出此數(shù)據(jù)報攜帶的數(shù)據(jù)使用何種協(xié)議,當(dāng)前值是 06(H)=06,為 TCP 協(xié)議。
l 首部檢驗和(16 bit)字段檢驗數(shù)據(jù)報的首部,當(dāng)前值是 baf1;
l IP 源地址當(dāng)前值是 172.30.0.19;
l IP 目的地址當(dāng)前值是 219.222.170.14。
?

四、?實驗問題
問題一:什么是 IP 地址?IP 數(shù)據(jù)包的結(jié)構(gòu)和含義是怎樣的?
答:
IP地址(Internet Protocol Address)是指互聯(lián)網(wǎng)協(xié)議地址,又譯為網(wǎng)際協(xié)議地址。IP地址是IP協(xié)議提供的一種統(tǒng)一的地址格式,它為互聯(lián)網(wǎng)上的每一個網(wǎng)絡(luò)和每一臺主機(jī)分配一個邏輯地址,以此來屏蔽物理地址的差異。
IP數(shù)據(jù)報結(jié)構(gòu)如下圖
?

1) 版本(version)
占 4 位,表示 IP 協(xié)議的版本。通信雙方使用的 IP 協(xié)議版本必須一致。目前廣泛使用的IP協(xié)議版本號為 4,即 IPv4。
2) 首部長度(網(wǎng)際報頭長度IHL)
占 4 位,可表示的最大十進(jìn)制數(shù)值是 15。這個字段所表示數(shù)的單位是 32 位字長(1 個 32 位字長是 4 字節(jié))。因此,當(dāng) IP 的首部長度為 1111 時(即十進(jìn)制的 15),首部長度就達(dá)到 60 字節(jié)。當(dāng) IP 分組的首部長度不是 4 字節(jié)的整數(shù)倍時,必須利用最后的填充字段加以填充。
數(shù)據(jù)部分永遠(yuǎn)在 4 字節(jié)的整數(shù)倍開始,這樣在實現(xiàn) IP 協(xié)議時較為方便。首部長度限制為 60 字節(jié)的缺點(diǎn)是,長度有時可能不夠用,之所以限制長度為 60 字節(jié),是希望用戶盡量減少開銷。最常用的首部長度就是 20 字節(jié)(即首部長度為 0101),這時不使用任何選項。
3) 區(qū)分服務(wù)(tos)
也被稱為服務(wù)類型,占 8 位,用來獲得更好的服務(wù)。這個字段在舊標(biāo)準(zhǔn)中叫做服務(wù)類型,但實際上一直沒有被使用過。1998 年 IETF 把這個字段改名為區(qū)分服務(wù)(Differentiated Services,DS)。只有在使用區(qū)分服務(wù)時,這個字段才起作用。
4) 總長度(totlen)
首部和數(shù)據(jù)之和,單位為字節(jié)??傞L度字段為 16 位,因此數(shù)據(jù)報的最大長度為 2^16-1=65535 字節(jié)。
5) 標(biāo)識(identification)
用來標(biāo)識數(shù)據(jù)報,占 16 位。IP 協(xié)議在存儲器中維持一個計數(shù)器。每產(chǎn)生一個數(shù)據(jù)報,計數(shù)器就加 1,并將此值賦給標(biāo)識字段。當(dāng)數(shù)據(jù)報的長度超過網(wǎng)絡(luò)的 MTU,而必須分片時,這個標(biāo)識字段的值就被復(fù)制到所有的數(shù)據(jù)報的標(biāo)識字段中。具有相同的標(biāo)識字段值的分片報文會被重組成原來的數(shù)據(jù)報。
6) 標(biāo)志(flag)
占 3 位。第一位未使用,其值為 0。第二位稱為 DF(不分片),表示是否允許分片。取值為 0 時,表示允許分片;取值為 1 時,表示不允許分片。第三位稱為 MF(更多分片),表示是否還有分片正在傳輸,設(shè)置為 0 時,表示沒有更多分片需要發(fā)送,或數(shù)據(jù)報沒有分片。
7) 片偏移(offsetfrag)
占 13 位。當(dāng)報文被分片后,該字段標(biāo)記該分片在原報文中的相對位置。片偏移以 8 個字節(jié)為偏移單位。所以,除了最后一個分片,其他分片的偏移值都是 8 字節(jié)(64 位)的整數(shù)倍。
8) 生存時間(TTL)
表示數(shù)據(jù)報在網(wǎng)絡(luò)中的壽命,占 8 位。該字段由發(fā)出數(shù)據(jù)報的源主機(jī)設(shè)置。其目的是防止無法交付的數(shù)據(jù)報無限制地在網(wǎng)絡(luò)中傳輸,從而消耗網(wǎng)絡(luò)資源。
路由器在轉(zhuǎn)發(fā)數(shù)據(jù)報之前,先把 TTL 值減 1。若 TTL 值減少到 0,則丟棄這個數(shù)據(jù)報,不再轉(zhuǎn)發(fā)。因此,TTL 指明數(shù)據(jù)報在網(wǎng)絡(luò)中最多可經(jīng)過多少個路由器。TTL 的最大數(shù)值為 255。若把 TTL 的初始值設(shè)為 1,則表示這個數(shù)據(jù)報只能在本局域網(wǎng)中傳送。?
9) 協(xié)議
表示該數(shù)據(jù)報文所攜帶的數(shù)據(jù)所使用的協(xié)議類型,占 8 位。該字段可以方便目的主機(jī)的 IP 層知道按照什么協(xié)議來處理數(shù)據(jù)部分。不同的協(xié)議有專門不同的協(xié)議號。
例如,TCP 的協(xié)議號為 6,UDP 的協(xié)議號為 17,ICMP 的協(xié)議號為 1。
10) 首部檢驗和(checksum)
用于校驗數(shù)據(jù)報的首部,占 16 位。數(shù)據(jù)報每經(jīng)過一個路由器,首部的字段都可能發(fā)生變化(如TTL),所以需要重新校驗。而數(shù)據(jù)部分不發(fā)生變化,所以不用重新生成校驗值。
11) 源地址
表示數(shù)據(jù)報的源 IP 地址,占 32 位。
12) 目的地址
表示數(shù)據(jù)報的目的 IP 地址,占 32 位。該字段用于校驗發(fā)送是否正確。
13) 可選字段
該字段用于一些可選的報頭設(shè)置,主要用于測試、調(diào)試和安全的目的。這些選項包括嚴(yán)格源路由(數(shù)據(jù)報必須經(jīng)過指定的路由)、網(wǎng)際時間戳(經(jīng)過每個路由器時的時間戳記錄)和安全限制。
14) 填充
由于可選字段中的長度不是固定的,使用若干個 0 填充該字段,可以保證整個報頭的長度是 32 位的整數(shù)倍。
15) 數(shù)據(jù)部分
表示傳輸層的數(shù)據(jù),如保存 TCP、UDP、ICMP 或 IGMP 的數(shù)據(jù)。數(shù)據(jù)部分的長度不固定。
?
問題二:根據(jù)文件“計算機(jī)網(wǎng)絡(luò)實驗.cap”,參照實驗 4.2 回答以下問題:
1、?分析第 2 個 IP 數(shù)據(jù)包的結(jié)構(gòu)和含義?
答:
IP協(xié)議版本號: IPv4
服務(wù)類型: 0x00(DSCP:CS0,ECN:Not-ECT)
IP報文頭長度: 20 bytes ,說明沒有使用可選字段
數(shù)據(jù)報總長度: 39
標(biāo)識: 0x1669(5737)
數(shù)據(jù)報是否要求分段: ?Not set
分段偏移量 : 0
生存時間: 127
上層協(xié)議名稱: ICMP
報文頭校驗和: 0x947a
源地址: 10.10.0.252
目標(biāo)地址: 219.222.170.14
?
2、?分析第 35 個 IP 數(shù)據(jù)包的結(jié)構(gòu)和含義?
答:
IP協(xié)議版本號: IPv4
服務(wù)類型: 0x00(DSCP:CS0,ECN:Not-ECT)
IP報文頭長度: 20 bytes ,說明沒有使用可選字段
數(shù)據(jù)報總長度: 52
標(biāo)識: 0x25bf(9663)
數(shù)據(jù)報是否要求分段: ?Not set
分段偏移量 : 0
生存時間: 128
上層協(xié)議名稱: TCP
報文頭校驗和: 0xa2e6
源地址: 219.222.170.14
目標(biāo)地址: 172.30.0.19
?
3、?分析第 95 個 IP 數(shù)據(jù)包的結(jié)構(gòu)和含義?
答:
IP協(xié)議版本號: IPv4
服務(wù)類型: 0x00(DSCP:CS0,ECN:Not-ECT)
IP報文頭長度: 20 bytes ,說明沒有使用可選字段
數(shù)據(jù)報總長度: 58
標(biāo)識: 0x25e7(9703)
數(shù)據(jù)報是否要求分段: ?Not set
分段偏移量 : 0
生存時間: 128
上層協(xié)議名稱: UDP
報文頭校驗和: 0xf3f6
源地址: 219.222.170.14
目標(biāo)地址: 219.222.191.9
?
4、?分析第 197 個 IP 數(shù)據(jù)包的結(jié)構(gòu)和含義?
答:
IP協(xié)議版本號: IPv4
服務(wù)類型: 0x00(DSCP:CS0,ECN:Not-ECT)
IP報文頭長度: 20 bytes ,說明沒有使用可選字段
數(shù)據(jù)報總長度: 92
標(biāo)識: 0x2615(9749)
數(shù)據(jù)報是否要求分段: ?Not set
分段偏移量 : 0
生存時間: 12
上層協(xié)議名稱: ICMP
報文頭校驗和: 0xdc44
源地址: 219.222.170.14
目標(biāo)地址: 58.63.236.27
?