《Wireshark還能這樣用》—那些你應該知道的知識(九)

寫在前面:

 近期,博主在工作中碰到不少奇奇怪怪的事情,幾乎每天都在處理故障、分析故障的過程中,博客更新的進度也耽擱了。在分析故障事件的過程中,我們常用到wireshark這一軟件,來查看連接的建立是否正常,應用的交互是否存在異常等等。

下面,博主將最近掌握到的wireshark的一些用法,進行整理分享給大家。這些用法將從一個數據包的全貌到一次TCP連接的情況,逐一使用。


前情提要:

首先,我們應該清楚,當我們拿到了一份數據包,這份數據包是如何獲取的十分重要。它可能是你直接在服務器上抓取的,也可能是你通過交換機等設備做流量鏡像獲得的。不同的數據包的獲取途徑,對我們分析故障事件的具體情況所造成的影響也不同。如果是直接在交互兩端抓取到的,可以用來判斷該數據包是否被收到,內部處理了多久等等信息。而如果你是通過流量鏡像獲取的數據包,在經歷了流量鏡像設備的轉發、去重等等操作後。我們對這份數據包的可靠性要打一個問號?也只有瞭解清楚了流量鏡像設備到底做了什麼,才能夠使這份數據包更好的幫助我們分析問題。


方法介紹:

整體分析—端到端分析—對話

當我們拿到一份數據包,我們想從整體上分析這組數據包中的交互情況時,我們可以使用

統計——對話

這將幫助你在OSI 7層模型中不同的維度,分析這一組數據包整體的交互情況,包括鏈路層—以太網,網絡層—IPv4、IPv6,傳輸層—TCP、UDP。

如果我們想要知道,哪兩個IP地址間的交互在這一段時間流量最大,交互時間最長等,我們可以通過IPv4這一維度,分析這一數據包中的對話

交互時間最長的兩個IP地址

其中,Duration表示了這兩個IP地址之間的交互持續了多久,單位是秒。我們可以通過排序,將交互時間最長的一組IP選出來。

那麼我們想了解他們這兩個IP地址之間到底交互了什麼,我們可以右鍵選擇作爲過濾器應用,進行過濾

之後,過濾的語句會自動出現在wireshark的主頁面中,並進行了過濾,這裏我們選擇的是在這一組數據包中交互時間最長的兩個IP之間的情況。但這往往不能說明什麼,可能確實在應用中,兩者之間就是需要經常需要數據交互的。

耗時最長的TCP連接

而我們如果在實際故障處理中,如果應用反饋存在網絡延時,響應慢等情況,在應用交互爲TCP短連接的情況下,我們可以通過每一次TCP連接的耗時,進行查看。

選擇TCP標籤,同樣通過Duration進行排序,我們可以發現第一筆TCP連接耗時接近600秒,也就是10分鐘,在通過TCP短連接交互的應用中,這是非常異常的。

同樣通過之前的方法,將這個TCP連接過濾出來。

通過實際查看,這筆TCP連接無異常。。。

我們選擇其他的一筆,進行查看

可以看到這裏存在着大量的重傳包,服務端始終在嘗試與客戶端斷開連接,但客戶端沒有響應。導致一直等待到服務端超時。

同樣的,我們可以在對話中分析:誰傳遞了最多的數據,誰上傳的多,誰下載的多等等信息。分析方法類似,不再這裏舉例。

對話可以幫助我們用來分析端到端的交互情況,但針對數據包中存在的異常情況,以及故障發生前的前後情況對比,對話並不是很好用。

這裏我們採用I/O圖表,進行分析。

整體分析—過程對比分析—I/O圖表

I/O圖表可以用來分析,在事件發生前後,各項指標的變化情況。

打開後,默認設置了針對數據包的IO情況和TCP異常,這兩個過濾器

我們也可以根據實際需要,利用過濾器,查看事件發生前後,相關指標的變化,如下圖:

要更好的使用對話,我們需要熟悉Wireshark的過濾語句。下面博主整理一些與TCP指標相關的過濾語句

查看新建連接情況—過濾SYN包—tcp.flags.syn == 1

查看重傳情況—過濾重傳包—tcp.analysis.retransmission

查看新建連接失敗,或存在異常的情況—過濾SYN包且爲重傳包—tcp.flags.syn == 1 && tcp.analysis.retransmission

查看斷開連接失敗,或存在異常的情況—過濾FIN包且爲重傳包—tcp.flags.fin == 1 && tcp.analysis.retransmission

查看TCP連接響應情況—過濾ACK包的響應時間—tcp.analysis.ack_rtt >= 時間

查看客戶端與服務端是否存在性能瓶頸—過濾TCP零窗口—tcp.analysis.zero_window

除了上面提到的以外,還有很多很多,你也可以直接在wireshark中,針對你感興趣的指標,選擇複製—作爲過濾器,如下圖:

例如,我們想針對代理設備,查看代理設備是否將TCP連接都進行了轉發。

例如代理設備對外地址爲1.1.1.1,對內地址爲1.1.1.2

過濾語句可以這樣寫tcp.flags.sys == 1 && ip.addr == 1.1.1.1 、tcp.flags.sys == 1 && ip.addr == 1.1.1.2.對比兩個曲線是否重疊


總結:

在我們進一步掌握了wireshark的一些用法後,更重要的還是要首先了解故障現象,在此基礎上我們利用我們瞭解的網絡指標,如延時、重傳等等,利用wireshark工具,分析故障前後,這寫指標的變化,幫我們分析問題可能出現在哪裏。這要求我們對數據包的各項字段所代表的意義要更加了解,才能幫助我們更好的分析問題。


 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章