您的位置:首页 > 理论基础 > 计算机网络

可靠数据传输原理

2017-10-28 11:26 417 查看
可靠数据传输中为上层实体提供的服务抽象是:数据可以通过一条可靠的信道进行传输。借助于可靠信道,传输数据比特就不会受到损坏(由0变成1,或者相反)或丢失,而其额所有数据都是按照其发送顺序进行交付。这恰恰就是TCP向调用它的因特网应用所提供的服务模型。

构造可靠数据传输协议

我们现在一步步研究一系列协议,他们一个比一个更为复杂,最后得到一个无错、可靠的数据传输协议。

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

底层信道使分组中的比特可能受损。在分组的传输、传播或缓存的过程中,这种比特差错通常会穿线在网络的物理部件中。我们先假设所有发送的分组将按其发送顺序被接收。

在研发可靠通信协议之前,首先考虑一下人们会如何处理这类情况。在通常情况下,接收者在听到、理解并记下每句话后可能会说"ok"。如果报文接受者听到一句含糊不清的话时,他可能要求你重复刚才那句话。这种口述报文协议使用了肯定确认与否认确认。这些控制报文使得接收方可以让发送方知道哪些内容被正确接收,哪些内容接收有误并因此需要重复。在计算机网络环境中,基于这样重传机制的可靠数据传输协议称为自动重传请求协议。

处理存在比特差错的情况

差错检测。需要一种机制以使接收方检测到何时出现了比特差错。

接收方反馈。在口述报文情况下回答的“肯定确认“(ACK)和”否定去人“(NAK)就是这种反馈的例子。我们的协议将从接收方向发送方回送ACK与NAK分组。理论上,这些分组只需要一个比特长;如用0表示NAK,用1表示ACK。

重传。接收方收到了有差错的分组时,发送方将重传该分组。

发送端有两个状态。在最左边的状态中,发送端协议正等待来自上层传下来的数据。当产生rdt_send(data)事件时,发送方将产生一个包含待发送数据的分组,带有校验和,然后经由udt_send(sndpkt)操作发送该分组。在最右边的状态中,发送方协议等待来自接收方的ACK或NAK分组。如果收到一个ACK分组,则发送方知道最近发送的分组已被正确接收,因此协议返回到等待来自上层的数据的状态。如果收到一个NAK分组,该协议重传最后一个分组并等待接收方为响应重传分组而回送的ACK和NAK。注意到下列事实很重要:当发送方处于等待ACK或NAK的状态时,它不能从上层获得更多的数据;这就是说,rdt_send()事件不可能出现;仅当接收到ACK并离开该状态时才能发生这样的事件。因此,发送方将不会发送一块新数据,除非发送方确信接收方已正确接收当前分组。由于这种行为,这样的协议称为停等协议。

以上方式存在一个致命的缺陷,没有考虑ACK或NAK分组受损的可能性。解决这个新问题的一个简单方法(几乎所有现有的数据传输协议中,包括TCP,都采用了这种方法)是在数据分组中添加一新字段,让发送方对其数据分组编号,即将发送数据分组的序号放在该字段。于是,接收方只需要检查序号即可确认接收到的分组是否一次重传。对于停等协议这种简单情况,1比特序号就足够了,因为它可让接收方知道发送方是否正在重传前一个发送分组(接收到的分组需要与最近收到的分组序号相同),或是一个新分组(序号变化了)。因为目前我们假设信道不丢失分组,ACK和NAK分组本身不需要指明他们要确认的分组序号,发送方知道锁接收的ACK和NAK分组(无论是否是含糊不清的)是为响应其最近发送的数据分组而生成的。

现在假定除了特比受损外,底层信道还会丢包,这在今天的计算机网络中并不罕见。协议现在必须处理另外两个关注的问题:怎样检测丢包以及发生丢包后该做些什么。

发送方需要等待多久才能确定已丢失了某些东西呢?等待一个最坏情况的时延可能意味着要等待一段很长的时间,知道启动差错恢复为止。因此实践中采取的方法是发送方明智地选择一个时间值,以判断可能发生了丢包(尽管不能确保)。如果在这个时间内没有收到ACK,则重传该分组。注意到如果一个分组经历了一个特别大的时延,发送方可能会重传该分组,即使该数据分组及其ACK都没有丢失。这就在发送方到接收方的信道中引入了冗余数据分组的可能性。前面已经通过序号来处理冗余分组情况。

从发送方的观点来看,重传是一种万能灵药。发送方不知道是一个数据分组丢失,还是一个ACK丢失,或者只是改分组或ACK过度延时。在所有这些情况下,动作是同样的:重传。为了实现基于时间的重传机制,需要一个倒计时定时器,在一个给定的时间量过期后,可中断发送方。因此,发送方需要能做到:1每次发送一个分组(包括第一次分组和重传分组)时,便启动一个定时器。2响应定时器中断(采取适当的动作)3终止定时器。

现在我们归纳一下数据传输协议的要点。在检验和、序号、定时器、肯定和否定确定分组这些技术中,每种机制都在协议的运行中起到了必不可少的作用。

以上是一个功能正确的协议,但并非人人都对它的性能满意,特别是在今天的高速网络中更是如此。核心问题在于它是一个停等协议。~~~~~~~~~~下回分解
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  网络 通信 tcp