TCP滑动窗口和拥塞控制

滑动窗口

什么是滑动窗口

滑动窗口是TCP协议为了实现流量控制而设计的机制,它通过窗口的大小来控制发送端发送的数据量。

 

为什么要使用滑动窗口

TCP协议在没有引入滑动窗口的概念之前,TCP没发送一次数据,都需要进行一次应答,只有收到了应答,才能发送下一个数据,这种方式存在一个问题,如果数据报往返的时间越长,通信的效率就越低。
为了解决这个问题,TCP引入了窗口的概念。在没有收到上次发送数据的ack应答,还可以发送下一个数据报,之后可以通过后面的ack来确认前面发送的数据报是否都被接收方接收到了。
窗口实际上是操作系统开辟的一块缓存空间(窗口的实质),其中空间和序号都是有限的,并且要循环使用,一般为环形队列。发送方会将已经发送的数据存放在缓存空间中,收到应答后,再将这个数据从缓存空间中清除掉。
 

滑动窗口的工作原理

1、在建立TCP连接之前,通信双方会交换自己的窗口大小信息。
2、发送端根据窗口大小,可以发送多个报文而不需要立即进行ack应答。
3、接收端接收到报文后,立即进行ack应答,应答可以帮助发送端得到成功接收的报文段,并依据此来调整窗口内未确认的报文段。
4、当发送端收到ack应答时,会将窗口向前滑动,以便发送更多的报文段。这就是滑动窗口的名称由来。
5、如果接收端不能及时回复ack应答,发送端窗口将不再滑动,将不再发送更多报文段,此时会发生“阻塞”。
6、当接收端的阻塞情况解除时,它会进行ack应答,发送端接收到ack应答之后重新开销滑动窗口并进行发送。

 

滑动窗口会出现的几种问题

数据包丢失怎么解决?

当发送端发送了一定数量的报文段,当有某个报文段丢失,接收方在没有收到自己预期的序号时,会按照上一次的ack进行应答,如果接收方连续三次都按照上一次的ack进行重复应答,那么就需要发送方重新发送数据包。
所以滑动窗口机制下,如果数据包丢失,那么会触发快速重传机制。

 

ACK丢失怎么解决?

滑动窗口可以通过累计确认来解决ack丢失的问题。
当发送端发送了一定数量的报文段,但是前几条数据的ack都丢失了,由于最后一个ack没有丢失,那就证明之前的数据接收端都收到了,这就是累计确认。累计确认可以让中途ack丢失的情况通过下一个ack应答来进行确认,如果最后一个ack也丢失了,那就是滑动窗口机制最坏的情况了,这种情况下会触发超时重发机制。

 
 

拥塞控制

拥塞控制是什么?

拥塞控制是TCP协议为了避免网络拥塞而设计的机制,它通过监测网络拥塞情况,动态调整发送端的发送速率,以避免资源的过度占用和数据包丢失。

它的主要作用是:根据网络拥塞情况来调整发送速率,减少了网络中数据包丢失和重传,使得网络拥塞状况得以缓解。
 

拥塞控制的实现

拥塞控制是由慢开始、拥塞避免、快重传和快恢复机制来实现的。
在了解这几个机制之前,我们需要了解两个概念

  • 拥塞窗口(cwnd)
  • 慢开始门限(ssthresh)

1、慢开始:在TCP连接开始时,发送端会启动慢开始阶段,刚开始的时候拥塞窗口很小,之后每收到一个ack拥塞窗口的大小都会加倍,直到一个阈值。慢开始的目的是在建立连接时逐渐增加发送速率,避免过快发送数据和过多的数据包导致网络拥塞。

2、拥塞避免:为了防止拥塞窗口增加过快而导致网络拥塞,所以TCP设置了一个慢开始门限(ssthresh)。
当拥塞窗口 < 慢开始门限,使用慢开始算法。
当拥塞窗口 = 慢开始门限,两种算法都可以使用。
当拥塞窗口 > 慢开始门限,停止使用慢开始算法,使用拥塞避免算法。
3、快重传:快重传要求接收方收到一个失序的报文段后就立即发出重复确认,而不要等待自己发送数据时才进行携带确认,并且要求发送方只要同时收到三个重复确认就应当立即重新发送发送端尚未收到的报文段,而不需要设置重传计数器。
4、快恢复:快恢复机制是和快重传机制配合使用的,它有两个要点:
(1)当发送方连续收到了三个重复确认时,为了防止网络发生拥塞,会把慢开始门限减半,来降低网络发送速度。
(2)由于发送方现在认为网络很可能没有发送拥塞,因此和慢开始不同的是这里不执行慢开始算法,而是把拥塞窗口的值设置为已经减半后的慢开始门限的数值,然后开始执行拥塞避免算法,使拥塞窗口缓慢线性增大。

 

理解拓展:拥塞控制是如何判断网络拥塞情况的?

TCP拥塞控制是根据丢包事件、ACK延迟、重复确认来判断网络拥塞情况的。
丢包事件:TCP通过检测数据包是否被丢弃来判断是否发生了丢包事件,从而推断网络是否发送了拥塞。
ACK延迟:如果接收方的ack应答消息应答得很慢,那么可能意味着网络拥塞。
重复确认:TCP同接收到重复消息来判断是否发送了网络拥塞。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值