一、實驗名稱
利用Wireshark抓包並分析 TCP/IP 協議
二、實驗目的
通過實驗,了解和掌握報文捕獲工具 Wireshark 的使用方法和基本特點,使 用 Wireshark 捕獲網絡報文,並分析各種網絡協議的報文格式和工作過程。
三、實驗內容
使用 Wireshark 捕獲網絡報文,分析以太網、ARP、IP、TCP、DNS 和 HTTP 等協議的報文格式和工作過程。
四、實驗步驟
-
DNS分析
在 cmd 下運行:
nslookup –type=A www.nudt.edu.cn
nslookup –type=NS nudt.edu.cn
nslookup –type=MX nudt.edu.cn
nslookup –type=A www.nudt.edu.cn sdns.nudt.edu.cn
然后用Wireshark捕獲報文並分析DNS和UDP協議的報文格式和工作過程。
-
ICMP分析
在cmd下運行
ping www.baidu.com
tracert www.baidu.com
然后用Wireshark捕獲報文並分析 ICMP 報文格式和工作過程。
-
TCP/IP分析
a) 在瀏覽器輸入 www.scmyzx.com.cn 網址后,然后用 Wireshark 捕獲報文並分析HTTP,TCP,IP,ARP和以太網等協議的報文格式和工作過程。
b) 運行各自編寫的 UDP 和 TCP 客戶/服務器程序並進行抓包分析。
五、實驗結果及分析
(一)DNS分析
通過ipconfig命令查看IP、網關地址

IP地址192.168.43.217
默認網關192.168.43.1
DNS報文格式

DNS分析大體相同,就選擇其一進行分析
1.在cmd下運行nslookup -type=A www.nudt.edu.cn

非權威應答:110.53.188.133 113.247.230.248 202.197.9.133
應答服務器地址為192.168.43.1,為默認網關地址

利用wireshark進行抓包分析,篩選DNS報文,本次運行有4個DNS報文,可以看出對應請求包和響應包的源IP與目的IP剛好相反。

Query這是一個請求報文。首先主機發送一個 DNS 報文。DNS 采用 UDP 協議支持。從報文可以看出端口號53,報文長度51,檢錯碼0x1347,報文標識號Transaction ID 為0x0001
Queries
1.43.168.192.in-addr.arpa: type PTR, class IN

Response響應報文
No such name,沒有Answers


源端口號50161,目的端口號53,報文長度41,檢錯碼0xb9ad,報文標識號Transaction ID為0x0002,從Flags可知為遞歸查詢。
Type:A(Host Address)(1),表示該報文提出一個查詢ipv4地址的請求。


response這是一個響應報文。源端口號51,目的端口號50161,長度89,檢錯碼0x1d16,報文標識號Transaction ID為0x0002,非權威服務器。
有3個Answers
www.nudt.edu.cn: type A, class IN
addr 110.53.188.133 113.247.230.248 202.197.9.133
即ipv4地址,結果是110.53.188.133 113.247.230.248 202.197.9.133
2.在cmd下運行nslookup -type=NS nudt.edu.cn

對nudt.edu.cn進行NS查詢
得到兩條非權威應答nameserver的值分別為sdns.nudt.edu.cn和dns.hn.edu.cn


請求報文
端口號、報文長度、檢錯碼等和前面分析相同,不再贅述。
Queries
1.43.168.192.in-addr.arpa:type PTR, class IN
查詢類型PTR

響應報文
No such name,沒有Answer

請求報文
Queries
nudt.edu.cn: type NS, class IN


響應報文
有2個Answers,權威服務器
nudt.edu.cn type: NS, class IN, ns
sdns.nudt.edu.cn dns.hn.edu.cn
3.在cmd下運行nslookup -type=MX nudt.edu.cn



請求報文
1.43.168.192.in-addr.arpa: type PTR, class IN

響應報文
無Answer,一個權威服務器168.192.IN-ADDR.ARPA: type SOA, class IN, mname 168.192.IN-ADDR.ARPA

請求報文
Queries
nudt.edu.cn: type MX, class IN

響應報文
有4個Answers,nudt.edu.cn: type MX, class IN
Preference 15, mx mail1.nudt.edu.cn
Preference 10, mx mail.nudt.edu.cn
Preference 20, mx mail2.nudt.edu.cn
Preference 5, mx mx-nudt-edu-cn.icoremail.net
4.在cmd下運行nslookup -type=A www.nudt.edu.cn sdns.nudt.edu.cn


