1. 程式人生 > >網路基本功(二十四):Wireshark抓包例項分析TCP重傳

網路基本功(二十四):Wireshark抓包例項分析TCP重傳

網路基本功(二十四):Wireshark抓包例項分析TCP重傳

介紹

TCP傳送一個或一組報文,會等待收到報文的確認資訊。重傳,即發生在報文沒有到達或確認資訊沒有及時返回的情況下。當發現網速變慢時,原因之一可能就是重傳。發生重傳的原因有多種,在客戶機或伺服器兩邊埠應用Wireshark有助於診斷問題。本文通過抓包例項闡述各種可能性。

更多資訊

診斷過程:

  1. 在相應埠開始抓資料。
  2. 找到Analyze | Expert Info選單。
  3. Notes之下,查詢Retransmission
  4. 點選(+)符號即可開啟重傳列表。滑鼠點選各行可在抓包面板看到重傳報文。
  5. 現在問題來了,怎樣定位問題呢?
  6. 通過以下方式檢視重傳來自哪裡:
  • 在Expert Info視窗一個一個檢視報文,在抓包面板檢視哪些是重傳報文(適合於有經驗的使用者)
  • 在報文面板,配置顯示過濾器expert.message == “Retransmission (suspected)”,即可看到抓包檔案中所有重傳報文
  • 應用過濾器,在Statistics & Conversations視窗檢視Limit to display filter部分。

Case 1:重傳至多個目的地址

以下截圖中,可看到有多次重傳,分佈於多臺伺服器,目的埠號為80(HTTP)。也可以發現重傳由埠10.0.0.5傳送,因此報文是丟失在發往Internet的途中,或確認資訊沒有及時從web伺服器發回。

image002.jpg

問題發生在發往Internet的線路上,怎樣知道是什麼問題呢?

  1. Statistics選單,開啟IO Graph
  2. 本例中,可看到鏈路負載非常低。可能是有故障,或有另一條高負載鏈路。
  3. 可以通過登入到通訊裝置或SNMP瀏覽器檢視引起重傳的原因:報文丟失及錯誤。參考以下截圖:

image003.jpg

Case 2:重傳至單一連線

如果所有重傳發生於同一IP,同一TCP埠號,則可能是慢速應用引起。看以下截圖:

image004.jpg

對於單一連線的重傳,進行以下操作:

  1. 從Statistics選單開啟Conversations,選擇Limit to display filter,可以看到所有發生重傳的會話,本情況下,是一個單一會話。
  2. 如下圖所示,通過選擇IPv4
    標籤可看到從哪個IP地址重傳:

image005.jpg

   3.  如下圖所示,通過選擇TCP標籤看到重傳來自哪一埠:

image006.jpg

要定位問題,進行以下步驟:

  1. 檢視IO graph,確保鏈路不忙。(鏈路忙的表徵例如流量接近頻寬。例如,頻寬為10Mbps,在IO graph中看見流量接近10Mbps,這就表明鏈路負載較高。不忙的鏈路IO會有很多高低起落,峰值以及空閒間隙)。
  2. 如果鏈路不忙,則可能是伺服器對於IP地址10.1.1.200有問題(10.90.30.12傳送了絕大多數重傳,所以可能是10.1.1.200響應較慢)
  3. 從報文面板可以看出應用是FTP資料。有可能FTP伺服器工作於active模式。因此在埠2350開啟連線,伺服器將埠更改為1972,所以可能是慢速FTP軟體響應問題引起的重傳。

Case 3:重傳模式

觀察TCP重傳的一個重要考量是是否能看出一些重傳模式。在以下截圖中,可以看見所有重傳來自單一連線,位於客戶端與伺服器的NetBIOS會話服務(TCP埠139)。

image007.jpg

看起來像一個簡單的伺服器/客戶端問題,但檢視抓包面板,如下圖所示:

image008.jpg

可以看見重傳總是週期性的每30ms發生一次。問題是由於客戶端在軟體中執行了財務程序,導致軟體每30-36ms就減速一次。

Case 4:應用無響應導致重傳

另一個可能導致重傳的原因是客戶端或伺服器沒有響應請求。這種情況下,會看到五次重傳,時間也會逐漸延長。五次連續重傳後,傳送方認為連線斷開(某些情況下,會發送reset來關閉連線,取決於軟體實施)。斷開連線之後,可能會發生兩件事情:

  • 傳送SYN請求至客戶端,以開啟一個新的連線。這種情況下使用者會看到應用凍結,過了15-20秒之後重新開始工作。
  • 不傳送SYN,使用者需要重新執行應用程式(或應用程式的一部分)

