TCP的滑动窗口机制

网络的错误检测和补偿机制非常复杂。

一、等待超时时间(返回ACK号的等待时间)

当网络繁忙时会发生拥塞,ACK号的返回变慢,较短的等待时间会导致频繁的数据重传,导致本就拥塞的网络雪上加霜。如果等待时间过长,包的重传又会出现很大的延迟,也会导致网络的速度变慢。根据服务器物理距离的远近,ACK号的返回时间也会产生很大的波动,而且我们还必须考虑到拥塞带来的影响。

TCP采用了动态调整等待时间的方法,根据ACK号的返回时间来调整等待时间。

二、滑动窗口

滑动窗口:发送一个包之后,不等待ACK号返回,而是直接发送后续的一系列包,充分利用ACK号的等待时间。

一来一回的ACK等待方式不会出现发送与处理速度不匹配的情况。但不等返回ACK号就连续发送包,就会出现发送频率超过接收方处理能力的情况。

当接收方的缓冲区溢出后,后面的数据就进不来了,会导致数据丢失。

滑动窗口处理这个问题的具体方式是,接收方将数据暂存到缓冲区并执行接收操作。当接收操作完成后,接收缓冲区中的控件会被释放出来,再通过TCP头部中的窗口字段将自己能接收的数据量告诉发送方。这样,发送方就不会发送过多的数据,导致超出接收方的处理能力。

序号、ACK号与其他数据一样,发送和接收操作都是双向进行的。

**能够接收的最大数据量称为窗口大小。**是TCP调优参数中非常有名的一个。

总结一下:

首先,协议栈会检查收到的数据块和TCP头部的内容,判断是否有数据丢失,如果没有问题则返回ACK号。

然后,协议栈将数据块暂存到接收缓冲区中,并将数据块按顺序连接起来还原出原始的数据。

最后将数据交给应用程序。

具体来说,协议栈会将接收到的数据复制到应用程序指定的内存地址中,然后将控制流程交回应用程序。将数据交给应用程序之后,协议栈还需要找到合适的时机向发送方发送窗口更新

相关推荐
苏宸啊6 小时前
linux网络编程udp服务器和客户端代码编写(echo版本和字典版本)
linux·网络
奇树谦8 小时前
HDD 为什么适合顺序大文件读写:从 RAID 5 到 RAID 50 的原理与性能分析
linux·运维·网络
嵌入式阿蔡8 小时前
Linux_01:交叉编译与开发环境实战——从单片机跨到 Linux 的第一道坎
linux·运维·网络·单片机·嵌入式硬件·嵌入式实时数据库
雷电小将军9 小时前
诡秘之主手游占卜家序列加点 诡秘之主手游占卜家怎么加点
服务器·网络·游戏·电脑·玩游戏
陈皮波比茶10 小时前
Python项目实战-网络机器人(爬虫)
开发语言·网络·爬虫·python·机器人
白猫不黑10 小时前
网络安全/信息安全专业学习路线与入行指南:从大学到岗位的完整规划
网络·学习·安全·web安全·网络安全·黑客技术
wWYy.10 小时前
Linux发送数据包的过程
linux·网络
云飞云共享云桌面10 小时前
自动化设备厂 10 人研发团队,如何共用一台服务器做 SolidWorks 建模?
运维·服务器·网络·3d·自动化·制造
小谢取证11 小时前
实战案例分享:用 AI 绕过模拟器反取证进行动态抓包,落地 APK 真实 IP
大数据·网络·人工智能
xqwxbl11 小时前
小微企业差旅出行不用愁2026年头部商旅平台怎么选?看这篇就够了
大数据·网络·人工智能