• TCP滑动窗口


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

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

     窗口理解为缓冲区的大小
    滑动窗口的大小会随着发送数据和接收数据而变化。
    通信的双方都有发送缓冲区和接收数据的缓冲区

    服务器:
    发送缓冲区(发送缓冲区的窗口)
    接收缓冲区(接收缓冲区的窗口)
    客户端
    发送缓冲区(发送缓冲区的窗口)
    接收缓冲区(接收缓冲区的窗口)

    发送方的缓冲区:
      白色格子:空闲的空间
      灰色格子:数据已经被发送出去了,但是还没有被接收
      紫色格子:还没有发送出去的数据
    接收方的缓冲区:
      白色格子:空闲的空间
      紫色格子:已经接收到的数据

    # mss: Maximum Segment Size(一条数据的最大的数据量)
    # win: 滑动窗口
    1. 客户端向服务器发起连接,客户单的滑动窗口是4096,一次发送的最大数据量是1460
    2. 服务器接收连接情况,告诉客户端服务器的窗口大小是6144,一次发送的最大数据量是1024
    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次,第四次挥手,客户端同意了服务器端的断开请求

  • 相关阅读:
    Pandas数据类型自行变换及数据类型转换失败情况分析与解决方法
    Python实验项目4 :面对对象程序设计
    华为手机adbshell卸载不需要的系统应用
    敏捷开发与Scrum区别(敏捷开发(Agile)教程)
    Linux C网络通信过程
    Ajax系列之文件上传进度展示
    odi资料库查询sql
    python、SQL日新增人数统计
    Unity中Shader的Lambert光照的实现
    [每周一更]-(第65期):Docker容器监控工具推荐
  • 原文地址:https://blog.csdn.net/ME_Liao_2022/article/details/133656845