C中Raw套接字编程中的数据封装



在C中进行UDP/TCP原始套接字编程时,为什么不在数据封装中使用以太网头帧呢。为什么我们只使用udp/tcp头和ip头??

您需要考虑OSI模型。我们在指定TCP和UDP标头的位置发送原始数据,这些标头位于传输层或第4层。就寻址而言,这包括第3层或IP的部分,即网络层。

我们不必关心第二层。那就是以太网。我们甚至不能保证它会使用以太网。嵌入式系统可以通过ADSL、DOCSIS、光纤链路、wifi等进行发送。

另一个原因是网卡的硬件已经为第2层做了报头。由于电路和传输的固有复杂性,我们没有在数据包上放置自己的奇偶校验、流控制和其他东西。

如果需要,可以使用某些驱动程序编辑第2层帧。然而,由于路由器将使用自己的第2层帧重新传输它,因此它在超过一跳的情况下不会有用。此外,由于纠错细节的缺乏或错误,以及在较低级别上处理的事实,硬件更有可能丢弃格式错误的帧。

最新更新