1. 程式人生 > >《WireShark資料包分析實戰》二、讓網路不再卡

《WireShark資料包分析實戰》二、讓網路不再卡

TCP的錯誤恢復我是我們定位、診斷、並最終修復網路高延遲的最好工具。

1.TCP重傳

      重傳資料包是TCP最基本的錯誤恢復特性之一,它被設計用來對付資料包丟失。

     資料包丟失可能有很多原因,包括出故障的應用程式、流量負載沉重的路由器,或者臨時性的服務中斷。資料包層次上的移動速度非常快,而且資料包丟失通常是暫時的,因此TCP能否檢測到資料包丟失並從中恢復顯得至關重要。

     決定是否有必要重傳資料包的主要機制叫做重傳計時器。這個計時器負責維護一個叫重傳超時(Retransmission timeout RTO)的值。每當使用TCP傳輸一個數據包時,就啟動重傳計時器。當收到這個資料包的ACK時,計時器停止。從傳送資料包到接收ACK確認之間的時間被稱為往返時間(Round-trip time RTT),將若干個這樣的時間平均下來,可算出最終的RTO值。

      在最終算出RTO之前,傳輸作業系統將一直依賴於預設配置的RTT值。此項設定於主機間的初始通訊,並基於接收到的資料包RTT進行調整,以形成真正的RTO。

一旦RTO確定下來,重傳定時器就被用於每個傳輸的資料包,以確定資料包是否丟失。

     當資料包被髮送出去,但接收方沒有傳送TCP ACK資料包時,傳輸主機就假設原來的資料包丟失了,並重傳它。重傳之後,RTO值翻倍;如果在到達極限值之前一直沒有接收到ACK資料包,那將發生另一次重傳。如果下一次重傳還是沒有收到ACK,RTO值將翻倍。每次重傳,RTO值都將翻倍,這個過程會持續到收到一個ACK資料包,或者傳送方達到配置的最大重傳次數為止。(最大重傳次數取決於傳輸作業系統上的配置,預設情況下,Windows主機最多重傳5次,在部分Linux主機則預設最多重傳15次,在作業系統中都是可以配置的。)如果發生重傳,在wireshark中可以看到retransmission包。

2.TCP重複確認和快速重傳

      當接收方收到亂序資料包時,就傳送重複的TCP ACK資料包。TCP在其頭部使用序號和確認號欄位,以確保資料被可靠接收並以傳送順序重組。

接收資料的序號+接收資料的位元組數=發出的確認號

     返回到傳送方的確認號實際上就是接收方期待下次接收的資料包序號。

     序號使資料接收方檢測資料包丟失成為可能。當接收方追蹤正在接收的序號時,如果遇到不合順序的序號,它就知道資料包丟失了。

     當接收方收到一個預料之外的序號時,它假設有一個數據包在傳輸中丟失了。為了正確地重組資料,接收方必須要得到丟失的資料包,因此它重新發送一個包含丟失資料包序號的ACK資料包,以使傳送方重傳該資料包。

    當傳送方收到3個來自接收方的重複ACK時,它假設這個資料包確實在傳輸中丟失了,並立刻傳送一個快速重傳。一旦觸發快速重傳,其他所有正在傳輸的資料包都要靠邊,直到把快速重傳資料包傳送出去為止。(在wireshark資料包中可以看到This is a TCP duplicate ack,而傳送方快速重傳時,資料包中可以看到This frame is a fast retransmission)

3.TCP流量控制

      重傳和重複ACK都是TCP反應性的功能,被設計用來從資料包丟失中恢復。如果TCP沒有包含某些形式的用於預防資料包丟失的前瞻性功能,它將是一個糟糕的協議,幸好它做到了。

      TCP實現了滑動視窗機制,用於檢測何時發生了資料包丟失,並調整資料傳輸速率加以避免。滑動視窗機制用用資料接收方的接收視窗來控制資料流。接收視窗是資料接收方指定的值,儲存在TCP頭部中(以位元組為單位),它告訴傳送裝置自己希望在TCP緩衝空間中儲存多少資料。傳送方一次只能傳送window size域指定的資料量。為了傳輸更多的資料,接收方必須傳送確認,以告知之前的資料已經接收到了。

      當一臺繁忙的伺服器處理來自多個客戶端的資料包時,伺服器可能會緩慢地清空緩衝區,騰不出空間來接收新資料。如果沒有流量控制,這將導致資料包丟失和資料損壞。幸好,當伺服器太繁忙,以致不能以接收視窗宣告的速率處理資料時,它可以調整接收視窗的大小。它通過減小向傳送方返回ACK資料包的TCP頭部視窗大小值,達到這個目的。

