有一段引文我忘了很久以前从哪本网络书中抄下来的了。
一些链路层协议在链路基础上提供可靠的传输,即从发送节点通过一条链路到接收节点。请注意,此可靠交付服务与 TCP 的可靠交付服务不同,TCP 提供可靠交付从一个端系统到另一个端系统。
我们知道TCP是传输层协议,而不是链路层协议。
我想知道如何理解链接协议和 TCP 的可靠传输之间的区别(如粗体所示)?谢谢!
答案1
节点到节点也称为跳. 如果某一跳本身就不可靠,例如无线链路,那么确保某一跳的可靠性,而将数据路径中剩余的跳数保留为未知可靠性,将是有益的。无线协议(例如 802.11 和 802.15.4,例如 ZigBee)可能必须添加 Ack/Nak 和重试功能,才能实现最小可靠性水平与有线网络相似。使用星型配置的现代有线 802.3 以太网通常在一跳上非常可靠,即使没有任何 Ack/Nak 开销。另一方面,无线网络可能非常不可靠,可靠的链路层协议可以增强(或至少不会降低)混合有线和无线网络的吞吐量。
TCP 的可靠性(尽管使用(不可靠的)IP 作为其底层协议)基本上是通过使用接收方的 Ack 和 Nak 响应以及发送方的超时来确定数据包是否已送达。Nak 响应或响应超时需要重新传输原始数据包。数据包还标有序列号,以检测丢失的数据包或无序到达,并对收到的数据包进行正确的排序。
链路层协议可以通过采用类似的 Ack/Nak/超时技术来提高其可靠性。尽管让多个协议层执行此操作似乎有些多余,但整体网络性能可能会受益,因为重新传输(必要时)将只局限于发生消息故障的链路。
答案2
为什么需要更高级别的(额外)可靠性措施:正确性。即使链路层有完美的可靠性,数据包仍然可能丢失在中间主机(队列溢出、路由器崩溃等)。为什么在链路层:效率。
答案3
“可靠传输”的含义没有区别。无论在哪个协议层,接收方都必须确认收到数据包,而发送方如果没有收到确认,则必须重新传输。没有这个就没有可靠性。唯一的不同在于层。TCP 的优势在于运行在 IP 之上,允许数据包通过多跳路由到达最终目的地。在链路层,运行在那里的协议只关注单跳。
答案4
“可靠”对每个人来说含义并不相同。对于 TCP 而言,可靠意味着如果您在有损网络或损坏和/或重新排序数据包的网络上使用它,那么您将不会收到乱码数据,并且最终基本上会收到正确的数据。
问题是 TCP 很糟糕,虽然在这些情况下它可以工作,但它的速度非常慢。因此,当您在经常丢失 0.5% 数据包的链接上使用原始 TCP 时,您将获得比单个链接上的理论数据速率 (link_data_rate / (1 - 数据包丢失率)) 低得多的性能,因为 TCP 假设所有数据包丢失都是由拥塞引起的。
TCP 是为很少丢失数据包的网络设计的,因此 TCP 只需容忍数据包丢失。
第二层可靠链路的任务之一主要是弥补 TCP 的缺陷。它们不应该像 TCP 那样 100% 可靠。例如,如果重传次数超过某个阈值,802.11 会接受丢失数据包,而 TCP 则不会,并且会一直重传,直到应用程序或用户认为足够了。
第 2 层上的可靠链路主要是为了提高速度。例如,在 802.11 上,节点也使用 ack 机制,以便在无线链路降级时降低调制速度。当 802.11 无法执行 ACK(例如对于多播帧)时,它通常使用最低调制速率(通常为 1 Mb/s)来获得最大的可靠性,但速度会大大降低。
有时,当您的网络包含许多高度不可靠的链接时,您可能需要第 2 层可靠性,否则整个路径可能包含许多不可靠的链接,并且路径数据包丢失率可能会变得太高而无法使用。但在您的典型网络中,情况通常并非如此。
从历史上看,TCP 之所以能流行起来,是因为它允许路由器丢失数据包。因此路由器更简单、更快速,总体结果是在端点处理可靠性比在核心网络中处理可靠性具有更好的性能。