TCP 滑动窗口/快速重传机制

我们知道TCP有确认应答机制,对每一个发送的数据段,都要给一个ACK确认应答,收到ACK后再发送ACK中携带的序列号。这样保证了可靠传输。但是有时数据往返的时间比较长时,性能就比较差了。
这里写图片描述

既然这样一发一收的方式性能较低,那么我们一次发送多条数据,就可以大大提升性能。

TCP中提出了滑动窗口这个机制。这个机制是什么?我们看看…
这里写图片描述

  1. 窗口大小是指无需等待确认而可以继续发送数据的最大值,上面的图的窗口大小是 4000 字节(4个段)
  2. 发送前4个段时,无需ACK,直接发送
  3. 收到第一ACK后,滑动窗口向后移动,继续发送第五个段的数据
  4. 操作系统内核为了维护这个滑动窗口,需要开辟 发送缓存区来记录当前还有哪些数据没有应答,只有应答了才会把该数据从缓冲区中删除掉
  5. 窗口越大,则网络的吞吐率就越高

这里写图片描述

我们知道在复杂的网络环境下,有可能会有丢包的情况:
TCP中有两种情况:
1.这里写图片描述

上面的图中,接受方发送的ACK(下一个是2001)丢失了。但是发送方还接受到了ACK(下一个是3001),说明1001 - 2000 该段数据包已经接收到了。数据已经传输到,不用理会。

2.如果数据包丢失,会怎么办?(快速重传)
这里写图片描述

当某一段报文丢失了,图中(1001 - 2000)数据段丢失了,接受方没有接收到该数据段,则会一直的给发送方发送ACK(下一个是1001),如果发送端主机连续收到同样一个(下一个1001),就会将对应的数据(1001 - 2000)重新发送。
这时候如果接收端收到1001之后,再次返回的就是ACK(8001)了。之前的(2001 - 8000)都接收到了接受缓存区
这种机制被称为“高速重发机制”(快速重传)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值