在 C 中进行 UDP/TCP 原始套接字编程时,我们为什么不在数据封装中使用以太网头帧。为什么我们只使用 udp/tcp 标头和 ip 标头?
问问题
929 次
1 回答
3
您需要考虑 OSI 模型。我们正在发送原始数据,我们在其中指定 TCP 和 UDP 标头,它们位于传输层或第 4 层。这包括第 3 层或 IP 的部分,就寻址而言,即网络层。
我们不需要关心第 2 层。那是以太网。我们不能保证它甚至会使用以太网。嵌入式系统可以通过 ADSL、DOCSIS、光纤链路、wifi 等发送。
另一个原因是网卡的硬件已经为第 2 层做了标头。由于电路和传输的固有复杂性,我们没有在我们的数据包上放置我们自己的奇偶校验、流控制和其他东西。
如果需要,您可以使用某些驱动程序编辑第 2 层帧。但是,由于路由器将使用自己的第 2 层帧重新传输它,因此它不会对超过一跳有用。此外,由于错误纠正细节的缺失或错误,以及由于处理级别较低,畸形帧更有可能被硬件丢弃。
于 2013-07-22T18:58:12.050 回答