下圖顯示了開啟新連線的情況:

image009.jpg

Case 5:由於延時變化導致重傳

TCP能夠充分容忍延時,前提是延時大小不發生變化。當延時改變時,就會發生重傳。診斷是否由該原因引起的方法:

  1. 第一件事是ping目的地址,並且得到檢查通訊鏈路延時的第一條資訊。
  2. 檢查延時變數,可能由以下原因引起:
  • 由於不穩定或繁忙通訊鏈路引起。這種情況下,可以看到ping命令的延時變化,通常由於頻寬較窄。
  • 由於應用過載或資源不足,這種情況下,只有該應用發生很多重傳。
  • 通訊裝置過載(CPU,快取)引起延時。檢查方式直接連線通訊裝置。

   3.  使用Wireshark工具診斷延時問題。

如果重傳達到0.5個百分比,效能就會下降,斷開連線將會達到5個百分比。這取決於應用及其對於重傳的敏感性。

定位重傳問題

當你看到通訊鏈路上發生重傳,進行以下步驟:

  1. 定位問題——是一個特定IP地址,特定連線,特定應用,還是其他問題。
  2. 檢視問題是否由於通訊鏈路,丟包,慢速伺服器還是PC。檢視應用是否慢速。
  3. 如果不是由於上述原因,檢查延時變化。

工作原理:

TCP序列號/確認機制詳見前文:網路基本功(十):細說TCP確認機制 。那麼重傳是由什麼原因引起呢?當報文確認資訊丟失,或ACK沒有及時到達,傳送方會進行以下兩步操作:

  1. 再次傳送報文
  2. 減少吞吐量。

以下圖中展示了重傳減少傳送方吞吐量(紅色細線):

image010.jpg

參考

Network Analysis Using Wireshark Cookbook

相關推薦

網路基本功Wireshark例項分析TCP

網路基本功(二十四):Wireshark抓包例項分析TCP重傳 介紹 TCP傳送一個或一組報文,會等待收到報文的確認資訊。重傳,即發生在報文沒有到達或確認資訊沒有及時返回的情況下。當發現網速變慢時,原因之一可能就是重傳。發生重傳的原因有多種,在客戶機或伺服器

Android開發系列Notification的功能與使用方法

font _id when ice extends 開發 content androi mark 關於消息的提示有兩種:一種是Toast,一種就是Notification。前者維持的時間比較短暫,後者維持的時間比較長。 並且我們尋常手機的應用比方網易、貼吧等等都有非常多

通證經濟大局觀大一統

沒有安全感的國王和貴族 分封制下,因為“我的封臣的封臣不是我的封臣”,時間一長,從國王到各級諸侯貴族,其實安全性是很沒保障的。 周朝到後期,周王的直屬土地只剩一個個小小的洛陽城,最後被自己的諸侯秦滅國。 諸侯也好不到哪去,曾經叱吒風雲的霸主晉國,最後被自己的三個封臣趙魏韓給瓜分了。再加上

java基礎學習總結slf4j作用及其實現原理

簡單回顧門面模式 slf4j是門面模式的典型應用,因此在講slf4j前,我們先簡單回顧一下門面模式, 門面模式,其核心為外部與一個子系統的通訊必須通過一個統一的外觀物件進行,使得子系統更易於使用。用一張圖來表示門面模式的結構為:   門面模式的核心為Facade即門面

大資料資料傾斜優化、並行執行、嚴格模式、JVM重用、執行計劃

一、資料傾斜優化 1.合理設定Map數量        1.通常情況下,作業會通過input的目錄產生一個或者多個map任務        主要的決定因素有:input的檔案總個數,input的檔案大小,叢集

opencv學習開閉操作

程式碼如下: #匯入cv模組 import cv2 as cv import numpy as np #開操作,刪除小的干擾快 def open_demo(image): print(image.shape) gray = cv.cvtColor(image, cv.COLOR

Unity3D學習筆記MVC框架

初始 中心 player component sage 私有構造函數 展現 sys 技術 MVC:全名是Model-View-Controller View(視圖層 - 頂層) Controller(控制層 - 中層) Model(數據層 - 底層) View(視圖層) 說

