流量控制和拥塞控制

滑动窗口

TCP都是每发送一个数据,都要进行一次确认应答,上一个数据包收到了应答,在发送下一个。引入滑动窗口解决发送效率低的问题。

窗口大小:无需等待确认应答,而可以继续发送数据的最大值。假设发送窗口大小能容下3个TCP段,那么发送端就能连续发送3个TCP段,若中途有ack丢失,可以通过下一个确认应答进行确认,也称为累计确认或者累计应答

TCP头中有一个win字段,记录着窗口大小,这个字段是接收端告诉发送端自己还有多少缓冲区可以接收数据。于是发送端就可以根据这个接收端的处理能力来发送数据,从而不会导致接收端处理不过来。

流量控制

流量控制是一种TCP的机制,它可以让发送方根据接收方的实际接收能力控制发送的数据量。接收端通过ack应答报文来告知发送方此时接收方的接收缓存中的窗口大小。

窗口关闭:表现为ack报文中的win字段为0,通知发送方不要发送数据。

窗口探测报文:TCP为每个连接设有一个持续定时器,只要TCP连接一方收到对方的零窗口通知,就启动定时器,如果定时器超时就会发送窗口探测报文,用来解决ack(win 0)报文在传输中丢失,而产生的的死锁现场。

糊涂窗口综合征:如果接受方腾出几个字节就告诉发送方现在有几个字节的窗口,那么发送方就一定会发送这几个字节。会导致发送很多小数据,通信效率低下。

  1. 让接收方不通告小窗口:当接收窗口小于MSS或者缓存空间的一半时,就发送ack(win 0)
  2. 让发送方避免发送小数据:使用Nagle算法,该算法是默认打开的

拥塞控制

流量控制是避免发送方的数据填满接收方的缓存,没有考虑网络中的情况,计算机的网络都是处于一个共享的环境,因此有可能会因为其他主机之间的通信使得网络拥堵。TCP在网络发生拥堵时,就会降低发送的数据量。

拥塞控制:避免发发送方的数据填满整个网络。

拥塞窗口cwnd:是发送方维护的一个状态变量,它会根据网络的拥塞程度动态变化。因此swnd=min(cwnd, rwnd)。

拥塞窗口的变化规则:只要网络中没有出现拥塞,cwnd就会增大;单网络中出现了拥塞,cwnd就会减小。

网络中出现拥堵的判断:发送方没有再规定时间内收到ack应答报文,发生了超时重传现象。

拥塞控制的算法

  1. 慢启动:当发送方每收到一个ACK,拥塞窗口cwnd的大小就加1(1个MSS大小的数据),慢启动呈指数性增长,直到到达ssthresh(慢启动门限)
  2. 拥塞避免:每收到一个ACK时,cwnd增加1/cwnd。接下来呈线性增长,慢慢进入了拥塞状态,直到触发重传机制时
  3. 拥塞发生:
    超时重传拥塞避免发生算法
    STEP1: ssthresh=cwnd/2
    STEP2: cwnd=1
    STEP3:重新开始慢启动
    快速重传拥塞避免发生算法
    STEP1: cwnd=cwnd/2
    STEP2: ssthresh=cwnd
    STEP3: 进入快速恢复算法
  4. 快速恢复:快速重传和快速恢复算法一般同时使用,快速恢复算法认为如果还能收到三个重复ACK说明网络质量不会太糟糕,所以窗口调节不会太剧烈。
    STEP1:拥塞窗口cwnd=ssthresh+3(3的意思是有三个数据包被收到了)
    STEP2:重传丢失的数据包
    STEP3:如果再收到重复的ACK,那么cwnd加1
    STEP4:如果收到信数据的ACK,把cwnd设置为第一步中的ssthresh的值,再次进入拥塞避免状态
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值