计算机网络--拥塞控制

引言:

TCP与UDP各有各的优缺点,相比于UDP,TCP具有拥塞控制与滑动窗口机制等功能,这里先给自己整理一哈拥塞(se)控制

为什么要用拥塞控制:

因为由于一些原因(接收过多的报文,超过路由器的处理能力)路由器可能会丢弃一些报文,然而定时器这个时候就会处于超时状态,发送端就会重新发送报文,这样反而会恶性循环,加重路由器的拥塞。那么为了控制这种情况设计人员在TCP的加入了拥塞控制功能。

分析有哪些方法可以解决这种情况:
  1. 在发生拥塞的时候,路由器进行流量限制
  2. 发送端减慢自己发送报文的速度
    显然,TCP协议是利用第二种,控制发送端的发送报文速率进行拥塞控制的。
几个名词的认识:
  1. Sender window = Min {rwnd, cwnd}–发送窗口–缓存
  2. rwnd: receiver’s advertised window (接收方宣告窗口)—— a receiver-side limit——流量控制
  3. cwnd: congestion window(拥塞窗口) —— a sender-side limit(反映了网络的拥塞状况)——拥塞控制
  4. 慢启动和拥塞避免
  5. 快速重传和快速恢复
  6. ssthresh:人为设置的阈值
拥塞控制的过程:
  1. 建立一条新的TCP连接以后,执行慢启动:
    ···初始状态cwnd=1(1个最大报文段)
    ···发送方只允许发送1个TCP报文段(因为发送窗口=1)------慢启动实际并不慢,每过1个RTT,cwnd就翻倍,呈2的指数增长(当窗口为1时发送一个报文,经过一个RTT后,窗口大小加1为2,当窗口大小为2时发送两个报文,经过一个RTT时,窗口加2,是每当收到一个报文窗口就加1,以此类推)

    ·等待ACK(即接收端接收报文后会返回一个指定报文)
    ···每收到1个ACK,
    ···发送窗口向右滑动1个报文段的长度
    ···cwnd+1 发送方连续发送2个报文段
    ···直到发送窗口大小=ssthresh(慢启动阈值)
    在这里插入图片描述

  2. ·在慢启动阶段,拥塞窗口以指数形式增长,要避免发生拥塞,当拥塞窗口达到某个值后,必须减慢拥塞窗口的增长规律
    ·当发送窗口大小=ssthresh时,发送方进入拥塞避免阶段
    ·在这个阶段中,只有当窗口中所有报文都确认后,拥塞窗口+1
    ·实质上:每收到1个ACK,cwnd=cwnd+1/ cwnd
    ·当RTT较大时,可以认为是每隔一个RTT,拥塞窗口cwnd+1 à 加性增加(Addictive Increase)
    ·拥塞避免直到出现重传定时器超时,即发生拥塞

  3. ·推测拥塞:超时重传–因为重传定时器超时
    ·ssthresh(慢启动阈值)设置为当前cwnd(拥塞窗口)的一半
    ·即ssthresh = [cwnd / 2]
    ·cwnd(拥塞窗口)= 1
    ·重新执行慢启动:也就是说如果还出现报文超时,那么ssthresh就要一直减半1,但是我好像记得书上有一个公式计算RTT和阈值的,书暂时不在身边网上也找不到,如果记得我我在补上。

  4. ·如果不是超时,而是连续收到3个ACK,处理方式是:
    ·ssthresh(慢启动阈值)设置为当前cwnd(拥塞窗口)的一半–这个与上面的操作是一样的
    ·cwnd=当前阈值–但是这里就与上面不同了,而是设置为当前慢启动阈值,连续收到3个ACK,说明1个报文段可能丢失了,但后面的几个报文段又安全到达
    ·开始拥塞避免阶段

    在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值