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

时间:2012-02-18 14:09:37

标签: tcp pipeline

问题是:

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

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

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

选择性重复最大窗口大小为:w =(2 ^ m)/ 2 w = 128。

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

感谢您的帮助

1 个答案:

答案 0 :(得分:5)

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

如果是Go-Back-N,你是对的。窗口大小最多可以达到255.(2 ^ 8-1是从0开始发送的最后一个seq数据包。它也是Go-Back-N协议可能​​的最大窗口大小。)

然而,选择性重复协议将窗口大小限制为最大seq#的一半,因为接收器无法区分具有相同seq#的重新发送的数据包与已经确认的数据包但丢失并且从未到达过去的发送者窗口。因此,窗口大小必须在seq#的一半范围内,这样连续的窗口就不会有彼此重复的seq。

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

注意:对于Go-Back-N,最大窗口大小是唯一序列号的最大数量 - 1.如果窗口等于唯一序列号的最大数量,如果所有确认都丢失,接收器将接受所有重新传输的消息作为一组单独的消息,并将消息中继一段时间到它的应用程序。为避免这种不一致,最大窗口大小=唯一序列号的最大数量 - 1.此答案已根据@noamgot评论中提供的事实进行更新。