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

一、滑动窗口简介

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

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

说明:

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

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

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

                服务器:

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

                客户端:
                        发送缓冲区(发送缓冲区窗口)
                        接收缓冲区(接收缓冲发窗己)

二、滑动窗口图文解释

TCP 滑动窗口详解(非常实用)_第1张图片

 1、发送缓冲区

        白色格子:空闲的空间;

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

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

 2、接收缓冲区

        白色格子:空闲的空间;

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

三、滑动窗口工作流程

TCP 滑动窗口详解(非常实用)_第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、三次握手

TCP 滑动窗口详解(非常实用)_第3张图片

2、四次挥手 

TCP 滑动窗口详解(非常实用)_第4张图片

 

 

你可能感兴趣的:(Linux,操作系统,tcp/ip,网络,服务器,c++,linux)