1.0——设计一个理想化的可靠传输协议
topdown理解计算机网络这本书从1.0升级到3.0带我们走进可靠协议的设计思路,不可靠的本质是loss&&bit error,假定没有这种bad case,作者带领我们设计一种完美可靠传输协议,版本1.0。
发送端【rdt_send】可靠传输提供给应用层的发送数据接口,经过可靠传输协议处理之后,交给【udt_send】不可靠传输提供给传输层的发送数据接口发送到网络里。接收端通过【rdt_rcv】处理不可靠传输的包,经过可靠传输协议处理之后,再通过【deliver_data】交给应用层。为了进一步加深理解,作者给出此方案的状态机转换图:
2.0方案有一个致命缺点,如果ACK或者NAK出现bit错误怎么办,而且因为这个出错还会带来其他问题,例如ACK或者NAk数据包出错,发送端就无法确认接收端到底有没有收到上次发送的数据包。如果接收端已经收到上次的数据包,但是发送端因为ACK数据包出错会重新发送一次,接收端就需要处理重复发送的问题。
2.1方案如何发送端检测ACK或者NAK出现bit错误问题?引入校验和帮助检测是否出错,引入纠错码帮助发送端尽可能恢复ACK后者NAK消息。
2.1方案如何解决接收端收到重复数据包问题?发送端再数据包里面带上sequence number,接收端只需要检查sequence number即可判断包是否重复。
2.1方案里面接收端会发送NAK或者ACK,NAK其实可以合并到ACK,2.2方案引入ACK序号,即发送端判断ACK的序号来判断接收端已经收到的数据包。
总结起来:可靠传输的关键因素:校验和、sequence number、timer、ack,每一个都承担不同的功能。