4.用零視窗通知停止資料流

     伺服器可以傳送一個數據包,指明視窗大小是0。當客戶端收到這個資料包時,它會停止所有資料傳輸,但仍通過傳輸“保活資料包”保持與伺服器的連線。客戶端週期性地傳送保活資料包,以檢查伺服器接收視窗的狀態。一旦伺服器能再次處理資料,它會響應一個非0視窗以恢復通訊。

5.從TCP錯誤控制和流量控制中學到的

1)重傳資料包:發生重傳是因為客戶端檢測到伺服器沒有接收到它傳送的資料。因此,你能否看到重傳取決於你在分析的通訊的哪一端。如果你從服務捕獲資料,並且它確實沒有接收到客戶端傳送、重傳的資料包,那你將矇在鼓裡,因為你看不到重傳的資料包。如果你懷疑伺服器端受到了資料包丟失的影響,你應該考慮在客戶端那邊捕獲流量以觀察是否有重傳資料包。

2)重複ACK資料包:當接收到亂序資料包時才觸發重複ACK。例如,如果伺服器只接收到了第一個和第三個資料包,就會發送一個重複ACK以引發第二個資料包的快速重傳。

3)滑動視窗與伺服器接收、處理資料的故障直接相關。伺服器的某些問題可以直接導致視窗大小減少或達到0視窗狀態。

6.SACK

1)SACK是TCP選項,它使得接收方能告訴傳送方哪些報文段丟失,哪些報文段重傳了,哪些報文段已經提前收到等資訊。根據這些資訊TCP就可以只重傳哪些真正丟失的報文段。需要注意的是隻有收到失序的分組時才會可能會發送SACK,TCP的ACK還是建立在累積確認的基礎上的。也就是說如果收到的報文段與期望收到的報文段的序號相同就會發送累積的ACK,SACK只是針對失序到達的報文段的。SACK包括了兩個TCP選項,一個選項用於標識是否支援SACK,是在TCP連線建立時時傳送;另一種選項則包含了具體的SACK資訊。

2)當我們接收到ack的時候,我們會判斷sack段,如果包含sack段的話,我們就要進行處理。


相關推薦

WireShark資料分析實戰網路不再

TCP的錯誤恢復我是我們定位、診斷、並最終修復網路高延遲的最好工具。1.TCP重傳      重傳資料包是TCP最基本的錯誤恢復特性之一,它被設計用來對付資料包丟失。     資料包丟失可能有很多原因,包括出故障的應用程式、流量負載沉重的路由器,或者臨時性的服務中斷。資料包層

TCP協議基礎知識及wireshark分析實戰

TCP相關知識 應swoole長連線開發調研相關TCP知識並記錄。 資料封包流程 如圖,如果我需要傳送一條資料給使用者,實際的大小肯定是大於你傳送的大小,在各個資料層都進行了資料的封包,以便你的資料能完整的發給你想要的使用者。 乙太網的資料包的負載是1500位元組,IP包頭需要20個位元組,TCP

wireshark 資料分析技巧總結

轉載 http://shayi1983.blog.51cto.com/4681835/1558161 wireshark 過濾表示式的比較運算子一覽 (類 C 形式和對應的英語形式) enighish           C-like          

資料分析——資料鏈路層 和 網路

        在資料鏈路層提供的兩個相鄰端點之間的資料幀的傳送功能上,進一步管理網路中的資料通訊,將資料設法從源端經過若干個中間節點傳送到目的端,從而向運輸層提供最基本的端到端的資料傳送服務。 主要內容有: 1、虛電路分組交換和資料報分組交換 2、路由選擇演算法 3、阻塞控制方法 4、X.25協議 5、

計算機網路實驗()之Wireshark分析獲取URL列表(去重排序統計)

實驗要求 本試驗要求基於第一次實驗中訪問某官網主頁時所抓取到的資料包,用Python 3語言、Jupyter Notebook和Pyshark編寫程式碼進行協議分析所需的開發環境,編寫程式碼,以輸出的方式列出首頁以及其所包含的所有資源(至少包含如下型別

銳捷CCNA系列() Wireshark分析Ping過程

銳捷 CCNA 銳捷實戰 銳捷CCNA 數通 實訓目的 初步了解Wireshark的使用。 能分析Ping過程。 實訓背景 PING(Packet Internet Groper, 因特網包探索器),用於測試網絡是否連通的程序,在Windows、Linux、Unix下都是標配程序,Pi

wireshark分析TCP三次握手四次揮手以及TCP實現可靠傳輸的機制(轉)

關於TCP三次握手和四次揮手大家都在《計算機網路》課程裡學過,還記得當時高超老師耐心地講解。大學裡我遇到的最好的老師大概就是這位了,雖然他只給我講過《java程式設計》和《計算機網路》,但每次課幾乎都動手敲程式碼或者當場做實驗。好了不扯了,下面進入正題。      關

使用tcpdump+wireshark分析網路資料

最近和學弟在除錯一個GPRS通訊模組,需求是通過GPRS模組通過http協議傳送資料到伺服器,但是http協議一直失敗,伺服器返回400,通過查詢http狀態碼得知,http400錯誤是請求無效,因為GPRS模組沒有實現http協議的封裝,需要在TCP協議的基礎上,手動拼裝http格式的報文.所以初步猜測是h

Wireshark分析Yersinia 根據DHCP協議傳送的偽造資料攻擊(sending RAW packet)

抓包結果如下: 抓包與分析 幀號時間源地址目的地址高層協議包內資訊概況No.  Time   Source        Destination      Protocol    Info 5  1

R︱高效資料操作——data.table實戰心得dplyr對比key靈活用法資料合併)

