TCP的重传、滑动窗口、流量控制、拥塞控制

重传机制

tcp实现可靠传输的方式之一,就是通过序列号和确认应答。根据TCP协议,当发送端的数据到达接收主机时,接收主机会发送一个确认应答信号给发送主机,用以表示已经收到消息。
【场景】如果数据在传输的过程中丢失了,TCP就会用重传机制解决。
超时重传:在发送数据时,设定一个定时器,当超过指定时间后,没有收到对方的ACK应答确认报文,就会重发数据。TCP会在数据丢失或者确认应答丢失两种情况下发生超时重传。
RTT(往返时延):数据从网络一端到另一端所需要的时间。
RTO:超时重传时间,应该略大于RTT。
快速重传:不以时间驱动,以数据驱动重传。在定时器过期之前,收到三次同样的ACK就会触发重发机制。【存在的问题:重传的时候是重传所有的报文,还是重传之前的一个报文】
SACK:这种方式需要在 TCP 头部「选项」字段里加一个SACK的东西,它可以将缓存的地图发送给发送方,这样发送方就可以知道哪些数据收到了,哪些数据没收到,知道了这些信息,就可以只重传丢失的数据。
Duplicate SACK

滑动窗口

引入滑动窗口的原因:TCP是每发送一个数据都要进行一次确认应答,当上个数据包收到应答了,再发送下一个。这种传输方式的缺点是数据包往返的时间越长,通信效率就越低。
窗口的实现:是操作系统开辟的一个缓存空间,在发送方主机收到确认应答之前,必须要在缓冲区中保留已经发送的数据。若发送方主句收到了确认应答,此时可以将数据从缓冲区中清除。
滑动窗口大小:无需等待确认应答,而可以继续发送TCP数据包个数的最大值。
假设窗口大小为4个TCP段,那么发送方就可以连续发送4个TCP段,并且中途若有ACK丢失,可以通过最后一个确认应答确认,这种模式又称为累计确认或累计应答。
发送方的滑动窗口(swnd):存放已经发送的但是没有收到应答的数据,还没有发送的数据。
接收方的滑动窗口(rwnd):存放成功接受并确认的数据,
【补充1】接收窗口和发送窗口近似相等。
【补充2】发送窗口和接收窗口中所存放的字节数,都是放在操作系统内存缓冲区中的,因此会被操作系统调整。

流量控制

发送方要根据接收方的处理能力给接收方发送数据。
TCP提供了一种机制,让发送方个根据接收方的时机接收能力控制发送的数据量,这种机制就是流量控制。

拥塞控制

拥塞控制就是避免发送方的数据填满整个网络
【拥塞窗口cwnd】它会根据网络的拥塞程度动态变化。swnd=min(cwnd, rwnd)
网络中出现堵塞,减小cwnd;网络冲没有堵塞,增大cwnd。
【网络中堵塞的判断】发送方没有在规定的时间里收到接收方发来的ACK应答报文,说明发生了重传,就会认为网络中出现了堵塞。
【拥塞控制算法】
1.慢启动:当发送方没收到一个ACK,拥塞窗口cwnd的大小就会增加1。该阶段是指数增长。
2.拥塞避免:当cwnd大小超过慢启动门限ssthread就会进入到拥塞避免算法中。每当收到一个ACK时,cwnd增加1/cwnd。该阶段是线性增长。
3.拥塞发生:当触发了重传机制的时候,说明网络开始拥堵了,就触发了TCP的拥塞发生算法。
3.1 发生超时重传的拥塞发生算法:ssthresh设为cwnd/2,cwnd 设为1。
3.2 发生了快速重传的拥塞发生算法:cwnd设为cwnd/2,ssthresh设为cwnd。
4.快速恢复:快速重传和快速恢复算法一般同时使用。
进入快速恢复之前cwnd和ssthresh已经被更新了(即cwnd设为cwnd/2,ssthresh设为cwnd),然后进入快速恢复算法:
4.1 cwnd = ssthresh+3
4.2 重传丢失的数据包
4.3 如果在收到重复的ACK,则cwnd加1
4.4 如果收到新数据的ACK后,把 cwnd 设置为第一步中的 ssthresh 的值,原因是该 ACK 确认了新的数据,说明从 duplicated ACK 时的数据都已收到,该恢复过程已经结束,可以回到恢复之前的状态了,也即再次进入拥塞避免状态。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值