Wireshark实验——IP 协议
目錄IP轉(zhuǎn)發(fā)與路由選擇IP 分片IPv4 數(shù)據(jù)報(bào)traceroute捕獲執(zhí)行 traceroute 的數(shù)據(jù)包分析數(shù)據(jù)包分片參考資料
IP
IP 是整個(gè) TCP/IP 協(xié)議族的核心,也是構(gòu)成互聯(lián)網(wǎng)的基礎(chǔ)。IP 位于 TCP/IP 模型的網(wǎng)絡(luò)層(相當(dāng)于OSI模型的網(wǎng)絡(luò)層),對(duì)上可載送傳輸層各種協(xié)議的信息,例如 TCP、UDP 等;對(duì)下可將 IP 信息包放到鏈路層,通過(guò)以太網(wǎng)、令牌環(huán)網(wǎng)絡(luò)等各種技術(shù)來(lái)傳送。為了能適應(yīng)異構(gòu)網(wǎng)絡(luò),IP 強(qiáng)調(diào)適應(yīng)性、簡(jiǎn)潔性和可操作性,并在可靠性做了一定的犧牲。IP 不保證分組的交付時(shí)限和可靠性,所傳送分組有可能出現(xiàn)丟失、重復(fù)、延遲或亂序等問(wèn)題。——百度百科
下面來(lái)看一些基礎(chǔ)知識(shí):
轉(zhuǎn)發(fā)與路由選擇
轉(zhuǎn)發(fā)是指將分組從一個(gè)輸入鏈路接口轉(zhuǎn)移到適當(dāng)?shù)?strong>輸出鏈路接口的路由器的本地動(dòng)作,當(dāng)一個(gè)分組到達(dá)某路由器時(shí),路由器就必須把分組轉(zhuǎn)移到適當(dāng)?shù)妮敵鲦溌罚@是網(wǎng)絡(luò)層數(shù)據(jù)平面的唯一功能,同時(shí)也是最重要的。接下來(lái)看看什么是路由選擇,所謂路由選擇就是確定的分組從源到目的地所采用的端到端路徑的網(wǎng)絡(luò)范圍處理,也就是分組從發(fā)送方發(fā)出時(shí),網(wǎng)絡(luò)層需要確定分組采用的路由或路徑,這需要路由選擇算法的支撐。
IP 分片
在鏈路層中存在很多鏈路層協(xié)議,但是所有鏈路層協(xié)議能夠承載的網(wǎng)絡(luò)層分組并不是一樣的,有的協(xié)議只能承載大的數(shù)據(jù)報(bào),而有的只能承載小分組。一個(gè)鏈路幀能夠承載的最大數(shù)據(jù)量稱之為最大傳輸單元 MTU。由于路由器之間可能使用了不同的鏈路層協(xié)議,因此 MTU 將在數(shù)據(jù)報(bào)轉(zhuǎn)發(fā)的時(shí)候?qū)?IP 數(shù)據(jù)報(bào)產(chǎn)生限制。因此 IP 數(shù)據(jù)報(bào)可以進(jìn)行分片操作,即數(shù)據(jù)報(bào)拆分成多個(gè)小的 IP 數(shù)據(jù)報(bào),以此來(lái)適應(yīng)不同鏈路的 MTU。最終這些被分片的數(shù)據(jù)報(bào)將在接收端系統(tǒng)中重新組裝成完整版。
IPv4 數(shù)據(jù)報(bào)
接下來(lái)研究 IP 協(xié)議,重點(diǎn)關(guān)注 IP 數(shù)據(jù)報(bào)(IP datagram)。通過(guò)分析在執(zhí)行 traceroute 程序發(fā)送和接收的一系列 IP 數(shù)據(jù)報(bào)的過(guò)程來(lái)完成這個(gè)實(shí)驗(yàn),研究 IP datagram 中的各個(gè)字段 (fields)和 IP fragmentation 的方法。
traceroute
為了生成一系列 IP 數(shù)據(jù)報(bào),我們將使用 traceroute 程序向不同的目的地發(fā)送不同大小的數(shù)據(jù)報(bào)。traceroute 通過(guò)首先發(fā)送一個(gè)或多個(gè)帶有生存時(shí)間 (TTL) 字段設(shè)置為 1 的數(shù)據(jù)報(bào);然后發(fā)送一個(gè)或多個(gè)帶有 TTL 字段設(shè)置為 2 的數(shù)據(jù)報(bào)到同一個(gè)目的地;然后發(fā)送一個(gè)或多個(gè)帶有 TTL 字段設(shè)置為 3 的數(shù)據(jù)報(bào)到同一個(gè)目的地,以此類推,直到目的地真正收到此數(shù)據(jù)報(bào)為止。路由器必須將每個(gè)接收到的數(shù)據(jù)報(bào)中的 TTL 減 1,如果 TTL 達(dá)到 0,路由器會(huì)向來(lái)源主機(jī)發(fā)送 ICMP 消息。由于這種行為,TTL 為 1 的數(shù)據(jù)報(bào)將導(dǎo)致距發(fā)送方一次跳躍的路由器,將 ICMP TTL 超出的消息發(fā)送回發(fā)送方主機(jī);以TTL 為 2 發(fā)送的數(shù)據(jù)報(bào)將導(dǎo)致距離為兩次跳躍的路由器,將 ICMP 消息發(fā)送回發(fā)送方主機(jī)等等。以這種方式,執(zhí)行 traceroute 的主機(jī)可以通過(guò)查看包含ICMP TTL 超出消息的數(shù)據(jù)報(bào)中的來(lái)源 IP 地址來(lái)獲知其自身與目的地之間的路由器的身份。
不過(guò) Windows 的 tracert 程序不允許更改 tracert 程序發(fā)送的 ICMP echo 請(qǐng)求(ping)消息的大小。因此要使用 pingplotter 等其他程序來(lái)實(shí)驗(yàn)。
捕獲執(zhí)行 traceroute 的數(shù)據(jù)包
啟動(dòng) Wireshark 并開(kāi)始數(shù)據(jù)包捕獲:
2. 啟動(dòng) pingplotter 并在“要跟蹤的地址窗口”中輸入目標(biāo)目標(biāo)的名稱,設(shè)置合適的“要跟蹤的次數(shù)”,然后 Trace 。
3. 接下來(lái)發(fā)送一組長(zhǎng)度 2000 的數(shù)據(jù)報(bào)。
4. 接下來(lái)發(fā)送一組長(zhǎng)度 3500 的數(shù)據(jù)報(bào)。
5. 停止 Wireshark 數(shù)據(jù)包擷取
分析數(shù)據(jù)包
回答問(wèn)題:
選擇發(fā)送的第一個(gè) ICMP Echo Request 消息,然后在 packet details window 中展開(kāi)數(shù)據(jù)包的 Internet 協(xié)議部分。您的計(jì)算器的 IP 地址是多少?
192.168.67.249
2. 在 IP header 中,上層協(xié)議字段的值是多少?
上層協(xié)議字段的值為 1,查詢常見(jiàn)協(xié)議值:
3. IP header 有多少 bytes? IP datagram 的有效負(fù)載中有多少 bytes?
IP header 20 bytes,數(shù)據(jù)報(bào)一共有 56 bytes,因此有效負(fù)載中有 36 bytes。
4. 此 IP 數(shù)據(jù)報(bào)是否已被分段(fragmented)?
目測(cè)沒(méi)有,因?yàn)榈谝粋€(gè)包的 TTL 是 1,如果被分段就會(huì)出現(xiàn)多個(gè) TTL 為 1 的包,可是沒(méi)發(fā)現(xiàn),所以沒(méi)分段。
5. 查看第一個(gè) ICMP 及其所有后續(xù) ICMP 消息。
在您的計(jì)算器發(fā)送的這一系列 ICMP 消息中,IP 數(shù)據(jù)報(bào)中的哪些字段一直改變?
標(biāo)識(shí)符(Identification)、存活時(shí)間(Time To Live,TTL)、首部檢驗(yàn)和 (Header Checksum)一直在變。
6. 哪些字段保持不變?哪個(gè)字段必須保持不變?哪些字段必須更改?
必須保持不變:
版本(Version):占 4 bit,通信雙方使用的版本必須一致,對(duì)于 IPv4 字段的值是4;
首部長(zhǎng)度(Internet Header Length, IHL):占 4 bit,首部長(zhǎng)度說(shuō)明首部有多少 32 位字(4字節(jié))。由于IPv4首部可能包含數(shù)目不定的選項(xiàng),這個(gè)字段也用來(lái)確定數(shù)據(jù)的偏移量;
區(qū)分服務(wù)(Differentiated Services,DS):占 6 bit,只有在使用區(qū)分服務(wù)時(shí),這個(gè)字段才起作用,在一般的情況下都不使用這個(gè)字段;
保持不變:
顯式擁塞通告( Explicit Congestion Notification,ECN):允許在不丟棄報(bào)文的同時(shí)通知對(duì)方網(wǎng)絡(luò)擁塞的發(fā)生。
全長(zhǎng)(Total Length):占 16 位字段,定義了報(bào)文總長(zhǎng),包含首部和數(shù)據(jù),單位為字節(jié)。這個(gè)字段的最小值是 20(0 字節(jié)數(shù)據(jù)),最大值是65535。
標(biāo)識(shí)符(Identification):占16位,這個(gè)字段主要被用來(lái)唯一地標(biāo)識(shí)一個(gè)報(bào)文的所有分片,因?yàn)榉制灰欢ò葱虻竭_(dá),所以在重組時(shí)需要知道分片所屬的報(bào)文。
分片偏移 (Fragment Offset):這個(gè)13位字段指明了每個(gè)分片相對(duì)于原始報(bào)文開(kāi)頭的偏移量,以8字節(jié)作單位。
源地址:報(bào)文的發(fā)送端;
目的地址:報(bào)文的接收端;
選項(xiàng):附加的首部字段可能跟在目的地址之后;
必須更改:
標(biāo)識(shí)符(Identification):占 16 位,主要被用來(lái)唯一地標(biāo)識(shí)一個(gè)報(bào)文的所有分片;
存活時(shí)間(Time To Live,TTL):占 8 位,避免報(bào)文在互聯(lián)網(wǎng)中永遠(yuǎn)存在。實(shí)現(xiàn)為跳數(shù)計(jì)數(shù)器,報(bào)文經(jīng)過(guò)的每個(gè)路由器都將此字段減1,當(dāng)此字段等于0時(shí),報(bào)文不再向下一跳傳送并被丟棄,最大值是255。這是traceroute的核心原理;
首部檢驗(yàn)和 (Header Checksum):占 16 位,檢驗(yàn)和字段只對(duì)首部查錯(cuò),在每一跳,路由器都要重新計(jì)算出的首部檢驗(yàn)和并與此字段進(jìn)行比對(duì),如果不一致,此報(bào)文將會(huì)被丟棄;
數(shù)據(jù)
所謂的保持不變指的是這次 traceroute 不會(huì)改變的,但是下一次 traceroute 可能就會(huì)改了。
7. 描述您在 IP datagram 的 Identification field 中的值中所看到的?
主要被用來(lái)唯一地標(biāo)識(shí)一個(gè)報(bào)文的所有分片,因此對(duì)于不同的報(bào)文就需要改變這個(gè)值,使得報(bào)文可以唯一確定。
下一步查找第一跳路由器發(fā)送到您的計(jì)算器的一系列 ICMP TTL 超出的回復(fù)訊息。
8. ID 字段和 TTL 字段的值是多少?
ID 字段 13673,TTL 字段 64。
9. 對(duì)于第一跳路由器發(fā)送到您的計(jì)算器的所有 ICMP TTL 超出的回復(fù),這些值是否保持不變?為什么?
ID 字段改變,TTL 字段不改變。
分片
在將 pingplotter 中的數(shù)據(jù)包大小更改為 2000 后,查找計(jì)算機(jī)發(fā)送的第一個(gè) ICMP Echo Request 消息。該消息是否已碎片化為多個(gè) IP 數(shù)據(jù)報(bào)?
可以看出該消息被碎片化為 2 個(gè) IP 數(shù)據(jù)報(bào)。
11. IP 數(shù)據(jù)報(bào)的第一個(gè)片段。 IP 頭中的哪些信息表明數(shù)據(jù)報(bào)已碎片化? IP 頭中的哪些信息表明這是第一個(gè)片段還是后一個(gè)片段? 這個(gè) IP 數(shù)據(jù)報(bào)有多長(zhǎng)?
More fragments字段為 1 表示 Set,即該數(shù)據(jù)包被分片。通過(guò) ID 字段判斷這是第一個(gè)片段,分片長(zhǎng)度為 1480 bytes。
12. 找到碎片 IP 數(shù)據(jù)報(bào)的第二個(gè)片段。 IP 標(biāo)頭中的哪些信息表明這不是第一個(gè)數(shù)據(jù)報(bào)片段? 是否還有更多的片段?你是如何知道的?
Fragment Offset 字段表示偏移量,1480 bytes 的偏移量表示是上一個(gè)片段的后續(xù)。沒(méi)有更多片段了,因?yàn)?More fragments 字段為 Not set,表示后面沒(méi)有分片了。
13. 在第一個(gè)和第二個(gè)片段中,IP 標(biāo)頭中哪些字段發(fā)生了變化?
全長(zhǎng)(Total Length)、標(biāo)志 (Flags)和分片偏移 (Fragment Offset)。
接下來(lái)在將 pingplotter 中的數(shù)據(jù)包大小更改為 3500 后,找到計(jì)算機(jī)發(fā)送的第一個(gè) ICMP Echo Request 消息。
14. 從原始數(shù)據(jù)報(bào)創(chuàng)建了多少個(gè)片段?
創(chuàng)建了 3 個(gè)片段。
參考資料
《計(jì)算機(jī)網(wǎng)絡(luò) 自頂向下方法》 [美] James F.Kurose,Keith W.Ross 著,陳鳴 譯,機(jī)械工業(yè)出版社
IP (網(wǎng)絡(luò)之間互連的協(xié)議)
traceroute
IPv4 維基百科
總結(jié)
以上是生活随笔為你收集整理的Wireshark实验——IP 协议的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 在战略设计层面提出了域、子域、限界上下文
- 下一篇: SVN trunk(主线) branch