[問答] 關於 Computer Networking 書上的 rdt 2.2 receiver
James F. Kurose 的 Computer Networking: A Top-down Approach 5th edition
第三章 Transport Layer 的 3.4 節 -- Principles of Reliable Data Transfer
其中的 rdt 2.2 receiver 的 Finite State Machine
Λ
----------
oncethru=0 ↘
┌─────────┐
│ │
rdt_rcv(rcvpkt) && (corrupt(rcvpkt) || ┌--→ │ │
has_seq1(rcvpkt)) │ │ Wait for call 0 │→
-------------------------------------- │ │ from below │
if (oncethru == 1) └---- │ │
udt_send(sndpkt) │ │
└─────────┘
我不懂的地方是,為什麼要增加 oncethru 這個變數呢?
為什麼左邊那個遞迴的部分,不乾脆改成底下這樣:
rdt_rcv(rcvpkt) && (corrupt(rcvpkt) || has_seq1(rcvpkt))
--------------------------------------------------------
sndpkt=make_pkt(ACK,1,checksum)
udt(send(sndpkt)
就好了呢?這樣就不需要增加 oncethru 這個變數了不是嗎?
而且使用 oncethru,且一開始 oncethru=0
萬一 receiver 第一個接收到的 packet 就是 corrupt 的 packet
由於一開始 oncethru=0,結果底下的 udt_send(sndpkt) 並不執行
這樣豈不是 sender 根本就不知道第一個 packet 就已經 corrupt 了
然後 sender 就一直卡在 wait for ACK 0 這邊動彈不得?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.254.0.106
→
08/25 01:22, , 1F
08/25 01:22, 1F
→
08/25 01:22, , 2F
08/25 01:22, 2F
→
08/25 01:22, , 3F
08/25 01:22, 3F
→
08/25 01:23, , 4F
08/25 01:23, 4F
→
08/25 02:18, , 5F
08/25 02:18, 5F
→
08/25 02:19, , 6F
08/25 02:19, 6F
→
08/25 02:20, , 7F
08/25 02:20, 7F
→
08/25 02:20, , 8F
08/25 02:20, 8F
→
08/25 02:21, , 9F
08/25 02:21, 9F
→
08/25 02:22, , 10F
08/25 02:22, 10F
→
08/25 02:26, , 11F
08/25 02:26, 11F
→
08/25 02:27, , 12F
08/25 02:27, 12F
→
08/25 02:27, , 13F
08/25 02:27, 13F
→
08/25 02:27, , 14F
08/25 02:27, 14F
→
08/25 02:28, , 15F
08/25 02:28, 15F
→
08/25 02:28, , 16F
08/25 02:28, 16F
→
08/25 02:38, , 17F
08/25 02:38, 17F

→
08/25 02:41, , 18F
08/25 02:41, 18F
→
08/25 02:42, , 19F
08/25 02:42, 19F
→
08/25 02:43, , 20F
08/25 02:43, 20F
討論串 (同標題文章)
Network 近期熱門文章
PTT數位生活區 即時熱門文章
7
18