計算機網路實驗報告:【Wirshark 實驗】

逸丶羲發表於2020-12-26

二、 Wireshark 實驗
本部分按照資料鏈路層、網路層、傳輸層以及應用層進行分類,共有 10 個實驗。需要使用協議分析軟體 Wireshark 進行,請根據簡介部分自行下載安裝。

準備
請自行查詢或使用如下參考資料,瞭解 Wireshark 的基本使用:
1.選擇對哪塊網路卡進行資料包捕獲
2.開始/停止捕獲
3.瞭解 Wireshark 主要視窗區域
4.設定資料包的過濾
5.跟蹤資料流

? 參考
1.官方文件 https://www.wireshark.org/docs/wsug_html/
Wireshark抓包新手使用教程https://www.cnblogs.com/linyfeng/p/9496126.html
Troubleshooting with Wireshark http://file.allitebooks.com/20160907/Troubleshooting%20with%20Wireshark.pdf
The Official Wireshark Certified Network Analyst Study Guide http://file.allitebooks.com/20150724/Wireshark%20Network%20Analysis-%20The%20Official%20Wireshark%20Certified%20Network%20Analyst%20Study%20Guide,%202nd%20Edition.pdf
Wireshark Network Security http://file.allitebooks.com/20190315/Wireshark%20Network%20Security.pdf

資料鏈路層
實作一 熟悉 Ethernet 幀結構
使用 Wireshark 任意進行抓包,熟悉 Ethernet 幀的結構,如:目的 MAC、源 MAC、型別、欄位等。
在這裡插入圖片描述

✎ 問題
你會發現 Wireshark 展現給我們的幀中沒有校驗欄位,請了解一下原因。
答: Wireshark 抓取的包會自動丟棄掉校驗欄位。

實作二 瞭解子網內/外通訊時的 MAC 地址
ping 你旁邊的計算機(同一子網),同時用 Wireshark 抓這些包(可使用 icmp 關鍵字進行過濾以利於分析),記錄一下發出幀的目的 MAC 地址以及返回幀的源 MAC 地址是多少?這個 MAC 地址是誰的?
在這裡插入圖片描述
MAC地址是旁邊計算機的

然後 ping qige.io (或者本子網外的主機都可以),同時用 Wireshark 抓這些包(可 icmp 過濾),記錄一下發出幀的目的 MAC 地址以及返回幀的源 MAC 地址是多少?這個 MAC 地址是誰的?
在這裡插入圖片描述
這個 mac 地址是子網閘道器的實體地址。

再次 ping www.cqjtu.edu.cn (或者本子網外的主機都可以),同時用 Wireshark 抓這些包(可 icmp 過濾),記錄一下發出幀的目的 MAC 地址以及返回幀的源 MAC 地址又是多少?這個 MAC 地址又是誰的?
在這裡插入圖片描述
在這裡插入圖片描述

✎ 問題
通過以上的實驗,你會發現:
訪問本子網的計算機時,目的 MAC 就是該主機的
訪問非本子網的計算機時,目的 MAC 是閘道器的
請問原因是什麼?
答:原因是訪問外網的時候,都是通過 mac 地址送到閘道器處,然後出了閘道器再通過 IP 地址進行查詢;接收到非子網的計算機返回的資料都是先到閘道器,閘道器再根據目的 mac 送到本機。

實作三 掌握 ARP 解析過程
為防止干擾,先使用 arp -d * 命令清空 arp 快取
在這裡插入圖片描述

ping 你旁邊的計算機(同一子網),同時用 Wireshark 抓這些包(可 arp 過濾),檢視 ARP 請求的格式以及請求的內容,注意觀察該請求的目的 MAC 地址是什麼。再檢視一下該請求的回應,注意觀察該回應的源 MAC 和目的 MAC 地址是什麼。
在這裡插入圖片描述

再次使用 arp -d * 命令清空 arp 快取
然後 ping qige.io (或者本子網外的主機都可以),同時用 Wireshark 抓這些包(可 arp 過濾)。檢視這次 ARP 請求的是什麼,注意觀察該請求是誰在回應。
在這裡插入圖片描述

