【HBZ分享】TCP连接完成后又是如何保证数据的可靠性传输

前提

  1. 发送发发送数据时,需要给出一个seq编号。
  2. 第一个数据包的seq编号是一个随机数, 从第二个开始,seq编号就是【第一次的seq+数据包大小】, 即接收方响应过来的期待数据包编号

ACK机制

  1. 接收方收到数据后,要给发送方回应一个ACK确认
  2. 回应的ACK需包含两部分,一部分: 期待收到下一个数据包的编号。 另一部分: 当前接收方的接收窗口剩余的容量
  3. 当接收方长指定时间内没收到ACK,就会重新发送。

流量控制(属于端对端控制,不算过程中发生的事情)

  1. 当接收方ACK发送方时,同时会返回一个win=xxx的报文,该win就表示通知发送方,我的缓冲区还能接受多大的数据
  2. 发送方接收到收到win后,下一次发送数据就不会超过win = xxx这个值,这样就保证了服务端不会因为接收超量的数据而丢包
  3. 流量控制就是控制发送方不要发送太快,可以让接收方能够及时处理
  4. 每次数据传递给出ACK时都会携带win。

在这里插入图片描述

拥塞控制

  1. 自适应算法,根据网络环境来发送数据
  2. 慢启动:
    (1). 发送端会以一个较小的数据量进行试探性发送,每接收到一个,窗口值就会翻倍
    (2). 如果不丢包,就会加速发送,如果丢包就是降低速率发送

快速重传

  1. 快速重传: 当发送方在指定时间内每收到ACK回应,就会认为发送失败了,此时会立即重新发送
  2. 拥塞避免: 当3次收到同样的ACK回应,即回应的ack值都一样3次,就会认为这个包发送失败了,此时会重新发送接收端期待的那个数据
  3. 缺点: 只会知道某次的数据发送失败了,但发送端并不知道之后的包是否要重发,如下图,发送发仅通过3次相同ACK能判定出第二次的发送失败,但第三第四次是否成功,发送方其实并不知道,所以发送方就不清楚是否要重发第三和第四次的数据包。
    在这里插入图片描述

超时重传

  1. 当发送端在超时时间内没有收到ACK,则会认为失败,会发起重传
  2. 超时重传时间就是RTO, 一般大于RTT(往返时间)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值