Java學習總結——前端CSS樣式設計CSS引入,選擇器,盒子模型,浮動元素

引入 itl AI dropdown 正常的 type ID 總結 網頁 一.CSS引入方式1.CSS簡介:(1)CSS(Cascading style Sheets):層疊樣式表。用來給html網頁設置樣式;(2)當多個選擇器對同一個元素進行樣式設計時,則該元素的樣式為多

演算法題叉樹的映象

題目描述 操作給定的二叉樹,將其變換為源二叉樹的映象。 輸入描述: 二叉樹的映象定義:源二叉樹 8 / \ 6 10 / \ / \ 5 7 9 11 映象二叉樹 8

OGG維護優化腳本-OGG狀態監控系統--後臺腳本

oracle ogg goldengate 這個簡易監控系統具體是由html實現的後臺沒有數據庫,只有從各臺機器收集並上傳過來的html文件通過定時shell腳本整理並分類到各個目錄,然後通過apache被網頁調用具體更新頻率取決於各數據同步服務器的定時任務運行頻率OGG進程狀態整理腳本這個腳本用

聊聊高並發解析java.util.concurrent各個組件 深入理解AQS

sar 成功 通知 ati help write ng- ads 同步 近期總體過了下AQS的結構。也在網上看了一些講AQS的文章,大部分的文章都是泛泛而談。又一次看了下AQS的代碼,把一些新的要點拿出來說一說。 AQS是一個管程。提供了一個主要的同步器的

Python學習筆記StringIO和BytesIO

nbsp from 寫入 enc print == world! byte 初始化 StringIO 很多時候,數據讀寫不一定是文件,也可以在內存中讀寫。 StringIO顧名思義就是在內存中讀寫str。 要把str寫入StringIO,我們需要先創建一個String

笨辦法學Python

love pla ide nor simple open start close sce 習題 24: 更多練習 你離這本書第一部分的結尾已經不遠了,你應該已經具備了足夠的 Python 基礎知識,可以繼續學習一些編程的原理了,但你應該做更多的練習。這個練習的內容比

設計模式---狀態模式

inter man 每一個 con ret ride text src 定義 1、簡介   定義對象間的一種一對多的依賴關系,當一個對象的狀態發生改變時,所有依賴於它的對象都得到通知並被自動更新。   狀態模式允許一個對象在其內部狀態改變時改變其行為,這個對象看上去就像改變

C#編程----------修飾符

宋體 public ext str 繼承 應用 man 空間 layout 修飾符 修飾符即應用於類型或成員的關鍵字.修飾符可以指定方法的可見性,如public或private,還可以指定一項的本質,如剛發的vritual或abstract. 可見性的修飾符 修

OpenCV探索之路如何去除票據上的印章

com 票據 uid amp 去除 album 探索 ace 十六 http://pic.cnhubei.com/space.php?uid=1774&do=album&id=1338281http://pic.cnhubei.com/space.php?u

Java學習筆記類型轉換和instanceof關鍵字

方法 png true feed out 實例 strong 運算符 nbsp 基本數據類型轉換: 自動類型轉換:把大類型的數據賦值給大類型的變量(此時的大小指的是容量的範圍) 1 byte b = 12; //byte是一個字節 2 int i = b; //i

Python學習—— 前端基礎之Bookstrap

asc script nta 學習 基本 www. red hicon 分享 一、Bootstrap介紹 Bootstrap是Twitter開源的基於HTML、CSS、JavaScript的前端框架。 它是為實現快速開發Web應用程序而設計的一套前端工具包。 它支持響應式布

企業分布式微服務雲SpringCloud SpringBoot mybatis 用spring Restdocs創建API文檔

str () 分布式 ava 顯示 網站發布 shu this 過程 Restdoc,通過單元測試生成api文檔 restdocs是通過單元測試生存snippets文件,然後snippets根據插件生成htm文檔的。 建一個單元測試類: @RunWith(SpringRu

JmeterJmeter-Question之“加密請求參數”

直接 接口 成功 void return beanshell 32位 clas 圖片   日常接口測試碰到參數加密的情況不在少數,當然與之相對的也有解密。直接記錄實例:   排除各家用的不一樣的加密方式,用的最多的還是MD5加密(16,32)。Jmeter3.2版本已經有解