✎ 問題
通過以上的實驗,你應該會發現,
ARP 請求都是使用廣播方式傳送的
如果訪問的是本子網的 IP,那麼 ARP 解析將直接得到該 IP 對應的 MAC;如果訪問的非本子網的 IP, 那麼 ARP 解析將得到閘道器的 MAC。
請問為什麼?
答:如果訪問的是本子網的 IP ,如果 ARP 快取中沒有該 IP——mac 繫結地址,那麼就是傳送一個廣播,在子網中找尋這個 IP ,然後將這個 IP 與對應的 mac 進行繫結;如果訪問的是非子網的 IP ,那麼 APR 將會解析得到閘道器的 mac,因為傳送資料到外網都是通過閘道器這個埠,所以得到的是閘道器的 mac。

網路層
實作一 熟悉 IP 包結構
使用 Wireshark 任意進行抓包(可用 ip 過濾),熟悉 IP 包的結構,如:版本、頭部長度、總長度、TTL、協議型別等欄位。
在這裡插入圖片描述

✎ 問題
為提高效率,我們應該讓 IP 的頭部儘可能的精簡。但在如此珍貴的 IP 頭部你會發現既有頭部長度欄位,也有總長度欄位。請問為什麼?
答:有頭部長度欄位和總長度欄位是為了方便上層將 IP 包中的資料提取出來,如果只有其中一個長度欄位,顯然上層協議不知道從哪到哪是資料。

實作二 IP 包的分段與重組
根據規定,一個 IP 包最大可以有 64K 位元組。但由於 Ethernet 幀的限制,當 IP 包的資料超過 1500 位元組時就會被髮送方的資料鏈路層分段,然後在接收方的網路層重組。

預設的,ping 命令只會向對方傳送 32 個位元組的資料。我們可以使用 ping 202.202.240.16 -l 2000 命令指定要傳送的資料長度。此時使用 Wireshark 抓包(用 ip.addr == 202.202.240.16 進行過濾),瞭解 IP 包如何進行分段,如:分段標誌、偏移量以及每個包的大小等
在這裡插入圖片描述

✎ 問題
分段與重組是一個耗費資源的操作,特別是當分段由傳送路徑上的節點即路由器來完成的時候,所以 IPv6 已經不允許分段了。那麼 IPv6 中,如果路由器遇到了一個大資料包該怎麼辦?
答:會直接丟棄,並返回主機傳送失敗的資訊。

實作三 考察 TTL 事件
在 IP 包頭中有一個 TTL 欄位用來限定該包可以在 Internet上傳輸多少跳(hops),一般該值設定為 64、128等。

在驗證性實驗部分我們使用了 tracert 命令進行路由追蹤。其原理是主動設定 IP 包的 TTL 值,從 1 開始逐漸增加,直至到達最終目的主機。

請使用 tracert www.baidu.com 命令進行追蹤,此時使用 Wireshark 抓包(用 icmp 過濾),分析每個傳送包的 TTL 是如何進行改變的,從而理解路由追蹤原理。

✎ 問題

在 IPv4 中,TTL 雖然定義為生命期即 Time To Live,但現實中我們都以跳數/節點數進行設定。如果你收到一個包,其 TTL 的值為 50,那麼可以推斷這個包從源點到你之間有多少跳?

傳輸層
實作一 熟悉 TCP 和 UDP 段結構
用 Wireshark 任意抓包(可用 tcp 過濾),熟悉 TCP 段的結構,如:源埠、目的埠、序列號、確認號、各種標誌位等欄位。
在這裡插入圖片描述

用 Wireshark 任意抓包(可用 udp 過濾),熟悉 UDP 段的結構,如:源埠、目的埠、長度等。
在這裡插入圖片描述

✎ 問題
由上大家可以看到 UDP 的頭部比 TCP 簡單得多,但兩者都有源和目的埠號。請問源和目的埠號用來幹什麼?
答:源埠和目的埠是用來確認某一個應用程式,IP 只到達子網閘道器,MAC 只到達子網下的指定主機,而埠號是達到主機上的某個應用程式。

實作二 分析 TCP 建立和釋放連線
1.開啟瀏覽器訪問 qige.io 網站,用 Wireshark 抓包(可用 tcp 過濾後再使用加上 Follow TCP Stream),不要立即停止 Wireshark 捕獲,待頁面顯示完畢後再多等一段時間使得能夠捕獲釋放連線的包。

2.請在你捕獲的包中找到三次握手建立連線的包,並說明為何它們是用於建立連線的,有什麼特徵。
在這裡插入圖片描述

