转载

TCP 滑动窗口

TCP头里有一个字段叫Window,又叫Advertised-Window,这个字段是接收端告诉发送端自己还有多少缓冲区可以接收数据。于是发送端就可以根据这个接收端的处理能力来发送数据,而不会导致接收端处理不过来。

TCP 滑动窗口

上面这个图显示的是发送方的滑动窗口,从这个图可以看出来:

  • 窗口的大小是 6
  • 1-3 是发送完成,并且已经收到接受发的 ack
  • 4-6 是发送完成,但是并没收到 ack
  • 7-9 是目前可以使用的窗口,也就是说发送方还可以发送3个数据
  • 10-n 是不可以使用的地方

再来看一个下面的例子:

TCP 滑动窗口

上面这个图也是发送方的滑动窗口:

  • #1 已收 ack
  • #2 还没收到 ack
  • #3 在窗口当中还没发送的,(接受方有空间)
  • #4 窗口外的空间,(接受方没空间)

下面是个滑动后的示意图(收到36的ack,并发出了46-51的字节):

TCP 滑动窗口

在通过 tcp/ip 详解上一个例子看完善这个概念

TCP 滑动窗口

上面的图是方送方和接受方的 tcpdump 的一个示意图

TCP 滑动窗口

从上面的图可以总结几点:

  • 发送发不必发送一个全窗口大小的数据
  • 来自接收方的一个报文段确认数据并把窗口向右边滑动。这是因为窗口的大小是相对确认序号的。
  • 接收方在发送一个 ACK 前不必等待窗口被填满 。

【参考资料】

  1. http://coolshell.cn/articles/11609.html

  2. TCP/IP详解 卷1:协议

—EOF—

原文  http://renchx.com/tcpwindow
正文到此结束
Loading...