天天看點

《計算機網絡—自頂向下方法》 第四章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(我們不需要在此處選擇任何選項)。
    《計算機網絡—自頂向下方法》 第四章Wireshark實驗:IP
如果您使用的是 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

    《計算機網絡—自頂向下方法》 第四章Wireshark實驗:IP
  • 将包的大小設定為56Byte
    《計算機網絡—自頂向下方法》 第四章Wireshark實驗:IP
  • 點選new trace開始運作(當運作到Count=3時右擊抓取的資料手動pause)
    《計算機網絡—自頂向下方法》 第四章Wireshark實驗:IP
    《計算機網絡—自頂向下方法》 第四章Wireshark實驗:IP
  • 重複以上兩步 兩次,分别設定包的大小為2000Byte和3500Byte

2000Byte:

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

3500Byte:

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

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

如果您無法在實際的網絡連接配接上運作 Wireshark,則可以下載下傳在作者的某台Windows 電腦上執行上述驟時捕獲的資料包跟蹤檔案。當您探索下面的問題時,即使您已經捕獲了自己的跟蹤資料并使用它,如同您自己的跟蹤資料一般,您也可能會發現下載下傳此跟蹤資料對你的實驗很有幫助。

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

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

這是我自己的在實驗過程中(在windows下),抓取的包:

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

這是官方提供的包,下面的回答問題都是基于這個資料包:

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

> 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。
《計算機網絡—自頂向下方法》 第四章Wireshark實驗:IP

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

《計算機網絡—自頂向下方法》 第四章Wireshark實驗:IP
  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

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

方法2:

IP資料報的有效負載,這裡裝的就是ICMP資料報,是以看ICMP占多少位元組即可。

《計算機網絡—自頂向下方法》 第四章Wireshark實驗:IP
  1. 此 IP 資料報是否已被分段(fragmented)?解釋您如何确定資料報是否已被分段(fragmented)。

答:

這裡的IP資料報沒有被分段, 因為Fragment offset = 0,分段的偏移量為0,是以沒有分段,而且More fragments也是為Not set,表示沒有設定分段。

《計算機網絡—自頂向下方法》 第四章Wireshark實驗:IP
接下來,通過單擊 Source 列标題,根據 IP 源位址對跟蹤的資料包進行排序,一個小的向下箭頭應出現在 Source 旁邊,如果箭頭指向上方請再次單擊“Source column header”。選擇電腦發送的第一個 ICMP Echo Request 消息,然後展開“details ofselected packet header”視窗中的 Internet 協定部分。在“listing of captured packets”視窗中,您應該在第一個 ICMP 下面看到所有後續 ICMP 消息(可能還有電腦上運作的其他協定發送的其他散布資料包),使用向下箭頭浏覽電腦發送的 ICMP 消息。
《計算機網絡—自頂向下方法》 第四章Wireshark實驗:IP
  1. 在您的電腦發送的這一系列 ICMP 消息中,IP 資料報中的哪些字段 一直在改變?
答:發送的ICMP Echo(ping)request:辨別号Identification、校驗和Header checksum、存活時間TTL 不會改變
《計算機網絡—自頂向下方法》 第四章Wireshark實驗:IP
《計算機網絡—自頂向下方法》 第四章Wireshark實驗:IP
《計算機網絡—自頂向下方法》 第四章Wireshark實驗:IP
  1. 哪些字段保持不變? 哪個字段必須保持不變? 哪些字段必須更改? 為什麼?
答:
《計算機網絡—自頂向下方法》 第四章Wireshark實驗:IP
  1. 描述您在 IP datagram 的 Identification field 中的值中所看到的下一步(資料包仍按來源位址排序)查找最近的(第一跳)路由器發送到您的電腦的一系列 ICMP TTL 逾時的回複訊息。
答:每個IP資料報的辨別号是不同的,用于區分每個IP資料報和處理IP分片。
《計算機網絡—自頂向下方法》 第四章Wireshark實驗:IP
《計算機網絡—自頂向下方法》 第四章Wireshark實驗:IP
  1. ID 字段和 TTL 字段的值是多少?

答:這道題問的是 第一個傳回逾時路由傳回給我們的IP報資訊,因為隻有IP才有TTL生存時間。

ID字段:0xa60b

TTL字段:244

《計算機網絡—自頂向下方法》 第四章Wireshark實驗:IP
  1. 對于最近(第一跳)路由器發送到您的電腦的所有 ICMP TTL 超出的回複,哪些值是否保持不變?為什麼?
答:【沒看懂】
單擊“時間”列,再次按時間對資料包清單進行排序。
《計算機網絡—自頂向下方法》 第四章Wireshark實驗:IP
  1. 在将 pingplotter 中的資料包大小更改為 2000 後,查找計算機發送的第一個ICMP Echo Request 消息。該消息是否已碎片化為多個 IP 資料報?(如果計算機具有以太網接口,則資料包大小為2000 會導緻碎片。)

答:

可以很明顯的看到原本的IP資料報已經被分段為三個部分,#363、#364、#365

《計算機網絡—自頂向下方法》 第四章Wireshark實驗:IP
  1. 列印出碎片 IP 資料報的第一個片段。 IP 頭中的哪些資訊表明資料報已碎片化? IP 頭中的哪些資訊表明這是第一個片段還是後一個片段? 這個 IP 資料報有多長?

答:

如下圖就是IP資料報的第一個片段,其中的Flags已經表明了資料報已被分段,可以根據Flags下面的偏移量來判斷是第一個資料報片段,這個IP資料報的長度為1500位元組(20位元組的報頭+1480位元組的資料段)

《計算機網絡—自頂向下方法》 第四章Wireshark實驗:IP
《計算機網絡—自頂向下方法》 第四章Wireshark實驗:IP
  1. 列印出碎片 IP 資料報的第二個片段。 IP 标頭中的哪些資訊表明這不是第一個資料報片段? 是否還有更多的片段? 你是如何知道的?
答:同上面一個可以看IP報頭中的Flags字段中的展開項中的偏移量來确定這是第二個資料段。根據#365片段中可以看出363~365這三個片段屬于一個一個資料報的分段。
《計算機網絡—自頂向下方法》 第四章Wireshark實驗:IP
《計算機網絡—自頂向下方法》 第四章Wireshark實驗:IP
  1. 在第一個和第二個片段中,IP 标頭中哪些字段發生了變化?
答:Flags字段和Checksum校驗和字段發生了變化。
《計算機網絡—自頂向下方法》 第四章Wireshark實驗:IP
《計算機網絡—自頂向下方法》 第四章Wireshark實驗:IP

14.從原始資料報建立了多少個片段?

答:三個片段
《計算機網絡—自頂向下方法》 第四章Wireshark實驗:IP
  1. 片段中 IP 标頭中的哪些字段發生了變化?
答:總長度Total Length、标志Flags、首部校驗和Header checksum

參考資料:

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

繼續閱讀