它們的長度都很短。通過發出 SYN 訊號請求連線,然後伺服器端回應 ACK 確認收到請求,然後主機再發出一個確認訊號。第一次握手時除了 SYN = 1 外其餘的標誌都為 0 ,第二次握手時除了 SYN = 1 且 ACK = 1 外其餘的標誌都為 0 ,第三次握手時除了 ACK = 1 外其餘的標誌都為 0 。

3.請在你捕獲的包中找到四次揮手釋放連線的包,並說明為何它們是用於釋放連線的,有什麼特徵。
它們的長度都很短。這裡四次揮手為什麼只抓到了三個包呢?原始是將第二次、第三次揮手合併成了一個包,所以只看到了三個包。首先發出 FIN 訊號請求斷開,然後伺服器端回應一個 ACK 確認訊號,然後又發出一個 FIN 訊號(這裡將 ACK 和 FIN 合併成立一個包),然後主機回應一個 ACK 確認訊號,即可斷開連

✎ 問題一
去掉 Follow TCP Stream,即不跟蹤一個 TCP 流,你可能會看到訪問 qige.io 時我們建立的連線有多個。請思考為什麼會有多個連線?作用是什麼?
答:有多個連線相當於開闢了多個傳輸通道。作用是加快傳輸資料的速度。

✎ 問題二
我們上面提到了釋放連線需要四次揮手,有時你可能會抓到只有三次揮手。原因是什麼?
答:原因是將第二次、第三次揮手發出的包合併為了一個。

應用層
應用層的協議非常的多,我們只對 DNS 和 HTTP 進行相關的分析。

實作一 瞭解 DNS 解析
先使用 ipconfig /flushdns 命令清除快取,再使用 nslookup qige.io 命令進行解析,同時用 Wireshark 任意抓包(可用 dns 過濾)。
在這裡插入圖片描述

你應該可以看到當前計算機使用 UDP,向預設的 DNS 伺服器的 53 號埠發出了查詢請求,而 DNS 伺服器的 53 號埠返回了結果。
可瞭解一下 DNS 查詢和應答的相關欄位的含義

✎ 問題
你可能會發現對同一個站點,我們發出的 DNS 解析請求不止一個,思考一下是什麼原因?
答:答:DNS不止一個的原因可能是DNS解析過程是先從瀏覽器的DNS快取中檢查是否有這個網址的對映關係,如果有,就返回IP,完成域名解析;如果沒有,作業系統會先檢查自己本地的hosts檔案是否有這個網址的對映關係,如果有,就返回IP,完成域名解析;如果還沒有,電腦就要向本地DNS伺服器發起請求查詢域名;本地DNS伺服器拿到請求後,先檢查一下自己的快取中有沒有這個地址,有的話直接返回;沒有的話本地DNS伺服器會從配置檔案中讀取根DNS伺服器的地址,然後向其中一臺發起請求;直到獲得對應的IP為止。

實作二 瞭解 HTTP 的請求和應答
開啟瀏覽器訪問 qige.io 網站,用 Wireshark 抓包(可用http 過濾再加上 Follow TCP Stream),不要立即停止 Wireshark 捕獲,待頁面顯示完畢後再多等一段時間以將釋放連線的包捕獲。
在這裡插入圖片描述

請在你捕獲的包中找到 HTTP 請求包,檢視請求使用的什麼命令,如:GET, POST。並仔細瞭解請求的頭部有哪些欄位及其意義。
在這裡插入圖片描述

請在你捕獲的包中找到 HTTP 應答包,檢視應答的程式碼是什麼,如:200, 304, 404 等。並仔細瞭解應答的頭部有哪些欄位及其意義。
在這裡插入圖片描述

✍ 建議
HTTP 請求和應答的頭部欄位值得大家認真的學習,因為基於 Web 的程式設計中我們將會大量使用。如:將使用者認證的令牌資訊放到頭部,或者把 cookie 放到頭部等。

✎ 問題
重新整理一次 qige.io 網站的頁面同時進行抓包,你會發現不少的 304 程式碼的應答,這是所請求的物件沒有更改的意思,讓瀏覽器使用本地快取的內容即可。那麼伺服器為什麼會回答 304 應答而不是常見的 200 應答?
答:如果是用瀏覽器重新整理的,那麼瀏覽器不會去判斷 max-age 了,直接去伺服器拿,如果伺服器判斷資源沒變過,則會返回304,讓你自己讀本地快取即可,而返回200是指成功從伺服器拿到了資源,意義不一樣的。

相關文章