吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

debug 吞吐量的辦法

lhl545545 ? 來源:良許Linux ? 作者:良許Linux ? 2022-09-02 09:36 ? 次閱讀

Debug 網絡質量的時候,我們一般會關注兩個因素:延遲和吞吐量(帶寬)。延遲比較好驗證,Ping 一下或者mtr[1]一下就能看出來。這篇文章分享一個 debug 吞吐量的辦法。

看重吞吐量的場景一般是所謂的長肥管道(Long Fat Networks, LFN,rfc7323[2]). 比如下載大文件。吞吐量沒有達到網絡的上限,主要可能受 3 個方面的影響:

發送端出現了瓶頸

接收端出現了瓶頸

中間的網絡層出現了瓶頸

發送端出現瓶頸一般的情況是 buffer 不夠大,因為發送的過程是,應用調用 syscall,將要發送的數據放到 buffer 里面,然后由系統負責發送出去。如果 buffer 滿了,那么應用會阻塞住(如果使用 block 的 API 的話),直到 buffer 可用了再繼續 write,生產者和消費者模式。

fc83cbec-2a4e-11ed-ba43-dac502259ad0.png

發送端出現瓶頸一般都比較好排查,甚至通過應用的日志看何時阻塞住了即可。大部分情況都是第 2,3 種情況,比較難以排查。這種情況發生在,發送端的應用已經將內容寫入到了系統的 buffer 中,但是系統并沒有很快的發送出去。

TCP 為了優化傳輸效率(注意這里的傳輸效率,并不是單純某一個 TCP 連接的傳輸效率,而是整體網絡的效率),會:

保護接收端,發送的數據不會超過接收端的 buffer 大小 (Flow control)。數據發送到接受端,也是和上面介紹的過程類似,kernel 先負責收好包放到 buffer 中,然后上層應用程序處理這個 buffer 中的內容,如果接收端的 buffer 過小,那么很容易出現瓶頸,即應用程序還沒來得及處理就被填滿了。那么如果數據繼續發過來,buffer 存不下,接收端只能丟棄。

保護網絡,發送的數據不會 overwhelming 網絡 (Congestion Control, 擁塞控制), 如果中間的網絡出現瓶頸,會導致長肥管道的吞吐不理想;

對于接收端的保護,在兩邊連接建立的時候,會協商好接收端的 buffer 大小 (receiver window size, rwnd), 并且在后續的發送中,接收端也會在每一個 ack 回包中報告自己剩余和接受的 window 大小。這樣,發送端在發送的時候會保證不會發送超過接收端 buffer 大小的數據。(意思是,發送端需要負責,receiver 沒有 ack 的總數,不會超過 receiver 的 buffer.)

fc9ec8d4-2a4e-11ed-ba43-dac502259ad0.png

對于網絡的保護,原理也是維護一個 Window,叫做 Congestion window,擁塞窗口,cwnd, 這個窗口就是當前網絡的限制,發送端不會發送超過這個窗口的容量(沒有 ack 的總數不會超過 cwnd)。

怎么找到這個 cwnd 的值呢?

這個就是關鍵了,默認的算法是 cubic, 也有其他算法可以使用,比如 Google 的BBR[3].

主要的邏輯是,慢啟動(Slow start), 發送數據來測試,如果能正確收到 receiver 那邊的 ack,說明當前網絡能容納這個吞吐,將 cwnd x 2,然后繼續測試。直到下面一種情況發生:

發送的包沒有收到 ACK

cwnd 已經等于 rwnd 了

第 2 點很好理解,說明網絡吞吐并不是一個瓶頸,瓶頸是在接收端的 buffer 不夠大。cwnd 不能超過 rwnd,不然會 overload 接收端。

對于第 1 點,本質上,發送端是用丟包來檢測網絡狀況的,如果沒有發生丟包,表示一切正常,如果發生丟包,說明網絡處理不了這個發送速度,這時候發送端會直接將 cwnd 減半。

但實際造成第 1 點的情況并不一定是網絡吞吐瓶頸,而可能是以下幾種情況:

網絡達到了瓶頸

網絡質量問題丟包

中間網絡設備延遲了包的送達,導致發送端沒有在預期時間內收到 ACK

2 和 3 原因都會造成 cwnd 下降,無法充分利用網絡吞吐。

以上就是基本的原理,下面介紹如何定位這種問題。

rwnd 查看方式

這個 window size 直接就在 TCP header 里面,抓下來就能看這個字段。

fcaf21c0-2a4e-11ed-ba43-dac502259ad0.png

但是真正的 window size 需要乘以 factor, factor 是在TCP 握手節點通過 TCP Options 協商的[4]。所以如果分析一條 TCP 連接的 window size,必須抓到握手階段的包,不然就不可以知道協商的 factor 是多少。

fcd64ff2-2a4e-11ed-ba43-dac502259ad0.png

