我了解在 TCP/IP 协议套件下,错误控制、流量控制和其他此类服务由传输层和数据链路层提供。
我的疑问是特定于使用滑动窗口协议(由传输层使用,如果我没记错的话)和停止等待 ARQ(由 DLL 使用)的错误控制。这两个过程是否同时发生(在各个层的上下文中)?还是其中之一?
我也明白,对于传输层,我们关心的是任一端点的帧,而对于 DLL,我们关心的是帧所产生的每一跳的帧。因此,我的困惑是:当我们在滑动窗口和停止等待 ARQ 中引用帧时,我们在谈论哪个层的 PDU?这两个过程是如何发生的?
我了解在 TCP/IP 协议套件下,错误控制、流量控制和其他此类服务由传输层和数据链路层提供。
我的疑问是特定于使用滑动窗口协议(由传输层使用,如果我没记错的话)和停止等待 ARQ(由 DLL 使用)的错误控制。这两个过程是否同时发生(在各个层的上下文中)?还是其中之一?
我也明白,对于传输层,我们关心的是任一端点的帧,而对于 DLL,我们关心的是帧所产生的每一跳的帧。因此,我的困惑是:当我们在滑动窗口和停止等待 ARQ 中引用帧时,我们在谈论哪个层的 PDU?这两个过程是如何发生的?
当您说错误控制时,我认为您指的是错误检测和纠正。有理论协议和现实世界的协议。
在现实世界中(在 2018 年您将遇到的绝大多数网络中),主要的数据链路协议是以太网 (802.3) 和 Wi-Fi (802.11)。大型运营商仍在使用其他 WAN 协议,例如 PoS,但它们的使用正在减弱。
除了丢弃损坏的帧(正如@ronmaupin 指出的那样)之外,以太网和 WiFi 都没有任何错误控制。如果一个帧被破坏,它会被简单地丢弃而不通知发送者或接收者。由更高级别的协议执行任何错误恢复。
有(或者我应该说是)一些确实进行错误检测的 DL 协议,例如 X.25,但这些基本上已经过时了。随着网络可靠性的提高,它们不再需要。我已经有 20 多年没有见过他们了。
但是对于所有协议,层都是独立的。DL 协议不知道它们承载的是什么上层协议,上层(如 TCP)没有关于如何传输段的信息。
在传输层,TCP 只关心丢失数据包的端到端重传,以及促进这一点所需的习惯确认。我更愿意称之为“错误恢复”而不是控制机制。这种端到端恢复仅在底层网络的错误率非常低并因此丢弃数据包时才有效。IIRC,TCP/IP 最低要求 RFC 要求链路提供 1E-9 或更低的错误丢弃率。
为此,如果物理网络链路的数据包错误率已经低于 1E-9 或更高,它需要做的就是验证它从线路接收到的数据包,并丢弃任何由于验证失败而导致失败的数据包过渡错误。
对于没有按要求执行的链路,需要实施额外的错误恢复机制,使三层感知的错误率合规(否则传输发起的错误恢复会导致用户体验不佳)。
为此,无线以太网(又名 Wi-Fi)实现了前向纠错(FEC)和链路级重传机制的组合。
一些最新的有线以太网变体,例如 10Gbps 10GbaseKR 和所有 25Gbps、50Gbps、100Gbps 标准也实施了 FEC 层,其代价是略微降低了有效吞吐量,降低了有效数据包错误率以符合要求。
Fos 历史准确性我还要补充一点,确实 X.25(以及帧中继)实现了链路级(希望到跳)重传机制以促进错误恢复,原因是这些协议旨在用于非常长的无条件双绞铜线的顶部,相同的设计和安装用于承载 3.8KHz 带宽的模拟语音,如果没有这些链路级错误恢复机制,将不会表现出足够低的数据包错误率。FEC 成本太高(由于基本传输率低)。