前言
大家好,這里是浩道linux,主要給大家分享linux、python、網(wǎng)絡(luò)通信相關(guān)的IT知識(shí)平臺(tái)。
今天浩道跟大家分享關(guān)于網(wǎng)絡(luò)延遲及故障分析方法相關(guān)的硬核干貨!
一、Wireshark中的輔助工具
我們?cè)诎惭b完Wireshark時(shí),會(huì)發(fā)現(xiàn)系統(tǒng)中還多了一些程序,例如Tshark等。這些程序都采用了命令行的工作方式,雖然體積都很小,但是功能卻十分強(qiáng)大。
1、Wireshark命令行工具
開Wireshark的安裝目錄,然后按照類型對(duì)文件進(jìn)行排序,就可以看到除了Wireshark.exe之外還有如圖所示的一些命令行工具。
首先我們先來簡單地看一下這些工具的功能:
Tshark.exe:這個(gè)工具可以看作是Wireshark的命令行版本,可以用來捕獲數(shù)據(jù)包,也可以讀取保存好的數(shù)據(jù)包捕獲文件。
editcap.exe:主要用來轉(zhuǎn)換捕獲數(shù)據(jù)包捕獲文件的格式。
dumpcap.exe:和tshark.exe一樣用來捕獲數(shù)據(jù)包,保存為libpcap格式文件。
mergecap .exe:用來將多個(gè)數(shù)據(jù)包捕獲文件合并成一個(gè)。
capinfos.exe:用來將顯示數(shù)據(jù)包捕獲文件的信息。
text2pcap.exe:將十六進(jìn)制轉(zhuǎn)儲(chǔ)文件轉(zhuǎn)換為數(shù)據(jù)包捕獲文件。
2、使用Tshark和Dumpcap進(jìn)行數(shù)據(jù)包的捕獲
1. Tshark.exe使用方法
Tshark.exe是Wireshark的一個(gè)組件,可以用來捕獲數(shù)據(jù)包,也可以用來查看之前保存的數(shù)據(jù)包捕獲文件。
Tshark.exe也提供了對(duì)數(shù)據(jù)包的解析和保存功能。雖然沒有圖形化的工作界面,但是Tshark.exe的功能卻十分強(qiáng)大。如果你希望查看Tshark.exe的全部功能,可以在命令行中輸入“tshark–h”就可以查看幫助文件,這個(gè)幫助文件很大,下圖只顯示了其中與網(wǎng)絡(luò)接口(網(wǎng)卡)有關(guān)的部分。
我們首先來看一個(gè)使用Tshark.exe捕獲數(shù)據(jù)包的簡單示例,這里至少需要指定捕獲數(shù)據(jù)包所使用的網(wǎng)卡,在Linux下很容易查看到網(wǎng)卡的名稱和編號(hào)。
但是查看Windows下網(wǎng)卡的編號(hào)則要困難很多,不過在Tshark中,可以使用如下的命令查看每個(gè)網(wǎng)卡的編號(hào):
tshark -D
接下來我們使用第4塊網(wǎng)卡來捕獲數(shù)據(jù),為了加快捕獲的速度,這里使用-s參數(shù)來表示只捕獲數(shù)據(jù)包的前512個(gè)字節(jié)數(shù)據(jù):
tshark -s 512 -i 4
和Wireshark一樣,Tshark還支持捕獲過濾器和顯示過濾器的使用,這兩種過濾器的語法也和Wireshark中規(guī)定的一樣,例如下面就使用了目標(biāo)端口為80的過濾器:
tshark -s 512 -i 4 -f 'tcp dst port 80'
捕獲到的數(shù)據(jù)包如圖17-3所示:
需要停止捕獲數(shù)據(jù)包時(shí),可以使用“Ctrl+C”組合鍵。
Tshark中還提供了強(qiáng)大的統(tǒng)計(jì)功能,這個(gè)功能通過參數(shù)-z來實(shí)現(xiàn),這個(gè)參數(shù)后面需要使用Tshark所指定的值,可以使用如下命令:
tshark -z -h
Tshark所有可以使用的值如圖所示:
這里面我們選擇使用“io,phs”作為-z參數(shù)的值,這里面我們添加了-q來指定不顯示捕獲的數(shù)據(jù)包信息:
tshark -i 4 -f “port 80” -q -z io,phs
執(zhí)行該命令的結(jié)果如圖所示:
Tshark功能詳情,請(qǐng)參考:tshark(1)
2. Dumpcap的用法
Dumpcap也是Wireshark中自帶的一個(gè)命令行工具,這種工具的優(yōu)勢(shì)就在于對(duì)資源的消耗較小。
你可以使用dumpcap.exe -h來查看它的幫助文件:
這里首先來介紹幾個(gè)最為常用的選項(xiàng)。
-D:列出當(dāng)前可以的網(wǎng)卡設(shè)備。
-i<>:指定要使用的網(wǎng)卡名字或者序號(hào)。
-f<capture filter>:使用BPF語法完成的過濾器表達(dá)式。
-b filesize:指定文件的大小。
-w<o(jì)utfile>:指定用來保存文件的名稱。
這個(gè)工具的使用與Tshark很相似,dumpcap詳情功能,請(qǐng)參考:dumpcap(1)
3、使用Editcap對(duì)數(shù)據(jù)包進(jìn)行修改
使用Wireshark在捕獲數(shù)據(jù)包時(shí)得到的文件可能會(huì)很大,Editcap就可以將這種大文件分割成較小的文件。另外,Editcap也可以通過開始時(shí)間和停止時(shí)間來獲取捕獲數(shù)據(jù)包文件的子集,刪除捕獲數(shù)據(jù)包文件中重復(fù)數(shù)據(jù)等。
同樣我們了解這個(gè)工具最好的辦法還是查看它的幫助文件,使用Editcap -h可以看到:
同樣這個(gè)幫助文件也很長,這里只顯示了其中的一部分。
下面我們以實(shí)例的方式來介紹一下它的應(yīng)用:
editcap[options]…<infile><o(jì)utfile>[<packet
這里面的infile和outfile是必要參數(shù),其中infile表示要處理的捕獲數(shù)據(jù)包文件,outfile表示經(jīng)過處理的文件。例如,我們已經(jīng)將Wireshark中捕獲的數(shù)據(jù)包文件保存為Traces.pcapng,現(xiàn)在需要將里面的前2000個(gè)數(shù)據(jù)包單獨(dú)保存成另一個(gè)文件,可以執(zhí)行如下所示的命令:
editcap –r Traces.pcapng packetrange.pcapng 1-2000
這里面使用了一個(gè)參數(shù)r,它的作用是保留要處理的文件Traces.pcapng,如果不使用這個(gè)參數(shù)的話,這個(gè)文件就會(huì)被刪除掉。
將一個(gè)文件拆分成多個(gè)文件時(shí),需要指定拆分的條件,例如一個(gè)捕獲了100000個(gè)數(shù)據(jù)包的文件,我們就可以按照每2000個(gè)數(shù)據(jù)包為一個(gè)新文件的方式作為條件。
拆分時(shí)使用的參數(shù)為c:
editcap –c 2000 Traces.pcapng SplitTrace.pcapng
當(dāng)一個(gè)文件中包含了重復(fù)的數(shù)據(jù)包時(shí),可以使用參數(shù)d或者D來將重復(fù)的數(shù)據(jù)包去掉,其中-d在檢測(cè)一個(gè)數(shù)據(jù)包是否重復(fù)的時(shí)候,只會(huì)和當(dāng)前數(shù)據(jù)包的前5個(gè)進(jìn)行比較,而參數(shù)-D則可以指定范圍(有效值可以是0~100000)。
editcap –d Traces.pcapng nodupes.pcapng
4、使用Mergecap對(duì)數(shù)據(jù)包進(jìn)行合并
相比起其他工具,Mergecap的功能比較單一,它主要的功能就是將多個(gè)文件合并成一個(gè)文件,最基本的語法為
mergecap –winfile1.pcapng infile2.pcapng…
也就是mergecap后面跟多個(gè)文件名,其中的第一個(gè)是其他文件合并生成的。
主要參數(shù)的作用如下:
-a:將多個(gè)文件拼接成一個(gè)文件,默認(rèn)為按照數(shù)據(jù)包的時(shí)間戳進(jìn)行合并。
-s<snaplen>:將文件中的數(shù)據(jù)包均截?cái)酁椋約naplen>字節(jié)。
-w<o(jì)utfile>:設(shè)置保存為文件名。
-F<capture type>:設(shè)置保存的文件類型,默認(rèn)為pcapng。
-T<encap type>:設(shè)置保存文件的封裝類型,默認(rèn)和原始文件類型一致。
下面的例子中就將source1.pcapng、source2.pcapng、source3.pcapng這3個(gè)文件合并成了一個(gè)merged.pacap文件。
mergecap –w merged.pacap source1.pcapng source2.pcapng source3.pcapng
另外,我們也可以只截取目標(biāo)數(shù)據(jù)包的一部分來進(jìn)行合并,例如截取每個(gè)數(shù)據(jù)包的前128個(gè)字節(jié),使用的命令如下所示:
mergecap –w merged.pacap -s 128 source1.pcapng source2.pcapng source3.pcapng
5、Capinfos的使用方法
capinfos是一個(gè)顯示數(shù)據(jù)包捕獲文件信息的程序。
這個(gè)程序最常見的參數(shù)如下所示:
-t輸出包文件的類型
-E輸出包文件的封裝類型
-c輸出包的個(gè)數(shù)
-s輸出包文件的大小(單位:byte)
-d輸出包所有包的總字節(jié)長度(單位:byte)
-u輸出包文件中包的時(shí)間周期(單位:second)
-a輸出包文件中包的起始時(shí)間
-e輸出包文件中包的結(jié)束時(shí)間
-y輸出包文件中包的平均速率(單位:byte/s)
-i輸出包文件中包的平均速率(單位:bit/s)
-z輸出包文件中包的平均字節(jié)長度(單位:byte)
-x輸出包文件中包的平均速率(單位:packet/s)
如果需要查看這個(gè)包的所有信息:
capinfos caps.pcap
執(zhí)行的結(jié)果如圖所示:
6、USBPcapCMD的使用方法
USB技術(shù)的應(yīng)用越來越廣泛,我們常用的U盤、鼠標(biāo)、鍵盤都是USB設(shè)備。我們有時(shí)也會(huì)遇見要對(duì)這種設(shè)備進(jìn)行調(diào)試的情形,但是很少有人知道其實(shí)Wireshark也是可以勝任這一任務(wù)的。
Wireshark可以像處理網(wǎng)絡(luò)中的通信一樣來捕獲和解析USB設(shè)備的通信。
Wireshark2.0之后就加入了對(duì)USB協(xié)議的支持,USB協(xié)議版本有USB1.0、USB1.1、USB2.0、USB3.1等,目前USB2.0比較常用。這里,我們介紹如何使用Wireshark來捕獲和分析USB協(xié)議。
使用Wireshark對(duì)USB進(jìn)行調(diào)試的時(shí)候需要考慮所使用的操作系統(tǒng),默認(rèn)情況下,Windows環(huán)境中需要安裝專門的軟件才能完成這個(gè)工作。不過Wireshark2.0以上的版本提供了一個(gè)名為USBPcap的工具。這個(gè)工具需要管理員的工作權(quán)限,這個(gè)工具沒有提供圖形化的操作界面,所以我們需要在命令行下完成這些工作。
首先我們將工作目錄切換到USBPcap的安裝目錄:
cd c:program FilesUSBPcap
使用-h作為參數(shù)來查看這個(gè)工具的幫助:
C:Program FilesUSBPcap>USBPcapCMD.exe -h
如果現(xiàn)在需要列出當(dāng)前連接設(shè)備的話,我們只需要輸入這個(gè)工具的名稱即可,無需任何參數(shù)。執(zhí)行之后你就可以看到一個(gè)USB設(shè)備里列表,在這個(gè)列表可以找到所需要調(diào)試的設(shè)備。
下圖演示了一個(gè)在我的工作環(huán)境(Windows 7)下的USB設(shè)備列表,這里面我的計(jì)算機(jī)連接了一個(gè)無線網(wǎng)卡,一個(gè)USB鼠標(biāo),一個(gè)USB鍵盤和一個(gè)USB2.0集線器,它們都連接到了\.USBPcap1上。
最后一行會(huì)顯示“Select filter to monitor(q to quit):”,在這里面輸入要捕獲信息的控制設(shè)備。這里只有一個(gè)設(shè)備\.USBPcap1,所以我們輸入數(shù)字1。
之后我們還要再輸入一個(gè)文件的名稱,你可以按照自己的習(xí)慣來命名。這個(gè)文件將用來保存捕獲到的USB設(shè)備信息。
我們可以使用Enter鍵來開始捕獲USB流量,當(dāng)開始捕獲之后,這個(gè)控制臺(tái)不會(huì)有任何的顯示。
當(dāng)捕獲結(jié)束的時(shí)候,可以使用Ctrl+C組合鍵。然后USBPcap控制臺(tái)就會(huì)關(guān)閉,所有捕獲的數(shù)據(jù)將會(huì)保存在C:Program FilesUSBPcap下。
然后我們就可以使用Wireshark來查看這個(gè)捕獲文件:
二、Wireshark過濾器
Wireshark的世界里有2種過濾器,分別是采集過濾器和顯示過濾器,采用恰當(dāng)?shù)倪^濾器,不但能提高數(shù)據(jù)分析的靈活性,而且能讓分析者更快看到自己想要的分析對(duì)象。
1、Wireshark采集過濾器
使用Wireshark采集數(shù)據(jù)包時(shí),可能有諸多原因會(huì)使用到采集過濾器,比如減少采集的數(shù)據(jù)包大小來節(jié)省磁盤空間,加速問題和目標(biāo)分析,提高軟件自身工作速率等等。
1. 為什么要使用抓包過濾器
當(dāng)網(wǎng)絡(luò)中數(shù)據(jù)流的規(guī)模相當(dāng)龐大時(shí),只抓取滿足某些條件的流量就顯得十分重要了。如果用戶需要在生產(chǎn)環(huán)境中進(jìn)行流量分析,那他一定遲早會(huì)需要使用到抓包過器。用戶要在開始抓包之前使用抓包過濾器。總之,Wireshark抓取的每個(gè)數(shù)據(jù)包都會(huì)提交給抓包引擎,再由抓包引擎將抓取的數(shù)據(jù)包轉(zhuǎn)換成人類可以讀懂的格式。但是,如果用戶應(yīng)用了抓包過濾器,那么Wireshark就會(huì)丟棄與用戶需求不符的那些數(shù)據(jù)包。Wireshark不會(huì)將這些丟棄的數(shù)據(jù)包交給抓包引擎進(jìn)行轉(zhuǎn)換。相比之下,顯示過器就要具體和強(qiáng)大得多了。在使用抓包過濾器時(shí),用戶一定要謹(jǐn)慎,因?yàn)槿绻行?shù)據(jù)包因?yàn)榕c用戶定義的規(guī)則不符可能被丟棄,這些丟棄的數(shù)據(jù)包是無法恢復(fù)的。
創(chuàng)建過源器時(shí)要使用伯克利數(shù)據(jù)包過器(BPF)語法,還有很多協(xié)議分析軟件使用的也是這種語法,因?yàn)檫@種語法是行業(yè)標(biāo)準(zhǔn)。這種語法很容易學(xué)習(xí)和使用,使用基本的格式來構(gòu)建用戶的過濾標(biāo)準(zhǔn)就行了。
2. 如何使用抓包過濾器
最簡單直接的使用方式如下圖,在Wireshark主體界面,直接輸入抓捕過濾器表達(dá)即可。
也可以選擇已有的過濾器名稱,直接使用。
如下圖:
3. 如何管理過濾器
管理過濾器的目的是提前定義常用的過濾器,在使用的使用直接使用,以避免再去查找語法或書寫規(guī)范等操作。
選擇捕獲——捕獲過濾器,即可打開捕獲過濾器管理窗口。
在捕獲過濾器窗口,你可以定義自己想要的過濾器并保存,下次使用的使用,直接從下拉菜單選擇就行。
在定義捕獲過濾器時(shí),有個(gè)小技巧,就是多用復(fù)制功能,這種先通過復(fù)制形似的過濾器,然后再調(diào)整修改的方式能夠加快過濾器的定義速度,提高定義過濾器的準(zhǔn)確性。
4. 抓包過濾器語法規(guī)則
捕獲過濾器應(yīng)用于Winpcap,并使用 Berkeley Packet Filter(BPF)語法。這個(gè)語法被廣泛用于多種數(shù)據(jù)包抓包軟件,主要因?yàn)榇蟛糠謹(jǐn)?shù)據(jù)包抓包軟件都依賴于使用BPF的libpcap/Winpcap庫。
掌握BPF語法對(duì)你在數(shù)據(jù)包層級(jí)更深入地探索網(wǎng)絡(luò)來說是非常關(guān)鍵的。使用BPF語法創(chuàng)建的過濾器被稱為表達(dá)式,并且每個(gè)表達(dá)式包含一個(gè)或多個(gè)原語。每個(gè)原語包含一個(gè)或多個(gè)限定詞,然后跟著一個(gè)ID名字或者數(shù)字,如下圖是對(duì)限定詞的介紹。
下圖是一個(gè)完整的抓包過濾器示例:
在這個(gè)給定表達(dá)式的組成部分中,一個(gè)src限定詞和192.168.0.10組成了一個(gè)原語。這個(gè)原語本身就是表達(dá)式,可以用它只捕獲那些源IP地址是192.168.0.10的流量。
你可以使用以下3種邏輯運(yùn)算符,對(duì)原語進(jìn)行組合,從而創(chuàng)建更高級(jí)的表達(dá)式。
連接運(yùn)算符與(&&)
選擇運(yùn)算符或(II)
否定運(yùn)算符非(!)
舉例來說,下面的這個(gè)表達(dá)式只對(duì)源地址是192.168.0.10和源端口或目標(biāo)端口是80的流量進(jìn)行捕獲。
src 1921680.108 && port 80
5. 常見抓包過濾器列表
以下是常見的抓包過濾器,供參考。
過濾器 | 過濾器 |
host 192.168.1.1 | 所有與主機(jī)192.168.1.1相關(guān)的流量 |
port 8080 | 所有與8080端口相關(guān)的流量 |
src host 192.168.1.1 | 所有從主機(jī)192.168.1.1始發(fā)的流量 |
dst host 192. 168.1.1 | 所有去往主機(jī)192.168.1.1的流量 |
src port 53 | 所有由53端口發(fā)出的流量 |
dst port 21 | 所有去往21端口的流量 |
src 192.168.1.1 and tcp port21 | 所有從19216811且與tcp端口21相關(guān)的流量 |
dst 192.168.1.1 or dst 192.168.1.2 | 所有去往192.168.1.1或者去往192.168.1.2的流量 |
not port 80 | 所有與80端口不相關(guān)的流量 |
not src host 192.168.1.1 | 所有非主機(jī)192.168.1.1發(fā)出的流量 |
not port 21 and not port 22 | 所有既與21端口無關(guān),也與22端口無關(guān)的流量 |
tcp | 所有tcp流量 |
2、Wireshark顯示過濾器
和抓包過濾器不同,顯示過濾器是在現(xiàn)有的數(shù)據(jù)包中通過過濾條件,篩選查看想要的對(duì)象,不需要顯示的內(nèi)容被“隱藏”,而執(zhí)行了抓包過濾器,不需要的數(shù)據(jù)包則會(huì)直接被丟棄,無法挽回。
1. 顯示過濾器簡介
顯示過濾器遠(yuǎn)比抓包過濾器更加靈活和強(qiáng)大。顯示過濾器不會(huì)丟失數(shù)據(jù)包,只是為了增強(qiáng)用戶閱讀而將一部分?jǐn)?shù)據(jù)包隱藏起來。丟棄數(shù)據(jù)包有時(shí)并非明智選擇,因?yàn)橐坏?shù)據(jù)包被丟棄,這些數(shù)據(jù)包也就無法再恢復(fù)回來了。
在分組列表面板上面的輸入框,你可以輸入顯示過濾器,或者通過下拉顯示近期使用的過濾器記錄,來選擇使用顯示過濾器。
在用戶配置了顯示過濾器之后,只有那些滿足用戶過濾器設(shè)置條件的數(shù)據(jù)包才會(huì)被顯示出來。使用應(yīng)用了顯示過濾器之后,就會(huì)在Wireshark狀態(tài)欄的第二列看到使用顯示過濾器后的相關(guān)信息。
2. 如何快速創(chuàng)建顯示過濾器
顯示過濾器可以在Packet List(數(shù)據(jù)包列表面板)上面右鍵,從作為過濾器、準(zhǔn)備過濾器和對(duì)話過濾器中快速生成,如下圖所示。顯示過濾器使用的語法很容易理解并使用。對(duì)于新手來說,顯示過濾器是一種超級(jí)強(qiáng)大的功能,它會(huì)讓你分析起數(shù)據(jù)包游刃有余。
顯示過濾器可以用很多不同的參數(shù)作為匹配標(biāo)準(zhǔn),比如IP地址協(xié)議、端口號(hào)、某些協(xié)議頭部的參數(shù)。此外,用戶也用一些條件工具和組合運(yùn)算符創(chuàng)建出更加復(fù)雜的表達(dá)式。用戶可以將不同的表達(dá)式組合起來,讓軟件顯示的數(shù)據(jù)包范圍更加精確。在數(shù)據(jù)包列表面板中顯示的所有數(shù)據(jù)包都可以用數(shù)據(jù)包中包含的字段進(jìn)行過濾顯示。
3. 顯示過濾器語法結(jié)構(gòu)
每條顯示過濾器通常都是由若干原詞構(gòu)成,原詞之間通過連接符(如and或or等)連接,原詞之前還可以添加not表示相反的意思,其語法如下所列。
[not]表達(dá)式[and or] [not]表達(dá)式
下圖是顯示過濾器表達(dá)式中條件運(yùn)算符的解釋。
下圖是邏輯運(yùn)算符的說明解釋:
4. 常用顯示過濾器參考
以下是常見顯示過濾器,供參考。
5. 如何保存過濾器
當(dāng)你創(chuàng)建了很多捕獲和顯示過濾器之后,會(huì)發(fā)現(xiàn)其中有一些使用得格外頻繁。為了每次使用它們的時(shí)候都不重新輸入,可以讓W(xué)ireshark把常用的過濾器規(guī)則保存下來,供以后使用。
選擇分析——顯示過濾器,打開顯示過濾器窗口,就能看到系統(tǒng)默認(rèn)自帶的部分顯示過濾器。
根據(jù)自己的需求,在顯示過濾器窗口,使用新增和刪除功能,進(jìn)行過濾器創(chuàng)建和刪除,你也可以使用復(fù)制這一快捷的方法,先復(fù)制類似形式的已有過濾器,再通過修改名稱和過濾器內(nèi)容,形成新的過濾器。
三、使用Wireshark分析數(shù)據(jù)包技巧
在進(jìn)行數(shù)據(jù)包分析過程,一定會(huì)遇到成千上萬的數(shù)據(jù)包需要分析的常見。如何在如此大量數(shù)據(jù)的環(huán)境中快速得到你想要的對(duì)象,提高分析效率和精準(zhǔn)度呢?采用常見的分析技巧,也許能給你帶來極大的幫助。
1、使用查找數(shù)據(jù)包
如果要快速查找到分析想要的數(shù)據(jù),按ctr+f快捷鍵,打開查找輸入框,輸入框中可輸入顯示過濾器、十六進(jìn)制值、字符串和正則表達(dá)式內(nèi)容。
以下是搜索類型和例子,關(guān)于正則表達(dá)式,這里不再展開。
當(dāng)你選好選項(xiàng)并在文本框中輸入搜索關(guān)鍵詞之后,單擊查找,就會(huì)找到滿足該關(guān)鍵詞的第一個(gè)數(shù)據(jù)包。如果想要找到下一個(gè)匹配的數(shù)據(jù)包,按Ctrl-N,想要找前一個(gè),按Ctrl-B。
2、標(biāo)記數(shù)據(jù)包
在找到那些符合搜索條件的數(shù)據(jù)包之后,就可以根據(jù)需要進(jìn)行標(biāo)記。舉例來說,可能你希望將那些需要分開保存的數(shù)據(jù)包標(biāo)記出來,或者根據(jù)顏色快速查找它們。被標(biāo)記的數(shù)據(jù)包會(huì)以黑底白字顯示(你也可以單獨(dú)將標(biāo)記了的數(shù)據(jù)包選擇出來,然后作為數(shù)據(jù)包捕獲保存下來)。
被標(biāo)記的數(shù)據(jù)包將在你的屏幕上以高亮顯示。在下面這個(gè)例子中,數(shù)據(jù)包50被標(biāo)記并且顯示為深色。
如果你想要標(biāo)記一個(gè)數(shù)據(jù)包,右擊Packet List面板,并在彈出菜單中選擇 Mark Packet,或者在Packet List面板中選中一個(gè)數(shù)據(jù)包,然后按Ctrl-M。
如果想取消對(duì)一個(gè)數(shù)據(jù)包的標(biāo)記,再按一次Ctrl-M就可以將其取消。在一次捕獲中,你想標(biāo)記多少個(gè)數(shù)據(jù)包都可以。如果你想要在標(biāo)記的數(shù)據(jù)包間前后切換,分別按SHIFT-CTRL-N和SHIFT-CTRL-B切換即可。
3、打印數(shù)據(jù)包
盡管大多數(shù)情況下分析都會(huì)在電腦前進(jìn)行,但你仍然可能需要將捕獲結(jié)果打印出來。我經(jīng)常將數(shù)據(jù)包打印出來,并貼在顯眼的位置,這樣在做其他分析的時(shí)候,就可以快速地參考這些內(nèi)容。特別是在做報(bào)告的時(shí)候,能夠?qū)?shù)據(jù)包打印成一個(gè)PDF文件將是非常方便的。
如果需要打印捕獲的數(shù)據(jù)包,在主菜單中選擇文件——打印,打開打印對(duì)話框。
你可將選中的數(shù)據(jù)以文本或者Post Script的格式打印或者輸出到一個(gè)文件。與 另存為對(duì)話框相似,你也可以按一定范圍打印數(shù)據(jù)包,比如被標(biāo)記的數(shù)據(jù)包,或者作為過濾器篩選結(jié)果顯示出來的數(shù)據(jù)包。對(duì)于每一個(gè)數(shù)據(jù)包,你也可以在主面板中選擇打印對(duì)象。在你做好了這些選擇之后,單擊打印。
4、設(shè)定數(shù)據(jù)包相對(duì)時(shí)間參考
時(shí)間在數(shù)據(jù)包分析中非常重要。所有在網(wǎng)絡(luò)上發(fā)生的事情都是與時(shí)間息息相關(guān)的,并且你幾乎需要在每個(gè)捕獲文件中檢查時(shí)間規(guī)律以及網(wǎng)絡(luò)延遲。Wireshark意識(shí)到時(shí)間的重要性,并提供了一些相關(guān)的選項(xiàng)以供設(shè)定。下面介紹相對(duì)時(shí)間參考。
數(shù)據(jù)包的相對(duì)時(shí)間參考,可以讓你以一個(gè)數(shù)據(jù)包作為基準(zhǔn),而之后的數(shù)據(jù)包都以此計(jì)算相對(duì)時(shí)間戳。當(dāng)一系列的順序事件不是在捕獲開始時(shí)被觸發(fā),而是在中間某個(gè)地方被觸發(fā),這個(gè)功能會(huì)變得非常好用。
如果希望將某一個(gè)數(shù)據(jù)包設(shè)定為時(shí)間參考,在 Packet Listi面板中選擇作為相對(duì)參考的數(shù)據(jù)包,然后右鍵,選擇設(shè)置/取消設(shè)置時(shí)間參考。同樣,如果要取消一個(gè)數(shù)據(jù)包的相對(duì)時(shí)間參考,還是在這個(gè)地方操作。
當(dāng)你將一個(gè)數(shù)據(jù)包設(shè)定為時(shí)間參考之后,Packet List面板中這個(gè)數(shù)據(jù)包的Time列就會(huì)顯示為REF*,如下圖所示。只有當(dāng)捕獲的時(shí)間顯示格式設(shè)定為相對(duì)于捕獲開始的時(shí)間,設(shè)定數(shù)據(jù)包時(shí)間參考才有用處。使用其他設(shè)定都不會(huì)生成有用的結(jié)果,并且其產(chǎn)生的一堆時(shí)間會(huì)很令人迷惑。
數(shù)據(jù)包相對(duì)時(shí)間參考在分析網(wǎng)絡(luò)性能問題,網(wǎng)絡(luò)延時(shí),應(yīng)用性能問題及最終用戶體驗(yàn)時(shí)都極為重要,熟練掌握相對(duì)時(shí)間參考設(shè)置,能夠讓分析事半功倍。
下圖為網(wǎng)深科技NetInside企業(yè)級(jí)應(yīng)用性能管理系統(tǒng)自動(dòng)分析出網(wǎng)絡(luò)數(shù)據(jù)包中的各種延時(shí)及最終用戶體驗(yàn),企業(yè)級(jí)系統(tǒng)能夠針對(duì)任意一個(gè)用戶、任意一個(gè)IP、任意一個(gè)網(wǎng)段或任意一個(gè)應(yīng)用系統(tǒng)做這樣的分析輸出,而這樣的分析只需動(dòng)動(dòng)手指就能夠完成。
5、匯總分析一個(gè)抓包文件
抓包匯總功能在生成數(shù)據(jù)包分析報(bào)告時(shí)常常用到。
1. 如何打開匯總分析
要打開匯總分析,首先要打開一個(gè)抓包文件。
打開菜單——捕獲文件屬性,彈出的窗口就是匯總分析界面。
2. 匯總分析功能解讀
下圖是匯總分析界面,詳細(xì)顯示了該抓包文件的相關(guān)信息,下面我們將詳細(xì)解讀匯總分析中各個(gè)條目的內(nèi)容。
捕獲文件屬性對(duì)話框可以分為下面幾部分。
文件:顯示的是一些總體的信息,比如文件名、文件所在位、長度、哈希、使用的格式、封裝等。
時(shí)間:這一部分顯示抓取第一個(gè)數(shù)據(jù)包和最后一個(gè)數(shù)據(jù)包的時(shí)間,以及之間經(jīng)歷的時(shí)間(也就是總的抓包時(shí)長)。
捕獲:這一部分會(huì)顯示捕獲報(bào)文的網(wǎng)卡信息、操作系統(tǒng)信息及當(dāng)前使用的Wireshark系統(tǒng)版本信息。
接口:這里會(huì)顯示所有抓取流量接口的詳細(xì)信息
統(tǒng)計(jì):這里會(huì)顯示與所有顯示過濾器有關(guān)的統(tǒng)計(jì)數(shù)據(jù),以及應(yīng)用過濾器之后遭忽略數(shù)據(jù)包的百分比。
捕獲文件描述:用戶可以在這里寫入備注信息。
下圖是統(tǒng)計(jì)部分的內(nèi)容,它們提供了各種詳細(xì)的數(shù)據(jù),包括以表格形式提供的匯總數(shù)據(jù),其中包含了各類基本信息,如數(shù)據(jù)包的平均大小、抓取到的數(shù)據(jù)包總數(shù),第一次抓到數(shù)據(jù)包和最后一次抓到數(shù)據(jù)包之間經(jīng)歷的時(shí)間等。
比如,我們?cè)趹?yīng)用顯示過濾器之后生成了一個(gè)抓包文件。在此之后,我們?cè)俅未蜷_捕獲文件屬性窗口。可以看到統(tǒng)計(jì)部分顯示了捕獲文件和使用了顯示過濾器后的結(jié)果比較。
捕獲文件屬性窗口所提供的所有信息來源于所有打開的數(shù)據(jù)包文件,如果使用了顯示過濾器,則顯示使用了過濾器的數(shù)據(jù)包。
6、查看數(shù)據(jù)包中協(xié)議信息
網(wǎng)絡(luò)協(xié)議是網(wǎng)絡(luò)分析的基礎(chǔ)信息,網(wǎng)絡(luò)分析人員拿到一個(gè)抓包文件后,往往會(huì)快速了解一下。一個(gè)抓包文件中都由哪些協(xié)議組成,這些協(xié)議的占用比例分別是多少,協(xié)議層級(jí)關(guān)系如何等等,這些疑問都可以由Wireshark自帶的協(xié)議分級(jí)功能來回答。
1. 打開協(xié)議分級(jí)
要打開協(xié)議分析,意味著你已經(jīng)打開了一個(gè)抓包文件。
打開菜單——協(xié)議分級(jí),彈出的窗口就是協(xié)議分級(jí)統(tǒng)計(jì)界面。
協(xié)議分級(jí)統(tǒng)計(jì)可以給用戶提供通信中使用到的各個(gè)協(xié)議的分布信息,同時(shí)也可以向用戶展示出那些不符合網(wǎng)絡(luò)基準(zhǔn)的異常操作。所謂各個(gè)協(xié)議的分布信息,是指這個(gè)界面可以顯示某種協(xié)議在兩臺(tái)主機(jī)間通信數(shù)據(jù)中所占的百分比以及相關(guān)的統(tǒng)計(jì)數(shù)據(jù),比如顯示每種協(xié)議分別發(fā)送和接收了多少比特、多少個(gè)數(shù)據(jù)包。用戶網(wǎng)絡(luò)當(dāng)前的流量狀態(tài)與網(wǎng)絡(luò)正常狀態(tài)下建立的流量基線相比較,就很容易發(fā)現(xiàn)網(wǎng)絡(luò)中的異常操作。
2. 協(xié)議分級(jí)統(tǒng)計(jì)詳細(xì)解讀
協(xié)議分級(jí)統(tǒng)計(jì)以直觀的樹形圖展開顯示,第一列分級(jí)顯示了協(xié)議信息,以及協(xié)議之間的層級(jí)關(guān)系。
后面分別列舉多個(gè)指標(biāo)信息,下面詳細(xì)解讀一下。
按分組百分比:顯示了抓包文件中所含數(shù)據(jù)包在每一種協(xié)議類型中的占比情況(按數(shù)據(jù)包的個(gè)數(shù)來統(tǒng)計(jì))。
分組:顯示了每一種協(xié)議類型的數(shù)據(jù)包的個(gè)數(shù)。
按字節(jié)百分比:顯示了抓包文件中所含數(shù)據(jù)包在每一種協(xié)議類型中的占比情況(按數(shù)據(jù)包的字節(jié)數(shù)來統(tǒng)計(jì))。
字節(jié):顯示了每一種協(xié)議類型的數(shù)據(jù)包的字節(jié)數(shù)
比特/秒:顯示了某種協(xié)議類型的數(shù)據(jù)包在抓包時(shí)段內(nèi)的傳輸速率。
結(jié)束 分組:顯示了隸屬于該協(xié)議類型的數(shù)據(jù)包的凈數(shù)量。
結(jié)束 字節(jié):顯示了隸屬于該協(xié)議類型的數(shù)據(jù)包的凈字節(jié)數(shù)。
結(jié)束 位/秒:顯示了隸屬于該協(xié)議類型的數(shù)據(jù)包在抓包時(shí)段內(nèi)的凈傳輸速率。
3. 如何知道某人在干什么
如果要快速查看某個(gè)人在網(wǎng)絡(luò)上干了什么,只需要先做個(gè)顯示過濾器,過濾器的內(nèi)容是這個(gè)人的IP地址,例如ip.addr==10.66.2.100。然后在打開協(xié)議分析統(tǒng)計(jì)查看,查看到的就是這個(gè)人相關(guān)的所有協(xié)議信息。
協(xié)議分級(jí)統(tǒng)計(jì)窗口能夠提供當(dāng)前網(wǎng)絡(luò)中活動(dòng)的協(xié)議信息,是分析者經(jīng)常使用的功能之一,因?yàn)樗钱?dāng)前網(wǎng)絡(luò)的直觀寫照。
7、數(shù)據(jù)包會(huì)話分析
在網(wǎng)絡(luò)分析中,經(jīng)常會(huì)有這樣一個(gè)需求,就是想知道當(dāng)前網(wǎng)絡(luò)誰最活躍,誰和誰之間的流量傳輸最大,即占用的帶寬最多,以及最活躍的對(duì)象占用了多大的帶寬。
1. 什么是會(huì)話
網(wǎng)絡(luò)中的一個(gè)會(huì)話(conversation),就如同現(xiàn)實(shí)中兩個(gè)人在接打電話,舉例來說,張三和李四會(huì)話可能是這樣子的:“你好嗎?”,“我很好,你呢?”,“非常好!”。
而在網(wǎng)絡(luò)中的會(huì)話,描述的是兩臺(tái)主機(jī)(端點(diǎn))之間進(jìn)行的通信。192.168.1.2和192.168.0.10之間的一個(gè)會(huì)話可能就是這樣的“SYN”” SYN/ACK””ACK”。
會(huì)話可以說基于數(shù)據(jù)鏈路層MAC之間的,也可以是基于網(wǎng)絡(luò)層IP之間的,如下圖舉例說明這2類會(huì)話。
2. 如何打開會(huì)話分析
要打開會(huì)話分析,點(diǎn)擊菜單統(tǒng)計(jì)——會(huì)話。
在打開的窗口,用戶就會(huì)看到下圖所示內(nèi)容,這個(gè)窗口顯示出很多列信息,包括網(wǎng)絡(luò)中正在傳輸?shù)臄?shù)據(jù)包、網(wǎng)絡(luò)中傳輸?shù)谋忍財(cái)?shù)量、數(shù)據(jù)流量、設(shè)備的MAC地址,以及很多其他的詳細(xì)信息。在窗口的最上方,用戶可以看到很多標(biāo)簽,每個(gè)標(biāo)簽顯示關(guān)于一種協(xié)議的信息在標(biāo)簽中除了協(xié)議名稱之外,用戶還可以看到個(gè)數(shù)字,這個(gè)數(shù)字表示的是當(dāng)前獨(dú)立會(huì)話的數(shù)量。
3. 如何查看流量最大的會(huì)話
想要找出網(wǎng)絡(luò)中誰的流量最大,看看這些流量是從哪里傳輸過來的,那么用戶就可以在打開的會(huì)話分析窗口,點(diǎn)擊Pv4標(biāo)簽,然后按照降序來排列數(shù)據(jù)包。在這里,窗口中顯示的第一行信息就是這位用戶正在尋找的答案。如下圖,該圖顯示了這里所說的信息。
在第一行中,用戶可以看到各個(gè)端點(diǎn)收發(fā)了多少數(shù)據(jù)包字節(jié),以及設(shè)備抓包的總時(shí)長。如果用戶想要?jiǎng)?chuàng)建個(gè)過器,也可以用同樣的方法右鍵點(diǎn)擊第一行信息,然后就可以創(chuàng)建出用戶想要設(shè)置的表達(dá)式了。選擇第一個(gè)可選項(xiàng)A<>B,這里只會(huì)顯示與地址A( Address A)和地址B( Address B)有關(guān)的數(shù)據(jù)包。
4. 會(huì)話分析常用技巧
在會(huì)話分析過程中,最常用的是針對(duì)網(wǎng)絡(luò)第二、三、四層內(nèi)容進(jìn)行分析。通過點(diǎn)擊會(huì)話分析窗口中不同標(biāo)簽,找到分析答案。
Ethernet標(biāo)簽:來觀察具有不同MAC地址的主機(jī)間發(fā)生過什么樣的“溝通”。
IPv4標(biāo)簽:來觀察具有不同IPv4地址的主機(jī)間有過什么樣的“交流”。
TCP或UDP標(biāo)簽:來觀察具有不同IPv4地址的主機(jī)間所建立的各種TCP(或UDP)會(huì)話。
在現(xiàn)實(shí)網(wǎng)絡(luò)分析中,使用這些常用分析標(biāo)簽,不但能夠分析二層的廣播風(fēng)暴、MAC地址沖突等故障,而且能夠分析網(wǎng)絡(luò)中存在的掃描現(xiàn)象,感染病毒的主機(jī)定位,異常服務(wù)器發(fā)現(xiàn),或者異常的應(yīng)用連接行為。
遺憾的是,Wireshark無法通過圖形方式直觀展現(xiàn)這些內(nèi)容,只能是一行行的表格信息。
8、數(shù)據(jù)包終端分析
和會(huì)話分析類似,會(huì)話分析告訴我們,網(wǎng)絡(luò)中誰與誰之間的表現(xiàn)最活躍,占用的流量最大。終端分析,能夠告訴我們,每個(gè)終端的不同表現(xiàn)和數(shù)據(jù)。終端可以是一個(gè)MAC地址,也可以是一個(gè)IP地址,還可以是一個(gè)IP地址+端口(TCP或UDP應(yīng)用)。
1. 如何使用終端分析
終端即網(wǎng)絡(luò)會(huì)話中的一側(cè)。要打開終端分析,點(diǎn)擊菜單統(tǒng)計(jì)——終端。即可打開終端分析窗口。
每臺(tái)主機(jī)都可以借助網(wǎng)絡(luò)接口卡(NIC)中的物理地址(常常稱為MAC地址)進(jìn)行通信,設(shè)備會(huì)使用這個(gè)地址在一個(gè)本地網(wǎng)絡(luò)中實(shí)現(xiàn)通信。
比如說,在我們觀察到一個(gè)網(wǎng)絡(luò)中的流量異常繁忙時(shí),就會(huì)發(fā)現(xiàn)這個(gè)流量與網(wǎng)絡(luò)中日常傳輸?shù)牧髁磕J讲煌=酉聛恚覀兙拖M軌蛘页龅降资悄呐_(tái)設(shè)備創(chuàng)建流量的模式與過去不一樣。對(duì)于網(wǎng)絡(luò)管理員來說,這時(shí)就應(yīng)該使用終端分析,在打開終端分析窗口之前,可以從數(shù)據(jù)包列表面板中隨便點(diǎn)擊一個(gè)TCP數(shù)據(jù)包。此時(shí),用戶會(huì)在頂部看到很多標(biāo)簽,每個(gè)標(biāo)簽分別顯示一種不同的協(xié)議。其中有些協(xié)議是激活的,有些則是非激活的。當(dāng)流量中包含了與某種協(xié)議有關(guān)的數(shù)據(jù)包時(shí),這個(gè)標(biāo)簽中顯示的協(xié)議就是激活的;否則,這個(gè)協(xié)議就是非激活的。
首次打開終端分析界面,默認(rèn)顯示二層網(wǎng)絡(luò)的終端分析信息。在窗口中,用戶可以看到很多關(guān)于各個(gè)端點(diǎn)的詳細(xì)信息,比如傳輸?shù)臄?shù)據(jù)包總數(shù)、傳輸?shù)目傋止?jié)數(shù),以及一個(gè)端點(diǎn)接收和傳輸?shù)淖止?jié)總數(shù)與數(shù)據(jù)包總數(shù)。
如果想要分析網(wǎng)絡(luò)三次信息,只需點(diǎn)IPv4標(biāo)簽。就可以輕而易舉的查看到網(wǎng)絡(luò)中IP地址信息,通過排序,就能找到數(shù)據(jù)量最大的終端地址。
2. 終端分析技巧
在終端分析窗口,顯示了大量的標(biāo)簽和密密麻麻的數(shù)據(jù)排列,可能有讓人摸不著頭腦。下面介紹部分終端分析的技巧,用來識(shí)別和分析常見的網(wǎng)絡(luò)故障。
Ethernet端點(diǎn)(MAC地址)少,IP端點(diǎn)(IP地址)多:對(duì)于這種現(xiàn)象,可能的原因是有一臺(tái)路由器來負(fù)責(zé)轉(zhuǎn)發(fā)所有進(jìn)、出本地LAN(IP子網(wǎng))的IP流量。也就是說,對(duì)于源或目的IP地址不隸屬于本地IP子網(wǎng)的所有數(shù)據(jù)包,其源或目的MAC地址都會(huì)是那臺(tái)路由器內(nèi)網(wǎng)LAN口的MAC地址,這屬于正常情況。
IP端點(diǎn)(IP地址)少,TCP端點(diǎn)(TCP端口號(hào))多:就是每個(gè)IP端點(diǎn)都試圖建立或已經(jīng)建立了多條TCP連接。對(duì)于
這種現(xiàn)象,可能正常也可能不正常。若建立或試圖建立多條TCP連接的IP端點(diǎn)為服務(wù)器,這就屬于正常情況;否則,極有可能是有人在發(fā)動(dòng)網(wǎng)絡(luò)攻擊(比如, TCP SYN攻擊),或開啟了基于P2P的程序而導(dǎo)致的。
終端分析通常與會(huì)話分析結(jié)合使用,可以快速發(fā)現(xiàn)網(wǎng)絡(luò)中占用流量最大的節(jié)點(diǎn)或會(huì)話,也可以配合顯示過濾器使用。通過終端分析,也能夠發(fā)現(xiàn)部分常見網(wǎng)絡(luò)或應(yīng)用故障,協(xié)助管理員快速解決問題。
9、HTTP協(xié)議分析工具
Web應(yīng)用作為全球使用最多的應(yīng)用,HTTP協(xié)議可謂功不可沒。無論是個(gè)人博客、電子交易平臺(tái)或是新聞資訊,Web站點(diǎn)隨處可見,而后臺(tái)默默無聞支撐其運(yùn)行的則是HTTP協(xié)議,因此,如果要運(yùn)維和優(yōu)化好關(guān)鍵的基于Web應(yīng)用的核心業(yè)務(wù)系統(tǒng),掌握HTTP協(xié)議基礎(chǔ)和工作原理,常見故障分析和性能優(yōu)化等技能必不可少。
Wireshark內(nèi)置了強(qiáng)大的HTTP協(xié)議分析功能。
點(diǎn)擊菜單統(tǒng)計(jì)——HTTP,就可以看到Wireshark內(nèi)置的針對(duì)HTTP的分析功能列表,一共4個(gè),分別是分組計(jì)數(shù)器、請(qǐng)求、負(fù)載分配和請(qǐng)求序列(Request Sequences)。
如下圖:
分組計(jì)數(shù)器:用來了解抓包文件中HTTP數(shù)據(jù)包的總數(shù),以及其中HTTP請(qǐng)求數(shù)據(jù)包和HTTP響應(yīng)數(shù)據(jù)包分別為多少。
請(qǐng)求:用來了解(主機(jī))請(qǐng)求訪問的Web站點(diǎn)的分布情況,以及所訪問的Web站點(diǎn)上的具體資源(指向資源的URL)。
負(fù)載分配:用來了解抓包文件中HTTP數(shù)據(jù)包(包括HTTP請(qǐng)求和HTTP響應(yīng)數(shù)據(jù)包)在各Web站點(diǎn)間的分布情況(即訪問過哪些web站點(diǎn))。
請(qǐng)求序列:HTTP請(qǐng)求序列使用HTTP的Referer和Location頭部信息,將捕獲的HTTP請(qǐng)求排序以樹狀顯示。該功能可以讓分析人員能夠看到一個(gè)HTTP請(qǐng)求與下一個(gè)HTTP請(qǐng)求的關(guān)系。
10、讓W(xué)ireshark圖形說話
Wireshark內(nèi)置了強(qiáng)大的數(shù)據(jù)流圖形,通過圖形可以直觀的分析和定位故障原因。使用者想要精準(zhǔn)的分析出問題原因,熟練掌握和使用圖形功能是必備要求之一。
Wireshark自帶了I/O圖表、流量圖、TCP流圖形、UDP多播流以及對(duì)語音流量分析中的部分圖形,由于UDP多播流正在開發(fā),語音流分析使用相對(duì)較少,目前重點(diǎn)簡單介紹前三種圖形功能。
1. I/O圖表
I/O圖表,借助于該工具,同時(shí)配搭預(yù)先定義的顯示過濾器,便可以生成各種易于閱讀的信息統(tǒng)計(jì)圖表。比如,可生成單一IP主機(jī)吞吐量統(tǒng)計(jì)圖表、兩臺(tái)或多臺(tái)主機(jī)間流量負(fù)載統(tǒng)計(jì)圖表、應(yīng)用程序網(wǎng)絡(luò)吞吐量統(tǒng)計(jì)圖表,以及TCP現(xiàn)象分布統(tǒng)計(jì)圖表等。
通過這種方式,我們可以看到流量的波峰和波谷,這個(gè)圖形可以用來找出網(wǎng)絡(luò)中的問題,甚至可以用來進(jìn)行流量監(jiān)測(cè)。在圖中x軸的數(shù)據(jù)表示時(shí)間,單位為秒,而y軸的數(shù)據(jù)表示的則是每單位時(shí)間的數(shù)據(jù)包數(shù)量。x軸和y軸的范圍可以根據(jù)用戶的需要而進(jìn)行調(diào)整,X軸的范圍是從10到0.001秒,而y軸數(shù)值的范圍則是數(shù)據(jù)包/字節(jié)比特。
2. 流量圖
流量圖,該工具直觀顯示了會(huì)話節(jié)點(diǎn)之間的信息,包括時(shí)間、端口及詳細(xì)的TCP傳輸控制和數(shù)據(jù)傳輸報(bào)文信息。
這是Wireshark最強(qiáng)大的特性之ー,當(dāng)用戶需要面對(duì)存在大量連接斷開、大量數(shù)據(jù)幀丟失或者大量流量重傳等情況的環(huán)境時(shí),這種特性就可以協(xié)助用戶進(jìn)行排錯(cuò)。數(shù)量圖可以讓我們創(chuàng)建一個(gè)很多列的圖,這張圖會(huì)顯示兩個(gè)端點(diǎn)間傳輸流量的匯總信息,它甚至可以讓用戶將輸出結(jié)果導(dǎo)出為一個(gè)簡單的文本格式文件。這是驗(yàn)證客戶端和服務(wù)器之間連接狀態(tài)的最佳方式。
3. TCP流圖形
TCP流圖形,利用該工具,可深入分析單個(gè)TCP連接的內(nèi)部傳輸和控制細(xì)節(jié)。因此,該工具能大大幫助網(wǎng)管人員分析和查找TCP故障,定位故障根本原因。
TCP流圖形又可以按照功能細(xì)分,分別有時(shí)間分析、吞吐量分析、往返延時(shí)分析及窗口大小變化分析等等。
四、基于生成的IP統(tǒng)計(jì)分析
在網(wǎng)絡(luò)分析過程,往往會(huì)使用到對(duì)某個(gè)地址的詳細(xì)內(nèi)容進(jìn)行分析和統(tǒng)計(jì),這個(gè)要求使用顯示過濾器配合會(huì)話及終端分析功能還不足以滿足。
1、怎樣打開IP統(tǒng)計(jì)
基于IP統(tǒng)計(jì)分別針對(duì)IPv4和IPv6,這里只介紹IPv4的統(tǒng)計(jì)功能。點(diǎn)擊菜單統(tǒng)計(jì)——IPv4 Statistics下拉菜單,能看到Wireshark自帶的4個(gè)統(tǒng)計(jì)IP的功能(分別是所有地址、目標(biāo)和端口、IP協(xié)議類型及源–目標(biāo)地址)。
如下圖:
2、IP統(tǒng)計(jì)分析詳細(xì)介紹
以下是對(duì)各個(gè)IP統(tǒng)計(jì)功能的詳細(xì)介紹。
1. 所有地址
所有地址IP統(tǒng)計(jì),顯示抓包文件中每個(gè)IP地址的數(shù)據(jù)包個(gè)數(shù),頻率,占有百分百和高峰值相關(guān)信息。
使用者也可以通過顯示過濾器,只查看某一個(gè)或幾個(gè)IP的統(tǒng)計(jì)數(shù)據(jù),顯示過濾器在下方直接輸入即可。
2. 目標(biāo)和端口
目標(biāo)和端口,統(tǒng)計(jì)了各個(gè)IP傳輸層端口的數(shù)據(jù)包個(gè)數(shù)及相關(guān)信息。這個(gè)功能能夠詳細(xì)查看任意IP地址都在通過哪些端口傳輸數(shù)據(jù)。
3. IP協(xié)議類型
IP協(xié)議類型,統(tǒng)計(jì)不同協(xié)議的數(shù)據(jù)包個(gè)數(shù),占比及相關(guān)信息。
4.源-目標(biāo)地址
源和目標(biāo)地址統(tǒng)計(jì),分別查看作為源地址或目的地址的IP統(tǒng)計(jì)信息。
在一份分析報(bào)告中,如果要詳細(xì)分析并記錄某個(gè)IP地址的內(nèi)容和網(wǎng)絡(luò)活動(dòng),采用上述IP統(tǒng)計(jì)功能,就能夠精確、細(xì)致的統(tǒng)計(jì)該地址的所有細(xì)節(jié)信息,該功能也可用于異常分析。
五、如何定位網(wǎng)絡(luò)性能問題
定位分析網(wǎng)絡(luò)性能問題是網(wǎng)絡(luò)分析中最為常見的需求之一,影響網(wǎng)絡(luò)性能的因素很多,每一個(gè)轉(zhuǎn)發(fā)數(shù)據(jù)包的環(huán)節(jié)出現(xiàn)了問題,都有可能會(huì)造成性能的下降。
幸運(yùn)的是,如果我們采集到了這些數(shù)據(jù)傳輸過程的原始報(bào)文,那么則可以通過Wireshark撥繭抽絲,一步步找到問題的可能答案。
1、IO圖形分析工具介紹
首先,打開你想要分析的抓包文件。
點(diǎn)擊菜單統(tǒng)計(jì)——I/O圖表。
下圖是I/O圖表信息,在圖形窗口中,上半部分區(qū)域?yàn)閳D形顯示區(qū)域,下半部分區(qū)域?yàn)轱@示過濾器配置區(qū)域。
在下半部分區(qū)域,通過“+”或復(fù)制按鈕,新增一個(gè)圖形名稱,寫入過濾器內(nèi)容,設(shè)置顏色,同樣可以設(shè)置圖形的樣式,Y軸和X軸的信息,以及圖形顯示粒度。勾選最前面的enabled列復(fù)選框,就能生效。
在Style列,雙擊對(duì)應(yīng)的行,可以選擇圖形顯示風(fēng)格,例如line(線)、 Impulse(脈沖)、Fbar(粗線)、Dot(點(diǎn))等等。
在Y Axis列,雙擊對(duì)應(yīng)的行,可以選擇Y軸數(shù)據(jù)單位,例如Packets(數(shù)據(jù)包)、 Bytes(字節(jié))、bits(位)等等,還有很多公式可選擇,具體內(nèi)容后續(xù)會(huì)有詳細(xì)講解。
還有很多其它設(shè)置,比如Y字段,顯示粒度,顯示間隔,鼠標(biāo)行為,顯示時(shí)間等,相對(duì)比較簡單,不再一一細(xì)述。
2、使用I/O工具分析
上面講述了I/O圖形分析工具的基本信息,以下看看如何使用該工具分析。
I/O分析工具的精髓在于與顯示過濾器的配合使用,所以對(duì)使用者來說,對(duì)顯示過濾器的理解和熟練程度,直接關(guān)系到I/O分析工具的功能發(fā)揮如何。
例如,如果要分析192.168.30.124這個(gè)地址在某段時(shí)間的數(shù)據(jù)傳輸狀況,使用者可以創(chuàng)建過濾器,然后設(shè)置該對(duì)象的圖形顯示格式,調(diào)整Y軸和X軸的信息,不但能夠從整體上查看這個(gè)地址的數(shù)據(jù)傳輸情況,也能夠查看到更細(xì)微信息(例如把X軸時(shí)間調(diào)整為10毫秒的時(shí)間傳輸情況)。
3、測(cè)試網(wǎng)絡(luò)吞吐量
網(wǎng)絡(luò)吞吐量在網(wǎng)絡(luò)分析中常常遇到,比如分析者想知道某個(gè)客戶端和服務(wù)器的傳輸速率,或者某臺(tái)服務(wù)器在網(wǎng)絡(luò)中的帶寬大小等。利用數(shù)據(jù)包分析軟件,能夠精確分析任何對(duì)象的網(wǎng)絡(luò)吞吐量,這為進(jìn)一步容量規(guī)劃、策略調(diào)整及應(yīng)用優(yōu)化都有重要意義。
1. Wireshark能測(cè)試哪些吞吐量
所謂測(cè)試網(wǎng)絡(luò)吞吐量,既可以指測(cè)算通信線路上兩臺(tái)設(shè)備(客戶端和服務(wù)器、IP電話-IP電話等)間相互通信的吞吐量,也可以指測(cè)算兩臺(tái)設(shè)備上運(yùn)行的某一具體應(yīng)用程序間相互通信的吞吐量。
一般來說,常規(guī)的流量測(cè)試方法包括:測(cè)算主機(jī)到主機(jī)的流量、測(cè)試發(fā)往某指定服務(wù)器的所有流量、測(cè)試發(fā)往某指定服務(wù)器運(yùn)行的某種應(yīng)用程序的所有流量、統(tǒng)計(jì)發(fā)生在某指定服務(wù)器與TCP性能有關(guān)的所有現(xiàn)象。
如下圖:
測(cè)試鏈路上未端設(shè)備之間基于單個(gè)連接所發(fā)生的流量,并了解流量的來源,是定位網(wǎng)絡(luò)故障的第一步。
2. 測(cè)試兩端設(shè)備的吞吐量
打開需要測(cè)試的抓包文件,點(diǎn)擊菜單統(tǒng)計(jì)——I/O圖表,在選項(xiàng)中,設(shè)置所有分組Y軸單位為bits,默認(rèn)看到的就是該抓包文件中所有對(duì)象的吞吐量。
如下圖:
假如,要測(cè)試客戶端192.168.30.124與服務(wù)器114.112.96.29之間的吞吐量,則可以在I/O圖表下部添加過濾器,表達(dá)式為 ip.addr==114.112.96.29 && ip.addr==192.168.30.124,再設(shè)置顯示樣式和顏色,Y軸設(shè)置為bits,時(shí)間間隔使用默認(rèn)的1秒。這時(shí)候新建項(xiàng)目所顯示的內(nèi)容,就是我們想要測(cè)試的這2個(gè)終端之間的吞吐量。
如下圖:
3.測(cè)試某個(gè)應(yīng)用程序的吞吐量
測(cè)試某個(gè)應(yīng)用程序的吞吐量,方法與測(cè)試兩端連接吞吐量的類似。只是過濾器內(nèi)容不同。假如要測(cè)試某個(gè)抓包文件443端口的所有流量。方法如下。
打開抓包文件,點(diǎn)擊菜單統(tǒng)計(jì)——I/O圖表,設(shè)置過濾器,表達(dá)式為tcp.port==443,太簡單調(diào)整顯示設(shè)置,即可得到443端口應(yīng)用的流量。如下圖。
4、使用TCP數(shù)據(jù)流圖形分析窗口大小
滑動(dòng)窗口控制機(jī)制,是整個(gè)TCP協(xié)議工作的中控臺(tái)或核心站。當(dāng)TCP連接建立時(shí),協(xié)議棧會(huì)為不同的連接劃分出獨(dú)立的緩沖空間,而在數(shù)據(jù)傳輸過程中,則存在復(fù)雜的傳輸控制過程。由于這個(gè)過程管理和處理的復(fù)雜性,很多性能問題往往就出現(xiàn)在這里。
1. 打開TCP窗口分析界面
打開需要分析的抓包文件。選擇想要分析的數(shù)據(jù)幀。
點(diǎn)擊菜單統(tǒng)計(jì)——TCP流圖形——窗口尺寸。
如下圖:
窗口大小分析面向單向TCP會(huì)話,從打開的窗口可以看到題目信息,窗口尺寸對(duì)于某某連接及方向。如下圖,顯示了114.112.96.29向192.168.30.124流向中,443端口發(fā)往54645端口數(shù)據(jù)的窗口大小及數(shù)據(jù)傳輸情況。
2. 分析TCP滑動(dòng)窗口
在TCP窗口分析界面,默認(rèn)顯示2類線條。最上面淺綠色的是接收方宣告的窗口大小(Windows Size),代表接收方還有多大緩沖空間可接收數(shù)據(jù)。下方深色黑點(diǎn)則代表數(shù)據(jù)發(fā)送方的實(shí)際數(shù)據(jù)傳輸大小。
在滑動(dòng)窗口分析過程,分析人員可以使用鼠標(biāo)放縮功能,定位到具體的某一個(gè)細(xì)節(jié),詳細(xì)分析。如下圖,通過鼠標(biāo)放縮,查看數(shù)據(jù)發(fā)送方在某一時(shí)刻具體的數(shù)據(jù)發(fā)送大小和數(shù)量。
3. 常見TCP窗口故障分析技巧
TCP滑動(dòng)窗口分析是網(wǎng)絡(luò)性能分析中關(guān)鍵的分析對(duì)象之一。針對(duì)TCP窗口可能出現(xiàn)的相關(guān)信息或錯(cuò)誤,Wireshark通過內(nèi)置專家系統(tǒng)會(huì)自動(dòng)提示,或者以不同的顏色區(qū)分顯示。分析人員也可以根據(jù)自己的喜好或分析習(xí)慣,自定義顯示樣式。
下面簡要列舉一下在Wireshark專家系統(tǒng)中,可能會(huì)看到的關(guān)于TCP窗口的相關(guān)信息,這其中可能是錯(cuò)誤,也可能是告警或記錄。
Zero Window:如果TCP接收方窗口已滿,這時(shí)接收方會(huì)通知發(fā)送方,讓發(fā)送方暫停一段時(shí)間,不要繼續(xù)發(fā)送消息。這時(shí),在Wireshark專家系統(tǒng)中就會(huì)查看到這類消息。
Zero Window Probe:如果從客戶端那里接收數(shù)據(jù)包的服務(wù)器不能以客戶端發(fā)送數(shù)據(jù)包的相同速率來處理數(shù)據(jù)包,就會(huì)導(dǎo)致丟包的情況。在這種情況下,服務(wù)器就會(huì)向客戶端發(fā)送零窗口探測(cè)包。讓客戶端暫停一段時(shí)間不要發(fā)送數(shù)據(jù)包,同時(shí)保持這條連接不會(huì)斷開。
Zero Window Probe ACK:和Zero Window Probe消息的例子有關(guān)。Zero Window Probe ACK消息是客戶端發(fā)送的消息,其作用是對(duì)服務(wù)器的請(qǐng)求做出響應(yīng)。
Window is full:這種消息的作用是通知發(fā)送方主機(jī),TCP接收窗口當(dāng)前已滿。
Windows Update:這類消息可以讓發(fā)送方意識(shí)到TCP接收窗口的大小已更新。
當(dāng)然,與TCP窗口相關(guān)的分析信息不僅限于上述列舉出來的。總之,滑動(dòng)窗口分析在數(shù)據(jù)包分析過程占有較高的比重和分量,是分析人員不能忽視的對(duì)象。只有詳細(xì)了解了在Wireshark中顯示的這些關(guān)于TCP窗口的信息的意義和產(chǎn)生原因,才能在實(shí)戰(zhàn)中得心應(yīng)手,精準(zhǔn)分析出問題根本原因。
5、服務(wù)器響應(yīng)延時(shí)分析
下面這臺(tái)關(guān)鍵主機(jī),服務(wù)器的響應(yīng)延時(shí)竟然有1秒多。
因?yàn)楸韱沃锌吹降臄?shù)據(jù)是個(gè)平均值,所以時(shí)延分布情況,需要時(shí)一步確認(rèn)。在單個(gè)IP最終用戶體驗(yàn)分析中,搜索43的主機(jī),情況如下:
發(fā)現(xiàn)這臺(tái)主機(jī)的服務(wù)器響應(yīng)延時(shí)都在秒級(jí)波動(dòng),最高值達(dá)到4秒,基于采樣時(shí)間原因,我們有理由相信真實(shí)延時(shí)肯定會(huì)更大,且在同時(shí)間段,幾乎沒有流量,那么這個(gè)現(xiàn)象就比較奇怪了。
沒有連接失敗請(qǐng)求,沒有多大流量,但服務(wù)器響應(yīng)延時(shí)較大,因?yàn)樯a(chǎn)網(wǎng)都是千M網(wǎng)絡(luò),看上去根本不存在影響時(shí)延的因素,所以什么原因?qū)е麓饲闆r,值得探究。
為了進(jìn)一步分析,我們?cè)趎etinside系統(tǒng)里面,把這臺(tái)主機(jī)在時(shí)間點(diǎn)13:36前后的數(shù)據(jù)包下載下來(按時(shí)間點(diǎn)下載主要是為了減少數(shù)據(jù)包的大小,更精準(zhǔn)分析問題),導(dǎo)入wireshark,一探究竟。
因?yàn)榉?wù)器的響應(yīng)時(shí)間,本質(zhì)上就是RTT(RoundTrip Time),即往返時(shí)間。測(cè)量方法是發(fā)送一個(gè)特定序號(hào)的字節(jié),并記錄時(shí)間。
當(dāng)收到確認(rèn)的ACK之后,把ACK的時(shí)間,減掉之前記錄的發(fā)送時(shí)間,就可以得到RTT值,該值比較大時(shí),通常會(huì)被專家系統(tǒng)診斷為“網(wǎng)絡(luò)或服務(wù)器繁忙“。
1.配置wireshark
數(shù)據(jù)包導(dǎo)入wireshark后,分析RTT需要先進(jìn)行簡單配置,如下:
該步驟是開啟TCP會(huì)話時(shí)間戳計(jì)算,默認(rèn)可能已經(jīng)開啟,如果沒有開啟的話,手動(dòng)按上面方法開啟即可,然后按以下方法,把RTT應(yīng)用為列:
列的名字,可以自行修改。需要注意的是,這個(gè)時(shí)間戳是由發(fā)送端系統(tǒng)依據(jù)自己的時(shí)鐘打上去的,如果系統(tǒng)時(shí)間本身有誤,則會(huì)給分析帶來困擾,所以分析之前,先要確認(rèn)各系統(tǒng),包括抓包系統(tǒng)的時(shí)間沒有問題。
2.RTT分析
經(jīng)過上個(gè)步驟的配置,在wireshark中分析RTT就很簡單了,只要在“應(yīng)用顯示過濾器”中,輸入“tcp.analysis.ack_rtt > 4”,然后回車就可以了。
里面的“4”,就是我們?cè)趎etinside系統(tǒng)中看到的4秒延遲,因?yàn)槲覀兇_定實(shí)際延遲比會(huì)比這個(gè)大,所以我們只要”>4″即可,結(jié)果如下圖:
通過過濾,我們可以快速找到RTT>4數(shù)據(jù)包,因?yàn)槲覀冎笆蔷_定位下載,所以可以看到有一個(gè)數(shù)據(jù)包的RTT值是9秒多,這與我們推測(cè)符合。
很顯然,光看一個(gè)數(shù)據(jù)看不出什么情況,此時(shí)我們就需要把綠色框中“86”記下,并通過這個(gè)流ID,把這個(gè)數(shù)據(jù)包相關(guān)的流過濾出來進(jìn)行分析,如下圖:
把TCP流過濾出來后,發(fā)現(xiàn)個(gè)奇怪地方,即>4的RTT好像有三個(gè)(紅框),而我們剛才過濾時(shí),只看到了9.99的這個(gè),那么為什么10秒的就不算RTT呢?
這個(gè)是不是wireshark有問題?請(qǐng)注意綠框,數(shù)據(jù)長度為0的ACK,我們先把TCP流圖打開看下,如下圖:
通過上圖,我們可以看到兩個(gè)間隔10秒,都是由43產(chǎn)生的,并非是一個(gè)有效的交互,上下兩個(gè)報(bào)文的seq及ACK都相同。
這種現(xiàn)象原因是,上面playload長度為0的ACK僅僅是通知對(duì)端滑窗,因?yàn)闆]有傳數(shù)據(jù),所以對(duì)端不再響應(yīng),處于等待狀態(tài)。
而后43開始正常發(fā)送數(shù)據(jù)時(shí),接著使用相同的SEQ與ACK,這樣就把TCP的交互繼續(xù)流動(dòng)起來。所以,這個(gè)10秒是由43本身等待造成,不算是RTT,而真正算RTT的就是綠框標(biāo)注的,即9秒的那個(gè)交互。
由此產(chǎn)生的一個(gè)疑問就是,43到底在干什么,在一個(gè)TCP的交互中,總是會(huì)停下來休息一伙?我們接著查看觸碼內(nèi)容,如下圖:
基于解碼內(nèi)容,基本可以推斷,這可能是一個(gè)操作mongoDB的定時(shí)任務(wù),這樣話,前面的間隔10秒與第三條間隔9秒的,本質(zhì)上沒有太大區(qū)別,都屬于43向170的請(qǐng)求。
也就是說43主機(jī)每間隔差不多10秒左右就會(huì)發(fā)一個(gè)請(qǐng)求給170。因?yàn)槭钦?qǐng)求間隔,所以我們基本認(rèn)為,這種延遲理論上不影響實(shí)際業(yè)務(wù)。
不過需要注意的是,netinsdie系統(tǒng)里面看到是43這臺(tái)服務(wù)器的響應(yīng)延時(shí),而我們分析的實(shí)際情況是43服務(wù)器的請(qǐng)求延時(shí),這明明就是兩個(gè)概念,這兩種不同的延時(shí)對(duì)是否存在問題的判斷是有顯著區(qū)別的,那這是什么問題呢?
實(shí)際上,在一個(gè)TCP流里面,其實(shí)是無法區(qū)別應(yīng)用請(qǐng)求方向的,TCP的主動(dòng)打開還是被動(dòng)打開,并不能決定應(yīng)用層哪個(gè)是請(qǐng)求,哪個(gè)是響應(yīng),所以站點(diǎn)TCP層的角度,方向是可以切換分析,如下圖:
從43往170這個(gè)方向看,服務(wù)器延時(shí)(RTT)在0.3MS左右,所以很顯然,170的響應(yīng)延時(shí)挺正常。而如果我們切換方向,則會(huì)如下:
從上可以看到,切換方向后,就有一個(gè)近10秒的延遲,而從TCP層看,這個(gè)延遲是由43來響應(yīng)產(chǎn)生的,而我們通過上面的分析也就知道,這其實(shí)是43的請(qǐng)求間隔,而非響應(yīng)延遲。
所以,如果站在43是臺(tái)服務(wù)器的角度,把這個(gè)10秒延遲歸到服務(wù)器響應(yīng)延遲里面,從TCP的角度是完全沒有問題的。
從剛才的分析中,我們?cè)趙ireshark里面對(duì)問題抽絲剝繭,進(jìn)行了透視,得出明確的結(jié)論。
一般情況下,不帶業(yè)務(wù)請(qǐng)求的,通常是在三次握的時(shí)候,所以也被叫做IRTT,這個(gè)時(shí)間,基本只包含網(wǎng)絡(luò)與服務(wù)器內(nèi)核響應(yīng)延時(shí),所以會(huì)當(dāng)做業(yè)務(wù)分析延時(shí)的一個(gè)基準(zhǔn)。
在wireshark里面,如果你抓包有抓到三次握手,那么它會(huì)聰明的把這兩個(gè)時(shí)間放在一起,供我們分析,如下圖:
所以,基于這兩個(gè)數(shù)值的對(duì)比,我們就可以大概率確定,問題所在方向,是應(yīng)用還是網(wǎng)絡(luò)或服務(wù)器本身。而且通過服務(wù)器響應(yīng)延時(shí)的方向,即服務(wù)端或者客戶端,我們也可以看到與wireshark中切換方向看到的同一效果。
到這階段,我們基本上可以預(yù)見,應(yīng)用可能存在問題,只不過,這種問題,對(duì)于業(yè)務(wù)來講,是正常還是不正常,我們就得看業(yè)務(wù)邏輯了,而這個(gè)時(shí)候,就只能導(dǎo)到wireshark中去解個(gè)碼。
對(duì)于內(nèi)部不同業(yè)務(wù)場(chǎng)景下,對(duì)TCP的使用建立模型,標(biāo)定基線,是后續(xù)進(jìn)一步高效運(yùn)維,快速發(fā)現(xiàn)并排除潛在業(yè)務(wù)影響的關(guān)鍵基礎(chǔ)。
九、網(wǎng)絡(luò)延遲排查實(shí)戰(zhàn)
1、建立一個(gè)訪問遠(yuǎn)程服務(wù)器的仿真網(wǎng)絡(luò)
我們?cè)谏詈凸ぷ髦薪?jīng)常會(huì)遇到應(yīng)用程序可以使用,但是速度卻變得十分緩慢的情況。例如,在使用瀏覽器查看某個(gè)網(wǎng)頁的時(shí)候,可能會(huì)等待很長時(shí)間才能查看到頁面的內(nèi)容。對(duì)于大多數(shù)人來說,這是一個(gè)非常棘手的問題,因?yàn)樵谶@個(gè)過程中有很多設(shè)備參與其中,而這些設(shè)備又分布在不同的位置,使用者不可能對(duì)它們逐一進(jìn)行排查,所以也很難找到問題所在。
為了能夠更好地了解整個(gè)網(wǎng)絡(luò)的狀況,我們首先來構(gòu)建一個(gè)模擬的仿真網(wǎng)絡(luò),在這個(gè)網(wǎng)絡(luò)中存在著客戶端、服務(wù)器以及連接它們的各種設(shè)備。
構(gòu)建完成的仿真網(wǎng)絡(luò)如圖所示:
這個(gè)網(wǎng)絡(luò)主要由以下3個(gè)部分組成:
客戶端所在網(wǎng)絡(luò),包括“客戶端”“內(nèi)部交換機(jī)”“網(wǎng)關(guān)”“DNS服務(wù)器”。
互聯(lián)網(wǎng),包括“互聯(lián)網(wǎng)路由器”。
服務(wù)器所在網(wǎng)絡(luò),包括“目標(biāo)網(wǎng)關(guān)”“交換機(jī)”“HTTP服務(wù)器”。
下面我們給出這個(gè)網(wǎng)絡(luò)的具體設(shè)計(jì)過程,步驟如下所示。
(1)設(shè)計(jì)中的兩個(gè)主要網(wǎng)絡(luò)的IP地址分配為:客戶端所在網(wǎng)絡(luò)IP地址為192.168.1.0/24,目標(biāo)網(wǎng)絡(luò)所在網(wǎng)絡(luò)IP地址為192.168.4.0/24。
(2)打開ENSP,按照?qǐng)D7-1中所示向網(wǎng)絡(luò)拓?fù)渲刑砑觾蓚€(gè)Server,一個(gè)Client,一個(gè)交換機(jī)S3700,3臺(tái)路由器AR1220。
(3)其中client的設(shè)置如圖所示。
(4)DNS服務(wù)器的基礎(chǔ)設(shè)置如圖所示。
如下圖所示,在服務(wù)器信息中的“DNSServer”中添加一條DNS記錄,主機(jī)域名為“www.a.com”,IP地址為“192.168.4.100”,單擊“增加”按鈕之后將其添加到DNS記錄之后,再單擊“啟動(dòng)”按鈕。
(5)兩臺(tái)交換機(jī)不進(jìn)行任何配置,3臺(tái)路由器的左側(cè)均為GE0/0/0接口,右側(cè)為GE0/0/1接口。
(6)3個(gè)路由器使用了動(dòng)態(tài)路由協(xié)議rip,其中網(wǎng)關(guān)路由器的配置如下:
[Huawei]interface GigabitEthernet0/0/0
[Huawei-GigabitEthernet0/0/0]ip address 192.168.1.1 255.255.255.0
[Huawei-GigabitEthernet0/0/0]quit
[Huawei]interface GigabitEthernet0/0/1
[Huawei-GigabitEthernet0/0/1]ip address 192.168.2.1 255.255.255.0
[Huawei-GigabitEthernet0/0/1]quit
[Huawei-rip-1]network 192.168.1.0
[Huawei-rip-1]network 192.168.2.0
(7)互聯(lián)網(wǎng)路由器的配置如下:
[Huawei]interface GigabitEthernet0/0/0
[Huawei-GigabitEthernet0/0/0]ip address 192.168.2.2 255.255.255.0
[Huawei-GigabitEthernet0/0/0]quit
[Huawei]interface GigabitEthernet0/0/1
[Huawei-GigabitEthernet0/0/1]ip address 192.168.3.1 255.255.255.0
[Huawei-GigabitEthernet0/0/1]quit
[Huawei-rip-1]network 192.168.2.0
[Huawei-rip-1]network 192.168.3.0
(8)HTTP路由器的配置如下:
[Huawei]interface GigabitEthernet0/0/0
[Huawei-GigabitEthernet0/0/0]ip address 192.168.3.2 255.255.255.0
[Huawei-GigabitEthernet0/0/0]quit
[Huawei]interface GigabitEthernet0/0/1
[Huawei-GigabitEthernet0/0/1]ip address 192.168.4.1 255.255.255.0
[Huawei-GigabitEthernet0/0/1]quit
[Huawei-rip-1]network 192.168.3.0
[Huawei-rip-1]network 192.168.4.0
(9)HTTP服務(wù)器的基礎(chǔ)配置,如圖所示。
在其中的服務(wù)器信息中設(shè)置HttpServer,這里需要建立一個(gè)網(wǎng)頁。如果你手頭沒有專門用來設(shè)計(jì)網(wǎng)頁的工具,可以使用最常見的Word來完成,在C盤下建立一個(gè)名為net的文件夾。然后新建一個(gè)Word文檔,在文檔中輸入“Hello word”。
然后在菜單欄中依次單擊“另存為”→“其他格式”,起名為“default.htm”。將其保存到C盤net文件夾中(該文件更需要讀者自行創(chuàng)建),如圖所示。
接下來我們?cè)贖TTP服務(wù)器中將net文件夾作為網(wǎng)站發(fā)布出去,這個(gè)網(wǎng)站只包含了一個(gè)名為“default.htm”的頁面,如圖所示。
好了,到現(xiàn)在為止,我們已經(jīng)完成了整個(gè)仿真環(huán)境的模擬,不妨使用client來訪問HTTP服務(wù)器以驗(yàn)證它是否能正常工作。我們?cè)诳蛻舳酥写蜷_“客戶端信息”選項(xiàng)卡,左側(cè)首先選擇HttpClient,然后在右側(cè)的地址欄中輸入“http://192.168.4.100/default.htm”。
可以看到當(dāng)在地址欄中輸入地址之后單擊獲取按鈕時(shí),就會(huì)顯示一個(gè)“File download”的文件保存對(duì)話框,這就表示已經(jīng)成功地打開了目標(biāo)頁面。這里需要注意的是,模擬的瀏覽器并沒有IE或者Firefox那么強(qiáng)大的功能,它無法真正地從數(shù)據(jù)包中解析并顯示網(wǎng)頁的內(nèi)容。
2、在Wireshark中觀察遠(yuǎn)程訪問的過程
現(xiàn)在我們已經(jīng)建立好了一個(gè)仿真網(wǎng)絡(luò),它雖然簡化了很多,但是運(yùn)行原理和真實(shí)網(wǎng)絡(luò)是完全一樣的。剛剛我們使用客戶端的瀏覽器訪問了HTTP服務(wù)器,這個(gè)過程一共只用了幾秒(甚至更短)。但是在這個(gè)過程中都發(fā)生了什么呢,我們對(duì)此一無所知。那么現(xiàn)在我們就在Wireshark的幫助下來解讀剛剛所經(jīng)歷的一切。
在仿真網(wǎng)絡(luò)中,我們可以使用Wireshark在任何一個(gè)節(jié)點(diǎn)查看數(shù)據(jù)包,這也是它的優(yōu)勢(shì)所在。但是在實(shí)際工作中,我們是不可能做到這一點(diǎn)的。因此在這個(gè)示例中,我們僅考慮在上圖網(wǎng)絡(luò)中的內(nèi)部進(jìn)行數(shù)據(jù)包的觀察,實(shí)驗(yàn)過程如下所示。
(1)如下圖所示,在client的端口上啟動(dòng)Wireshark,在實(shí)際工作中,你可以選擇使用TAP來分流client的數(shù)據(jù)。
(2)在client的客戶端中輸入“http://www.a.com/default.htm”,按下“獲取”按鈕,如圖所示。
(3)返回Wireshark,查看捕獲到的數(shù)據(jù)包,如圖所示。
下面我們就以捕獲到的數(shù)據(jù)包文件為例來詳細(xì)地了解剛剛都發(fā)生了什么?
按照最簡單的思路來說,客戶端會(huì)產(chǎn)生一個(gè)請(qǐng)求發(fā)送給服務(wù)器,然后服務(wù)器再將資源發(fā)回給客戶端。
不過實(shí)際的情形要遠(yuǎn)遠(yuǎn)比這復(fù)雜得多,該如何做才能將請(qǐng)求數(shù)據(jù)包發(fā)送到目標(biāo)服務(wù)器呢?
首先我們需要明確的一點(diǎn)是在這個(gè)過程中客戶端的工作是由“操作系統(tǒng)”和“應(yīng)用程序”兩個(gè)部分共同完成的。而客戶端上網(wǎng)的這個(gè)過程就是先從“操作系統(tǒng)”開始的。
(1)首先我們使用的客戶端計(jì)算機(jī)位于一個(gè)局域網(wǎng)內(nèi)部,它所有的通信要分為局域網(wǎng)內(nèi)部通信和局域網(wǎng)外部通信兩種。當(dāng)我們?cè)趪L試使用瀏覽器去訪問HTTP服務(wù)器的時(shí)候,第一個(gè)步驟就是要判斷這個(gè)訪問的服務(wù)器與我們所使用的主機(jī)是否在同一個(gè)局域網(wǎng)中。這個(gè)判斷需要由操作系統(tǒng)完成,本例中我們要訪問HTTP服務(wù)器的IP地址為192.168.4.100。
操作系統(tǒng)要先將自己的IP地址和子網(wǎng)掩碼轉(zhuǎn)換成二進(jìn)制,然后進(jìn)行“與”運(yùn)算。例如當(dāng)前主機(jī)的IP地址為192.168.1.10,子網(wǎng)掩碼為255.255.255.0。
計(jì)算的過程如下表所示:
將轉(zhuǎn)換為二進(jìn)制的11000000.10101000.00000001.00001010與11111111.11111111.11111111.00000000進(jìn)行與運(yùn)算之后,11000000.10101000.00000001.00000000就是客戶端所在的子網(wǎng),轉(zhuǎn)換成十進(jìn)制就是192.168.1.0。
同樣的方法計(jì)算目標(biāo)地址192.168.4.100所在的子網(wǎng)為192.168.4.0,二者不在同一子網(wǎng)。因此這個(gè)訪問的服務(wù)器與我們所使用的主機(jī)不在同一個(gè)局域網(wǎng)中。
(2)同一局域網(wǎng)的通信可以直接發(fā)送給目標(biāo),但是發(fā)往不同局域網(wǎng)的通信則要先交給網(wǎng)關(guān)。因?yàn)镠TTP服務(wù)器位于局域網(wǎng)的外部,所以現(xiàn)在客戶端計(jì)算機(jī)的第一個(gè)工作就是要找到網(wǎng)關(guān)。之前客戶端的設(shè)置中已經(jīng)將網(wǎng)關(guān)設(shè)置為“192.168.1.1”。在這次通信中所有的數(shù)據(jù)包都應(yīng)該由這個(gè)網(wǎng)關(guān)轉(zhuǎn)發(fā)。 但是在局域網(wǎng)內(nèi)部是無法使用IP地址進(jìn)行通信的,因?yàn)榫钟蚓W(wǎng)中的交換機(jī)只能識(shí)別MAC地址。
如果你僅僅告訴交換機(jī)IP地址,交換機(jī)是不能將其轉(zhuǎn)發(fā)到網(wǎng)關(guān)的。所以現(xiàn)在我們需要一種可以將IP地址轉(zhuǎn)換成MAC地址的機(jī)制,在網(wǎng)絡(luò)協(xié)議中就提供了一個(gè)專門完成這個(gè)任務(wù)的協(xié)議:ARP。
ARP是通過一個(gè)查找表(ARP緩存)來執(zhí)行這種轉(zhuǎn)換的。當(dāng)在ARP緩存中沒有找到地址時(shí),則向網(wǎng)絡(luò)發(fā)送一個(gè)廣播請(qǐng)求,網(wǎng)絡(luò)上所有的主機(jī)和路由器都接收和處理這個(gè)ARP請(qǐng)求,但是只有相同IP地址的接收到廣播請(qǐng)求的主機(jī)或路由器,發(fā)回一個(gè)ARP應(yīng)答分組,應(yīng)答中包含它的IP地址和物理地址,并保存在請(qǐng)求主機(jī)的ARP緩存中。其他主機(jī)或路由器都丟棄此分組。
(3)當(dāng)我們成功地找到網(wǎng)絡(luò)出口之后,接下來要做的就是客戶端和服務(wù)器建立一個(gè)連接。這個(gè)連接也正是通過TCP協(xié)議的三次握手實(shí)現(xiàn)的。
(4)當(dāng)連接成功建立之后,操作系統(tǒng)的工作就完成了,此時(shí)將會(huì)由應(yīng)用程序來構(gòu)造HTTP請(qǐng)求數(shù)據(jù)包。那么需要注意的是,TCP 3次握手的最后一個(gè)數(shù)據(jù)包是由客戶端的操作系統(tǒng)發(fā)出的,而HTTP請(qǐng)求數(shù)據(jù)包是由客戶端上的應(yīng)用程序所完成的。
一般情況下,操作系統(tǒng)在完成TCP操作時(shí)所消耗的時(shí)間可以忽略不計(jì)。但是應(yīng)用程序在構(gòu)造請(qǐng)求或者回應(yīng)時(shí)卻可能造成明顯的延遲。在這個(gè)階段,客戶端所發(fā)送的TCP數(shù)據(jù)包和HTTP之間的間隔就是應(yīng)用程序產(chǎn)生所花費(fèi)的時(shí)間。
(5)當(dāng)客戶端上應(yīng)用程序產(chǎn)生的請(qǐng)求發(fā)送出去之后,經(jīng)過路徑到達(dá)服務(wù)器之后,服務(wù)器會(huì)給出回應(yīng),這兩個(gè)數(shù)據(jù)包之間的時(shí)間就是數(shù)據(jù)包傳送的時(shí)間加上服務(wù)器上應(yīng)用程序的響應(yīng)時(shí)間。
3、Wireshark中時(shí)間顯示
在對(duì)數(shù)據(jù)包進(jìn)行分析的時(shí)候,時(shí)間是一個(gè)很重要的參考值。Wireshark會(huì)根據(jù)系統(tǒng)的時(shí)鐘來為捕獲到的每個(gè)數(shù)據(jù)包加上一個(gè)時(shí)間戳。Wireshark在保存文件的時(shí)候,也會(huì)將捕獲數(shù)據(jù)包的時(shí)間保存起來。當(dāng)你使用另外一臺(tái)設(shè)備來打開這個(gè)文件的時(shí)候,Wireshark會(huì)根據(jù)新設(shè)備所處的時(shí)區(qū)對(duì)時(shí)間進(jìn)行調(diào)整。我們?cè)诜治鲆恍¦ireshark官方的數(shù)據(jù)包時(shí),就會(huì)遇到這種情況。因?yàn)檫@些數(shù)據(jù)包往往是在美國產(chǎn)生的,而我們位于中國,看到數(shù)據(jù)包的時(shí)間會(huì)與當(dāng)時(shí)捕獲的時(shí)間有所不同。
我們平時(shí)使用的時(shí)間格式有兩種,一種是常用的某年某月某日,稱為絕對(duì)格式。另一種就是形如秒表上的顯示,這個(gè)示數(shù)表示的是經(jīng)過了多久,例如2分21秒,稱為相對(duì)格式。
默認(rèn)情況下,Wireshark中提供了一個(gè)顯示捕獲數(shù)據(jù)包時(shí)刻的“Time”列,如下圖所示。
這個(gè)列中顯示的是相對(duì)值,捕獲到第一個(gè)數(shù)據(jù)包的時(shí)間定義為零點(diǎn),之后捕獲到數(shù)據(jù)包的時(shí)間值都是距離這個(gè)零點(diǎn)的時(shí)間間隔,單位為微秒。
Wireshark為了能夠更好地對(duì)數(shù)據(jù)包進(jìn)行分析,還提供了多種時(shí)間的顯示方式。如果要修改這些顯示方式的話,可以在菜單欄上依次單擊“視圖”→“時(shí)間顯示格式”,Wireshark中提供的包括如圖所示的選項(xiàng)。
默認(rèn)情況下,Wireshark使用的“自捕獲開始經(jīng)過秒數(shù)”,那么第一個(gè)捕獲到數(shù)據(jù)包的時(shí)間值就是0.000000,所有其他的數(shù)據(jù)包都是參照第一個(gè)數(shù)據(jù)包定的,這樣就是顯示了從捕獲開始所經(jīng)過的時(shí)間。我們也可以使用其他的格式,從Wireshark這個(gè)菜單中提供的名稱上可以很清楚地了解到這些格式的意義。例如“自上一個(gè)捕獲分組經(jīng)過的秒數(shù)”就表示顯示當(dāng)前數(shù)據(jù)包和它前面時(shí)間數(shù)據(jù)包的間隔。而“自上一個(gè)顯示分組經(jīng)過的秒數(shù)”則表示在使用了顯示過濾器的情況下,當(dāng)前數(shù)據(jù)包和它前面數(shù)據(jù)包的間隔。
這個(gè)菜單的下半部分顯示了時(shí)間的精度,默認(rèn)為自動(dòng)。這里我們同樣可以對(duì)其進(jìn)行調(diào)整,這些精度可以設(shè)置為秒、十分之一秒、百分之一秒、毫秒、微秒、納秒等。大部分的設(shè)備都可以精確到毫秒級(jí),但是如果要精確到納秒級(jí)別的話,就需要考慮網(wǎng)卡是否支持。如果使用一個(gè)不支持納秒的設(shè)備捕獲數(shù)據(jù)包的話,而我們又在這里設(shè)置了精度為納秒的話,最后面的3位就會(huì)顯示全部為0。 只使用某一種時(shí)間格式的話不太容易看出數(shù)據(jù)包之間的關(guān)聯(lián),但是來回切換時(shí)間格式又過于煩瑣。這時(shí)我們就可以選擇在原有時(shí)間列的基礎(chǔ)上再添加新的列,這個(gè)列用來顯示當(dāng)前包與前面包的時(shí)間間隔,具體的步驟如下。
(1)首先單擊菜單欄上的“編輯”→“首選項(xiàng)”,或者直接單擊工具欄上的“首選項(xiàng)”按鈕。
(2)然后在如下圖所示的首選項(xiàng)窗口左側(cè)選擇“外觀”→“列”。
(3)這時(shí)首選項(xiàng)窗口的右側(cè)就會(huì)顯示出當(dāng)前數(shù)據(jù)包列表中的全部列,點(diǎn)擊左下方的“+”號(hào)就可以添加新的一列。
(4)這時(shí)在首選項(xiàng)窗口的右側(cè)就會(huì)添加新的一行,這一行分成兩個(gè)標(biāo)題和類型兩個(gè)部分,我們單擊標(biāo)題處為新添加的列起一個(gè)名字,這里我們?yōu)槠淦鹈麨閠cp.time_delta。
(5)在類型下面的Number下拉列表框處,選中我們需要的列內(nèi)容。
其中和時(shí)間有關(guān)的選項(xiàng)如圖所示:
“Absolute date,as YYYY-MM-DD,and time”:這個(gè)選項(xiàng)用來顯示捕獲設(shè)備所處時(shí)區(qū)的日期和時(shí)間,例如“2018-04-25 12:53:06.775724”。
“Absolute date,as YYYY/DOY,and time”:這個(gè)選項(xiàng)同樣是用來顯示捕獲設(shè)備所處時(shí)區(qū)的日期和時(shí)間。但是不顯示月和日,而是一年中的第多少天。例如2018年4月25日就是這一年的第115天,按照這個(gè)格式顯示就是“2018/115 12:53:06.775724”。
Relative time:這個(gè)選項(xiàng)用來顯示當(dāng)前數(shù)據(jù)包距離捕獲第一個(gè)數(shù)據(jù)包的時(shí)間間隔。
Delta time:這個(gè)選項(xiàng)用來顯示當(dāng)前數(shù)據(jù)包距離上一個(gè)數(shù)據(jù)包的時(shí)間間隔。
Delta time displayed:這個(gè)選項(xiàng)用來顯示當(dāng)前數(shù)據(jù)包距離上一個(gè)數(shù)據(jù)包(在使用了顯示過濾的情況下)的時(shí)間間隔。
Custom:雖然上面提供了很多可以使用的時(shí)間格式,但是我們可能還會(huì)需要進(jìn)行一些自定義的操作。例如在計(jì)算同一個(gè)會(huì)話中這些數(shù)據(jù)包之間的時(shí)間間隔,這時(shí)前面的格式就無法滿足這個(gè)需求了,于是Wireshark還提供了一個(gè)Custom(自定義)功能。
如圖所示,我們?cè)陬愋屠镞x擇使用Custom類型,在字段處輸入“tcp.time_delta”,最后在字段發(fā)生處添加一個(gè)“0”。
(6)單擊“OK”按鈕即可將這個(gè)列添加到數(shù)據(jù)包列表面板中。
在數(shù)據(jù)包列表面板中已經(jīng)多了一個(gè)名為“tcp.time_delta”的列,但是現(xiàn)在該列還不能正常工作。我們還需要完成如下的步驟。
在Wireshark首選項(xiàng)窗口中依次選擇“Protocols”→“TCP”。
勾選“Calculate conversation timestamps”,默認(rèn)這個(gè)選項(xiàng)是不被選中的。選中之后Wireshark會(huì)為TCP會(huì)話中的數(shù)據(jù)包再加上一個(gè)新的時(shí)間戳,用來表示該數(shù)據(jù)包在當(dāng)前會(huì)話的產(chǎn)生時(shí)間。
單擊“OK”按鈕。這時(shí)再查看數(shù)據(jù)包列表面板就可以看到新的一列已經(jīng)起作用了。
Wireshark提供了這么多的時(shí)間格式,那么我們又該如何對(duì)它們進(jìn)行選擇呢?這個(gè)問題的答案其實(shí)很簡單,首先我們需要明確Wireshark分析的目的是什么,然后才能確定要使用的時(shí)間格式。比如我們需要知道捕獲數(shù)據(jù)包的具體日期和時(shí)間,或者需要找出與系統(tǒng)日志相關(guān)的數(shù)據(jù)包時(shí),就可以采用“Absolute date,as YYYY-MM-DD,and time”這種絕對(duì)時(shí)間格式。如果我們要研究在開始捕獲之后的一段特定時(shí)間內(nèi)發(fā)生的事件,就可以使用”“Relative time”這種相對(duì)時(shí)間格式。如果你希望對(duì)特定數(shù)據(jù)包(例如客戶端和服務(wù)器之間的請(qǐng)求和應(yīng)答)之間的時(shí)間間隔進(jìn)行研究,“Delta time”這種時(shí)間格式則是很好的選擇。
這里還必須提到一點(diǎn),在默認(rèn)情況下,Wireshark會(huì)以捕獲第一個(gè)數(shù)據(jù)包的時(shí)間作為原點(diǎn)。但是我們也可以自行將某一個(gè)數(shù)據(jù)包定義為原點(diǎn),具體的方法是在一個(gè)數(shù)據(jù)包上單擊鼠標(biāo)右鍵,在彈出的菜單上選中“設(shè)置/取消設(shè)置時(shí)間參考”,此時(shí)這個(gè)數(shù)據(jù)包的時(shí)間列就會(huì)顯示為“*REF*”。如果我們使用了相對(duì)時(shí)間格式的話,它之后的所有數(shù)據(jù)包都會(huì)將這個(gè)數(shù)據(jù)包的捕獲時(shí)間作為原點(diǎn)。
4、各位置延遲時(shí)間的計(jì)算
在整個(gè)上網(wǎng)過程中,一共可以分成4個(gè)階段,但是由于其中的ARP階段位于內(nèi)網(wǎng),而且速度非常快,因此通常不會(huì)引起網(wǎng)絡(luò)延遲,這里只考慮后面的3個(gè)階段,分別是網(wǎng)絡(luò)傳輸延遲、客戶端應(yīng)用程序引起的延遲和服務(wù)器應(yīng)用程序引起的延遲。需要注意的一點(diǎn)是,這種延遲分類的方法是基于Wireshark捕獲數(shù)據(jù)包得出的。
下圖顯示了上網(wǎng)過程中捕獲到的數(shù)據(jù)包:
這5個(gè)數(shù)據(jù)包的含義如下圖所示,其中①②③④⑤分別對(duì)應(yīng)著上圖中的第9、10、11、12、13這幾個(gè)數(shù)據(jù)包。
網(wǎng)絡(luò)拓?fù)鋱D:
1. 網(wǎng)絡(luò)傳輸延遲的計(jì)算
當(dāng)發(fā)生網(wǎng)絡(luò)延遲時(shí),我們首先需要考慮的就是傳輸線路導(dǎo)致的延遲。如圖所示,我們首先來查看捕獲到的TCP 3次握手中的第2個(gè)數(shù)據(jù)包。
它的tcp.time_delta值為0.062,這個(gè)值是由3個(gè)時(shí)間共同組成的:
從客戶端到服務(wù)端的時(shí)間;
服務(wù)端操作系統(tǒng)接收TCP 3次握手的syn請(qǐng)求,并回應(yīng)一個(gè)(syn,ack)回應(yīng);
從服務(wù)端到客戶端的時(shí)間。
考慮操作系統(tǒng)在處理TCP握手時(shí)的時(shí)間很短,這個(gè)值可以看作是由第一個(gè)和第3個(gè)時(shí)間組成的,也就是數(shù)據(jù)包在線路上傳輸所花費(fèi)的時(shí)間。如果這個(gè)值較大的話,則說明線路傳輸時(shí)出現(xiàn)了延時(shí),這個(gè)原因可能是由服務(wù)端和客戶端之間的設(shè)備造成的。
2. 客戶端延遲的計(jì)算
第2個(gè)網(wǎng)絡(luò)延遲的位置就位于客戶端,這是由于客戶端上的應(yīng)用程序造成的。我們平時(shí)所使用的瀏覽器就是一個(gè)典型的例子,當(dāng)你使用瀏覽器打開了太多的窗口時(shí),速度就會(huì)變得十分緩慢。另外,很多用來完成網(wǎng)絡(luò)操作的客戶端由于設(shè)計(jì)的缺陷也會(huì)消耗大量的時(shí)間。
這部分延遲時(shí)間的值可以通過查看第12個(gè)數(shù)據(jù)包的time_delta值得到。其中第11個(gè)數(shù)據(jù)包是由操作系統(tǒng)產(chǎn)生并發(fā)送出去的,這是因?yàn)榭蛻舳瞬僮飨到y(tǒng)在處理TCP連接時(shí)的時(shí)間很短,例如圖中這個(gè)值為0(實(shí)驗(yàn)環(huán)境,實(shí)際情況中要比這大一些)。
在客戶端操作系統(tǒng)向目標(biāo)發(fā)送了TCP 3次握手的最后一次握手包之后,客戶端的應(yīng)用程序還會(huì)繼續(xù)向目標(biāo)發(fā)送一個(gè)HTTP請(qǐng)求。這個(gè)請(qǐng)求所花費(fèi)的時(shí)間就是客戶端延遲的時(shí)間。
3.服務(wù)端延遲的計(jì)算
如果排除了前面兩個(gè)網(wǎng)絡(luò)延遲的可能性,那么延遲的位置就只能位于服務(wù)器。由于我們現(xiàn)在的觀察點(diǎn)位于客戶端,所以并不能直接獲得服務(wù)器產(chǎn)生HTTP回應(yīng)的時(shí)間。我們可以觀察第12個(gè)數(shù)據(jù)包(客戶端發(fā)出的HTTP請(qǐng)求)和第13個(gè)數(shù)據(jù)包(服務(wù)端發(fā)出的HTTP回應(yīng))之間的時(shí)間來計(jì)算這個(gè)時(shí)間。
如圖所示,這個(gè)0.109秒是由網(wǎng)絡(luò)傳輸和服務(wù)端產(chǎn)生回應(yīng)共同構(gòu)成的,所以我們可以大致估計(jì)服務(wù)端用來生成回應(yīng)的時(shí)間為0.109?0.062=0.047。
如果網(wǎng)絡(luò)發(fā)生延遲的話,我們可以根據(jù)下面的方法來確定延遲發(fā)生的位置。
如果上面網(wǎng)絡(luò)拓?fù)鋱D中的②處數(shù)據(jù)包的延時(shí)較大的話,則可以確定延遲發(fā)生在傳輸?shù)穆窂缴稀?/p>
如果上面圖網(wǎng)絡(luò)拓?fù)鋱D中的④處數(shù)據(jù)包的延時(shí)較大的話,則可以確定延遲發(fā)生在客戶端處。
如果上面圖網(wǎng)絡(luò)拓?fù)鋱D中的⑤處數(shù)據(jù)包的延時(shí)較大的話,則可以確定延遲發(fā)生在服務(wù)器處。
十、網(wǎng)絡(luò)故障排查實(shí)戰(zhàn)
1、建立一個(gè)用于測(cè)試的仿真網(wǎng)絡(luò)
為了能夠更好地了解整個(gè)網(wǎng)絡(luò)的狀況,我們首先來構(gòu)建一個(gè)模擬的仿真網(wǎng)絡(luò),在這個(gè)網(wǎng)絡(luò)中存在著客戶端、服務(wù)器以及連接它們的各種設(shè)備。
構(gòu)建完成的仿真網(wǎng)絡(luò)如圖所示:
這個(gè)網(wǎng)絡(luò)結(jié)構(gòu)的配置和延遲的網(wǎng)絡(luò)拓?fù)鋱D基本一樣,只是在內(nèi)部網(wǎng)絡(luò)中多添加了PC1和PC2,其中PC1的配置如圖所示。
而PC2的IPv4配置中采用了DHCP方式,如圖所示。
另外由于這個(gè)實(shí)驗(yàn)中我們還需要一臺(tái)DHCP服務(wù)器,這里為了精簡網(wǎng)絡(luò)結(jié)構(gòu),所以我們?cè)谠瓉淼木W(wǎng)關(guān)路由器上開啟了DHCP功能,開啟的命令如下所示:
interface GigabitEthernet0/0/0
ip address 192.168.1.1 255.255.255.0
2、導(dǎo)致不能上網(wǎng)的原因
在實(shí)際生活中導(dǎo)致計(jì)算機(jī)不能上網(wǎng)的原因有很多,正常情況下我們可以按照如下的步驟來進(jìn)行故障排除。
檢查用戶所用設(shè)備的網(wǎng)卡是否正常啟動(dòng)。
檢查用戶所用設(shè)備上每個(gè)網(wǎng)卡的IP地址、子網(wǎng)掩碼、默認(rèn)網(wǎng)關(guān)配置是否正確。
檢查用戶所在網(wǎng)絡(luò)的ARP協(xié)議是否正常工作,例如網(wǎng)關(guān)的MAC地址是否正確。
檢查用戶所在網(wǎng)絡(luò)的DNS協(xié)議是否正常工作。
檢查用戶所使用的具體網(wǎng)絡(luò)服務(wù)是否正常工作。
下面我們就按照這個(gè)順序來分別研究一下這些故障,其中前兩個(gè)故障的排除都屬于計(jì)算機(jī)的基本配置。
3、檢查計(jì)算機(jī)的網(wǎng)絡(luò)設(shè)置
1. 確保網(wǎng)卡正常啟動(dòng)
雖然在正常情況下設(shè)備的網(wǎng)卡都是啟用的,但是也有很多情況網(wǎng)絡(luò)故障確實(shí)是由于網(wǎng)卡沒有啟動(dòng)所造成的。在Windows操作系統(tǒng)中我們可以使用命令行中的ipconfig命令來查看網(wǎng)卡的狀態(tài)和基本信息(IP地址、子網(wǎng)掩碼、網(wǎng)關(guān)等信息)。如果在Linux系統(tǒng)中的話,可以使用ifconfig命令。
如圖所示,這里面的①部分的“本地連接4”就是一個(gè)沒有啟動(dòng)的網(wǎng)卡,而②部分的“本地連接2”則是一個(gè)正常工作的網(wǎng)卡,我們需要確保當(dāng)前要使用的網(wǎng)卡已經(jīng)啟動(dòng)。
2. 檢查IP配置的正確性
一臺(tái)計(jì)算機(jī)如果需要正常上網(wǎng)的話,那么就需要配置如下信息:
IP地址;
子網(wǎng)掩碼;
網(wǎng)關(guān)地址;
DNS服務(wù)器地址。
通常一臺(tái)計(jì)算機(jī)的IP配置有兩種方法,一是手動(dòng)配置,二是使用DHCP分配的方式。這里面的網(wǎng)絡(luò)配置包括IP地址、子網(wǎng)掩碼、網(wǎng)關(guān)和DNS服務(wù)器地址。當(dāng)你使用ipconfig命令查看之后,發(fā)現(xiàn)網(wǎng)卡雖然啟用,但是沒有顯示IP地址時(shí),就需要詢問網(wǎng)絡(luò)管理員,或者參考同一單位其他人的計(jì)算機(jī)來確定IP配置所使用的方法。如果該計(jì)算機(jī)所處網(wǎng)絡(luò)采用手動(dòng)配置的方法,那么就需要根據(jù)網(wǎng)絡(luò)的部署對(duì)其進(jìn)行配置。
下圖給出了Windows環(huán)境下對(duì)IP配置的方法:
如果這個(gè)網(wǎng)絡(luò)要求采用DHCP動(dòng)態(tài)分配IP方法的話,那么我們就需要對(duì)其進(jìn)行分析了。
如圖所示,以內(nèi)部網(wǎng)絡(luò)的PC2為例,該主機(jī)采用DHCP動(dòng)態(tài)分配IP地址的方式。但是在工作中卻發(fā)現(xiàn)該主機(jī)無法上網(wǎng)。
我們對(duì)這個(gè)主機(jī)進(jìn)行檢查,使用“ipconfig”命令查看這臺(tái)主機(jī)的網(wǎng)絡(luò)設(shè)置,發(fā)現(xiàn)并沒有得到IP地址等信息。
現(xiàn)在我們可以確定該計(jì)算機(jī)不能上網(wǎng)的原因在于沒有通過DHCP協(xié)議獲得IP地址等信息,但是究竟是由于本機(jī)受到病毒感染從而造成DHCP協(xié)議不能正常工作,還是DHCP服務(wù)器沒有正常工作,這還需要我們進(jìn)一步分析。
首先我們可以在PC2處使用Wireshark進(jìn)行抓包分析:
在Wireshark中使用“bootp”作為顯示過濾器,可以看到如下圖所示的數(shù)據(jù)包。
這里可以看到PC2在網(wǎng)絡(luò)中持續(xù)發(fā)送“DHCP Discover”數(shù)據(jù)包,這些數(shù)據(jù)包的目的地址為“255.255.255.255”,表示這是一個(gè)廣播數(shù)據(jù)包。而源IP地址為“0.0.0.0”則是因?yàn)樵撚?jì)算機(jī)現(xiàn)在還沒有得到IP地址,不過由于它本身具有MAC地址,所以可以在局域網(wǎng)內(nèi)部通信。
我們打開這個(gè)數(shù)據(jù)包的Ethernet部分可以看到它的MAC地址為“54:89:98:1c:67:fb”,如圖所示,這也正表明了該數(shù)據(jù)包來自于PC2。
繼續(xù)向下移動(dòng)到Bootstrap位置,我們可以看到這個(gè)信息的類型為Boot Request (1)。
DHCP的消息一共有8種,下表給出了DHCP協(xié)議中的8種類型。
按照DHCP協(xié)議的要求,客戶端會(huì)在網(wǎng)絡(luò)中廣播“DHCP Discover”請(qǐng)求,用來尋找DHCP服務(wù)器,而當(dāng)服務(wù)器收到這個(gè)請(qǐng)求之后,會(huì)用DHCP Offer來響應(yīng)DHCP DISCOVER報(bào)文,此報(bào)文攜帶了各種配置信息。但是在我們剛剛捕獲到的數(shù)據(jù)包中,卻沒有發(fā)現(xiàn)“DHCP Offer”報(bào)文,這說明在DHCP服務(wù)器端出現(xiàn)了問題。
通過排查,我們發(fā)現(xiàn)DHCP服務(wù)器已經(jīng)被關(guān)閉。我們隨后啟動(dòng)DHCP服務(wù)器,然后繼續(xù)使用Wireshark查看捕獲到的數(shù)據(jù)包。
如果一臺(tái)機(jī)器正常啟動(dòng)的話,最先捕獲到的兩個(gè)數(shù)據(jù)包分別為DHCP Discover和DHCP Offer數(shù)據(jù)包,然后是DHCP Request和DHCP Acknowledgment數(shù)據(jù)包。
在DHCP Offer數(shù)據(jù)包中包含如下數(shù)據(jù):
你(客戶端)的IP地址:這是DHCP服務(wù)器提供可以使用的IP地址。
子網(wǎng)掩碼:這是DHCP服務(wù)器提供的可以在網(wǎng)絡(luò)上使用的子網(wǎng)掩碼。
域名服務(wù)器:這是DNS服務(wù)器的IP地址。
網(wǎng)關(guān):這是網(wǎng)關(guān)的IP地址。
這些信息是保證網(wǎng)絡(luò)通信最基本的內(nèi)容,正常情況下,用戶的設(shè)備會(huì)收到一個(gè)這樣的DHCP Offer數(shù)據(jù)包回應(yīng)。
下面我們給出了一個(gè)完整的DHCP Offer數(shù)據(jù)包的詳細(xì)內(nèi)容,如圖所示。
當(dāng)網(wǎng)絡(luò)比較繁忙時(shí),我們也可以使用過濾器來只顯示出指定類型的DHCP數(shù)據(jù)包,例如只顯示DHCP Acknowledgement類型的數(shù)據(jù)包,這個(gè)過濾器表達(dá)式為:
bootp.option.dhcp==5
如果方便的話,可以將這個(gè)過濾器作為一個(gè)按鈕。另外我們也可以將顯示異常的DHCP過濾器字符串作為一個(gè)按鈕,例如當(dāng)網(wǎng)絡(luò)中出現(xiàn)第4類型、第6類型、第7類型的DHCP數(shù)據(jù)包都會(huì)導(dǎo)致用戶設(shè)備不能上網(wǎng),這個(gè)過濾器如下所示:
bootp.option.dhcp==4||bootp.option.dhcp==6||bootp.option.dhcp==7
可以單擊過濾表達(dá)式右側(cè)的“+”,然后在標(biāo)簽里輸入名稱DHCP Error,在過濾器中輸入上面的表達(dá)式,然后單擊“OK”按鈕。
以后如果你需要使用這個(gè)過濾器,只需要單擊右側(cè)的“DHCP Error”。
4、檢查與網(wǎng)關(guān)的連接
當(dāng)客戶端獲得了IP地址、網(wǎng)關(guān)和DNS服務(wù)器信息之后,接下來要檢查的就是網(wǎng)關(guān)。因?yàn)榫W(wǎng)關(guān)充當(dāng)著整個(gè)網(wǎng)絡(luò)的出入口,所以客戶端必須要能夠連接到它。
如圖所示,我們可以使用“ping”命令來測(cè)試與網(wǎng)關(guān)的連接情形。
如果ping不通的話,則說明與網(wǎng)關(guān)的連接出現(xiàn)了問題。如果線路沒有問題的話,則可能考慮兩種情況,一是網(wǎng)關(guān)已經(jīng)關(guān)閉,二是ARP協(xié)議出現(xiàn)了問題。
計(jì)算機(jī)需要使用ARP協(xié)議來解析位于同一網(wǎng)絡(luò)的網(wǎng)關(guān)的MAC地址。如果希望更好地對(duì)ARP數(shù)據(jù)包進(jìn)行觀察的話,可以使用過濾器來完成對(duì)ARP數(shù)據(jù)包的過濾,顯示過濾器的寫法為“arp”。
另外你也可以在用戶的設(shè)備上使用“arp-a”命令來查看系統(tǒng)緩存中的IP與MAC地址的對(duì)應(yīng)關(guān)系,如下圖所示。
如果ARP緩存中網(wǎng)關(guān)的IP地址與MAC地址對(duì)應(yīng)沒有問題,就可以判斷ARP協(xié)議能夠正常工作。
5、檢查DNS協(xié)議
當(dāng)我們需要連接到互聯(lián)網(wǎng)的某個(gè)網(wǎng)站的時(shí)候,使用的往往是一個(gè)域名而不是IP地址,這個(gè)過程中需要連接到DNS服務(wù)器對(duì)其進(jìn)行查詢。
一個(gè)正常的DNS應(yīng)答數(shù)據(jù)包的格式如圖所示:
如果一個(gè)客戶機(jī)不能獲取Web服務(wù)器或者應(yīng)用服務(wù)器的IP地址,那么我們可以通過數(shù)據(jù)包分析的方法來分析這個(gè)故障,分析的目標(biāo)就是來自DNS服務(wù)器的響應(yīng)。
通過對(duì)比對(duì)失敗的DNS響應(yīng)與正常的DNS響應(yīng)之間的區(qū)別可以找出故障的根源。這種失敗可能由于DNS服務(wù)器配置的故障,或者由于你查詢時(shí)使用了錯(cuò)誤的URL和主機(jī)名。
6、檢查網(wǎng)絡(luò)傳輸路徑
好了,如果之前的檢查都沒有問題的話,那么從現(xiàn)在開始起,發(fā)出的數(shù)據(jù)包將遠(yuǎn)離我們,踏上去往目標(biāo)服務(wù)器的路上,雖然不到一秒,但是這個(gè)數(shù)據(jù)包可能已經(jīng)穿越了半個(gè)世界。
這里我們會(huì)使用Wireshark協(xié)議來分析離開網(wǎng)關(guān)之后的數(shù)據(jù)包。在這個(gè)分析過程中需要用到traceroute工具,它將顯示出一條從我們主機(jī)到目標(biāo)主機(jī)的通路。在Windows系統(tǒng)中,啟動(dòng)traceroute工具的命令為tracert。
下圖顯示了從本機(jī)到百度官方網(wǎng)站的路徑:
這個(gè)工具利用了數(shù)據(jù)包中TTL值的特性,這個(gè)值就是數(shù)據(jù)包的生存時(shí)間。雖然稱之為生存時(shí)間,但是這和我們平時(shí)所講到的時(shí)間并不相同,它的值只有在經(jīng)過一個(gè)路由器之后才會(huì)減少。當(dāng)一個(gè)路由器收到TTL值為0的數(shù)據(jù)包就會(huì)將其丟棄掉,并向這個(gè)數(shù)據(jù)包的源地址發(fā)回一個(gè)ICMP報(bào)文。
利用這個(gè)TTL的這個(gè)特性,traceroute程序會(huì)先向目標(biāo)發(fā)送一個(gè)數(shù)據(jù)包,但是這個(gè)數(shù)據(jù)包永遠(yuǎn)不會(huì)到達(dá)目標(biāo)。因?yàn)樗腡TL值被設(shè)置為1,所以它僅僅到達(dá)了第一個(gè)中轉(zhuǎn)站(路由器)就被丟棄,但是這個(gè)路由器需要向源地址發(fā)送一個(gè)ICMP數(shù)據(jù)包。這樣源主機(jī)就知道數(shù)據(jù)所經(jīng)過的第一個(gè)路由器了。
接著向目標(biāo)發(fā)送TTL值為2的數(shù)據(jù)包,收到應(yīng)答之后,再發(fā)送TTL值為3的數(shù)據(jù)包。這樣一直到數(shù)據(jù)包到達(dá)目標(biāo)為止,利用traceroute程序,我們就可以知道從源地址到達(dá)目標(biāo)地址之間所經(jīng)過的路由器。
這里推薦使用一個(gè)更好的工具PingPlotter,這個(gè)工具要遠(yuǎn)遠(yuǎn)比系統(tǒng)自帶的工具要強(qiáng)大,你可以從PingPlotter官網(wǎng)下載一個(gè)免費(fèi)的版本。這個(gè)工具相對(duì)traceroute最大的優(yōu)勢(shì)在于可以指定發(fā)送數(shù)據(jù)包的大小。
首先我們啟動(dòng)Wireshark,然后PingPlotter中的對(duì)話框中輸入要目標(biāo)地址“www.baidu.com”。
按下右側(cè)的三角形按鈕,這時(shí)就會(huì)開始向目標(biāo)發(fā)送數(shù)據(jù)包了。等數(shù)據(jù)包到達(dá)www.baidu.com時(shí),就可以在Wireshark中停止數(shù)據(jù)包的捕獲了,在此期間數(shù)據(jù)包經(jīng)過的路徑如圖所示。
在Wireshark找到并選中PingPlotter發(fā)出的第一個(gè)數(shù)據(jù)包,然后在數(shù)據(jù)包詳細(xì)信息面板中選中IP協(xié)議部分。
利用這個(gè)工具我們就可以查看在到達(dá)目標(biāo)網(wǎng)站之前,數(shù)據(jù)包都經(jīng)過了哪些路由器以及在哪個(gè)路由器出現(xiàn)了問題。
7、檢查目標(biāo)服務(wù)器
如果一個(gè)用戶到達(dá)目標(biāo)服務(wù)器的故障是功能性的,也就是說兩者的連接沒有問題,但是用戶卻不能正常使用目標(biāo)服務(wù)器上的應(yīng)用。
可能導(dǎo)致故障的原因如下:
用戶提供的URL或者端口是錯(cuò)誤的;
這個(gè)端口被防火墻所屏蔽;
應(yīng)用程序不再正常工作。
第一個(gè)原因往往是用戶錯(cuò)誤輸入造成的,另外兩個(gè)因素往往會(huì)導(dǎo)致所有人都無法訪問。我們還需要確定到底是目標(biāo)主機(jī)整體都無法訪問,還是僅僅是一個(gè)程序無法訪問。如果服務(wù)器無法訪問,那么顯示ICMP信息應(yīng)該為Destination Host is Unreachable或者Destination Port is Unreachable,如果目標(biāo)防火墻啟用了屏蔽,那么所有的ICMP數(shù)據(jù)包都得不到回應(yīng)。
如果服務(wù)器正常工作,但是應(yīng)用程序卻是無法訪問的,僅僅在客戶端進(jìn)行數(shù)據(jù)包捕獲獲取的信息可能并不足以找到故障的原因。但是通過查看TCP會(huì)話連接建立的數(shù)據(jù)包可以找到很多有用的信息。
如果用戶可以與目標(biāo)程序建立TCP連接,但是應(yīng)用程序卻不能正常工作。這時(shí)我們需要考慮的因素很多,最簡單的方法就是比較用戶與其他用戶連接目標(biāo)的數(shù)據(jù)包有什么不同。
如果排除了上面提到的這些可能性,下面列出的這些因素也可能會(huì)導(dǎo)致出現(xiàn)一個(gè)功能性的故障。
(1)用戶認(rèn)證:這種故障出現(xiàn)的主要原因是用戶缺少適當(dāng)?shù)恼J(rèn)證、授權(quán)、權(quán)限等。這是我們檢查用戶是否正常工作的第一個(gè)步驟。
(2)用戶自己計(jì)算機(jī)上的配置:很多應(yīng)用程序需要特定的配置,例如將特定文件放置在特定目錄中。還有一些應(yīng)用程序需要考慮特殊插件例如java、net framework等。通常,應(yīng)用程序會(huì)提供應(yīng)用程序配置的錯(cuò)誤故障。
審核編輯:湯梓紅
-
網(wǎng)絡(luò)
+關(guān)注
關(guān)注
14文章
7566瀏覽量
88794 -
python
+關(guān)注
關(guān)注
56文章
4797瀏覽量
84691 -
Wireshark
+關(guān)注
關(guān)注
0文章
49瀏覽量
6518
原文標(biāo)題:【建議收藏】網(wǎng)絡(luò)延遲及故障分析方法指南匯總!
文章出處:【微信號(hào):浩道linux,微信公眾號(hào):浩道linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論