基本数据链路层协议

一个乌托邦式的单工协议

在这个协议中,数据只能单向传输。发送方和接收方的网络层总是处于准备就绪 状态。数据处理的时间忽略不计。可用的缓存空间无穷大。最强的一个条件是数据链路层 之间的通信信道永远不会损坏帧或者丢失帧。这个完全不现实的协议我们给它一个昵称“乌托邦”( Utopia)

无错信道上的单工停-等协议

处理这样的问题:

发送方以高于接收方能处理到达帧的速度发送帧,导致 接收方被淹没。这种情形实际上很容易出现,因此协议是否能够防止它非常重要。然而, 我们仍然假设通信信道不会出错,并且数据流量还是单工的。

解决方案:

  1. 建立足够强大的接收器,使其强大到能处理一个接着一个帧组成的连续流。
  2. 让接收方给发送方提供反馈信息。接收方将数据包传 递给网络层之后给发送方返回一个小的哑帧,实际上这一帧的作用是给发送方一个许可, 允许它发送下一帧。发送方在发出一帧之后,根据协议要求,它必须等待一段时间直到短 哑帧(即确认〉到达。

发送方发送一帧,等待对方确认到达后才能继续发送,这样的协议称为停·等式协议

有错信道上的单工停-等协议

常见问题的情形:

通信信道可能会出错。帧可能会被损坏,也可 能完全被丢失。然而,我们假设,如果一帧在传输过程中被损坏,则接收方硬件在计算校验和时能检测出来。如果一帧被损坏了之后校验和仍然是正确的(这种情况不太可能会出 现〉,那么这个协议(以及所有其他的协议〉将会失败(即给网络层递交了一个不正确的数据包〉。

解决方案:

在一个协议中,发送方在前移到下一个数据 之前必须等待一个肯定确认,这样的协议称为自动重复请求( ARQ , Automatic Repeat reQuest)或带有重传的肯定确认( PAR, Positive Acknowledgement with Retransmission)。

当发送方和接收方的数据链路层处于等待状态 时,两者都用一个变量记录下了有关的值。发送方在 next 企ame to send 中记录了下一个 要发送的帧的序号:接收方则在企ame_expected 中记录了下一个期望接收的序号。每个协 议在进入无限循环之前都有一个简短的初始化阶段。

发送方在发出一帧后启动计时器。如果计时器己经在运行,则将它重置,以便等待另 一个完整的超时时间间隔。在选择超时值时,应该保证它足够长,确保帧到达接收方,按照最坏的情形被接收方所处理,然后确认帧被返回发送方所需要的全部操作时间。只有当 这段时间间隔过去之后,发送方才可以假定原先的数据帧或者它的确认帧己经被丢失,于 是重发原先的数据帧。如果超时间隔设置得太短,发送方将会发送一些不必要的帧。虽然 这些额外的帧不会影响协议的正确性,但是会严重损害协议的性能。

当一个有效帧到达接收方时,接收方首先检查它的序号,确定是否为重复数据包。如 果不是,则接受该数据包并将它传递给网络层,然后生成二个确认帧。重复帧和受损帧都 不会被传递给网络层,但它们的到来会导致最后一个正确接收到的数据帧的确认被重复发 送,返回给发送方,以便发送方做出前进到下一帧或重发那个受损帧的决策。