TCP可靠性机制详解:排序、确认、重传与流量控制
创作时间:
作者:
@小白创作中心
TCP可靠性机制详解:排序、确认、重传与流量控制
引用
1
来源
1.
https://cloud.tencent.com.cn/developer/article/2481258
TCP(传输控制协议)是互联网中最重要的协议之一,它提供了可靠的数据传输服务。本文将深入探讨TCP的可靠性机制,包括排序机制、确认机制、重传机制和流量控制机制,帮助读者更好地理解TCP协议的工作原理。
TCP的可靠性
1. 排序机制
TCP保证数据按顺序到达接收端。由于数据在网络中可能会通过不同的路径传输,因此不同的数据包可能会到达接收端的顺序不一致。排序机制的作用是确保数据按发送的顺序被正确接收。
具体实现:
- 每个数据段都有序列号:每个TCP数据段(Segment)都包含一个序列号,这个序列号标识该数据段在整个数据流中的位置。接收方通过序列号来判断数据包的顺序。
- 接收方按序列号重组数据:接收方会根据序列号对收到的数据进行排序。如果接收到的数据包的顺序与预期不符,接收方会将其缓存在接收缓冲区,等待缺失的包到达。接收方只会将按顺序到达的数据交给上层应用。
如果接收方发现某个数据包的序列号不对或者缺失,它会将该信息反馈给发送方(通过确认机制),发送方会进行相应的重传。
2. 确认机制和重传机制
2.1. 重传机制
TCP的重传机制是保证数据丢失情况下能够成功传输的关键。由于网络中可能会出现数据丢失、错误或延迟,TCP需要提供一种机制来检测丢失的包并重新发送。
具体实现:
- 超时重传:如果发送方在一个预定的时间内没有收到接收方的确认(ACK),它会认为该数据包丢失或出现了其他错误,随后会重传该数据包。这个超时是由发送方的“重传计时器”控制的。若在计时器超时之前收到确认,则不进行重传。
超时重传的时间间隔是动态调整的,通常采用“加倍间隔”的策略,即每次超时后,重传间隔会增加,直到成功接收到确认。TCP使用一种叫做自适应重传算法(例如:TCP的慢启动、拥塞控制)来优化超时重传的时间。 - 快速重传:如果接收方发现丢失的包(通过序列号的跳跃)并且收到的连续数据包中有重复的确认号,它会发送多个重复确认(重复ACK)。当发送方收到三个重复确认时,它会立刻重传丢失的数据包,而无需等待重传计时器超时。这种机制被称为快速重传,它能够减少数据包丢失后等待的时间,提高效率。
在快速重传机制中,并不是因为RTO时间到达从而触发重传机制,该重传机制是根据对端的反馈信息进行重传,当连续3三收到相同的ACK报文时,发送端会重传数据。这3个连续的ACK报文被称为冗余ACK。 - 快速恢复:与快速重传结合使用,快速恢复机制用于在发生丢包时,通过减小拥塞窗口(窗口大小)来快速调整TCP连接的拥塞控制状态,以恢复到正常的传输状态。快速恢复机制一般通过调整TCP的拥塞控制算法来实现,如慢启动与拥塞避免等。
2.2. 确认机制
TCP使用确认机制(Acknowledgment)来确保数据的可靠传输。每当接收方收到数据包时,它会发送一个确认消息,告诉发送方该数据包已经成功接收。
具体实现:
- 确认号(Acknowledgment Number):接收方在返回的TCP包中会包含一个确认号,这个确认号表示接收方期望接收的下一个字节的序列号。也就是说,确认号是“下一个期望字节”的序列号,确认号表示前面所有数据已经成功接收。
例如,如果接收方已经成功接收到序列号为1000到2000的数据,它会向发送方发送一个确认号2001,表示它已经成功接收了序列号小于2001的数据。 - 累积确认:TCP的确认机制是累积确认的,意味着如果接收方确认了某个序列号(比如2001),它也隐含地表示所有之前序列号的数据包都已成功接收。接收方不会为每个数据段单独发送确认,而是按照序列号的累积情况发送一个确认号。
- 延迟确认:为了提高网络效率,接收方可能会延迟确认,即在短时间内合并多个数据包的确认,减少网络负载。这也使得发送方不会因为过早的确认而频繁发送数据包。
注意:选择确认机制也是需要进行协商的。
3. 流量控制机制
3.1流量控制的背景
- 在网络通信中,接收方的缓冲区容量是有限的。如果发送方的数据流速过快,而接收方来不及处理这些数据,接收方的缓冲区可能会被填满,进而导致数据丢失或者需要丢弃多余的数据。因此,必须有一种机制来控制发送方的发送速率,确保接收方的缓冲区不会被溢出。
- TCP的流量控制是端到端的机制,通过在发送方和接收方之间动态调整窗口大小,来避免过多的数据被发送到接收方,直到接收方有足够的空间来存储和处理这些数据。
3.2.流量控制的核心概念:滑动窗口(Sliding Window)
TCP流量控制的机制基于滑动窗口协议(Sliding Window Protocol)。这个协议用于动态控制数据的传输速率,确保发送方不会超出接收方的缓冲区容量。
滑动窗口的工作原理:
- 接收窗口(Receiver Window):接收方的接收窗口(也叫窗口大小)是接收方的可用缓冲区大小,它告诉发送方当前接收方可以接收多少数据。接收方在发送ACK报文时,会告诉发送方它的接收窗口的大小。接收方的接收窗口大小会随着它处理数据的进度而变化。
- 发送方窗口:发送方基于接收方的窗口大小来调整自己的发送速率。发送方窗口的大小不能超过接收方报告的接收窗口的大小,也不能超过发送方的缓冲区大小。
- 滑动窗口的动态变化:随着接收方处理数据并释放缓冲区空间,接收方的接收窗口会增大,发送方可以继续发送更多的数据。如果接收方的接收窗口变小,发送方则必须减少发送的数据量,直到接收方有足够的空间可以接收更多的数据。
3.3窗口大小体现在缓存区的大小
- TCP要求发送方依据接收窗口rwnd来控制数据的发送量。rwnd等于接收方接收缓存大小减去已存数据量大小。即rwnd变量是可变的。
- 如下图所示:
TCP发送方窗口队列图
- 发送窗口的概念
- 发送窗口:是指发送方在没有收到确认的情况下,可以连续发送的数据量。它由一个左边界和一个右边界界定,表示一个字节序列的范围。
- 左边界(left edge):表示已经发送并被确认的数据的最右边界。
- 右边界(right edge):表示发送窗口的最右边界,即发送方可以发送的数据的最大序列号。
- 缓存区与发送窗口的关系
- 缓存区:在 TCP 中,发送方和接收方都有缓存区。发送方的缓存区用于存储待发送的数据,而接收方的缓存区用于存储接收到的数据。
- 发送窗口大小:直接反映了发送方缓存区中可以用来存储待发送数据的大小。
TCP发送方窗口队列图
- 图片中的示例
- 窗口大小:图中显示的发送窗口大小为 20 字节。这意味着发送方在没有收到确认的情况下,可以连续发送 20 字节的数据。
- 缓存区的划分
- 已发送已确认的数据(#1):在左边界左侧,表示已经发送并且被接收方确认的数据。这些数据已经从发送方的缓存区中移除。
- ** 已发送但未确认的数据(#2):在左边界和右边界之间的蓝色区域,表示已经发送但尚未收到接收方确认的数据。这些数据仍然在发送方的缓存区中。
- 即将发送的数据(#3):在右边界左侧的绿色区域,表示可以立即发送的数据。这些数据在发送方的缓存区中等待发送。
- 未发送数据(#4):在右边界右侧的黄色区域,表示由于接收方没有足够的缓存空间,不能发送的数据。这些数据在发送方的缓存区中等待发送机会。
TCP发送方窗口队列图
- 缓存区大小的体现
- 已用窗口(used window):图中显示为 14 字节,表示已经发送但尚未确认的数据(#2)加上即将发送的数据(#3)。
- 未用窗口(unused window):图中显示为 6 字节,表示由于接收方没有足够的缓存空间,不能发送的数据(#4)。
TCP发送方窗口队列图
- 窗口移动
- 当发送方收到接收方的确认时,左边界会向右移动,表示已经确认的数据从缓存区中移除。
- 当接收方的缓存空间增加时,右边界会向右移动,表示发送方可以发送更多的数据。
热门推荐
能辞退员工的情形有哪些
显卡性能对比:NVIDIA 专业显卡性能与虚拟化支持深度解析
脚趾变形是什么原因引起的
如何筛选具有较高股息收益的投资标的?这些投资标的有哪些特征?
如何正确发送红包?从场景、金额到礼仪的全方位指南
SQL Server数据库出现逻辑错误的数据恢复
钙铁锌口服液,适合哪个年龄段人群?
秋季易过敏,这样用药更有效
易经六十四卦的形成:从经卦到重卦的系统扩展
电梯失控快速坠落,乘客真的能通过起跳避免死亡吗?
房贷抵扣个税是否需要填写配偶信息?
债务还款优先级:如何确定先还网贷还是信用卡?
红宝石原石价格及价值分析
卫生巾选购指南:如何判断卫生标准和质量好坏
真宗子平术八字命理:如何准确解读个人命运
了解更年期焦虑症——症状和解决方案
甘薯蚁象甲:形态特征、发生规律与防治方法
建筑高度如何计算
从四万块碎片到歼-20,中国如何逆袭全球,打破西方技术封锁?
外媒:从DeepSeek到《哪吒2》 中国不断突破科技创新与艺术创造极限
古代西方的爵位体系,你知道有哪些吗?
菩提树:从科学到文化的全面解读
肥皂水是碱性还是酸性?从化学成分到实际应用的全面解析
银行代理国债业务:收益与风险的深度剖析
汽车氧传感器的作用与重要性
夏桀简介 夏桀生平
催眠治疗师的专业训练与催眠治疗的应用
小区自治管理收费的条件是什么
番茄生长习性及环境条件(适宜种植环境、生长期、生长条件等)
网上沙发和实体店一样吗?网上买沙发要注意什么?