各組報文分析類似,這里僅選取其中一組進行。

請求報文,UDP,源端口號62373,目的端口號53,報文長度52,檢驗和0x9302;DNS,Transaction ID:0x0001,標志0x0100,期望遞歸。
一個Query,181.0.197.202.in-addr.arpa: type PTR, class IN

響應報文,UDP,源端口號53,目的端口號62373,報文長度82,檢驗和0xbeee;DNS,Transaction ID:0x0001,標志0x8180,屬於響應,期望遞歸且可遞歸。
一個Answer,181.0.197.202.in-addr.arpa: type PTR, class IN, sdns.nudt.edu.cn
5.DNS工作過程分析
① 當我的主機與某一個ISP連接時,該ISP提供一台主機的IP地址,該主機具有一台或多台其本地DNS服務器的IP地址。當我的主機發出DNS請求時,該請求被發往本地DNS服務器,它起着代理的作用,並將該請求轉發到DNS服務器層次結構中,最后將查詢結果返回給我的主機。
② 當我查詢域名www.nudt.edu.cn時,主機將向本地DNS服務器發起請求查詢該域名。
③ 本地DNS服務器接收到請求后,會先查詢自己的緩存中是否有該地址,如果有的話,就直接返回相應結果,查詢成功,同時該查詢結果被標記為非權威應答;若沒有,則本地DNS服務器會從配置文件中讀取根域名服務器的地址,向其中一台發出查詢請求。
④ 根服務器接收到請求后,解析到是cn這個頂級域名下的,於是向本地DNS服務器返回負責cn的頂級域的IP列表。
⑤ 本地DNS服務器接收到該列表后,再次向其中一台發送請求。
⑥ cn域的服務器收到請求后,解析到是edu.cn域的,於是向本地DNS服務器返回負責edu.cn域的IP列表。
⑦ 本地DNS服務器收到列表后,再次向其中一台發送請求,過程與上述類似,直到最終權威服務器收到該查詢請求,如sdns.nudt.edu.cn,權威服務器會查詢相應IP地址並返回給本地DNS服務器,本地DNS服務器獲得最終結果后,將結果返回給我的主機,並將結果保存在緩存中,設定一定的存活時間,最終我的主機的DNS查詢請求完成。
(二)ICMP
1.在cmd下運行ping www.baidu.com


ping一共進行了四次,均成功,獲取了四組報文,分別是6和8、10和11、18和19、22和23。
以其中一組為例分析

請求報文
原IP地址192.168.43.217 目的IP地址183.232.231.172
Type: 8 (Echo (ping) request) Code: 0 回顯請求
Checksum 正確

響應報文
原IP地址183.232.231.172 目的IP地址192.168.43.217
Type: 0 (Echo (ping) reply) Code: 0 回顯回答(對ping的回答)
Checksum 正確
2.在cmd下運行tracert www.baidu.com




報文大致可分為三種類型:
-
源主機發送請求,路由器回復錯誤報告
-
源主機發送請求,路由器請求超時
-
源主機發送請求,目的主機回復響應
接下來對以上三種類型各舉一個例子分析
- 源主機發送請求,路由器回復錯誤報告

Type: 3 (Destination unreachable) Code: 3 (Port unreachable) 目的端口不可達
- 源主機發送請求,路由器請求超時

請求報文
Type: 8 (Echo (ping) request) Code: 0 回顯請求
TTL為1
無響應 Expert Info (Warning/Sequence): No response seen to ICMP request

這是默認網關發送給源主機的報文
Type: 11 (Time-to-live exceeded) Code: 0 (Time to live exceeded in transit) TTL過期
這里返回了中間路由器的IP地址,192.168.43.1(默認網關),可見是第一跳。
- 源主機發送請求,目的主機回復響應

請求報文
Type: 8 (Echo (ping) request) Code: 0 回顯請求