每每以為攀得眾山小,可、每每又切實來到起點,大牛們,緩緩腳步來俺筆記葩分享一下吧,please~———————————————————————————      由於業務中接觸的資料量很大,於是不得不轉戰開始尋求資料操作的效率。於是,data.table這個包就可以很好的滿足

rtsp詳解wireshark分析

一、概述     RTSP(Real-Time Stream Protocol )是一種基於文字的應用層協議,在語法及一些訊息引數等方面,RTSP協議與HTTP協議類似。     RTSP被用於建立的控制媒體流的傳輸,它為多媒體服務扮演“網路遠端控制”的角

python資料探勘與分析實戰—123

一、資料探勘的建模過程: 1.1定義挖掘目標: 1.1.1動態的菜品推薦 1.1.2客戶進行細分,關注最有價值的客戶 1.1.3基於菜品的歷史銷售情況,對菜品銷量進行預測,預備原材料 1.1.4基於大

wireshark網路抓取資料分析

第一次總結的文件不知到被我放到哪裡去了,找了很久沒有總結出來,於是只能再總結一次,之前也是一直在學習協議。資料包的分析對於瞭解網路,尤其是理解協議來說很重要。我只是分析了TCP/IP協議族的部分常見協議,自己記上一筆,防止放在電腦上又被我給弄沒了。。。 IP資料報格式

wireshark分析rtmp協議,並提取出H264視頻流

tmp mage idt 進制 tro shark src 技術 wid 利用wireshark抓取rtmp流數據, 分析到rtmp流後,寫入過濾條件,如 tcp.stream eq 6導出tcp流保存16進制的數據為純文本格式一定要選擇 Hex轉儲,然後點擊 “Sava

[Abp 源碼分析]十多租戶體系與權限驗證

表達式 如何實現 進入 urn tty token asp.net hang 都是 0.簡介 承接上篇文章我們會在這篇文章詳細解說一下 Abp 是如何結合 IPermissionChecker 與 IFeatureChecker 來實現一個完整的多租戶系統的權限校驗的。 1

FTP協議的粗淺學習--利用wireshark分析相關tcp連接

sha ftp命令 動向 c中 細胞 nsf ref 後退 圖片 一、為什麽寫這個 昨天遇到個ftp相關的問題,關於ftp匿名訪問的。花費了大量的腦細胞後,終於搞定了服務端的配置,現在客戶端可以像下圖一樣,直接在瀏覽器輸入url,即可直接訪問。 期間不會彈出輸入用戶名密

聊聊tcpdump與Wireshark分析

1 起因# 前段時間,一直在調線上的一個問題:線上應用接受POST請求,請求body中的引數獲取不全,存在丟失的狀況。這個問題是偶發性的,大概發生的機率為5%-10%左右,這個概率已經相當高了。在排查問題的過程中使用到了tcpdump和Wireshark進行抓包分析。感覺這兩個工具搭配起來

Spring Developer Tools 源碼分析類路徑監控

ring hfile 其中 fadd folder 添加 star adbd 監控目錄 在 Spring Developer Tools 源碼分析一中介紹了 devtools 提供的文件監控實現,在第二部分中,我們將會使用第一部分提供的目錄監控功能,實現對開發環境中 cla

Windows下底層資料傳送實戰

1、簡介   所謂“底層資料包”指的是在“執行”於資料鏈路層的資料包,簡單的說就是“乙太網幀”,而我們常用的Socket只能傳送“執行”在傳輸層的TCP、UDP等包,這些傳輸層資料包已經能滿足絕大部分需求,但是有些時候還是需要傳送底層資料包的(例如SYN掃描),那麼如何傳送呢?

實現Telnet遠端登入,利用Wireshark分析

一、實驗環境 伺服器:windows server 2008 客戶機:windows 2007 網絡卡連線:NAT(Vmnet 8) 實現客戶機遠端登入伺服器 二、實驗步驟 1、設定IP地址 伺服器:windows server 2008 IP 地 址:192.168.10.1 子