窗口大小与序列号之间的关系

16
问题是:

我们有一个传输协议,使用流水线技术,并使用8位长的序列号(0到255)

发送方可以使用的最大窗口大小是多少?(发送方在等待确认之前可以在网络上发送多少个数据包?)

在Go-Back-N中,最大窗口大小为:w= 2^m -1 w=255。

在Selective Repeat中,最大窗口大小为:w=(2^m)/2 w=128。

我不知道哪个是正确的,也不知道应该使用哪个公式。

感谢您的帮助


你在设计一个协议吗?还是已经有一个名字了?如果有的话,请说明。只是为了明确:你说的是TCP,对吗? - cxxl
请查看此帖子:https://dev59.com/FF4c5IYBdhLWcg3wAWFE - Sun_Rider
1个回答

15

这两个协议有不同的问题。

就Go-Back-N而言,您是正确的。窗口大小可以高达255。(2^8-1是从0开始发送的数据包的最后一个序列号。它也是Go-Back-N协议可能的最大窗口大小)

然而,选择重传协议的窗口大小有限制,最大序列号的一半。因为接收者无法区分已经确认但在之前的窗口中丢失并未到达发送方的重传数据包与具有相同序列号的重传数据包。因此,窗口大小必须在序列号的一半范围内,以便连续的窗口不能彼此具有重复的序列号。

Go-Back-N没有这个问题,因为发送方将n个数据包推送到窗口大小(最大值为:n-1),并且直到获得累积的n个确认消息,才会滑动窗口。这两个协议具有不同的最大窗口大小。

注意:对于Go-Back-N,最大窗口大小是唯一序列号的最大数量 - 1。如果窗口大小等于唯一序列号的最大数,则如果所有确认消息都丢失,则接收方将把所有重传的消息作为单独的消息集接受,并将消息额外传递一次给其应用程序。为避免此不一致性,最大窗口大小=唯一序列号的最大数量-1。根据@noamgot的评论提供的事实,此答案已更新。


4
抱歉打扰了,但我认为你的回答有问题——在GBN中,窗口大小的确应该是最多255,而不是256。考虑以下例子——发送方发送了数据包0-255(整个窗口),接收方接收并发送一个ACK确认,但不幸的是ACK信号丢失了。于是在超时后,发送方会重新发送这些数据包。但此时接收方却等待另一个以0开始的数据包序列,这就出现了问题。如果窗口大小为255,就不会发生这种情况。参考观看下面的视频链接:http://webmuseum.mi.fh-offenburg.de/index.php?view=exh&src=73 - noamgot
1
这个链接是被禁止的。 - Jun Yu

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