概述
可靠数据传输:服务模型与服务实现如下图所示:其中
rdt-send()函数可以调用数据传输协议的发送方,它将要发送的数据交付给位于接收方的较高层(rdt表示可靠数据传输)
rdt_rev()函数可以在接收端接收分组信号
deliever-data()函数可以向较高层交付数据。
udt_send()函数用来将分组发送给对方(udt表示不可靠数据传输)
由上左图可以看到,为上层实体提供的服务抽象是:数据可以通过一条可靠的信道进行传输。借助于可靠信道,传输数据比特就不会受到损坏或丢失,而且所有数据都是按照其发送顺序进行交付。这恰好是TCP向调用它的因特网应用所提供的服务模型。实现这种服务抽象的是可靠数据传输协议。
另外,很现实的一个问题是可靠传输协议的下层协议也许是不可靠的,因此十分困难。比如TCP是在不可靠的(IP)端到端网络层之上实现的可靠数据传输协议。
构造可靠数据传输协议
1.经完全可靠信道的可靠数据传输:rdt1.0
横线上方是引起状态变迁的事件,横线下方是事件发生采取的动作,无事件或状态变化用A表示
简单协议中,有了完全可靠的信道,接收端就不需要提供任何反馈信息给发送方,也不必担心出现差错。
2.经具有比特差错新到的可靠数据传输:rdt2.0
底层信道更为实际的模型是分组中的比特可能受损。但是现在仍然假定所有分组(虽然有些比特可能受损)将按发送顺序被接收
接收端接收到分组后需要使用肯定确认(ACK)和否定确认(NAK)让发送方知道 哪些内容被正确接收,哪些内容接受有误,并因此需要重复。基于这样重传机制的可靠数据传输协议称为自动重传请求(ARQ)协议。基本上,ARQ还需要另外三种协议来处理比特差错的情况,分别是:差错检测、接收方反馈、重传。