《計算機網絡—自頂向下方法》 第四章Wireshark實驗:IP

實驗描述:

在本實驗中,我們將研究 IP 協議,重點關注 IP 數據報(IP datagram)。我們將通過分析在執行 traceroute 程序發送和接收的一系列 IP 數據報的過程來完成這個實驗(traceroute 程序本身則是在 Wireshark ICMP 實驗中進行了更詳細的探討),我們將研究 IP datagram 中的各個字段(fields),並詳細研究 IP fragmentation 的方法。


實驗過程:

捕獲執行 traceroute 的數據包
爲了生成本實驗的一系列 IP 數據報,我們將使用 traceroute 程序向不同的目的地 X 發送不同大小的數據報。回想一下,traceroute 通過
首先發送一個或多個帶有生存時間(TTL: Time-to-Live)字段設置爲 1 的數據報;
然後發送一個或多個帶有生存時間(TTL: Time-to-Live)字段設置爲 2 的數據報到同一個目的地;
然後發送一個或多個帶有生存時間(TTL: Time-to-Live)字段設置爲 3 的數據報到同一個目的地,
以此類推,直到目的地真正收到此數據報爲止。

回想一下,路由器必須將每個接收到的數據報中的 TTL 減 1。如果 TTL 達到 0,路由器會向來源主機發送 ICMP 消息。由於這種行爲,
TTL 爲 1 的數據報(由執行 traceroute 的主機發送)將導致距發送方一次跳躍的路由器,將 ICMP TTL 超出的消息發送回發送方主機;
以TTL 爲 2 發送的數據報將導致距離爲兩次跳躍的路由器,將 ICMP 消息發送回發送方主機;
以 TTL 爲 3 發送的數據報將導致距離爲兩次跳躍的路由器,將 ICMP 消息發送回發送方主機,等等。

以這種方式,執行 traceroute 的主機可通過查看包含ICMP TTL 超出消息的數據報中的來源 IP 地址來獲知其自身與目的地 X 之間的路由器的身份。

我們想要運行 traceroute 並讓它發送各種長度的數據報

Windows 操作系統:Windows 提供的 tracert 程序(曾被使用於我們的 ICMPWireshark 實驗中)不允許更改 tracert 程序發送的 ICMP echo 請求(ping)消息的大小。因此,一個更好的 Windows traceroute 程序是 pingplotter,可在 http://www.pingplotter.com 上以免費版和共享軟件版本獲得
下載並安裝pingplotter,並通過對您喜歡的站點執行些 traceroute 來測試它。通過選擇菜單項 Edit-> Options-> Packet Options 然後填寫 Packet Size 字段,可以在pingplotter 中顯式設置 ICMP echo 請求消息的大小。默認數據包大小爲 56 個字節。一旦 pingplotter 發送了一系列具有遞增的 TTL 值的數據包,它會在等待 Trace Interval 時間後再次以 TTL 爲 1 重新啓動發送進程。同時,我們可以在 pingplotter 中明確設置 Trace Interval 的值和間隔數。(備註:PinPlotter 5 需要使用到 Standar 版或是 Professional 版才能夠自定義 packet 參數,有 14 天的試用版可以使用)

具體的步驟:
  • 啓動 Wireshark 並開始數據包捕獲(Capture-> Start),然後在 Wireshark 數據包捕獲選項屏幕上按 OK(我們不需要在此處選擇任何選項)。
    在這裏插入圖片描述

