TCP 窗口协议
这里使用可视化展现窗口协议
在上面这个图中,我们将字节从1至11进行标号。接收方通告的窗口称为提出的窗口(offered window),它覆盖了从第4字节到第9字节的区域,表明接收方已经确认了包括第3字节在内的数据,且通告窗口大小为6。由于窗口大小是与确认序号相对应的。发送方计算它的可用窗口,该窗口表明多少数据可以立即被发送。
当接收方确认数据后,这个滑动窗口不时地向右移动。窗口两个边沿的相对运动增加或减少了窗口的大小。我们使用三个术语来描述窗口左右边沿的运动:
1)称窗口左边沿向右边沿靠近为窗口合拢。这种现象发生在数据被发送和确认时。
2)当窗口右边沿向右移动时将允许发送更多的数据,我们称之为窗口张开。这种现象发生在另一端的接收进程读取已经确认的数据并释放了TCP的接收缓存时。
3)当右边沿向左移动时,我们称之为窗口收缩。 Host Requirements RFC强烈建议不要使用这种方式。但TCP必须能够在某一端产生这种情况时进行处理。
上面的图表示了这三种情况。因为窗口的左边沿受另一端发送的确认序号的控制,因此不可能向左边移动。如果接收到一个指示窗口左边沿向左移动的ACK,则它被认为是一个重复ACK,并被丢弃。如果左边沿到达右边沿,则称其为一个零窗口,此时发送方不能够发送任何数据。
滑动窗口的动态性
以该图为例可以总结如下几点:
1) 发送方不必发送一个全窗口大小的数据。
2) 来自接收方的一个报文段确认数据并把窗口向右边滑动。这是因为窗口的大小是相对于确认序号的。
3) 正如从报文段7到报文段8中变化的那样,窗口的大小可以减小,但是窗口的右边沿却不能够向左移动。
4) 接收方在发送一个 ACK前不必等待窗口被填满。在前面我们看到许多实现每收到两个报文段就会发送一个ACK。
相关文章
- docker登录报错Error response from daemon: Get https://192.168.30.10/v1/users/: dial tcp 192.168.30.10:443: connect: connection refused
- Netty使用LineBasedFrameDecoder解决TCP粘包/拆包
- 理论经典:TCP协议的3次握手与4次挥手过程详解
- TCP协议端口状态说明:CLOSE-WAIT、TIME_WAIT 、LISTENING、SYN_SENT、ESTABLISHED、LAST_ACK、CLOSED
- TCP/IP协议族——IP工作原理及实例具体解释(上)
- 从一个HTTP请求来读懂HTTP、TCP协议
- 网络安全-OSI模型、TCP/IP协议簇和数据封装与解封装过程
- 5.3.1 TCP协议特点和TCP报文段格式
- 在 Linux 下使用 TCP 封装器来加强网络服务安全
- Linux的TCP网络编程流程图
- WinSock API网络编程——TCP/IP协议详解
- TCP协议和UDP协议的区别
- 1.0 TCP/IP协议(参考模型)
- TCP和UDP 的区别,TCP/UDP协议相关子协议,为什么要使用三次握手,为什么要四次挥手,TIME_WAIT的意义,为什么是2MSL,拥塞控制,流量控制,超时重传
- TCP/IP, UDP, ICMP, ARP协议族简介--纯图慎点
- 《Nmap渗透测试指南》—第2章2.6节TCP ACK Ping扫描
- tcp - 传输控制协议 (TCP)
- 协议森林08 不放弃 (TCP协议与流通信)
- 网络协议及tcp协议详解(超清楚的大图,难得还解释了会话层和表示层。服务端有一个保活计时器,时间通常是设置为2小时。发送一个探测报文段,以后每隔75秒钟发送一次,一连发送10个探测报文)
- 浏览器工作原理:浅析TCP协议 - 如何保证页面文件能被完整送达浏览器
- 2023年java面试题之网络编程TCP/IP和UDP
- Android学习之按钮触发连接TCP服务器
- C/S模型之TCP协议
- tcp-ip-状态详解(转)
- 访问了一次百度网页,你都经历了什么?https及tcp协议揭秘
- C#网络编程TCP通信实例程序简单设计