響應報文
Type: 0 (Echo (ping) reply) Code: 0 回顯回答(對ping的回答)
工作過程:
Tracert 使用ICMP報文實現,可跟蹤從一台主機到世界上任意一台主機之間的路由。為了判斷源和目的地之間所有路由器的名字和地址,源主機中的tracert向目的地主機發送一系列普通的IP數據報。每個這些數據報攜帶了一個具有不可達UDP端口號的UDP報文段,第一個數據報的TTL為1,第二個為2,依次遞增。該源主機也為每個數據報啟動定時器,當第n個數據報到達第n台路由器時,第n台路由器觀察到這個數據報的TTL剛好過期。根據IP協議規則,路由器丟棄該數據報並發送一個ICMP告警報文給源主機(類型11編碼0)。該告警報文包含了路由器的名字和IP地址。當該ICMP報文返回源主機時,源主機從定時器得到往返時延,從ICMP報文中得到第n台路由器的名字和IP地址。
隨着TTL遞增,最終有一個報文將到達目的主機,由於該報文具有不可達端口號,於是該目的主機將向源主機發送一個端口不可達的ICMP報文(類型3編碼3)。而源主機收到這個ICMP報文后,就知道不需要再發送數據報了,Tracert結束。
(三) TCP/IP
1. 在瀏覽器輸入www.scmyzx.com.cn網址后,然后用wireshark捕獲報文並分析頁面抓取過程
① 當我的電腦與網絡連接時,沒有IP地址就不能做任何事情(例如下載一個Web網頁),所以我的電腦所采取的一個網絡相關的動作是運行DHCP協議,以從本地DHCP服務器獲得一個IP地址以及其他信息。


操作系統生成一個DHCP請求報文,並將這個報文放入具有目的端口號67(DHCP服務器)和源端口號68(DHCP客戶)的UDP報文段。該UDP報文段被放置在一個具有廣播IP目的地址(255.255.255.255)和源IP地址(0.0.0.0)的IP數據報中,因為電腦還沒有一個IP地址。
② 包含DHCP請求報文的IP數據報則被放置在以太網幀中。該以太網幀具有目的MAC地址FF:FF:FF:FF:FF:FF,使得該幀將廣播到與交換機連接的所有設備,該幀的源MAC地址則是我的電腦的MAC地址5c:ea:1d:9a:99:43。
③ 包含DHCP請求的廣播以太網幀是第一個由電腦發送到以太網交換機的幀,該交換機在所有的出端口廣播入幀,包括連接到路由器的端口。路由器接收到該以太網幀后,從中抽取出IP數據報。該數據報的廣播IP目的地址指示了這個IP數據報應當由在該結點的高層協議處理,因此該數據報的載荷(一個UDP報文段)被分解,向上到達UDP,DHCP請求報文從此UDP報文中抽取出來。此時DHCP服務器有了DHCP請求報文。
④ DHCP服務器將分配IP地址給我的電腦,這些信息會被放入一個DHCP ACK報文,而這個報文被放入一個UDP報文段,UDP報文段被放入一個IP數據報,IP數據報再被放入一個以太網幀中。


可以看到源MAC地址為96:fc:30:e8:71:b8,而目的MAC地址就是之前看到的我的MAC地址5c:ea:1d:9a:99:43,源IP地址為192.168.43.1,目的IP地址為192.168.43.217,可以在DHCP ACK報文中看到,這正是DHCP服務器為我分配的IP地址。
⑤ 現在我的電腦已經擁有了自己的IP地址,具備了基本條件。接下來,當我將www.scmyzx.com.cn的URL鍵入Web瀏覽器時,開始了一連串的事件。瀏覽器需要生成一個TCP套接字,用於向www.scmyzx.com.cn發送HTTP請求。但為了生成這個套接字,電腦需要知道www.scmyzx.com.cn的IP地址,故需要DNS協議提供轉換服務。
⑥ 操作系統因此生成一個DNS查詢報文,將字符串www.scmyzx.com.cn放入DNS報文的問題段中。該DNS報文則放置在一個具有53號端口(DNS服務器)目的端口的UDP報文段中。該UDP報文段則被放入具有IP目的地址192.168.43.1(第④步中DHCP ACK返回的DNS服務器地址)和源IP地址192.168.43.217的IP數據報中。

⑦ 包含DNS請求報文的數據報被放入一個以太網幀中,該幀將發送到網關。但雖然知道了網關的IP地址,卻仍不知道其MAC地址,所以需要使用ARP協議。生成一個具有目的IP地址192.168.43.1(默認網關)的ARP查詢報文,將該ARP報文放置在一個具有廣播目的地址(FF:FF:FF:FF:FF:FF)的以太網幀中,並向交換機發送該以太網幀,交換機將該幀交付給所有連接的設備。

⑧ 網關接收到包含ARP查詢報文的幀后,發現ARP報文中目的IP地址192.168.43.1匹配其接口的IP地址,因此准備一個ARP回答,指示它的IP地址對應MAC地址96:fc:30:e8:71:b8。該回答放入一個以太網幀中,其目的地址為5c:ea:1d:9a:99:43。

