关于我们

质量为本、客户为根、勇于拼搏、务实创新

< 返回新闻公共列表

TCP 滑动窗口详解(非常实用)

发布时间:2023-06-26 22:01:01

一、滑动窗口简介


   滑动窗口(Sliding window)是一种流量控制技术。早期的网络通信中,通信双方不会考虑网络的 拥挤情况直接发送数据。由于大家不知道网络拥塞状况,同时发送数据,导致中间节点阻塞掉包, 谁也发不了数据,所以就有了滑动窗口机制来解决此问题。滑动窗口协议是用来改善吞吐量的一种 技术,即容许发送方在接收任何应答之前传送附加的包。接收方告诉发送方在某一时刻能送多少包 (称窗口尺寸)。


       TCP 中采用滑动窗口来进行传输控制,滑动窗口的大小意味着接收方还有多大的缓冲区可以用于 接收数据。发送方可以通过滑动窗口的大小来确定应该发送多少字节的数据。当滑动窗口为 0 时,发送方一般不能再发送数据报。滑动窗口是 TCP 中实现诸如 ACK 确认、流量控制、拥塞控制的承载结构。


说明:


       1、可以把窗口理解为缓冲区的大小;


       2、滑动窗口的大小会随着发送数据和接收数据而变化;


       3、通信双方都有发送缓冲区和接收缓冲区;


               服务器:


                       发送缓冲区(发送缓冲区窗口)

                       接收缓冲区(接收缓冲发窗己)


               客户端:

                       发送缓冲区(发送缓冲区窗口)

                       接收缓冲区(接收缓冲发窗己)


二、滑动窗口图文解释


 1、发送缓冲区


       白色格子:空闲的空间;


       灰色格子:数据己经发送出去了,但是还没有被接收;


       紫色格子:还没有发送出去的数据;


2、接收缓冲区


       白色格子:空闲的空间;


       紫色格子:还没有发送出去的数据;


三、滑动窗口工作流程


# mss:Maximum segment size(一条数据的最大的数据量)


# win:滑动窗口


1、客户端向服务器发起连接,客户端的滑动窗口是4096,一次发送的最大数据量是1460(第一次握手);


2、服务器接收连接情况,告诉客户端服务器的窗口大小是6144,一次发送的最大数据量10243(第二次握手);


3、第三次握手;


4、4-9客户端连续给服务器发送了 6k 的数据,每次发送 1k;


5、第10次,服务器告诉客户端:发送的6k数据以及接收到,存储在缓冲区中,缓冲区数据已经处理了 2k,窗口大小是 2k;


6、第11次,服务器告诉客户端:发送的 6k 数据以及接收到,存储在缓冲区中,缓冲区数据已经处理了 4k,窗口大小是 4k;


7、第12次,客户端给服务器发送了 1k 的数据;


8、第13次,客户端主动请求和服务器断开连接,并且给服务器发送了1k的数据


9、第14次,服务器回复ACK 8194,a:同意断开连接的请求 b:告诉客户端已经接受到方才发的2k的数据 c:滑动窗口2k;


10、第15、16次,通知客户端滑动窗口的大小;


11、第17次,第三次挥手服务器端给客户端发送FIN ,请求断开连接;


12、第18次,第四次回收各户端同意了服务器端的断开请求。


说明:1-3是三次握手,4-9是进行通信;第一次和第二次握手时不能带有通信数据,因为还没有建立连接,第三次握手时可以带通信数据;


四、TCP 通信图解


1、三次握手



2、四次挥手 




/template/Home/leiyu/PC/Static