Networking 数据链路层和传输层

Networking 数据链路层和传输层,networking,tcp,data-link-layer,Networking,Tcp,Data Link Layer,当传输层提供差错控制时,数据链路层的差错控制需要什么?这两种错误控制之间的区别是什么?传输层数据可以分解为许多数据链路层帧/数据包 因此,即使没有任何数据链路错误,传输层流/包也可能损坏编辑:这是因为传输层路径通常由许多数据链路层跃点组成,例如: Host1 <----> switch1 <----> switch2 <----> Host2 Host1交换机1交换机2主机2 如果数据包在switch1和switch2之间丢失,则switch2Host2链

当传输层提供差错控制时,数据链路层的差错控制需要什么?这两种错误控制之间的区别是什么?

传输层数据可以分解为许多数据链路层帧/数据包

因此,即使没有任何数据链路错误,传输层流/包也可能损坏编辑:这是因为传输层路径通常由许多数据链路层跃点组成,例如:

Host1 <----> switch1 <----> switch2 <----> Host2
Host1交换机1交换机2主机2
如果数据包在
switch1
switch2
之间丢失,则
switch2
Host2
链路上不会记录任何错误,但相应的传输层流将损坏


另一方面-一旦遇到数据链路错误,就可以在不浪费资源的情况下删除/重新启动传输层传输。

假设校验和正确,此结果意味着数据在传输过程中损坏。 此外,损坏不是发生在传输链路上(CRC将捕获到该链路),而是发生在一个中间系统(路由器)中 和网桥)或发送或接收主机


这实际上取决于协议而不是层,但假设您指的是TCP

TCP的错误检测是最小的,其设计更像是一种完整性检查,而不是任何可靠的错误检测。您看不到这一点的原因是,以太网、PPP、FrameRelay等数据链路层具有非常、非常健壮的错误检测算法,因此TCP协议几乎没有要检测的传输错误

如果您有一个具有健壮错误检测的不同传输层协议,那么您就不需要在较低级别严格使用它。尽可能低的丢弃堆栈中的错误会带来好处,主要是与性能和资源使用相关的


请注意,由于ram故障等原因,错误可能会爬到传输层上方,因此,如果数据非常非常重要,那么您应该在应用程序中包括错误检查。

这是因为数据链路层专门处理位级错误校正。它接收接收计算机已经拥有的数据包,并确定传输过程中是否发生错误以及数据是否完整或损坏。但是,需要有额外的控制措施,以确保系统知道所有数据包都已到达。这称为端到端错误控制,是传输层的责任。传输层不关心有效负载中的数据是好是坏。这就是数据链的工作。传输只关心它是否得到了它应该得到的每个数据包,以及它们是否以正确的顺序到达。传输层检测数据包到达数据链路层之前在传输端发生的数据包缺失或损坏

有关更多详细信息,请参阅


在错误率高的嘈杂信道中,如无线网络,错误校正在数据链路层完成


在错误率较低的健壮网络(如局域网)中,纠错在传输层完成,因此重传成本最小化。

首先,从端到端重传数据包是一项昂贵的任务,可能需要大量时间。在每个链路上进行这些检查可以减少重传数据包必须传输的“长度”。考虑一个在端到端路径上容易出错的链接时的情况。这个链接可能会导致许多数据包丢失,因为它是不可靠的。如果没有任何链路层可靠性,则只能通过传输层协议处理重传。因此,格式错误的数据包必须到达其目的地,发送NACK(或等效物),然后才能进行重新传输。另一方面,如果链路层具有内置的可靠性,则数据包将仅在不可靠链路上立即重新传输

其次,链路层可靠性仅依赖于位检查,而传输层可靠性也利用排序和确认。考虑这样一种情况,即由于MTU太小,需要传递给网络层的片段需要被分割。链路层可靠性将只检查每个单独片段的完整性。如果一个片段丢失,链路层可能不会发出警报。另一方面,由于传输层需要所有碎片化的数据包,所以传输层将被删除


最后,链路层不仅在其有效负载内承载TCP和其他传输层协议。因此,对于没有内置可靠性的协议,内置可靠性是合适的,这样格式错误的有效负载就不会上升到堆栈上。

您能详细说明这是如何实现的吗?如果每个数据包到达时都没有错误,那么整个消息怎么可能包含错误?@Shookie查看编辑后的答案,了解可能的情况,谢谢!但是你举的例子与丢失一个数据包有关。我以为你是在暗示所有数据包都可能到达目的地,并且仍然会损坏(经过数据链路层之后)。我的意思是-传输层数据可能会损坏,如果没有观察到数据链路错误。因此,两层上的错误控制都是有用的。很少有数据链路协议能够进行任何错误纠正。大多数都会进行错误检测,它们会删除任何有错误的帧,但不会纠正错误。