可靠数据传输协议

最近帮老板改quiz,重新复习了一下计算机网络这部分,6年的东西全忘光光了。

rdt1.0: 假设channel是好的,没有包的错误和丢失。
rdt2.0: 假设包会丢失,所以接收端在收到正确的包后返回ACK,收到包出错后返回NAK.
rdt2.1: ACK在返回发送端的时候也会出错,那么发送方可能误以为接收方没有收到正确的包,要进行重发,接收方就会获得俩一样的包。所以2.1在发送方发送时给每一个包添加一个sequence number, 这样如果接收方收到的包一样,就可以把后面的给扔掉了。
rdt2.2: 只发送ACK,如果收到的错误的包不发送NAK,而是返回上一个包的ACK
rdt3.0: 接收方设置一个timer,如果一段时间内没有接收到ACK,或者收到了错误的ACK,那么就送行发包。

rdt3.0的效率太低,每次必须要等前一个包发完才能发下一个,所以要使用Pipelined protocols
Go back N: 依次批量地发一堆包,接收端会返回对应的ACK,如果从哪个开始错了,就从那个包开始继续再进行批量地发;
Selective repeat: 依次批量地发一堆包,接收端会返回对应的ACK, 并且把对的存在buffer里。接收端再次只会发送没有成功的包。
可靠数据传输协议