【笔试面试】关于TCP流量控制和拥塞控制的一点理解

TCP协议是传输层的一个面向连接的协议。其中有两个特性 流量控制拥塞控制 比较相似,以前一直没有深入探究这两者的区别。今天研究了下王道上的内容,有了比以前更深的理解,在此记录下。

目的

首先,从目的上来说

  • 流量控制是为了防止接收方的缓冲区大小不够发生溢出,所以减小接收窗口(rwnd)。
  • 拥塞控制是防止过多的数据注入网络,造成网络中的路由器过载。

方式

  • 流量控制:接收方在TCP报文的窗口字段限制发送方的发送速率。
  • 拥塞控制:发送方自己检测网络的状态,如遇到超时、重复确认包时,对拥塞窗口进行调整。

其实真正的发送窗口只有一个,发送窗口选取的是接收窗口和拥塞窗口中较小的一个。比如网络状况较好,传输速率为10G/S,那么网络拥塞这一因素就不是主要的影响,主要看接收方的缓冲区大小。相反,如果链路的传输速率只有10M/S,又有大量的节点在传输,此时拥塞控制就成了主要因素。
流量控制是点对点的通信量控制,拥塞控制是考虑了全局的网络负荷,是一个全局性的概念。

拥塞控制

流量控制的内容不多,不展开讲了。下面讲下拥塞控制的几个过程:

  • 慢开始
  • 拥塞避免
  • 快重传
  • 快恢复

先讲解下拥塞控制的整个过程。直接百度盗的示意图。以下拥塞窗口(cwnd)简称窗口,门限阈值(ssthresh)简称阈值。

  • 最开始时拥塞窗口(cwnd)设置为1。
  • 经过一个传输轮次(RTT),拥塞窗口加倍(最大不超过阈值)。
  • 拥塞窗口到达初始阈值(ssthresh),启动拥塞避免算法。
  • 拥塞避免算法后每轮窗口值只增加1。
  • 如果遇到超时*现象,则将阈值设为当前窗口值的一半,窗口值设为1,重新开始慢启动过程。
  • 如果遇到重复确认*现象,则将阈值设为当前窗口值的一半,窗口值设为新阈值,开始拥塞避免。
    在这里插入图片描述
    上文中提到的超时是指数据报发出后,超过了超时重传时间(RTO)而触发的;重复确认其实就是重传的一种手段–冗余ACK,如果未收到一个包,就重复发送收到的上一个包的确认信息。如果连续收到相同的三个确认包,则表示下一个包丢失了,可以快速重传,然后启动快恢复过程。

其中,三个重复确认的时间会比超时重传的时间更短。我的理解是重复确认可以看作是偶尔丢失了一个包,所以使用快恢复过程。而超时说明是更严重的拥堵,需要使用慢开始过程,减少网络中的拥堵。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值