應用Wireshark觀察基本網(wǎng)絡協(xié)議
TCP:
TCP/IP通過三次握手建立一個連接。這一過程中的三種報文是:SYN,SYN/ACK,ACK。
***步是找到PC發(fā)送到網(wǎng)絡服務器的***個SYN報文,這標識了TCP三次握手的開始。
如果你找不到***個SYN報文,選擇Edit -> Find Packet菜單選項。選擇Display Filter,輸入過濾條件:tcp.flags,這時會看到一個flag列表用于選擇。選擇合適的flag,tcp.flags.syn并且加上==1。點擊Find,之后trace中的***個SYN報文就會高亮出來了。
注意:Find Packet也可以用于搜索十六進制字符,比如惡意軟件信號,或搜索字符串,比如抓包文件中的協(xié)議命令。
一個快速過濾TCP報文流的方式是在Packet List Panel中右鍵報文,并且選擇Follow TCP Stream。這就創(chuàng)建了一個只顯示TCP會話報文的自動過濾條件。
這一步驟會彈出一個會話顯示窗口,默認情況下包含TCP會話的ASCII代碼,客戶端報文用紅色表示服務器報文則為藍色。
窗口類似下圖所示,對于讀取協(xié)議有效載荷非常有幫助,比如HTTP,SMTP,F(xiàn)TP。
更改為十六進制Dump模式查看載荷的十六進制代碼,如下圖所示:
關閉彈出窗口,Wireshark就只顯示所選TCP報文流?,F(xiàn)在可以輕松分辨出3次握手信號。
注意:這里Wireshark自動為此TCP會話創(chuàng)建了一個顯示過濾。本例中:(ip.addr eq 192.168.1.2 and ip.addr eq 209.85.227.19) and (tcp.port eq 80 and tcp.port eq 52336)
SYN報文:
圖中顯示的5號報文是從客戶端發(fā)送至服務器端的SYN報文,此報文用于與服務器建立同步,確保客戶端和服務器端的通信按次序傳輸。SYN報文的頭部有一個32 bit序列號。底端對話框顯示了報文一些有用信息如報文類型,序列號。
SYN/ACK報文:
7號報文是服務器的響應。一旦服務器接收到客戶端的SYN報文,就讀取報文的序列號并且使用此編號作為響應,也就是說它告知客戶機,服務器接收到了SYN報文,通過對原SYN報文序列號加一并且作為響應編號來實現(xiàn),之后客戶端就知道服務器能夠接收通信。
ACK報文:
8號報文是客戶端對服務器發(fā)送的確認報文,告訴服務器客戶端接收到了SYN/ACK報文,并且與前一步一樣客戶端也將序列號加一,此包發(fā)送完畢,客戶端和服務器進入ESTABLISHED狀態(tài),完成三次握手。#p#
ARP & ICMP:
開啟Wireshark抓包。打開Windows控制臺窗口,使用ping命令行工具查看與相鄰機器的連接狀況。
停止抓包之后,Wireshark如下圖所示。
ARP和ICMP報文相對較難辨認,創(chuàng)建只顯示ARP或ICMP的過濾條件。
ARP報文:
地址解析協(xié)議,即ARP(Address Resolution Protocol),是根據(jù)IP地址獲取物理地址的一個TCP/IP協(xié)議。其功能是:主機將ARP請求廣播到網(wǎng)絡上的所有主機,并接收返回消息,確定目標IP地址的物理地址,同時將IP地址和硬件地址存入本機ARP緩存中,下次請求時直接查詢ARP緩存。
最初從PC發(fā)出的ARP請求確定IP地址192.168.1.1的MAC地址,并從相鄰系統(tǒng)收到ARP回復。ARP請求之后,會看到ICMP報文。
ICMP報文:
網(wǎng)絡控制消息協(xié)定(Internet Control Message Protocol,ICMP)用于TCP/IP網(wǎng)絡中發(fā)送控制消息,提供可能發(fā)生在通信環(huán)境中的各種問題反饋,通過這些信息,令管理者可以對所發(fā)生的問題作出診斷,然后采取適當?shù)拇胧┙鉀Q。
PC發(fā)送echo請求,收到echo回復如上圖所示。ping報文被mark成Type 8,回復報文mark成Type 0。
如果多次ping同一系統(tǒng),在PC上刪除ARP cache,使用如下ARP命令之后,會產(chǎn)生一個新的ARP請求。
C:\> ping 192.168.1.1
... ping output ...
C:\> arp –d *
HTTP:
HTTP協(xié)議是目前使用最廣泛的一種基礎協(xié)議,這得益于目前很多應用都基于WEB方式,實現(xiàn)容易,軟件開發(fā)部署也簡單,無需額外的客戶端,使用瀏覽器即可使用。這一過程開始于請求服務器傳送網(wǎng)絡文件。
從上圖可見報文中包括一個GET命令,當HTTP發(fā)送初始GET命令之后,TCP繼續(xù)數(shù)據(jù)傳輸過程,接下來的鏈接過程中HTTP會從服務器請求數(shù)據(jù)并使用TCP將數(shù)據(jù)傳回客戶端。傳送數(shù)據(jù)之前,服務器通過發(fā)送HTTP OK消息告知客戶端請求有效。如果服務器沒有將目標發(fā)送給客戶端的許可,將會返回403 Forbidden。如果服務器找不到客戶端所請求的目標,會返回404。
如果沒有更多數(shù)據(jù),連接可被終止,類似于TCP三次握手信號的SYN和ACK報文,這里發(fā)送的是FIN和ACK報文。當服務器結束傳送數(shù)據(jù),就發(fā)送FIN/ACK給客戶端,此報文表示結束連接。接下來客戶端返回ACK報文并且對FIN/ACK中的序列號加1。這就從服務器端終止了通信。要結束這一過程客戶端必須重新對服務器端發(fā)起這一過程。必須在客戶端和服務器端都發(fā)起并確認FIN/ACK過程。
附錄:網(wǎng)絡協(xié)議報文結構與抓包示例
TCP/IP協(xié)議棧
以太網(wǎng)幀示例
IP數(shù)據(jù)報格式
IP報文示例
UDP幀結構
TCP消息結構
TCP報文示例















 
 
 


 
 
 
 