困惑:发送方如何知道他的信息(物理层中的比特、数据链路层中的帧、网络层中的数据包)已正确传输到接收方?我知道在数据链路层中负责确保通过发送确认成功传输帧,但我只是对三层如何在解决这个问题时相互通信感到困惑。
跨 OSI 层混淆的错误检测
网络工程
网络
兰
层2
万
奥西
2021-07-10 20:12:49
3个回答
我知道在数据链路层中负责通过发送确认来确保帧已成功传输
那是不正确的。很少有数据链路协议可以做到这一点。传输协议通常是发生确认的地方,但并非所有传输协议都这样做。TCP 有,但 UDP 没有。使用无连接传输协议,这取决于应用程序。
不同层中的协议并不真正了解彼此。协议头中有一些字段(例如以太网的 EtherType 或 IPv4 的协议)告诉协议它应该将其协议的有效负载发送到哪个进程。
这不能轻易回答。
应用程序可以自行确保交付,也可以依靠传输协议来处理。网络层及以下协议通常仅确保完整性(通过校验和)但不保证交付 - 有一些例外,例如 802.11。
如果您查看第 2 层帧,您会看到有一个字段FCS(Frame Check Sequence)。在将帧发送到另一端时,对带有数字的帧执行数学算法CRC(循环冗余校验),并将该数字存储在帧的 FCS 字段中。当另一端收到帧时,再次执行相同的算法。数学算法再次提出了一个数字。
然后比较获得的数字(传输前和接收后)。如果它们相等,则意味着数据是安全的,并且没有发生数据损坏。但是,如果两者不相等,则意味着发生了数据损坏,因此另一端会丢弃该帧。