2017-02-10 可靠数据传输原理、可靠数据传输协议、自动重传请求协议、停等协议、冗余分组、比特交替协议、滑动窗口协议

2017-02-10 可靠数据传输原理、可靠数据传输协议、自动重传请求协议、停等协议、冗余分组、比特交替协议、滑动窗口协议

《计算机网络-自顶向下方法》(原书第6版)


3.4 可靠数据传输原理

    可靠数据传输协议(reliable data transfer protocol)。由于可靠数据传输协议的下层协议也许是不可靠的,因此这是一项困难的任务。

    单向数据传输(unidirectional data transfer)即数据传输是从发送端到接收端的。

    双向数据传输(bidirectional data transfer)(即全双工数据传输


3.4.1 构造可靠数据传输协议

    先假定发送的分组按其发送的顺序被接收,且不丢失分组

    1:经完全可靠信道的可靠数据传输

        首先我们考虑最简单的情况,即底层信道是完全可靠的。

        有限状态机(Finite-State Machine,FSM)

    2:经具有比特差错信道的可靠数据传输

        肯定确认(positive acknowledgment)

        否认确认(negative acknowledgment)

        这些控制报文使得接收方可以让发送方知道哪些内容被正确接收,哪些内容接收有误并因此需要重复。在计算机网络环境中,基于这样重传机制的可靠数据传输协议称为自动重传请求(Automatic Repeat reQuest,ARQ)协议,这就需要差错检测、接收方反馈、重传三个功能。

    停等(stop-and-wait)协议:要等到上一个分组得到正确接收的确认后才能处理下一个分组。它存在一个致命的缺陷。尤其是我们没有考虑到ACK或NAK分组受损的可能性。

    考虑处理受损ACK和NAK的3种可能性

        第一种:接收方对受损的ACK或NAK继续做错误反馈,由于发出的错误反馈可能再次受损,这样就有可能进入死循环。

        第二种:增加足够的检验和比特,使发送方不仅可以检测差错,还可以恢复差错。对于会产生差错但不丢失分组的信道,这就可以直接解决问题。

        第三种:当接收方收到含糊不清的ACK或NAK分组时,只需重传当前数据分组即可。这种方法在发送方到接收方的信道中引入了冗余分组(duplicate packet)。冗余分组的根本困难在于接收方不知道他上次所发送的ACK或NAK是否被发送方正确的收到。因此他无法事先知道接收到的分组是新的还是一次重传。

        对于第三种情况,解决这个新问题的的简单方法是在数据分组中添加一新字段,让发送方对其数据分组编号,即将发送数据分组的序号(sequence number)放在该字段。

    3.经具有比特差错的丢包信道的可靠数据传输

        冗余数据分组(duplicate data packet)

        从发送方的观点来看,重传是一种万能灵药。发送方不知道是一个数据分组丢失,还是一个ACK丢失,或者只是该分组或ACK过度延时。在所有这些情况下,动作是同样的:重传。

        因为分组序号在0和1之间交替,因此rdt3.0有时被称为比特交替协议(alternating-bit protocol)



Pasted Graphic 1.tiff


3.4.2 流水线可靠数据传输协议

流水线(pipelining)流水线技术对可靠数据传输协议带来如下影响:

    1:必须增加序号范围,因为每个输送中的分组(不计算重传的)必须有一个唯一的序号,而且也许有多个在输送中未确认的报文。

    2:协议的发送方和接收方两端必须缓存多个分组。发送方最低限度应当能缓冲那些已发送但是没有确认的分组。如下讨论,接收方或许也需要缓存那些已正确接收的分组。

    3:所需序号范围和对缓存的要求取决于数据传输协议如何处理丢失、损坏及延时过大的分组。解决流水线差错恢复有两种基本方法是:回退N步(Go-Back-N,GBN)和选择重传(Selective Repeat,SR)。


3.4.3 回退N步

    窗口长度(window size),滑动窗口协议(sliding-window protocol)

    序号空间可被看作是一个长度为2的k次方的环,其中序号2的k次方减1紧接着序号0,TCP有一个32比特的序号字段,其中的TCP序号是按字节流中的字节进行计数的,而不是按分组计数。

    基于事件的编程(event-based programming)


3.4.4 选择重传

    GBN中单个分组的差错就能够引起GBN重传大量分组,许多分组根本没有必要重传。


1:可靠数据传输协议(reliable data transfer protocol)、2:单向数据传输(unidirectional data transfer)、3:双向数据传输(bidirectional data transfer)、4:有限状态机(Finite-State Machine,FSM)、5:肯定确认(positive acknowledgment)、6:否认确认(negative acknowledgment)、7:自动重传请求(Automatic Repeat reQuest,ARQ)协议、8:停等(stop-and-wait)协议、9:冗余分组(duplicate packet)、10:分组的序号(sequence number)、11:比特交替协议(alternating-bit protocol)、12:流水线(pipelining)、13:窗口长度(window size)、14:滑动窗口协议(sliding-window protocol)、15:基于事件的编程(event-based programming)

猜你喜欢

转载自blog.csdn.net/u014222687/article/details/55001590