问题是 :
我们有一个使用流水线并使用8位长序列号(0到255)的传输协议(protocol)
发送方可以使用的最大窗口大小是多少? (发件人可以在等待ACK之前在网络上发送多少个数据包?)
返回-N,最大窗口大小为:w = 2 ^ m -1 w = 255。
选择性重复最大窗口尺寸为:w =(2 ^ m)/2 w = 128。
我不知道哪个正确,应该使用哪个公式。
感谢帮助
最佳答案
这两个是具有不同问题的不同协议(protocol)。
如果是Go-Back-N,那是正确的。窗口大小最多可为255。(2 ^ 8-1是要从0开始发送的数据包的最后一个序列号。这也是Go-Back-N协议(protocol)可能的最大窗口大小。)
然而,选择性重复协议(protocol)将窗口大小限制为最大seq#的一半,因为接收器无法区分具有相同seq#的重发数据包与已经确认的数据包,但丢失并且在先前的窗口中从未到达发送方。因此,窗口大小必须在seq#的一半范围内,以便连续的窗口不能彼此重复seq#。
Go-Back-N不会出现此问题,因为发件人将n个数据包推送到窗口大小(最大值为n-1),并且从不滑动窗口,直到它累积累积到n个为止。并且这两个协议(protocol)具有不同的最大大小窗口。
注意:对于Go-Back-N,最大窗口大小是唯一序列号的最大数量-1。如果窗口等于唯一序列号的最大数量,则如果所有确认都丢失,则接收方将接受所有将重发的消息作为单独的消息集发送,并将消息再传递一次给它的应用程序。为避免这种不一致,最大窗口大小=唯一序列号的最大数目-1。此答案已根据@noamgot注释中提供的事实进行了更新。
关于tcp - 窗口大小与序列号之间的关系,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9341905/