一文带你搞定TCP滑动窗口 讲一下tcp滑动窗口

createh55个月前 (12-25)技术教程41

什么是滑动窗口?

窗口是操作系统开辟的一块缓存空间,发送方在收到接收方ACK应答之前,必须在缓冲区保留已发送的数据,如果按期收到确认应答,数据就可以从缓冲区移除。

什么是滑动窗口大小?

窗口大小就是指无需等待ACK,可以继续发送数据的最大值。

什么是累计确认?

假设发送方发送了100-199、200-299、300-399的数据包,接收方都收到了,但此时200-299的ACK发生了丢失,但是发送方依然可以通过300-399的数据包的ACK 400知道200-299的数据包已被发送方接收,这种模式就叫做累计确认。

窗口大小由谁决定?

TCP首部中的窗口大小是接收方告诉发送方自己还有多少缓冲区可以接收,发送端会根据这个值来发送数据,避免接收端处理不过来。

窗口大小由接收方的窗口大小决定,通常情况下发送方发送的数据大小不能超过接收方的窗口大小。

发送方滑动窗口

发送方的窗口主要分为四部分:

  • #1:已发送并收到ACK确认的数据,1~31字节
  • #2:已发送但未收到ACK确认的数据,32~45字节
  • #3:未发送但总大小在接收方处理范围内的数据,46~51字节
  • #4:未发送但总大小超过接收方处理范围的数据,52以后的字节

发送窗口需要借助三个指针来实现:

  • SND.WND:发送窗口的大小(由接收方指定)
  • SND.UNA:表示已发送但未收到ACK确认的数据的第一个字节,这里是绝对指针
  • SND.NXT:表示未发送但是可以发送范围的第一个字节号,这里是绝对指针:
  • #4区域的第一个字节可以通过SND.UNA+SND.WIND计算得出

可用窗口的大小为:SND.WIND - (SND.NXT - SND.UNA)

接收方的滑动窗口

接收方窗口分为三部分:

  • #1+#2:已成功接收并确认的数据(等待应用程序读取)
  • #3:未收到但是可以接收的数据
  • #4:未收到并且无法接收的数据

接收窗口需要借助两个指针实现:

  • RCV.WND:接收方的窗口大小,该值会告诉发送方
  • RCV.NXT:期望发送方下一次发送过来数据的字节号
  • #4的第一个字节号可以使用RCV.NXT + RCV.WND获得

接收窗口和发送窗口大小相等么?

接收方窗口约等于发送窗口大小。

相关文章

一文带你搞定TCP重传 tcp 重传

摘要重传机制超时重传快速重传SACK重传Duplicate SACK重传机制TCP重传机制主要是为了防止网路包丢弃,重传的工作方式主要借助TCP头部中的序列号和确认号来决定是否重传,重传的触发方式主要...

哎哟哟,听说你TCP/IP协议掌握得不错呢,进来看看有你不会的吗?

1. TCP简介TCP是面向连接的、可靠的,基于字节流的传输层通信协议将应用层的数据流分割成报文段并发送给目标节点的TCP层数据包都有序号,对方收到则发送ACK确认,未收到则进行重传使用校验和来检验数...

TCP的滑动窗口机制,谈谈其设计演化过程

理解TCP滑动窗口是如何工作的,对于理解TCP的其他知识是至关重要的。相比于更为简单,同为传输层协议的UDP而言,TCP提供了对传输数据的质量保证。在可靠性上,TCP确保传输的数据不丢失、不重复,也不...