传输层数据可以被分解为许多数据链路层的帧/包。
因此,即使没有任何数据链路错误,传输层流/包也可能会损坏。 编辑:这是因为传输层路径通常由许多数据链路层跳(例如)组成:
Host1 <----> switch1 <----> switch2 <----> Host2
switch1
和switch2
之间丢失了一个数据包,那么在switch2
和Host2
之间的连接上不会记录任何错误,但相应的传输层流将被损坏。这实际上取决于协议而不是层,但假设您指的是TCP...
TCP的错误检测很少,更多地设计为完整性检查,而不是任何可靠的错误检测。您在实践中看不到这一点的原因是数据链路层(如以太网、PPP、FrameRelay等)具有更强大的错误检测算法,因此TCP协议几乎没有传输错误需要检测。
如果您使用具有强大错误检测功能的不同传输层协议,则在较低级别上就不需要严格执行它。在尽可能低的堆栈中丢弃错误会带来好处,主要与性能和资源使用相关。
请注意,由于RAM故障等原因,错误可能会出现在传输层以上,因此如果数据真的非常重要,则应在应用程序中包含错误检查。
http://conferences.sigcomm.org/sigcomm/2000/conf/paper/sigcomm2000-9-1.pdf
最后,链路层不仅在其有效载荷中承载TCP和其他传输层协议。因此,为那些没有内置可靠性的协议构建可靠性是合适的,以防止畸形的有效载荷上升到堆栈。