[問答] 滑動視窗一問

看板Network作者 (*〞︶〝*)時間8年前 (2017/03/05 11:36), 8年前編輯推噓2(2015)
留言17則, 3人參與, 最新討論串1/1
這是我在看相關的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]的封包 而且很剛好的“照順序”收到 這樣不會有問題嗎? 還是有什麼沒考慮到的狀況, 所以根本不會發生呢? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 218.161.45.91 ※ 文章網址: https://www.ptt.cc/bbs/Network/M.1488685010.A.CCB.html

03/06 13:18, , 1F
你這樣兩邊窗口都是2 就不適用stop and wait了吧 接受
03/06 13:18, 1F

03/06 13:18, , 2F
窗口要2的話應該就要用selctive repeat 不然這樣應該會
03/06 13:18, 2F

03/06 13:18, , 3F
產生混淆的問題 stop and wait,go back n的接受窗口應
03/06 13:18, 3F

03/06 13:18, , 4F
該都是只有1的
03/06 13:18, 4F

03/06 13:35, , 5F
而且你stop and wait再還沒收到序號0的ack 應該不會再
03/06 13:35, 5F

03/06 13:35, , 6F
接著傳序號1的資料的 也就是傳送方在送出序號0的情況下
03/06 13:35, 6F

03/06 13:35, , 7F
應該是進入一種封閉的狀況 要等收到確ack1才可以在進入
03/06 13:35, 7F

03/06 13:35, , 8F
下個傳輸
03/06 13:35, 8F
我換個方式來表達我的問題看看 假設有下面這幾個流程 1. A送了序號0封包 2. A等了一段時間, 沒收到序號0的ack, 決定重送序號0的封包 3. B收到流程1的封包, 並回序號0的ack, 開始等序號1的封包 4. A收到流程3的ack, 發送序號1的封包 5. B收到流程4的封包, 並回序號1的ack, 開始等序號0的封包 6. 如果流程2的封包沒壞掉只是傳了比較久, B這時是不是有機會收到流程2的封包而錯誤? 因為我看很多教材都是說重複的封包(上述流程2的封包)會被接收端(上面的B)丟掉 但好像都假設這些重複的封包在另一個狀態時候收到 (也就是在等序號1的時候收到) 所以在想萬一這些重複的封包是在同一個狀態被收到 (也就是在等序號0的時候收到) 會有這樣的錯誤發生嗎? ※ 編輯: zelkova (218.161.45.91), 03/06/2017 18:08:37

03/06 18:31, , 9F
我大概懂你的意思了 只是要達到你說的情形機率真的不高
03/06 18:31, 9F

03/06 18:31, , 10F
吧 要發生這樣的情況要兩個前提 你的序號一定要很小 而
03/06 18:31, 10F

03/06 18:31, , 11F
且還要你的序號0的封包很慢抵達 而且後面的又要先抵達
03/06 18:31, 11F

03/06 18:31, , 12F
感覺好像挺奇怪的 @@ 還有我主要是根據forouzan這本書
03/06 18:31, 12F

03/06 18:31, , 13F
的觀念來判斷的
03/06 18:31, 13F

03/07 00:55, , 14F
看起來j大也認為 只是要序號很小 又各種巧合碰在一起
03/07 00:55, 14F

03/07 00:57, , 15F
的確有可能發生 那上面的推測應該沒錯.. 感謝j大的意見
03/07 00:57, 15F

03/07 08:16, , 16F
收到封包1應該要回NAK0,要求封包0重送
03/07 08:16, 16F

03/07 08:19, , 17F
沒有NAK的話就是等timeout,那你的序號太少
03/07 08:19, 17F
文章代碼(AID): #1OkuVIpB (Network)
文章代碼(AID): #1OkuVIpB (Network)