TCP可靠传输

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考


一、重传机制

重传机制: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
之后会在再次恢复之前的状态,就会重新进入拥塞发生阶段.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值