数据链路层的面向连接的服务如何确保每帧发送和接收“一次”?

网络工程 第 2 层 奥西
2022-02-03 07:05:53

我正在阅读 Tanenbaum 的计算机网络。它说在数据链路层可以有三种类型的服务。

  1. 未确认的无连接
  2. 确认无连接
  3. 确认面向连接

我可以理解,如果介质非常可靠,最好使用第一种类型,如果相反(无线),则使用第二种类型。但是我无法理解公认的面向连接的服务提供了公认的无连接服务所不能提供的东西。书上说

如果使用确认无连接服务,可以想象丢失确认可能导致帧被多次发送和接收,浪费带宽。

为什么面向连接的服务不会多次发送或接收帧?在这种情况下,确认也可能丢失。

3个回答

您正在阅读的内容不是在数据链路层,而是在传输层。应用程序(这里是题外话)决定使用什么。数字 2 和数字 3 之间的区别在于应用程序必须在数字 2 中提供确认,但数字 3 依赖于传输协议来为应用程序执行此操作。

一旦建立连接,丢失数据包/确认(ack)的机会在一定程度上下降。

更重要的是,因为有编号的帧,丢失的 ack 帧的影响较小。假设 ack 05 丢失。在超时之前,通常会发送和接收帧 06,并且由于接收者有帧 05,所以会发送 ack 06。在发送方收到 ack 06 后,发送方明白不需要重新传输帧 05(因此重置计时器)。此场景如图所示。 示例图像

该图像是传输层的示例(找不到用于 DL 层的示例)。想象一下帧级别的相同场景。

总而言之,这种情况将减少(并且在大多数情况下消除)由于丢失 ack 帧(除非连续的 ack 帧丢失)重新传输的需要。

我已经读到,当节点(当前)接收到数据包时,会向前一个节点发送一个确认,并且只有在发送下一个数据包之后......因此确认确保了可靠的数据传输