tcp連線之滑動視窗總結

2021-10-01 13:51:39 字數 1296 閱讀 3681

《一》1,近來在工作中遇到乙個問題,tcp連線建立正常,但是在傳送方向接收端傳送資料報是,接收方程式出現假死狀態,無法接收資料,經過檢視發現接收方向傳送方傳送了zerowindows的資料報,即滑動視窗為0的情況,此種情況導致傳送方不在傳送相關的資料。

2,滑動視窗簡介

在tcp連線中有兩種情況一種是固定視窗,另一種是滑動視窗,下面介紹兩種視窗的原理。

a>固定視窗,是連線雙方約定好的緩衝區的大小,用來接收所需的資料情況,但是此種方法不好,要麼浪費,要麼不夠,(不夠情況會阻塞鏈路資料傳送從而效率低下)總之在資料傳送方式使用的不是很好。

b>滑動視窗

滑動視窗通俗來講就是一種流量控制技術。

它本質上是描述接收方的tcp資料報緩衝區大小的資料,傳送方根據這個資料來計算自己最多能傳送多長的資料,如果傳送方收到接收方的視窗大小為0的tcp資料報,那麼傳送方將停止傳送資料,等到接收方傳送視窗大小不為0的資料報的到來

c>工作原理

第一次傳送資料這個時候的視窗大小是根據鏈路頻寬的大小來決定的。

假設這時候的視窗是3.這個時候接收方收到資料以後會對資料進行確認告訴哦傳送方我下次希望收到的資料是多少。

在上圖中:我們看到接收方傳送的ack = 3(這是對傳送方傳送序列2的回答確認,下一次接收方期望接收到的是3序列訊號),這個時候傳送方收到這個資料以後就知道我第一次傳送的3個資料對方只收到了兩個,就知道第三個資料對方沒有收到,下次返送的時候就從第3個資料開始發。這時候視窗大小就變為了2.

如下圖所示:

看到接收方傳送的ack是5就表示他下一次希望收到的資料是5,傳送方就知道我剛才傳送的2個資料對方收到了,這個時候開始傳送第5個資料。

以上是滑動視窗的相關介紹。

注意:姿資料傳送過程,應該根據實際情況來處理相應的資料傳送處理,可進行拆分資料報,批量傳送所需要的實際資料。可以用對應的結構情況統計傳送的資料長度來決定。可以更好的避免傳送粘包情況。

《二》socket通訊連線。

客戶端連線被拒絕,出現connection refused。經抓包發現,在客戶端傳送了syn報之後,服務端向客戶端傳送了rst,ack資料報文,表示重新建立連線。常見現象,是服務端不存在對應埠的監聽情況。因為客戶端和服務端使用的埠跟ip不一致導致。此種問題,會導致出現重連線失敗,連線拒絕,情況。

解決方法:確保雙發使用的ip跟埠一致(埠沒有被占用的前提條件)。

TCP協議之滑動視窗

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

TCP滑動視窗

目前建立在tcp協議上的網路協議特別多,有telnet,ssh,有ftp,有http等等。這些協議又可以根據資料吞吐量來大致分成兩大類 1 互動資料型別,例如telet,ssh,這種型別的協議在大多數情況下只是做小流量的資料交換,比如說按一下鍵盤,回顯一些文字等等。2 資料成塊型別,例如ftp,這種...

TCP滑動視窗

假設a和b之間新建立了一條tcp連線。裝置a需要傳送一長串資料流,但裝置b無法一次全部接收,所以它限制裝置a每次傳送分段指定數量的位元組數,直到分段中已傳送的位元組數得到確認。之後,裝置a可以繼續傳送更多位元組。每乙個裝置都對傳送,接收及確認資料進行追蹤。tcpbuffer中資料可以分為以下四類 1...