TCP - 拥塞窗口与接收窗口的区别

34

我试图理解拥塞窗口和接收窗口之间的区别。

据我所知,接收窗口是接收方可以获取数据包的缓冲区。拥塞窗口也是如此,它告诉我们接收方能力的上限,并根据丢失的数据包等因素进行调整。

那么它们之间的区别是什么呢?


我认为这个问题更适合在其他的SE网站上提问,因为它不是一个编程问题,也与开发工具无关。 - Lucero
2个回答

58
简短回答:接收窗口由接收方管理,接收方向发送方发送窗口大小。窗口大小指示接收缓冲区中仍空闲的字节数,即发送方无需等待接收方确认就可以发送的字节数。
拥塞窗口是发送方施加的窗口,旨在避免网络路径中间的某些路由器过载。每个段的发送方都会轻微增加拥塞窗口,即发送方将允许自己有更多未确认数据。但如果发送方检测到数据包丢失,它将把窗口减半。这背后的原理是发送方认为数据包丢失是因为某处发生了缓冲区溢出(几乎总是如此),所以发送方希望保持较少的“在途”数据,以避免将来进一步的数据包丢失。
更多信息,请参阅:http://en.wikipedia.org/wiki/Slow-start

3
还有一点需要知道,发送方在任何时间点都会选择min{拥塞窗口大小, 接收方窗口大小}来维护滑动窗口大小。这个大小是指允许传输的字节数量。 - XChikuX
@cxxl ""发送方可以在不需要接收方确认的情况下继续发送的字节数。""----为什么发送方不需要接收方的确认我不理解?如果发送方发送数据,它必须等待接收方的确认,但是您说发送方不需要确认? - Alok Maity
发送方在接收方窗口大小被用完之前不需要确认发送数据。然后它可以继续发送更多的数据。这是一种功能,以确保任何给定时间大量的数据处于“飞行”状态。当然,接收方必须在某个时候确认接收,从而释放部分或全部接收方窗口。这些是两个交织在一起的特性:高传输速率和接收确认。 - cxxl

-1

最初,CongWindow被设置为一个数据包。然后将第一个数据包发送到网络并等待确认。如果在计时器超时之前收到此数据包的确认,则发送方将增加CongWindow一个数据包并发送两个数据包。一旦所有这些数据包在它们的超时时间内得到确认,CongWindow将增加两个——每个确认段一个。现在,CongWindow的大小为四个数据包,因此发送方传输四个数据包。只要CongWindow的大小低于阈值且在相应的超时时间内收到确认,这种指数增长就会继续。一个重要的区别是,CongWindow的大小会改变,但接收窗口大小始终保持不变。


每当数据被添加到或从套接字接收缓冲区中删除时,都会接收窗口大小更改。 - user207421

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接