TCP基础(3)

TCP基础(3)

在(1),(2)讨论了可靠传输,TCP的机制以及TCP对流量的控制,本篇讨论TCP的另外一个重要特性:拥塞控制。

什么是拥塞

简言之就是堵车。因为网络链路是有一定的带宽的,如果大量的包在上面跑,中间的节点比如路由器等,转发的速度与接受的速度不匹配,那么就会有大量的包滞留在路由器的队列缓冲区。在这里插入图片描述 显然,Router的缓冲区是有限的,所以一旦这个缓冲区被充满了,那么后来的包就会被自动丢弃,发送端在TIMEOUT内没有接收到ACK包,就继续发。这就造成了恶性循环。链路越来越堵,造成了拥塞坍塌。

拥塞坍塌

早期,TCP使用固定滑动窗口大小,可以满足一些需求。但是随着网络急剧增加,逐渐出现了一些问题,人们发现网络链路一直处于繁忙状态,但是发送的效率确是一直下降?
网络链路上的数据是满的,但是发送的效率却十分的低下。
在这里插入图片描述网络链路在达到一个阈值时,并不是按照期望的曲线接近最大的链路容量,而是崩溃,发生了Congestion collapse:拥塞坍塌。根本原因:**传输层看不到网络是拥堵的,这个信息只有网络层才能看到。**所以需要有一些机制来让传输层得到反馈,告诉它没有收到ACK包的原因到底是丢包了,还是ACK被堵在了链路上没有及时的到达。

链路层的原因

上面关于说了关于拥塞产生的原因,大多都是在说传输层,那么链路层发生了什么呢?
链路层其实原因很直接,就是有一些中转设备速度不匹配,一些链路带宽不一样,导致有的一次可以发送很多数据,有的只能发送一小部分数据,但是这个是硬件环境,很难一次性解决。
深入一点理论其实就是网络流的概念,因为网络是一个拓扑结构,可以抽象为一张图,有的边容量大,有的容量小。所以发送端应该发送一个所有链路都能承受的最大流量,也叫做最大流。这个就不再深入讨论。

带宽的分配

带宽分配是一个很重要的问题。好的分配应该是公平且公正,让每台设备都能合理的利用带宽并且最大限度的额避免网络拥塞。
开环:开环分配原则就是使用前保留带宽
闭环:使用链路层的反馈信息来调整带宽。
TCP是一种闭环,主机驱动,基于窗口的分配方式。

TCP分配模型

链路层的反馈:TCP是采用闭环的分配方式,这种方式会根据链路层的反馈来实时调整带宽。
其实之前也说过调整的法则:AIMD原则。
在这里插入图片描述当没有丢包时,主机带宽和式增加,出现丢包就积式减少。这样的方式总能收敛到一种合理的分配方式。
这样到后期,就会达到一种稳定的状态:
在这里插入图片描述成了一种锯齿状,也叫TCP锯齿。

反馈信号

那么如果链路层出现问题,要给传输层信息,这个信息该怎么反馈呢?
也是基于协议的通信方式,基本上有这几种:
在这里插入图片描述来看一下 TCP Tahoe/Reno是如何实现的。

TCP Tahoe/Reno

基本思路:修改timeouts,并且在滑动窗口上引入一个新的拥塞窗口cwnd来限制队列和丢包
通过丢包作为网络反馈信号来自适应调整cwnd,实现AIMD。

ACK时钟

在这里插入图片描述对于发送端,收到ACK应答包之后推进滑动窗口,并且允许新的包进入链路层。这样会发生什么?
在这里插入图片描述比如这个网络,当大量的包从高速链路到达低俗链路时,暂时缓存到了第一个交换机中。由于ACK时钟,这些包不会被一次发送,然后每次一个ACK回来,就会有一个包进入链路。这样包就会被分散开来:
在这里插入图片描述ACK时钟有一种把连续的包给离散开来的作用。

TCP慢启动

对于最理想的cwnd,我们希望用最快的速度达到这个状态。
在这里插入图片描述采用指数增长,开始时很慢,但是很快就会达到最大值,达到最大值时说明产生丢包,产生丢包之后说明cwnd太大,那么就开始进入AIMD。

快速重传

快速恢复

显示拥塞通知

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值