面试提问:如何实现可靠传输?

如果要实现可靠传输,就要做到不错不丢不乱。

1. 不错
通过增加校验和,来判断数据是否发生错误,当发生错误需要通知发送方,引入确认机制,对于正确的回复ACK,错误的回复NAK。所以在这里要增加停止等待协议。当接收方收到NAK时,可以进行重传。

同时这里要保证ACK和NAK消息段不发生错误。如果又增加一个校验和判断的话,会陷入套娃,所以可以采用超时重传机制 ,如果NAK或者ACK坏掉了,就直接重传。这样子可能会产生重复分组。
所以这里需要引入序列号,通过序列号判断是否重复了。
因为增加了序列号,所以可以通过ACK返回最后一个确认分组,就可以取消掉NAK了。

2. 不丢
假设发送方发送的消息在中间丢失了,这时候接收方不会进行任何行动,发送方会无休止等待。

所以可以增加一个定时器,当在一定的时间内,没有收到消息后,接受方会进行重传。
因为时间机制并不完善,分组可能只是延迟,不是丢失,这时候就会产生重复分组,通过序列号就可以解决了。同时ACK也需要显示的告知获取到了哪个分组。
3. 不乱
在上述过程中,通过添加序列号,解决了分组顺序混乱的问题。

上述方式,实现了可靠传输,但是性能很差,因为在等待接收方回复的过程中,发送方一直处于空闲状态,如果需要提高效率的话,需要采用滑动窗口协议

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值