[问答] 滑动视窗一问

楼主: zelkova (*〞︶〝*)   2017-03-05 11:36:45
这是我在看相关的ARQ(StopAndWait, GoBackN, SelectiveRepeat)产生的疑问
为了简单描述我的问题, 我用StopAndWait来举例
假设有个Stop-And-Wait的传输情形像这样
有端点A跟B在传输, 视窗大小只有2, 横轴是时间轴, 斜线代表网络传输
下面这个是A跟B之间在通讯的示意图
┌──┬──────────────────┐
│端点│ 封包编号 │
│ A │ [0] [1] [0] [1] [0] ..... │
│  │  \ \  \ \  \ │
│ B │ [0] [1] [0] [1] [0] ... │
└──┴──────────────────┘
我想请问有没有可能发生这样的状况
┌──┬──────────────────┐
│端点│ 封包编号 │
│ A │ [0] [1] [0] [1] [0] ..... │
│  │ │\  │
│ │ │ \ │
│ │ │ \ 第2次(timeout重送) │
│ │ │ \ │
│ │ │第1次 \ │
│ │ \ \ │
│ B │ [0] [1] [0] [1] [0] ... │
└──┴──────────────────┘
也就是因为第1个[0]传输了比较久
不过B还是顺利接收到第1个[0]
然后也顺利收到之后的[1] (为了图面干净, 我把[1]的传输线省略)
但因为之前的第1个[0]太久没收到回应
所以造成A当时timeout重送
而B在收到[1]之后, 也顺利收到这个重送的封包
也就是B总共收到两次第1个[0]的封包
而且很刚好的“照顺序”收到
这样不会有问题吗?
还是有什么没考虑到的状况, 所以根本不会发生呢?
谢谢
作者: johnkk6j   2017-03-06 13:18:00
你这样两边窗口都是2 就不适用stop and wait了吧 接受窗口要2的话应该就要用selctive repeat 不然这样应该会产生混淆的问题 stop and wait,go back n的接受窗口应该都是只有1的而且你stop and wait再还没收到序号0的ack 应该不会再接着传序号1的资料的 也就是传送方在送出序号0的情况下应该是进入一种封闭的状况 要等收到确ack1才可以在进入下个传输我大概懂你的意思了 只是要达到你说的情形机率真的不高吧 要发生这样的情况要两个前提 你的序号一定要很小 而且还要你的序号0的封包很慢抵达 而且后面的又要先抵达感觉好像挺奇怪的 @@ 还有我主要是根据forouzan这本书的观念来判断的
楼主: zelkova (*〞︶〝*)   2017-03-07 00:55:00
看起来j大也认为 只是要序号很小 又各种巧合碰在一起的确有可能发生 那上面的推测应该没错.. 感谢j大的意见
作者: blackbox (黑盒子)   2017-03-07 08:16:00
收到封包1应该要回NAK0,要求封包0重送没有NAK的话就是等timeout,那你的序号太少

Links booklink

Contact Us: admin [ a t ] ucptt.com