從TCP協議之滑動視窗分析應用效能

2021-10-10 11:51:56 字數 1444 閱讀 8785

去年我師傅推薦了兩本林沛滿寫的關於wireshark抓包的書,分別是《wireshark就是這麼簡單》和《wireshark分析的藝術》,寫的真心不錯。

tcp協議是乙個很有意思的內容,這半年對tcp協議有了更多的認識,於是想重新更新一些對tcp協議的內容。今天先從tcp協議裡面的滑動視窗說起。

就傳送端來說,一般如下所示:

主要分為:已傳送已確認的包(應用層未讀取)。傳送未確認的包,未傳送可傳送的包,未傳送不可傳送的包。其中,滑動視窗指的是傳送未確認和未傳送可傳送區域的大小。

通常情況下,在wireshark抓包中看到的 win 表示向對方宣告自己的接收視窗的大小,對方收到以後,會把自己的[傳送視窗]限制在 指定大小之內。如果自己的處理能力有限,導致自己的接收緩衝區滿,接收視窗大小為 0時傳送端應該停止傳送資料。

比如,使用模擬工具產生的tcp報文,其中客戶端視窗宣告為20,抓包如下:

再比如,客戶端發起連線的時候宣告自己的視窗為4000,其中mss為1000。然後模擬服務端傳送5000位元組資料給客戶端。

當出現零視窗的時候,服務端啟動持續探測定時器,也叫persist定時器。

當接收端 b 接收視窗為 0 時,傳送端 a 此時不能再傳送資料,傳送端此時開啟 persist 定時器,超時後傳送乙個特殊的報文給接收端看對方視窗是否已經恢復,這個特殊的報文只有乙個位元組。

比如某個wireshark的抓包結果如下:

有一次某專案報了個問題,在運營高峰期,大屏的表示滯後半分鐘。首先根據系統方案,需要分析排查是通訊介面機a有沒有及時將裝置狀態送給中心伺服器b處理,還是中心伺服器b有效能瓶頸導致處理不過來。於是現場人員分別在a和b機器抓包。

在伺服器b機器上抓包,其中介面機a這台機器的ip是172.19.160.1 ,伺服器b機器的ip是172.19.160.4。

伺服器b接收端宣告自己的視窗最終變成了0 。此時介面機a傳送端會處於等待狀態,然後啟動零視窗探測定時器,定時傳送探測視窗的訊息。說明伺服器b這邊的接收緩衝區是滿的,應用層沒有及時讀走。後來經過效能優化,解決了該問題。

1、tcp window full 是站在傳送端角度說的,表示此時傳送端不能再發資料給對方,除非傳送的資料報得到ack。

2、tcp zero window 是站在接收端角度來說的,是接收端接收視窗滿,自動告知對方不能再傳送資料給自己。

TCP協議之滑動視窗

1 滑動視窗 當一次只發乙個分組處理重傳很容易,但是在延遲很高的網路中效率會很低。滑動視窗解決一次性可以傳送多個分組過去,接收ack的問題相當於是在解決資料應答機制的效率,另外當視窗大小基於來自接收方或其他訊號的回饋而改變是流量控制和擁塞控制就實現了 傳送視窗 傳送方維持的允許傳送的幀的序號。包含了...

TCP 滑動視窗協議

什麼是滑動視窗協議?一圖勝千言,看下面的圖。簡單解釋下,傳送和接受方都會維護乙個資料幀的序列,這個序列被稱作視窗。傳送方的視窗大小由接受方確定,目的在於控制傳送速度,以免接受方的快取不夠大,而導致溢位,同時控制流量也可以避免網路擁塞。下面圖中的4,5,6號資料幀已經被傳送出去,但是未收到關聯的ack...

TCP 滑動視窗協議

本系列文章是博主學習tcp協議以來的個人筆記。博主不能保證本文所述 內容絕對正確,所 以請讀者抱著懷疑的態度閱讀本部落格內的文字。如果讀 者因本部落格內的文字造成損失,本人 無力負責。如果有任何謬誤或者問題,希望讀者不吝賜教。在遍布世界的網際網路線路上進行可靠的資料傳輸談何容易,一來傳輸介質 有差異...