数据链路控制和协议
数据链路层负责实现点对点流量和错误控制机制。
流量控制
当数据帧(第 2 层数据)通过单一介质从一台主机发送到另一台主机时,要求发送方和接收方以相同的速度工作。也就是说,发送方以接收方可以处理和接受数据的速度发送数据。如果发送方或接收方的速度(硬件/软件)不同怎么办?如果发送方发送速度过快,接收方可能会超载(淹没),数据可能会丢失。
可以部署两种机制来控制流量:
停止并等待
滑动窗口
在此流量控制机制中,发送方和接收方都同意应发送确认后的数据帧数量。正如我们所知,停止和等待流控制机制浪费资源,该协议尝试尽可能多地利用底层资源。
错误控制
当传输数据帧时,数据帧可能会在传输过程中丢失或接收时损坏。在这两种情况下,接收方都没有收到正确的数据帧,而发送方也不知道任何丢失的情况。在这种情况下,发送方和接收方都配备了一些协议,帮助他们检测传输错误,例如数据帧丢失。因此,发送方可以重新传输数据帧,或者接收方可以请求重新发送前一个数据帧。
错误控制机制的要求:
错误检测 - 发送方和接收方(无论是两者还是其中之一)必须确定传输过程中是否存在错误。
肯定 ACK - 当接收方收到正确的帧时,它应该确认它。
否定 ACK - 当接收方收到损坏的帧或重复的帧时,它会向发送方发送回 NACK,并且发送方必须重新传输正确的帧。
重传: 发送方维护时钟并设置超时期限。如果先前传输的数据帧的确认未在超时之前到达,则发送方将重新传输该帧,认为该帧或其确认在传输中丢失。
数据链路层可以部署三种技术来通过自动重复请求 (ARQ) 控制错误:
停止并等待 ARQ
停止并等待 ARQ 中可能发生以下转换:
- 发送方维护超时计数器。
- 发送帧时,发送方启动超时计数器。
- 如果帧确认及时到达,发送方传输队列中的下一帧。
- 如果确认未及时到达,则发送方认为帧或其确认在传输过程中丢失。发送方重新传输该帧并启动超时计数器。
- 如果收到否定确认,则发送方重新传输该帧。
Go-back-N ARQ
停止并等待 ARQ 机制无法充分利用资源。收到确认后,发送方处于空闲状态,不执行任何操作。在 Go-Back-N ARQ 方法中,发送方和接收方都维护一个窗口。
发送窗口大小使发送方能够发送多个帧,而无需收到前一个帧的确认。接收窗口使接收方能够接收多个帧并确认它们。接收方会跟踪传入帧的序列号。
当发送方发送窗口中的所有帧时,它会检查已收到肯定确认的序列号。如果所有帧都得到肯定确认,则发送方发送下一组帧。如果发送方发现它已收到 NACK 或未收到特定帧的任何 ACK,它会重新传输所有未收到任何肯定 ACK 的帧。
选择性重复 ARQ
在 Go-back-N ARQ 中,假设接收方没有任何缓冲空间来容纳其窗口大小,并且必须在收到每个帧时对其进行处理。这会强制发送方重新传输所有未确认的帧。
在选择性重复 ARQ 中,接收方在跟踪序列号的同时,将帧缓冲在内存中,并仅对丢失或损坏的帧发送 NACK。
在这种情况下,发送方只发送收到 NACK 的数据包。