【TCP】滑动窗口 快重传

在讲述滑动窗口之前,首先得明白每个Tcp连接在内核中都会有一个接收缓冲区和发送缓冲区。
接收方对每一次发送方发送的数据都要进行ACK确认应答,收到ACK之后,再发送数据,由此比较耗费时间,性能较差,如果批量发送数据,就会把收发的时间重叠在一起,由此就有了滑动窗口!

滑动窗口

滑动窗口大小是无需等待确认应答而可以继续发送数据的最大值,取值是接收方缓冲区剩余空间的大小和拥塞窗口的最小值
下图是客户端给服务器发数据时,滑动窗口的变化情况:
在这里插入图片描述
滑动窗口是发送缓冲区的一部分。
接收方也不是每收到一个ACK就进行确认,接收方采用累积确认的方式。响应回的最后一个ACK,代表在这个ACK之前的都已经收到了。

  • 第一次发送前四个字段的时候,不需等待,直接发送。
  • 收到第一个ACK后,滑动窗口向后移动,继续发送第五个段的数据,以此类推。
  • 操作系统内核为了维护这个滑动窗口,需要开辟发送缓冲区来记录当前哪些数据还没有应答,只有确认应答过的数据,才能从缓冲区删除
  • 窗口越大,网络的吞吐量就越高。

虽然有了滑动窗口,一定程度上提高了效率,但是一次性发送大量数据,万一丢包怎么办?如何进行重传?分两种情况说明:

1、数据包已到达,服务器响应回的ACK丢失
丢失部分ACK,并不要紧,客户端收到的最后一条ACK,会默认在这条ACK之前的数据包服务器都已收到,因为有确认号和确认序号!

2、数据包丢失
在这里插入图片描述

  • 当1001~2000段数据丢失后,发送端会一直收到1001这样的ACK。

  • 如果发送端连续收到三个以上这样的ACK,此时就会将1001这样的字段重新发送。

  • 此时接收端收到了1001之后,再次返回的ACK就是8001了,因为之前的数据都已接收到了,被放在了接收缓冲区。

像这种发送端连续收到三个以上的相同的ACK时,则进行重发,这种机制就是“高速重发控制”(快重传)。

可能会有人有这样的疑问,已经有了快重传了,为什么还会有超时重传???
若只有一条数据发送,发生丢包问题,就不会触发快重传,此时就要用到超时重传。

总而言之,滑动窗口提高了TCP的性能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值