TCP窗口和缓冲区 - 检查我的理解?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TCP窗口和缓冲区 - 检查我的理解?相关的知识,希望对你有一定的参考价值。

我目前正在尝试实现单向TCP,我只想澄清一下TCP发送器/接收器窗口和接收缓冲区的行为。

我对窗口化过程的理解如下:

窗口大小表示发送方可以一次发送的最大未确认字节数。

此尺寸在连接期间达成一致。

TCP发送方应该跟踪具有较低序列号的ACK,并且还在接收到ACK时将分组标记为已确认。如果最低序列号(它正在跟踪)与当前窗口中的第一个字节匹配,则向右滑动窗口。

现在,我对接收缓冲区的理解......

当数据包无序到达时使用。数据被放入缓冲区,接收器不会对其进行确认,而是继续确认在最早的无序数据包之前收到的最后一个数据包。这使得发送方在重复的ACK号之后“快速”重新发送下一个分组。

这是对这两个概念的正确理解,如果没有,请澄清。

谢谢!

答案

窗口大小表示发送方可以一次发送的最大字节数未确认字节。

不可以。它是可以传输的最大未确认字节数。当发件人达到该限制时,他必须停止发送。

此尺寸在连接期间达成一致。

不。它在协议中动态调整。

TCP发送方应该跟踪具有较低序列号的ACK,并且还在接收到ACK时将分组标记为已确认。

发送方应缓冲发送的数据,直到确认为止,此时可以将其丢弃。如果未确认,则可以重新传输等。

如果最低序列号(它正在跟踪)与当前窗口中的第一个字节匹配,则向右滑动窗口。

任何ACK都包含序列号。可以丢弃该序列号下面的所有缓冲发送数据。

现在,我对接收缓冲区的理解......

当数据包无序到达时使用。

不,它在任何有序数据包到达时使用。它一直待在应用程序读取之前。无序段根本不一定是缓冲的。

数据被放入缓冲区,接收器不会对其进行确认,而是继续确认在最早的无序数据包之前收到的最后一个数据包。这使得发送方在重复的ACK号之后“快速”重新发送下一个分组。

或多或少,但缓冲部分是可选的。

以上是关于TCP窗口和缓冲区 - 检查我的理解?的主要内容,如果未能解决你的问题,请参考以下文章

UDP 与TCP 理论小结

三次握手和四次握手

TCP的三次握手(建立连接)和四次挥手(关闭连接)

TCP的三次握手(建立连接)和四次挥手(关闭连接)

TCP的三次握手(建立连接)和四次挥手(关闭连接)

TCP报头里的那个窗口大小到底是指什么