2012-02-18 48 views
6

问题之间的赫志是:窗口大小和序列号

我们有一个使用管道并使用8位的序列号(0〜255)运输protocoll

什么是最大窗口大小发件人可以使用? (发送者可以在网络等待ACK之前发送多少个数据包?)

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

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

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

感谢您的帮助

+0

你在这里设计协议吗?或者它有一个名字,在这种情况下,请说出来。只是要明确:你在谈论TCP,是吗? – cxxl 2012-11-30 13:48:14

回答

2

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

在Go-Back-N的情况下,您是正确的。窗口大小可以高达255.(2^8-1是从0开始发送的最后一个seq#数据包,它也是Go-Back-N协议可能​​的最大窗口大小。)

但是选择性重复协议将窗口大小限制为最大seq#的一半,因为接收方无法区分具有相同seq#的重发分组与已经ack的分组,但是在之前的窗口中丢失并且从未到达发送方。因此,窗口大小必须在seq#的一半范围内,以便连续的窗口不能彼此重复seq#。

Go-Back-N没有这个问题,因为发送者将n个数据包推到窗口大小(最大值:n-1),并且永远不会滑动窗口,直到它累积到n为止。而这两个协议有不同的最大尺寸窗口。

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

+1

嗨,对不起,这个帖子从死亡,但我相信你的答案有一个问题 - 在GBN的窗口大小确实应该高达255,而不是256.考虑下面的例子 - 发送者发送数据包0-255 (整个窗口),接收器获取它们并发送ACK。不幸的是,ACK会丢失,所以在发生超时之后,发送方会重新发送这些数据包。但是现在接收器等待从0开始的另一个数据包序列,所以我们遇到了问题。与窗口大小255它不会发生。考虑看这个:http://webmuseum.mi.fh-offenburg.de/index.php?view=exh&src=73 – noamgot 2017-02-21 09:20:49