關於計算機網路的 Wireshark 實驗
關於計算機網路的 Wireshark 實驗
資料鏈路層
實作一 熟悉 Ethernet 幀結構
使用 Wireshark 任意進行抓包,熟悉 Ethernet 幀的結構,如:目的 MAC、源 MAC、型別、欄位等。
✎ 問題
你會發現 Wireshark 展現給我們的幀中沒有校驗欄位,請了解一下原因。
Wireshark 抓包前,在物理層網路卡已經去掉了一些之前幾層加的東西,比如前導同步碼,FCS等等,之後利用校驗碼CRC校驗,正確時才會進行下一步操作,這時才開始進行抓包,因此,抓包軟體抓到的是去掉前導同步碼、FCS之外的資料,沒有校驗欄位。
實作二 瞭解子網內/外通訊時的 MAC 地址
ping
你旁邊的計算機(同一子網),同時用 Wireshark 抓這些包(可使用 icmp 關鍵字進行過濾以利於分析),記錄一下發出幀的目的 MAC 地址以及返回幀的源 MAC 地址是多少?這個 MAC 地址是誰的?- 然後
ping qige.io
(或者本子網外的主機都可以),同時用 Wireshark 抓這些包(可 icmp 過濾),記錄一下發出幀的目的 MAC 地址以及返回幀的源 MAC 地址是多少?這個 MAC 地址是誰的?- 再次
ping www.cqjtu.edu.cn
(或者本子網外的主機都可以),同時用 Wireshark 抓這些包(可 icmp 過濾),記錄一下發出幀的目的 MAC 地址以及返回幀的源 MAC 地址又是多少?這個 MAC 地址又是誰的?
-
ping 192.168.1.103
Wireshark 抓包結果
發出幀的目的 MAC 地址:54:b2:03:09:3a:11
返回幀的源 MAC 地址:54:b2:03:09:3a:11
這兩個地址都是本機ping
的主機的 MAC 地址 -
ping qige.io
Wireshark 抓包結果
發出幀的目的 MAC 地址和返回幀的源 MAC 地址都不是本機。 -
ping www.cqjtu.edu.cn
驚喜吧!我連的校園網卻ping
不通校園網✎ 問題
通過以上的實驗,你會發現:- 訪問本子網的計算機時,目的 MAC 就是該主機的
- 訪問非本子網的計算機時,目的 MAC 是閘道器的
請問原因是什麼?
因為無論是訪問子網內的IP還是訪問子網外的IP都需要經過校園網的主機。
實作三 掌握 ARP 解析過程
- 為防止干擾,先使用
arp -d *
命令清空 arp 快取ping
你旁邊的計算機(同一子網),同時用 Wireshark 抓這些包(可 arp 過濾),檢視 ARP 請求的格式以及請求的內容,注意觀察該請求的目的 MAC 地址是什麼。再檢視一下該請求的回應,注意觀察該回應的源 MAC 和目的 MAC 地址是什麼。- 再次使用
arp -d *
命令清空 arp 快取- 然後
ping qige.io
(或者本子網外的主機都可以),同時用 Wireshark 抓這些包(可 arp 過濾)。檢視這次 ARP 請求的是什麼,注意觀察該請求是誰在回應。
-
用管理員開啟 cmd 再執行命令
-
ping 192.168.1.103
Wireshark 抓包結果
目的 MAC 地址:60:ee:5c:4d:ed:ee
源 MAC 地址:94:b8:6d:e3:ee:95✎ 問題
通過以上的實驗,你應該會發現,- ARP 請求都是使用廣播方式傳送的
- 如果訪問的是本子網的 IP,那麼 ARP 解析將直接得到該 IP 對應的 MAC;如果訪問的非本子網的 IP, 那麼 ARP 解析將得到閘道器的 MAC。
請問為什麼?
對於沒有配置預設閘道器的計算機要和其他網路中的計算機實現通訊,閘道器收到源計算機的ARP請求會使用自己的MAC地址與目標計算機的IP地址對源計算機進行應答,訪問非子網IP時是通過路由器訪問的,路由器再把發出去,目標IP收到請求後,再通過路由器埠IP返回去,那麼ARP解析將會得到閘道器的MAC。
網路層
實作一 熟悉 IP 包結構
使用 Wireshark 任意進行抓包(可用 ip 過濾),熟悉 IP 包的結構,如:版本、頭部長度、總長度、TTL、協議型別等欄位。
✎ 問題
為提高效率,我們應該讓 IP 的頭部儘可能的精簡。但在如此珍貴的 IP 頭部你會發現既有頭部長度欄位,也有總長度欄位。請問為什麼?
便於傳輸時的識別IP總長度,節省時間。當長度超過1500B時就會被返回鏈路層進行分段,重組時,會根據IP包的頭部進行重組得到原始資料。
實作二 IP 包的分段與重組
根據規定,一個 IP 包最大可以有 64K 位元組。但由於 Ethernet 幀的限制,當 IP 包的資料超過 1500 位元組時就會被髮送方的資料鏈路層分段,然後在接收方的網路層重組。
預設的,ping
命令只會向對方傳送 32 個位元組的資料。我們可以使用ping 202.202.240.16 -l 2000
命令指定要傳送的資料長度。此時使用 Wireshark 抓包(用ip.addr == 202.202.240.16
進行過濾),瞭解 IP 包如何進行分段,如:分段標誌、偏移量以及每個包的大小等
這裡將包分成兩片,MF(more fragment)=1
表示後面“還有分片”的資料包。MF=0
表 示這已是若干資料包分片中的最後一個。包的大小可以通過 total length
可以看出,偏移量為 fragment offset
。
✎ 問題
分段與重組是一個耗費資源的操作,特別是當分段由傳送路徑上的節點即路由器來完成的時候,所以 IPv6 已經不允許分段了。那麼 IPv6 中,如果路由器遇到了一個大資料包該怎麼辦?
路由器只需丟棄該資料包,並向傳送方發回一個“分組太大”的ICMP差錯報文即可。
實作三 考察 TTL 事件
在 IP 包頭中有一個 TTL 欄位用來限定該包可以在 Internet上傳輸多少跳(hops),一般該值設定為 64、128等。
在驗證性實驗部分我們使用了tracert
命令進行路由追蹤。其原理是主動設定 IP 包的 TTL 值,從 1 開始逐漸增加,直至到達最終目的主機。
請使用tracert www.baidu.com
命令進行追蹤,此時使用 Wireshark 抓包(用icmp
過濾),分析每個傳送包的 TTL 是如何進行改變的,從而理解路由追蹤原理。
追蹤一個地址,TTL 減一
✎ 問題
在 IPv4 中,TTL 雖然定義為生命期即 Time To Live,但現實中我們都以跳數/節點數進行設定。如果你收到一個包,其 TTL 的值為 50,那麼可以推斷這個包從源點到你之間有多少跳?
14跳。因為TTL的原始值是離得最近的2的整次冪,為64。
傳輸層
實作一 熟悉 TCP 和 UDP 段結構
- 用 Wireshark 任意抓包(可用 tcp 過濾),熟悉 TCP 段的結構,如:源埠、目的埠、序列號、確認號、各種標誌位等欄位。
- 用 Wireshark 任意抓包(可用 udp 過濾),熟悉 UDP 段的結構,如:源埠、目的埠、長度等。
-
TCP 抓包結果
-
UDP 抓包結果
✎ 問題
由上大家可以看到 UDP 的頭部比 TCP 簡單得多,但兩者都有源和目的埠號。請問源和目的埠號用來幹什麼?
在一PC機上,一個程式對應一個埠。埠的作用就是用來唯一標識這個程式。源埠標識發起通訊的那個程式,目的埠標識接受通訊的那個程式。有了埠號,接受到報文後才能夠知道將報文傳送到哪個程式。
實作二 分析 TCP 建立和釋放連線
- 開啟瀏覽器訪問 qige.io 網站,用 Wireshark 抓包(可用 tcp 過濾後再使用加上
Follow TCP Stream
),不要立即停止 Wireshark 捕獲,待頁面顯示完畢後再多等一段時間使得能夠捕獲釋放連線的包。- 請在你捕獲的包中找到三次握手建立連線的包,並說明為何它們是用於建立連線的,有什麼特徵。
- 請在你捕獲的包中找到四次揮手釋放連線的包,並說明為何它們是用於釋放連線的,有什麼特徵。
- 抓包結果
- 三次握手建立連線的包
建立 TCP 連線就是通訊的雙方需要完成“三次握手”,連線中的一對 Socket 是由網際網路地址標誌符和埠組成的,視窗大小主要用來做流控制,最後的序列號是用來追蹤通訊發起方傳送的資料包序號,接收方可以通過序列號向傳送方確認某個資料包的成功接收。 - 四次揮手釋放連線的包
因為 TCP 是全雙工通訊的 (1)第一次揮手 因此當主動方傳送斷開連線的請求(即FIN報文)給被動方時,僅僅代表主動方不會再傳送資料包文了,但主動方仍可以接收資料包文。(2)第二次揮手 被動方此時有可能還有相應的資料包文需要傳送,因此需要先傳送 ACK 報文,告知主動方“我知道你想斷開連線的請求了”。這樣主動方便不會因為沒有收到應答而繼續傳送斷開連線的請求(即 FIN 報文)。 (3)第三次揮手 被動方在處理完資料包文後,便傳送給主動方 FIN 報文;這樣可以保證資料通訊正常可靠地完成。傳送完 FIN 報文後,被動方進入 LAST_ACK 階段(超時等待)。(4)第四揮手 如果主動方及時傳送 ACK 報文進行連線中斷的確認,這時被動方就直接釋放連線,進入可用狀態。
✎ 問題一
我們上面提到了釋放連線需要四次揮手,有時你可能會抓到只有三次揮手。原因是什麼?
當第二次揮手時,會將第三次傳送停止傳送資料的標識順帶,所以有可能只抓到三次揮手。
應用層
實作一 瞭解 DNS 解析
- 先使用
ipconfig /flushdns
命令清除快取,再使用nslookup qige.io
命令進行解析,同時用 Wireshark 任意抓包(可用 dns 過濾)。- 你應該可以看到當前計算機使用 UDP,向預設的 DNS 伺服器的 53 號埠發出了查詢請求,而 DNS 伺服器的 53 號埠返回了結果。
- 可瞭解一下 DNS 查詢和應答的相關欄位的含義
- 清理快取、解析、抓包
- 如下圖所示
- DNS 查詢和應答的相關欄位的含義
✎ 問題
你可能會發現對同一個站點,我們發出的 DNS 解析請求不止一個,思考一下是什麼原因?
為了使伺服器的負載得到平衡(因為每天訪問站點的次數非常多)網站就設有好幾個計算機,每一個計算機都執行同樣的伺服器軟體。這些計算機的IP地址不一樣,但它們的域名卻是相同的。這樣,第一個訪問該網址的就得到第一個計算機的IP地址,而第二個訪問者就得到第二個計算機的IP地址等等。這樣可使每一個計算機的負荷不會太大。
實作二 瞭解 HTTP 的請求和應答
- 開啟瀏覽器訪問 qige.io 網站,用 Wireshark 抓包(可用http 過濾再加上
Follow TCP Stream
),不要立即停止 Wireshark 捕獲,待頁面顯示完畢後再多等一段時間以將釋放連線的包捕獲。- 請在你捕獲的包中找到 HTTP 請求包,檢視請求使用的什麼命令,如:
GET
,POST
。並仔細瞭解請求的頭部有哪些欄位及其意義。- 請在你捕獲的包中找到 HTTP 應答包,檢視應答的程式碼是什麼,如:
200, 304, 404
等。並仔細瞭解應答的頭部有哪些欄位及其意義。
- 抓包結果
- 分析
✎ 問題
重新整理一次 qige.io 網站的頁面同時進行抓包,你會發現不少的304
程式碼的應答,這是所請求的物件沒有更改的意思,讓瀏覽器使用本地快取的內容即可。那麼伺服器為什麼會回答304
應答而不是常見的200
應答?
瀏覽器和伺服器有一個協商的過程,伺服器告訴瀏覽器當前請求的資源上一次修改的時間是這個時間。瀏覽器第二次傳送請求的時候,告訴瀏覽器我上次請求的資源現在還在自己的快取中,如果你那邊這個資源還沒有修改,就可以不用傳送應答體給我了。伺服器根據瀏覽器傳來的時間發現和當前請求資源的修改時間一致,就應答304,表示不傳應答體了,從快取裡取。
相關文章
- 關於計算機網路第一章的wireshark實驗計算機網路
- 《計算機網路實驗課程》——Wireshark實驗計算機網路
- 計算機網路實驗二——利用wireshark抓包計算機網路
- 計算機網路實驗計算機網路
- 計算機網路實驗二計算機網路
- 計算機網路實驗三計算機網路
- 計算機網路驗證性實驗計算機網路
- 計算機網路實驗總結計算機網路
- 計算機網路實驗報告:【Wirshark 實驗】計算機網路
- 計算機網路實驗:【Cisco Packet Tracer 實驗】計算機網路
- 計算機網路的 Cisco Packet Tracer 實驗計算機網路
- 計算機網路實驗三—— Cisco Packet Tracer 實驗計算機網路
- 計算機網路中關於路由器的作用計算機網路路由器
- HUST-計算機網路實驗-socket程式設計計算機網路程式設計
- 計算機網路實驗二:動態路由配置計算機網路路由
- Android網路系列(一):關於計算機網路的一些基礎Android計算機網路
- 計算機網路實驗一:vlan的建立與劃分計算機網路
- 《計算機網路微課堂》實驗9 劃分子網計算機網路
- 計算機網路 -- 計算機網路的效能指標計算機網路指標
- 第1章 計算機網路的概述——計算機網路計算機網路
- 05計算機網路相關概念計算機網路
- 王道計算機網路複習(1)j第一章計算機網路的體系結構,計算機網路的概念,資源共享,計算機網路分類,計算機網路的標準化工作以及相關的組織計算機網路
- 計算機網路(們)和 Internet (計算機網路的子類)計算機網路
- 計算機網路再次整理————tcp的關閉[七]計算機網路TCP
- 計算機網路計算機網路
- Wireshark實驗
- 計算機網路 第一章 1.1.1 計算機網路的概念計算機網路
- 《計算機網路微課堂》實驗6 生成樹協議STP的功能計算機網路協議
- 計算機網路之網路層計算機網路
- [計算機網路]網路攻擊計算機網路
- 計算機網路(一) --網路模型計算機網路模型
- 計算機網路概述計算機網路
- 計算機 網路概述計算機
- 搞定計算機網路計算機網路
- 28 計算機網路計算機網路
- 計算機網路(一)計算機網路
- 計算機網路的核心概念計算機網路
- 計算機網路的物理層計算機網路