09.TCP_02_流量控制_拥塞控制

TCP—流量控制

◼ 如果接收方的缓存区满了,发送方还在疯狂发送着数据

接收方只能把收到的数据包丢掉,大量的丢包会极大的浪费网络资源,还要在重传

所以要进行流量控制,由缓存区告诉对方自己接收的流量大小

◼ 什么是流量控制?

让发送方的发送速率不要太快,让接收方来得及接收处理

◼ 原理

通过确认报文中窗口字段来控制发送方的发送速率

发送方的发送窗口大小不能超过接收方给出窗口大小

当发送方收到接收窗口的大小为0时,发送方就会停止发送数据

一开始接收方会告诉发送方自己的接收窗口大小,窗口大小不是固定死的,是动态调整

在这里插入图片描述

TCP—流量控制—特殊情况

◼ 有一种特殊情况

一开始,接收方给发送方发送了0窗口的报文段,后面,接收方又有了一些存储空间,给发送方发送的非0窗口的报文段丢失了,发送方的发送窗口一直为零,双方陷入僵局

◼ 解决方案

当发送方收到0窗口通知时,这时发送方停止发送报文,并且同时开启一个定时器,隔一段时间就主动发个测试报文去询问接收方最新的窗口大小,如果接收的窗口大小还是为0,则发送方再次刷新启动定时器,如果不是0,就继续发送。

TCP—拥塞控制

在流量控制的基础上,对数据进行控制,因为数据的传输不能够根据理论来控制

◼ 拥塞控制

防止过多的数据注入到网络中

避免网络中的路由器或链路过载

◼ 拥塞控制是一个全局性的过程,就好比交通流畅,靠的是大家。

涉及到所有的主机、路由器

以及与降低网络传输性能有关的所有因素

是大家共同努力的结果

◼ 相比而言,流量控制是点对点通信的控制

在这里插入图片描述

链路吞吐量:每秒通过的数据大小,理论上最大为该链路的带宽

随着链路吞吐量不断增大,在七八百的时候,可能就开始拥塞,继续增大数据量,吞吐量反到不断减小,最后出现死锁,就好比公路上行驶的车,当车辆少时,行驶的速度它就快,当到了晚高峰的时候,车辆剧增,行驶速度变慢,最后出现堵车,交通道路瘫痪。

TCP—拥塞控制—方法

◼ 慢开始(slow start,慢启动)

◼ 拥塞避免(congestion avoidance)

◼ 快速重传(fast retransmit)

◼ 快速恢复(fast recovery)

◼ 几个缩写

MSS(Maximum Segment Size):每个段最大的数据部分大小(在首部选项部分进行协商,选双方当中最小的那个,不能超过1460字节)

在这里插入图片描述

在三次连接的时候,交换一些信息,包括MSS

TCP首部32字节在有SYN字节的时候,多出来的12字节是双方交换信息时要用到的,

✓ 在建立连接时确定

cwnd(congestion window):拥塞窗口,跟当时的网络有关系(跟发送方没有关系)

rwnd(receive window):接收窗口,一次发多少过来(接收方)

swnd(send window):发送窗口,实际发送的窗口

✓ swnd = min(cwnd, rwnd)

TCP—拥塞控制—慢开始

在这里插入图片描述

(不用去纠结这张图片为什么确认两次)

刚开始比较慢,然后越发越多,试探着试一下

一开始cwnd由mss决定,因为只发一个包,mss是固定的,发送包的数量越多,cwnd就越大

在这里插入图片描述
(不用去纠结为什么一开始发4个包)

◼ cwnd的初始值比较小,先发一个包,然后随着数据包被接收方确认(收到一个ACK),cwnd就成倍增长(指数级,每次乘以2)

TCP—拥塞控制—拥塞避免

在这里插入图片描述

◼ ssthresh(slow start threshold):慢开始阈值,cwnd达到阈值后,以线性方式增加,只要值超过ssthresh,就有可能导致网络拥塞

◼ 拥塞避免(加法增大):拥塞窗口缓慢增大(斜率根据算法来),以防止网络过早出现拥塞,通过丢包,观察是否拥塞

丢包:整个数据都丢了,只有当讲到具体的网络层、传输层、数据链路层,才会说丢包、丢段、丢帧

◼ 乘法减小:只要网络出现拥塞,把ssthresh减为拥塞峰值的一半,同时执行慢开始算法(cwnd又恢复到初始值)

第二次拥塞避免(加法增大):在怎么增加,也不会超过上一次的网络拥塞峰值

当网络出现频繁拥塞时,ssthresh值就下降的很快

TCP—拥塞控制—快重传

◼ 接收方

每收到一个失序的分组后就立即发出重复确认

使发送方及时知道有分组没有到达

而不要等待自己发送数据时才进行确认

跟超时重传不一样,他是接收方通知发送方没有收到数据

◼ 发送方

只要连续收到三个重复确认(总共4个相同的确认),就应当立即重传对方尚未收到的报文段

而不必继续等待重传计时器到期后再重传

在这里插入图片描述

TCP—拥塞控制—快恢复

◼ 当发送方连续收到三个重复确认,说明网络出现拥塞

就执行“乘法减小”算法,把ssthresh减为拥塞峰值的一半

◼ 与慢开始不同之处是现在不执行慢开始算法,即cwnd现在不恢复到初始值

而是把cwnd值设置为新的ssthresh值(减小后的值)

然后开始执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢地线性增大

TCP—拥塞控制—快重传+快恢复(新版本)

在这里插入图片描述

以前网络不好,只能用旧版本,现在网络好,用新版本

TCP—拥塞控制—发送窗口的最大值

◼ 发送窗口的最大值:swnd = min(cwnd, rwnd)

◼ 当rwnd < cwnd时,是接收方的接收能力限制发送窗口的最大值

◼ 当cwnd < rwnd时,则是网络的拥塞限制发送窗口的最大值

猜你喜欢

转载自blog.csdn.net/m0_53008479/article/details/120732177