如果您使用的是 Windows 平臺,請啓動 pingplotter 並在“要跟蹤的地址窗口(Address to Trace Window)”中輸入目標的名稱。在“要跟蹤的次數(“# of times to Trace)”字段中輸入 3,這樣您就不會收集太多數據。選擇菜單項編輯 - >高級選項 - >數據包選項(Edit->Advanced Options->Packet Options),然後在數據包大小字段中輸入值 56,然後按確定。然後按 Trace 按鈕。你應該看到一個看起來像這樣的 pingplotter 窗口:(備註:新版 PingPlotter5 中沒有跟蹤次數的設定,可以在 count 到達 3 的時候按下暫停鍵,停止收集數據包)

我先給個下載鏈接:http://xiazai.zol.com.cn/detail/28/277370.shtml#hotArticle

  • 輸入要跟蹤的地址:www.gotokeep.com
    在這裏插入圖片描述

  • 將包的大小設置爲56Byte
    在這裏插入圖片描述

  • 點擊new trace開始運行(當運行到Count=3時右擊抓取的數據手動pause
    在這裏插入圖片描述
    在這裏插入圖片描述

  • 重複以上兩步 兩次,分別設置包的大小爲2000Byte和3500Byte

2000Byte:
在這裏插入圖片描述
3500Byte:
在這裏插入圖片描述

上面的過程其實就是:開啓WireShark,然後進行三次以不同的包的大小(56、2000、3500 Bytes),來跟蹤同一個網站同時抓取其中的數據包來進行IP協議的分析

如果您無法在實際的網絡連接上運行 Wireshark,則可以下載在作者的某臺Windows 計算器上執行上述驟時捕獲的數據包跟蹤文件。當您探索下面的問題時,即使您已經捕獲了自己的跟蹤數據並使用它,如同您自己的跟蹤數據一般,您也可能會發現下載此跟蹤數據對你的實驗很有幫助。

所以說我自己的數據沒有抓取好,步驟有點搞亂了,所以我也用的官方提供的數據包。

在您的跟蹤數據包中,您應該能夠看到**計算器發送的一系列的 ICMP Echo 請求訊息(在 Windows 下)**或 UDP 區段(在 Unix 下)以及由中間路由器發送到計算器的 ICMP TTL 超出的訊息。在下面的問題中,我們假設您使用的是 Windows 機器;對於 Unix 機器的相應問題應該是清楚的。

這是我自己的在實驗過程中(在windows下),抓取的包:
在這裏插入圖片描述

這是官方提供的包,下面的回答問題都是基於這個數據包
在這裏插入圖片描述> PingPlotter是通過ICMP協議發送不同TLL值的ping包,來計算和獲取訪問網站的所經過路由。

TTL是存活時間,每經過一次路由器,TLL-1,當其減爲0的時候,路由會丟帶這個包並且發出TLL超時給原始的發出者,防止死包耗盡網絡資源。然後每次PingPlotter都會發送起始從TLL=1的數據包,然後逐漸增大TTL,用來獲取所訪問網站經過的路由。但是有些路由會因爲安全不迴應這些包,所以還會看到有些請求沒有回覆,而TLL會持續增加獲取下一條路由的回覆。


回答問題:

  1. 選擇計算機發送的第一個 ICMP Echo Request 消息,然後在 packet details window 中展開數據包的 Internet 協議部分。您的計算機的 IP 地址是多少

答:IP地址:192.168.1.102

  1. 在 IP header 中,上層協議字段的值是多少?

答:上層協議就是ICMP(如果是Unix下做的實驗就是UDP),值爲1。
在這裏插入圖片描述

IP中封裝的ICMP本身就是值爲1的。
>

  1. IP header 有多少 bytes? IP datagram 的有效負載中有多少 bytes? 說明如何確定 payload bytes 的數。

答:Header Length:20 bytes IP數據報總長度 = IP頭長度 + IP數據長度(就是有效負載)
IP datagram payload bytes:64bytes
方法1:
IP datagram payload bytes = Total Length - Header Length = 84 - 20 = 64
在這裏插入圖片描述在這裏插入圖片描述

方法2:
IP數據報的有效負載,這裏裝的就是ICMP數據報,所以看ICMP佔多少字節即可。
在這裏插入圖片描述

  1. 此 IP 數據報是否已被分段(fragmented)?解釋您如何確定數據報是否已被分段(fragmented)。

答:
這裏的IP數據報沒有被分段, 因爲Fragment offset = 0,分段的偏移量爲0,所以沒有分段,而且More fragments也是爲Not set,表示沒有設置分段。
在這裏插入圖片描述


接下來,通過單擊 Source 列標題,根據 IP 源地址對跟蹤的數據包進行排序,一個小的向下箭頭應出現在 Source 旁邊,如果箭頭指向上方請再次單擊“Source column header”。選擇計算器發送的第一個 ICMP Echo Request 消息,然後展開“details ofselected packet header”窗口中的 Internet 協議部分。在“listing of captured packets”窗口中,您應該在第一個 ICMP 下面看到所有後續 ICMP 消息(可能還有計算器上運行的其他協議發送的其他散佈數據包),使用向下箭頭瀏覽計算器發送的 ICMP 消息。
>

  1. 在您的計算器發送的這一系列 ICMP 消息中,IP 數據報中的哪些字段 一直在改變?

答:發送的ICMP Echo(ping)request:標識號Identification、校驗和Header checksum、存活時間TTL 不會改變
在這裏插入圖片描述在這裏插入圖片描述
在這裏插入圖片描述

  1. 哪些字段保持不變? 哪個字段必須保持不變? 哪些字段必須更改? 爲什麼?

答:在這裏插入圖片描述

  1. 描述您在 IP datagram 的 Identification field 中的值中所看到的下一步(數據包仍按來源地址排序)查找最近的(第一跳)路由器發送到您的計算器的一系列 ICMP TTL 超時的回覆訊息。

答:每個IP數據報的標識號是不同的,用於區分每個IP數據報和處理IP分片。
在這裏插入圖片描述
在這裏插入圖片描述

  1. ID 字段和 TTL 字段的值是多少?

答:這道題問的是 第一個返回超時路由返回給我們的IP報信息,因爲只有IP纔有TTL生存時間。
ID字段:0xa60b
TTL字段:244

  1. 對於最近(第一跳)路由器發送到您的計算器的所有 ICMP TTL 超出的回覆,哪些值是否保持不變?爲什麼?

答:【沒看懂】

單擊“時間”列,再次按時間對數據包列表進行排序。
在這裏插入圖片描述

  1. 在將 pingplotter 中的數據包大小更改爲 2000 後,查找計算機發送的第一個ICMP Echo Request 消息。該消息是否已碎片化爲多個 IP 數據報?(如果計算機具有以太網接口,則數據包大小爲2000 會導致碎片。)

答:
可以很明顯的看到原本的IP數據報已經被分段爲三個部分,#363、#364、#365在這裏插入圖片描述

  1. 打印出碎片 IP 數據報的第一個片段。 IP 頭中的哪些信息表明數據報已碎片化? IP 頭中的哪些信息表明這是第一個片段還是後一個片段? 這個 IP 數據報有多長?

答:
如下圖就是IP數據報的第一個片段,其中的Flags已經表明了數據報已被分段,可以根據Flags下面的偏移量來判斷是第一個數據報片段,這個IP數據報的長度爲1500字節(20字節的報頭+1480字節的數據段)
在這裏插入圖片描述
在這裏插入圖片描述

  1. 打印出碎片 IP 數據報的第二個片段。 IP 標頭中的哪些信息表明這不是第一個數據報片段? 是否還有更多的片段? 你是如何知道的?

答:同上面一個可以看IP報頭中的Flags字段中的展開項中的偏移量來確定這是第二個數據段。根據#365片段中可以看出363~365這三個片段屬於一個一個數據報的分段。
在這裏插入圖片描述
在這裏插入圖片描述

  1. 在第一個和第二個片段中,IP 標頭中哪些字段發生了變化?

答:Flags字段和Checksum校驗和字段發生了變化。
在這裏插入圖片描述
在這裏插入圖片描述

14.從原始數據報創建了多少個片段?

答:三個片段
在這裏插入圖片描述

  1. 片段中 IP 標頭中的哪些字段發生了變化?

答:總長度Total Length、標誌Flags、首部校驗和Header checksum


參考資料:

https://github.com/moranzcw/Computer-Networking-A-Top-Down-Approach-NOTES

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章