cwnd 查看方式

Congestion control 是發送端通過算法得到的一個動態變量,會試試調整,并不會體現在協議的傳輸數據中。所以要看這個,必須在發送端的機器上看。

Linux 中可以使用ss -i選項將 TCP 連接的參數都打印出來。

fcfa4da8-2a4e-11ed-ba43-dac502259ad0.png

這里展示的單位是TCP MSS.[5]即實際大小是 1460bytes * 10.

Wireshark 分析

Wireshark 提供了非常使用的統計功能,可以讓你一眼就能看出當前的瓶頸是發生在了哪里。但是第一次打開這個圖我不會看,一臉懵逼,也沒查到資料要怎么看。好在我同事[6]會,他把我教會了,我在這里記錄一下,把你也教會。

首先,打開的方式如下:

fd1ef158-2a4e-11ed-ba43-dac502259ad0.png

然后你會看到如下的圖。

fd3ab708-2a4e-11ed-ba43-dac502259ad0.png

首先需要明確,tcptrace 的圖表示的是單方向的數據發送,因為 tcp 是雙工協議,兩邊都能發送數據。其中最上面寫了你當前在看的圖數據是從 10.0.0.1 發送到 192.168.0.1 的,然后按右下角的按鈕可以切換看的方向。

X 軸表示的是時間,很好理解。

然后理解一下 Y 軸表示的 Sequence Number, 就是 TCP 包中的 Sequence Number,這個很關鍵。圖中所有的數據,都是以 Sequence Number 為準的。

所以,你如果看到如上圖所示,那么說明你看反了,因為數據的 Sequence Number 并沒有增加過,說明幾乎沒有發送過數據,需要點擊 Switch Direction。

fd5cec38-2a4e-11ed-ba43-dac502259ad0.png

這就對了,可以看到我們傳輸的 Sequence Number 在隨著時間增加而增加。

這里面有 3 條線,含義如下:

fd72b4fa-2a4e-11ed-ba43-dac502259ad0.png

除此之外,另外還有兩種線:

fd911242-2a4e-11ed-ba43-dac502259ad0.png

需要始終記住的是 Y 軸是 Sequence Number,紅色的線表示 SACK 的線表示這一段 Sequence Number 我已經收到了,然后配合黃色線表示 ACK 過的 Sequence Number,那么發送端就會知道,在中間這段空擋,包丟了,紅色線和黃色線縱向的空白,是沒有被 ACK 的包。所以,需要重新傳輸。而藍色的線就是表示又重新傳輸了一遍。

學會了看這些圖,我們可以認識幾種常見的 pattern:

丟包

fda60e7c-2a4e-11ed-ba43-dac502259ad0.png

很多紅色 SACK,說明接收端那邊重復在說:中間有一個包我沒有收到,中間有一個包我沒有收到。

吞吐受到接收 window size 限制

fdc81dbe-2a4e-11ed-ba43-dac502259ad0.png

從這個圖可以看出,黃色的線(接收端一 ACK)一上升,藍色就跟著上升(發送端就開始發),直到填滿綠色的線(window size)。說明網絡并不是瓶頸,可以調大接收端的 buffer size.

吞吐受到網絡質量限制

fdd7c354-2a4e-11ed-ba43-dac502259ad0.png

從這張圖中可以看出,接收端的 window size 遠遠不是瓶頸,還有很多空閑。

fdf4cfc6-2a4e-11ed-ba43-dac502259ad0.png

放大可以看出,中間有很多丟包和重傳,并且每次只發送一點點數據,這說明很有可能是 cwnd 太小了,受到了擁塞控制算法的限制。

審核編輯:彭靜
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據
    +關注

    關注

    8

    文章

    7139

    瀏覽量

    89572
  • 帶寬
    +關注

    關注

    3

    文章

    953

    瀏覽量

    41076
  • 吞吐量
    +關注

    關注

    0

    文章

    47

    瀏覽量

    12354
  • TCP
    TCP
    +關注

    關注

    8

    文章

    1378

    瀏覽量

    79300

原文標題:如何使用 Wireshark 分析 TCP 吞吐瓶頸

