一、确保可靠传输的机制
TCP(传输控制协议)是一种面向连接的、提供可靠交付的、面向字节流的、支持全双工的传输层通信协议
1、序列号 seq
TCP头部中的序号,占32位(4字节);
发送方给报文段分配一个序列号,接收方根据序列号来确认收到的数据,从而确认丢失的数据或者
需要重传的数据
2、确认应答 ACK与ack
TCP头部中的标记,ACK字段,占1位;确认号ack,占32位(4字节);
接收方收到数据后,它会发送一个确认应答(ACK = 1)给发送方,告诉发送方数据已成功接收;
确认应答还包含期望接收的下一个字节的序列号,有助于发送方知道哪些数据已被接收,哪些数据
需要重传
3、检验和
TCP头部中的校验和,占16位(2字节);
检测数据在传输过程中是否发生错误。接收方会计算接收到的数据的校验和,并与发送方发送的校
验和进行比较;不匹配,则接收方会丢弃该数据包,并可能要求发送方重传。
4、流量控制
TCP头部中的窗口,占16位(2字节);
使用可变大小的滑动窗口协议来实现流量控制,防止发送方发送数据的速度过快而导致接收方无法
处理。
5、超时重传 RTO
超过一定时间未收到ACK,重传数据包;RTO根据网络状况动态计算
6、拥塞控制
慢启动、拥塞避免、快重传、快恢复
7、连接管理(3次握手、4次挥手)
参考博文:
二、TCP流量控制具体是如何实现的?
1、可变大小的滑动窗口协议
协议允许接收方根据自己的处理能力,动态调整其可接收数据的窗口大小,
并通过TCP报文的窗口字段将这一信息通知给发送方。
发送方则根据接收到的窗口大小来调整其发送速率,确保在任何时刻,
未确认的数据量不会超过接收窗口的大小。
2、接收方窗口维护
接收窗口(Receive Window):接收方维护一个接收窗口,用于表示其当前可用的缓冲区大小。
这个窗口大小会随着接收方处理数据的速度而变化。
窗口字段(Window Field):接收方通过TCP报文段中的窗口字段,将其当前的接收窗口大小通
知给发送方。
3、发送方
调整发送速率:发送方根据接收到的窗口大小来调整其发送速率。
如果接收窗口的大小变为零,发送方将停止发送数据,直到接收到一个具有非零窗口大小的报文。
零窗口探测报文(Zero Window Probe):为了避免因接收窗口长时间为零而导致的死锁,
发送方可能会发送零窗口探测报文(仅携带 1 字节的数据),以检查接收方是否已经有足够的缓冲
区来接收新数据。
发送窗口的划分:发送方的滑动窗口可以分为四个部分:已发送并收到ACK确认的数据、
已发送但未收到ACK确认的数据、未发送但可以发送的数据、不允许被发送的数据。
三、讲一下TCP是如何进行拥塞控制的?
1、慢启动与拥塞避免
慢启动:
初始值小,但拥塞窗口cwnd指数规律增长。慢启动门限值ssthresh限制cwnd倍增。
拥塞避免:
cwnd > ssthresh后,执行拥塞避免算法,窗口值线性增长。
网络拥塞后,执行“乘法减小”,将门限值ssthresh设置为超时的拥塞窗口值cwnd的一半。
之后,重新执行慢启动算法
2、快重传与快恢复
快重传:
·接收方收到一个失序的报文段时,立即发出重复确认,无需等到接收方发送数据时捎带确认。(使发送方尽早直到有报文为到达接收方)
·发送方收到3个连续重复确认时,立即重传对方未收到的报文段,无需等待设置的重传计时器到期
快恢复:
门限值ssthresh后,执行拥塞避免算法
关于ARQ(Automatic Repeat reQuest,自动重发请求)协议介绍
主要用于通信网络中的流量控制和可靠传输机制
流量控制
基本概念:流量控制是一种防止网络拥塞的技术,它通过调整数据发送方的发送速率来匹配接收方
的处理能力。
在ARQ机制中,接收方通过确认帧(ACK)来告知发送方哪些数据帧已被正确接收,从而控制发
送方的发送速率。
实现方式:在ARQ中,如果发送方在一定时间内未收到接收方对某个数据帧的确认帧,则认为该数据帧可能已丢失或出错,并会重新发送该数据帧。
这种机制有助于确保发送方的发送速率不会超过接收方的处理能力,从而实现流量控制。
可靠传输
基本概念:可靠传输是指数据在传输过程中能够准确无误地到达目的地,且传输过程中能够检测和
纠正错误。
实现方式:ARQ通过确认和重传机制来实现可靠传输。
发送方在发送数据帧后,会等待接收方的确认帧。
如果确认帧表示数据帧已正确接收,则发送方继续发送下一个数据帧;
如果确认帧表示数据帧出错或未收到,则发送方会重新发送该数据帧,直到接收方正确接收为止。
这种机制能够确保数据在传输过程中的可靠性和完整性。
ARQ类型
停止-等待ARQ:发送方在发送一个数据帧后必须等待接收方的确认才能发送下一个数据帧。
如果超时未收到确认,则重发该数据帧
连续ARQ(后退N帧ARQ和选择性重传ARQ):允许发送方在收到确认之前连续发送多个数据
帧。当某个数据帧丢失或出错时,根据具体的连续ARQ实现(如后退N帧ARQ或选择性重传
ARQ),发送方可能会重发该数据帧及其之后的所有数据帧(后退N帧ARQ),
或者只重传出错的数据帧(选择性重传ARQ)
具体协议可参考博文,内容很详细:
欢迎补充,互相学习🤝