构建可靠传输:rdt 1.0、2.0、2.1与2.2
可靠数据传输(RDT, Reliable Data Transfer)
由于可靠数据传输协议的下层协议也许是不可靠的,信道的不可靠特性决定了可靠数据传输协议的复杂性,例如TCP就是在不可靠的端到端网络层之上实现的可靠数据传输协议。
rdt 1.0:经完全可靠信道的可靠数据传输
考虑最简单的情况,假设底层信道是完全可靠的(不会出错、不会丢失)。有限状态机(FSM, Finite State Machine)可以用于描述发送方和接收方的操作。
rdt 1.0:经完全可靠信道传输
解锁完整互动实验、进阶解析与精选参考答案。
rdt 2.0:经具有比特差错信道的可靠数据传输
在分组的传输、传播或缓存的过程中,分组中的比特可能会受损。类似于打电话,当接听电话的人听到并理解一句话时会说“OK”,但如果没听清,就会要求对方再说一遍。
rdt 2.0增加了差错检验、接收方反馈和重传机制。当接收方接收到正确的报文时,就给对方一个肯定确认(ACK, positive acknowledgment),告诉他“没问题”。当接收方检测到报文错误时,就需要给对方一个否定确认(NAK, negative acknowledgment),告诉对方“你给我发的不对,重新给我发一份新的吧”。
rdt 2.0:差错检测、ACK/NAK与重传
解锁完整互动实验、进阶解析与精选参考答案。
发送方在将分组发送后,等待来自接收方的ACK或NAK。如果收到ACK,则代表接收方正确地接收了分组,那么就回到初始状态继续等待上层的数据。如果收到NAK,那就表示接收方没有收到正确的分组,需要进行重传并且继续处于等待ACK或NAK的状态。像这种只有当发送方接收到ACK后才能够继续发送新的报文的协议,被称为停等协议(stop-and-wait)。
rdt 2.0看起来似乎可以运行了,但遗憾的是,它存在一个致命的缺陷——ACK或NAK也存在受损的可能性!
当发送方收到的是一个受损的ACK或NAK时,如果发送方简单地选择直接重发分组会导致接收方收到重复的分组。
知识测验
rdt 2.1:带序号消息协议
发送方可以为分组添加序号,接收方只需检查序号就可确定收到的分组是否重复。对于停等协议而言,序号只需要使用0和1就可以了。
rdt 2.1:用序号识别重复分组
解锁完整互动实验、进阶解析与精选参考答案。
rdt 2.2:无NAK消息协议
rdt 2.2与rdt 2.1的功能相同,但是只使用ACK。接收方每次ACK最后一个被正确接收的分组,当发送方收到重复的ACK之后,采用与NAK相同的处理动作,将分组重传给接收方。
rdt 2.2:只使用ACK的协议
解锁完整互动实验、进阶解析与精选参考答案。
知识测验
追踪受损反馈与去重交付
rdt 2.2双方从序号0开始。A正确到达,ACK受损,A重传,随后ACK正确到达。接着B正确到达。逐个列出发送方与接收方状态、反馈、应用交付结果,并与rdt 2.0比较。