我正在考虑 5 层模型。有据可查,TCP 是一种可靠的服务,而 IP 是尽力而为的交付,因此不可靠(参考RFC 792 - TCP)。此外,数据链路层是“可靠的”,因为它的 ARQ 机制保证了数据包的顺序传递 ( ref )。
我无法在较低的不可靠服务 (IP) 上发送可靠服务 (TCP) 数据包,而后者又在提供可靠性的层(链路层)上发送数据包。为什么我们不能取消链路层的可靠性,因为 IP 是不可靠的?
我正在考虑 5 层模型。有据可查,TCP 是一种可靠的服务,而 IP 是尽力而为的交付,因此不可靠(参考RFC 792 - TCP)。此外,数据链路层是“可靠的”,因为它的 ARQ 机制保证了数据包的顺序传递 ( ref )。
我无法在较低的不可靠服务 (IP) 上发送可靠服务 (TCP) 数据包,而后者又在提供可靠性的层(链路层)上发送数据包。为什么我们不能取消链路层的可靠性,因为 IP 是不可靠的?
问题是您在每个层本身都是一个独立的自治实体的概念下运作。了解 IP 不是现有的唯一数据包传输协议,它恰好是最常见的一种。还要理解这些“层”只是抽象工具 - 需要注意的是,每个“层”都依赖于它下面的某些功能,并且堆栈下方的层可以移交某些职责(即可靠的数据传输)在适当的时候连接到它们上面的层,以保持低开销和高性能。每个较低层都封装从其上层发送到线路的数据,而较低层在将数据返回堆栈到应用程序的途中解封装。
您链接的有关数据链路层的论文甚至指出,虽然其交付机制旨在可靠,但它们仍然是尽力而为,并且假设更高层协议(即 TCP)将在必要时处理重传。
如果您查看课堂笔记,您会看到 #4 说“也许”。一些数据链路技术是可靠的,大多数不是。原因大多是历史原因,因为许多技术是为语音创建的,然后又重新用于数据。我们将保证交付留给更高层的原因是许多应用程序不需要它,并且将它放在较低级别会增加无用处的开销。
TCP 使用特殊规则使 IP 可靠,即使否则它会不可靠。
似乎您正在寻找更多的概念性理解,所以我将举一个例子,而不实际提及 TCP 的真正内部工作原理。
假设你和我正在用双向收音机(或对讲机)聊天。我可以按下传输按钮并说点什么,但我无法确定你收到了什么。在这个例子中,对讲机是“IP”——一个不可靠的协议。
假设你和我决定做一些超越 IP 的事情,并在使用我们的双向无线电时采用以下规则:
如果在任何时候,我们中的一个人执行了上述操作,但在 5 秒后没有听到预期的响应,我们将重复我们说的最后一件事。
这些“规则集”实际上是 TCP 所要求的。遵循这些规则,我们可以使原本不可靠的通信介质(双向无线电/IP)成为可靠的通信方法(TCP)。
所以正如其他人所说,IP 的“不可靠性”并不能否定 TCP 的“可靠性”。TCP 只是使用带有智能确认的 IP 来使使用 TCP/IP 的通信可靠。TCP 本身无法处理从一台主机到另一台主机的发送数据包,它所能做的就是将某些规则应用于“端到端”交付方案(如 IP),以使该交付方案更可靠。
希望这可以帮助。