作者a40136 (funnynose)
看板Network
标题Re: [问答] 关於 Computer Networking 书上的 rdt 2.2 receiver
时间Sat Aug 25 03:32:54 2012
阿总觉得你想像误会课本的意思了,直接用推文的好像要推不少行
所以直接在这里直接回覆一篇,请参考我传的那张图来对照我底下
的解释。
图 :
http://i.imgur.com/r9bor.jpg
前情提要 :
RDT 2.2 与 2.1只差异在取消NCK,其他都相同
如果你能理解2.1在干嘛,理论上2.2你要能懂。
Sender :
rdt_send(data)
-----------------
sndpkt = make_pkt(0,data,checksum)
udt_send(sndpkt) 送出第一个封包
Sender 进入下一个state (wait for ACK0) 在这里暂停等待receiver回复
Reveiver : 已在Wait for 0 from below state
接收端是在等待package 0
左侧条件式 rdt_rcv(rcvpkt) 不解释
corrupt(rcvpkt) 判断封包是否烂掉
has_seq1(rcvpkt) 判断是不是自己要的东西
假设以上2个为true 封包烂掉 or 拿到的封包是 package 0
则执行下面的动作 - > udt_send(sndpkt) 这里的sndpkt 是 (ACK,1,checksum)
也就是在告诉sender一次我收到package 1啦,进入Sender节奏
Sender :
isACK(rcvpkt,1)成立,发现刚刚传给receiver有问题
所以在传一次packet 0 udt_send(sndpkt)
所以依照旧版的图,假使第一个package是错误的,也会正常重新发送封包
是没有问题的,以上是我的认知,假使还有问题,或者对我的回覆有疑问
欢迎推文告知。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 198.15.76.130
※ 编辑: a40136 来自: 198.15.76.130 (08/25 03:33)