⑨ 我的電腦接收到了包含該ARP回答報文的幀,並從中抽取網關的MAC地址,現在能夠使包含DNS查詢的以太網幀尋址到網關的MAC地址了。

該報文如上圖,源IP地址192.168.43.217,目的IP地址192.168.43.1(DNS服務器),使用UDP承載了DNS請求報文,其中有包含一個query,請求www.scmyzx.com.cn的IP地址。
⑩ DNS服務器返回的DNS應答報文如下

可以看到有一個answer,其中說明了www.scmyzx.com.cn對應的IP地址為120.76.101.154
⑪ 現在有了www.scmyzx.com.cn的IP地址后,就能夠生成TCP套接字了,該套接字將用於向www.scmyzx.com.cn發送HTTP GET報文。當生成套接字時,我的TCP必須首先與www.scmyzx.com.cn的TCP執行三次握手。因此首先生成一個具有目的端口80的TCP SYN報文段,發給IP地址120.76.101.154,這是三次握手的第一次。(接下來這些報文的發送的更底層的細節,與前面敘述的過程類似,就不再贅述。)

SYN,Seq=0
⑫ 和11中類似,第二、三次握手如下:

826號是第一次,843號是第二次,847號是第三次

SYN ACK,Seq=0 ACK=1

ACK,Seq=1 ACK=1
三次握手完成,與www.scmyzx.com.cn的TCP連接成功建立。
⑬ 借助於我的套接字,現在准備向www.scmyzx.com.cn發送字節了。瀏覽器生成包含要獲取的URL的HTTP GET報文,HTTP GET報文則寫入套接字,其中GET報文成為一個TCP報文段的載荷。該TCP報文段放入一個數據報中,並交付給www.scmyzx.com.cn,和前面的分析類似。

可以看到該HTTP的首部各種信息,包括主機名,TCP連接模式等等。
⑭ 下面是應答報文

可以看到首部行的各種信息,包括HTTP/1.1 200 OK內容格式,字符格式,瀏覽器類型,時間等等。下面的數據部分則是提供給瀏覽器,用於生成網頁的數據。
⑮ 通過這些數據,我們終於能在瀏覽器上看到我們抓取的網頁了。

2. 運行編寫的UDP和TCP客戶/服務器程序並進行抓包分析
這里使用的是同一局域網內的兩台主機之間進行通信,運行客戶端程序的主機IP地址為192.168.43.217,MAC地址為5c:ea:1d:9a:99:43;運行服務器程序的主機IP地址為192.168.43.43,MAC地址為bc:a8:a6:fe:72:b1。
① UDP



可以看到源、目的IP地址和MAC地址,協議為UDP(17)。UDP報文段有源端口、目的端口號、長度、檢驗和,下面數據部分可以看到客戶端發送給服務器的數據是abc。

信息和上一個報文大致類似,可以看到源和目的相反,數據部分也可以看到服務器返回給客戶端的數據,是大寫的ABC。
② TCP


2、3、4號報文為三次握手過程



33號報文內有客戶端發向服務器的數據abc

34號報文內有服務器返回客戶端的數據ABC

35、36、37、38號報文為關閉TCP連接過程
35號:客戶端向服務器發送FIN報文

36號:服務器收到FIN,回應ACK

37號:服務器也向客戶端發送一個FIN報文

38號:客戶端收到FIN,回應ACK

TCP連接關閉
整個過程至此完成。
六、實驗中遇到的問題及解決方法
遇到的問題:
對wireshark使用方法的不熟悉,以及對報文結構和各網絡協議工作原理的不熟悉。
解決方法:
反復閱讀教材,並學習wireshark使用方法,依照實驗指導進行抓包,將抓包文件保存后,反復進行分析。
七、實驗心得體會
通過實驗,了解和基本掌握了報文捕獲工具 Wireshark 的使用方法和基本特點,使 用 Wireshark 捕獲網絡報文,分析了各種網絡協議的報文格式和工作過程,加深了對各種網絡協議的理解。
尤其是最后對於在瀏覽器獲取一個網頁的過程的分析,將計算機網絡各個層次以及相應的各種網絡協議聯系起來,形成了一個整體上的認識,讓我對計算機網絡的認識更加清晰和完整。同時也幫助自己記憶了一些計算機網絡的知識點。
