提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
一、重传机制
重传机制:TCP实现可靠传输是通过序列号和ACK确认应答来实现的,当报文在网络传输的过程中出现丢失的情况,就会触发报文的重传机制.
(1)超时重传
简介:当发送一个报文时,设定一个计时器,当超过规定的时间,发送方没有收到对端的对与该报文ACK确认报文,就会触发超时重传,即重新发送该报文.
报文往返时延RTT(Round-trip Time):RTT就是数据在网络中一次往返时间,RTT = 数据去的时间+数据回来的时间
超时重传的时间用RTO(Retransmission Timeout)表示:
- 当RTO较大的时候会: 当数据丢失的时候,重传该报文需要很长的时间间隔,没有效率,性能下降.
- 当RTO交小的时候会: 会发生报文可能没有丢失就会触发超时重传机制,重发会很快,就会导致网络拥堵,网络拥堵就会导致更多的报文传输超时,就会导致更多的超时重传,进入恶性循环.
如何设置超时重传的时间:超时重传的时间的值应该略大于报文的往返时延RTT值.而网络环境是动态变化的,此时就需要TCP进行采样,计算出一个平稳的RTT值,来推算RTO的值.
(2)快速重传
快速重传: 当发送方连续收到三个相同ACK确认,就会触发快速重传机制,快速重传机制的作用是: 在定时器超时之前就将丢失的报文进行重传,进而提升效率.
(3)SACK
SACK(Selective Acknowledgment)选择性确认:(发送方)
需要在TCP的头部字段的’选项’字段里加上SACK,这样发送方就知道了哪些数据对端已经收到了,哪些数据对端没有收到,进位只需要将没有收到的数据进行发送即可.(即值重传丢失的数据)在重发数据的时候会进行检查,只会将没有到达对端的数据进行发送,
触发机制:发送方在连续三次收到对端同一个ACK报文,就会进行重传,此时只会对这个字段进行重传,而不会重传其他的字段.SACK必须要传输的双发都要支持,才可以.
(4)D-SACK
Duplicate SACK(接收方)
使用D-SACK时,接收方会告诉发送方哪些报文段重复接收了 ,此时,发送方就会知道这些报文在传输时并没有丢失,而是接收端回应的ACK在网络中丢失了,又或者是(数据报在传输的过程中,数据报只是延迟了而言).
二、滑动窗口
前提:TCP每发送一个报文,都要进行一次确认,当上一个数据报得到应答是才会发送下一个数据包.只能进行一来一往的交流,这样传输数据效率会很低.
在引入窗口的概念后,发送数据后就无需等待数据的应答,而是继续发送数据,因为窗口就是一个缓冲区,在没有接收到对端对之前报文的确认之前,缓冲缺的大小是不会改变的,如果发生了报文的丢失,就可以直接对该报文进行重传,在接收到对端对之前报文的确认后,窗口的大小就会改变,将接收到确认的数据从缓冲区中删除.
三、流量控制
流量控制:(这种机制是"发送方"和"接收方"同步发送方和接收方的发送数据报文的能力.这就是流量控制.(发送方和接收方互相约定自己的发送接收窗口).
流量控制就接收方将接收窗口通风ACK确认返回给发送方,这样就能够约定双方的窗口的大小,从而控制发送端的发送速率.
四、拥塞控制
流量控制约定发送和接收双方的发送和接收数据的速率.从而防止接收方来不及接收发送方发送的数据.拥塞控制:控制发送方的速率,进而避免发送方过快得发送数据从而导致网络的拥塞.
拥塞控制算法:
- 慢启动
- 拥塞避免
- 拥塞发生
- 快速恢复
慢启动:没接收到一个ACK后,拥塞窗口+1
当TCP连接刚刚建立后,会有一个慢启动的过程,其目的是为了一点点提高数据报发送的速度,
慢
启
动
发
送
数
据
报
的
速
率
是
指
数
性
增
长
\color{#FF0000}{慢启动发送数据报的速率是指数性增长}
慢启动发送数据报的速率是指数性增长的.
1.拥塞窗口cwnd,发送窗口swnd,连接建立后,刚开始发送数据报时,拥塞窗口cwnd初始化为1,表示一个传输数据报文的大小MSS,
2.当接收到一个ACK确认后,每个cwnd增加1,此时就可以发送两个数据报
3.当收到2个数据报的ACK后,每个cwnd+1,此时就可以发送四个数据报
4.当收到4个的ACK后,每个cwnd+1,此时就可发送八个数据报了
…
慢启动门限:ssthresh(slow start threshold)
c
w
n
d
<
s
s
t
h
r
e
s
h
时
,
使
用
慢
启
动
算
法
,
c
w
n
d
>
=
s
s
t
h
r
e
s
h
时
,
使
用
"
拥
塞
避
免
算
法
"
\color{#FF0000}{cwnd < ssthresh时,使用慢启动算法,cwnd >= ssthresh时,使用"拥塞避免算法"}
cwnd<ssthresh时,使用慢启动算法,cwnd>=ssthresh时,使用"拥塞避免算法"
拥塞避免算法:当cwnd拥塞窗口>=ssthresh时,就会启动拥塞避免算法
进入拥塞避免算法后,每收到到一个ACK时,cwnd增加1/cwnd大小
例如:ssthresh大小为8,当有8个ACK到达时,每个确认增加1/8,8个ACK确认,所以cwnd一共增加1,此时发送9个数据报发送,当下一次9个ACK到达时,每个确认增加1/9,9个ACK,所以cwnd增加1,此时发送10个数据报,此时发送的窗口cwnd的增长速率就变成了线性增长.
在发送的数据报数量在到达慢启动门限前,是慢启动算法,此时发送窗口的增长速率为指数增长,当到达慢启动门限时,使用的是,
拥
塞
避
免
算
法
,
此
时
发
送
窗
口
的
增
长
速
率
为
线
性
增
长
\color{#FF0000}{拥塞避免算法,此时发送窗口的增长速率为线性增长}
拥塞避免算法,此时发送窗口的增长速率为线性增长,但发送窗口还是在增长,知识增长的速率减慢了而已,如果这样一直增长下去,网络就会发生拥塞,就会出现丢包现象,就会触发重传机制,此时发送端就会进入拥塞发生算法
拥塞发生
当网络发生了拥塞,就会触发超时重传或者快速重传机制
两种重传机制所引发的拥塞发生算法是不同的
-
超时重传:
发送超时重传时使用拥塞发生算法策略:
慢启动门限: ssthresh=cwnd/2
拥塞窗口: 重置为1
-
快速重传:(连续收到三个相同的ACK就会触发快速重传)
发生快速重传使用的拥塞发生算法:
拥塞窗口:cwnd=cwnd/2; 变为原来的一半
慢启动门:ssthresh=cwnd;
进入快速恢复算法.
快速恢复算法
在发生快速重传后,将cwnd= cwnd/2;ssthresh = cwnd,后进入快速恢复算法;
进入快速恢复后,拥塞窗口就会cwnd=ssthresh+3
重传丢失的数据报
重传ACK,cwnd就会+1
之后会在再次恢复之前的状态,就会重新进入拥塞发生阶段.