数据链路控制和协议

数据链路层负责实现点对点的流量和错误控制机制。


流量控制

当一个数据帧(Layer-2 数据)通过单一介质从一台主机发送到另一台主机时,要求发送方和接收方以相同的速度工作。 也就是说,发送方以接收方可以处理和接受数据的速度发送。 如果发送方或接收方的速度(硬件/软件)不同怎么办? 如果发送方发送速度过快,接收方可能会过载(淹没)并且数据可能会丢失。

可以部署两种机制来控制流量:

  • Stop 和 Wait

    这种流控机制强制发送方在发送数据帧后停止并等待,直到收到对发送的数据帧的确认。

    Stop and Wait
  • Sliding Window

    在这种流控制机制中,发送方和接收方都同意应发送确认的数据帧数。 正如我们所了解的,停止和等待流控制机制浪费资源,该协议试图尽可能地利用底层资源。


错误控制

当传输数据帧时,数据帧有可能在传输过程中丢失或接收到损坏。 在这两种情况下,接收方都没有收到正确的数据帧,并且发送方对任何丢失一无所知。在这种情况下,发送方和接收方都配备了一些协议,可以帮助他们检测传输错误,例如数据丢失- 框架。 因此,要么发送方重新发送数据帧,要么接收方可能请求重新发送前一个数据帧。

错误控制机制的要求:

  • 错误检测  - 发送方和接收方,无论是两者还是任何一方,都必须确定在传输过程中存在一些错误。

  • 肯定确认  - 当接收者收到正确的帧时,它应该确认它。

  • 否定 ACK  - 当接收方收到损坏的帧或重复的帧时,它会向发送方返回一个 NACK,发送方必须重新发送正确的帧。

  • 重传:  发送者维护一个时钟并设置一个超时时间。 如果在超时之前对先前传输的数据帧的确认没有到达,则发送方会重新传输该帧,认为该帧或其确认在传输过程中丢失了。

数据链路层可以部署三种可用的技术来通过自动重复请求 (ARQ) 控制错误:

  • Stop-and-wait ARQ

    Stop and Wait ARQ

    在 Stop-and-Wait ARQ 中可能会发生以下转换:

    • 发件人维护一个超时计数器。
    • 发送帧时,发送方会启动超时计数器。
    • 如果帧的确认及时到达,发送方将发送队列中的下一帧。
    • 如果没有及时收到确认,则发送方会假定帧或其确认在传输过程中丢失。 发送方重新传输帧并启动超时计数器。
    • 如果收到否定确认,则发送方重新传输帧。
  • Go-Back-N ARQ

    Stop-and-wait ARQ 机制并没有充分利用资源。当收到确认时,发送方处于空闲状态,什么也不做。 在 Go-Back-N ARQ 方法中,发送方和接收方都维护一个窗口。

    Go-back-n ARQ

    发送窗口大小使发送者可以发送多个帧而无需收到之前帧的确认。 接收窗口使接收器能够接收多个帧并确认它们。 接收方跟踪传入帧的序列号。

    当发送者发送窗口中的所有帧时,它会检查它收到肯定确认的序列号。 如果所有帧都得到肯定确认,则发送者发送下一组帧。 如果发送方发现它已经收到 NACK 或没有收到任何特定帧的 ACK,它会重新传输所有帧,之后它没有收到任何肯定的 ACK。

  • Selective Repeat ARQ

    在 Go-back-N ARQ 中,假设接收器没有任何缓冲区空间用于其窗口大小,并且必须在每个帧到来时对其进行处理。 这会强制发送方重新传输所有未确认的帧。

    在选择性重复 ARQ 中,接收方在跟踪序列号的同时,将帧缓存在内存中,并仅针对丢失或损坏的帧发送 NACK。

    在这种情况下,发送方只发送收到 NACK 的数据包。