博主在这会用一点有趣的对话,来解释rdt的这几种情况。后面我会用快递搬运来解释。
-
rdt1.0
rdt1.0是经完全可靠信道的可靠数据传输
发送方:兄弟,你的快递(丢过去)
接收方:好的(默默接受)理想的认为中间不会出问题
2、rdt2.0
rdt2.0经具有比特差错信道的可靠数据传输
发送方:兄弟,你的快递,收到了不?(发送快递)
接收方:收到了(向发送方发送ACK 就是ok的意思)
发送方:兄弟,你的快递,收到了不?
接收方:没收到呢(向发送方发送NAK 没收到等待发送方重新发送一遍)
- rdt2.1
rdt2.1就是为了防止在回传ACK,NAK的时候出现问题
发送方:兄弟,你的第0个快递,接着
接收方:收到了第0个快递(向发送方发送ACK0)
这里表示收到了第0个快递,接收方等待第1个快递,但是在回传ACK的时候,出现了比特翻转,变成了ACK1(这里表明接收方接到了第1个快递)那么发送发就以为自己刚才发的是1号快递,就会把0号快递再发一次,但是接收方知道自己收到的是0号快递,就会拒绝这个重发的0号快递。避免重复。
4、rdt2.2
rdt2.2就是简化了2.1的操作,只有ACK
发送方:你的0号快递
接收方:我收到了0号快递,记得把1号快递给我(向发送方发送ACK,1 然后等待发送方把1号快递给你)
那假设我没接到0号快递
发送方:你的0号快递
接收方:我没接到0号,你再给我发一遍(向发送方发送ACK,0 等待发送方重发0号快递)
5、rdt3.0
rdt3.0在rdt2.2的基础之上处理了数据包丢失的情况,增加了计时器的机制,如果在RTT时间段内,发送方没有接收到反馈信息,那么发送方默认数据包已经丢失了,会自动重传。
发送方:兄弟,你0号的快递,收到了吗?
发送方:兄弟,在吗?
发送方:兄弟?
发送方:算了我重发一次吧