文章出處:【微信號:良許Linux,微信公眾號:良許Linux】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    如何提高CYBT-243053-02吞吐量

    你好我們一直在使用“EZ-Serial Firmware: v1.4.13.13 Sep 22 2023 10:24:41”測試“CYBT-243053-02”,我們得到的吞吐量比 PUART 高
    發表于 02-27 06:56

    網卡吞吐量測試解決方案

    隨著互聯網的迅速發展,計算機日益成為人們生活中不可或缺的部分。伴隨著網絡業務的豐富,用戶對計算機網卡的要求也越來也高。如何對計算機網卡吞吐量進行合理的測試,已越來越成為眾多計算機網卡生產廠家日益關注
    發表于 12-23 11:07

    無線測試之吞吐量測試

    無線網絡測試之無線吞吐量測試方法、步驟
    發表于 06-25 08:40

    iperf固定吞吐量測試如何設置

    我有兩個CYW43907演示,并下載控制臺項目。我想使用IpFF命令來測試固定的UDP吞吐量。示例:IPEF-C 192.1680.1-P 5001 -I 2 -T 30 -U-B 60M,但客戶端
    發表于 11-06 14:09

    如何計算延遲和吞吐量

    如何計算延遲和吞吐量?在ISE時序報告中,我們發現一個名為“最大組合路徑延遲”的參數是否與最大時鐘頻率有關?
    發表于 03-19 08:55

    提高BLE吞吐量的可行辦法

    提高BLE吞吐量的可行辦法如何實現更快的BLE吞吐量
    發表于 01-18 06:26

    如何通過觸發模型提高吞吐量

    如何通過觸發模型提高吞吐量
    發表于 05-11 07:00

    防火墻術語-吞吐量

    防火墻術語-吞吐量  術語名稱:吞吐量 術語解釋:網絡中的數據是由一個個數據包組成,防火
    發表于 02-24 11:06 ?1548次閱讀

    MIMO天線增益不同引起的吞吐量波動

    近期在對一款2×2 MIMO無線產品的測試中,發現了一件有意思的事情,當兩只天線的增益不一致時,會導致吞吐量波動
    發表于 06-16 09:22 ?2956次閱讀
    MIMO天線增益不同引起的<b class='flag-5'>吞吐量</b>波動

    debug 吞吐量辦法

    Debug 網絡質量的時候,我們一般會關注兩個因素:延遲和吞吐量(帶寬)。延遲比較好驗證,Ping 一下或者 mtr[1] 一下就能看出來。這篇文章分享一個 debug 吞吐量
    的頭像 發表于 08-23 09:17 ?1001次閱讀

    iperf吞吐量的測試流程

    iperf吞吐量測試指南
    發表于 04-03 15:40 ?2次下載

    如何顯著提高ATE電源吞吐量

    作為一名測試工程師,你的工作并不容易。降低成本和提高系統吞吐量的壓力一直存在。本文中,我們將討論影響系統吞吐量的關鍵因素以及如何降低ATE測試成本。
    的頭像 發表于 11-08 14:59 ?754次閱讀
    如何顯著提高ATE電源<b class='flag-5'>吞吐量</b>?

    影響ATE電源系統吞吐量的關鍵因素

    從串行設備測試改變為并行設備測試可以顯著地增加測試系統吞吐量。測試執行活動的大部分可能涉及使用DC電源設置條件和進行測量。配置測試系統,使其能夠使用多個直流電源同時對多個設備執行測試,是顯著提高測試吞吐量的一種經濟有效的方法。
    發表于 11-29 12:36 ?475次閱讀
    影響ATE電源系統<b class='flag-5'>吞吐量</b>的關鍵因素

    TMS320C6474模塊吞吐量

    電子發燒友網站提供《TMS320C6474模塊吞吐量.pdf》資料免費下載
    發表于 10-15 13:52 ?0次下載
    TMS320C6474模塊<b class='flag-5'>吞吐量</b>

    TMS320VC5510 HPI吞吐量和優化

    電子發燒友網站提供《TMS320VC5510 HPI吞吐量和優化.pdf》資料免費下載
    發表于 10-16 09:35 ?0次下載
    TMS320VC5510 HPI<b class='flag-5'>吞吐量</b>和優化
    大发888娱乐城客服电话| 大发888娱乐场解码器| 百家乐官网赌博赌博网站| 娱乐城送| 百家乐博娱乐网赌百家乐| 百家乐官网五铺的缆是什么意思| 威尼斯人娱乐场 28| 百家乐官网视频游戏官网| bet365ok| 二八杠自行车| 钱隆百家乐分析| 百家乐公式| 大发888bjl| 豪门百家乐的玩法技巧和规则 | 百家乐77scs| ea百家乐打水| 澳门百家乐死局| 上海百家乐官网的玩法技巧和规则 | 六合彩开码结果| 郑州水果机遥控器| 百家乐官网真人视频出售| 百家乐官网做庄家必赢诀窍| 德州扑克入门| 网上百家乐游戏玩法| 百家乐网上娱乐城| 百家乐美女荷官| 百家乐官网官网| 去澳门百家乐官网娱乐城| 赌博的危害| 威尼斯人娱乐场怎么样| 百家乐破解方法技巧| 百家乐有无规律可循| 百家乐娱乐城优惠| 尊龙百家乐官网娱乐城| 索罗门百家乐官网的玩法技巧和规则 | 百家乐官网追注法| 百家乐官网赌博赌博平台| 百家乐官网9点| 博天堂百家乐官网官网| 苏尼特右旗| 百家乐官网星级游戏|