1. 程式人生 > >TCP 滑動視窗 (流量控制)

TCP 滑動視窗 (流量控制)

首先明確:
1)TCP滑動視窗分為接受視窗,傳送視窗
滑動視窗協議是傳輸層進行流控的一種措施,接收方通過通告發送方自己的視窗大小,從而控制傳送方的傳送速度,從而達到防止傳送方傳送速度過快而導致自己被淹沒的目的。

對ACK的再認識,ack通常被理解為收到資料後給出的一個確認ACK,ACK包含兩個非常重要的資訊:
一是期望接收到的下一位元組的序號n,該n代表接收方已經接收到了前n-1位元組資料,此時如果接收方收到第n+1位元組資料而不是第n位元組資料,接收方是不會發送序號為n+2的ACK的。舉個例子,假如接收端收到1-1024位元組,它會發送一個確認號為1025的ACK,但是接下來收到的是2049-3072,它是不會發送確認號為3072的ACK,而依舊傳送1025的ACK。

二是當前的視窗大小m,如此傳送方在接收到ACK包含的這兩個資料後就可以計算出還可以傳送多少位元組的資料給對方,假定當前傳送方已傳送到第x位元組,則可以傳送的位元組數就是y=m-(x-n).這就是滑動視窗控制流量的基本原理




重點:傳送方根據收到ACK當中的期望收到的下一個位元組的序號n以及視窗m,還有當前已經發送的位元組序號x,算出還可以傳送的位元組數。


傳送端視窗的第一個位元組序號一定是ACK中期望收到的下一個位元組序號,比如下圖: