从原始套接字读取的数据中不存在物理层标头?

从原始套接字读取的数据中不存在物理层标头?

我读过有关 RAW 套接字的信息,它们是 UNIX 域套接字,通常不会像 TCP 或 UDP 那样通过网络传输。它们用于进程间通信。它们还用于实现新的传输层协议,并且还用于 ICMP(用于 ping)。

答案1

unix domain sockets故意存在以减少传输开销。它们允许在应用程序之间交换数据,因此与[tcp/ip model][1].不需要传输协议来确保顺序、可靠性或流量控制。您不需要网络访问层,因为消息传输的接收者是同一台计算机中的进程。

答案2

原始套接字和 Unix 套接字不是一回事。原始 IP 套接字使您可以直接访问 IP 数据包。它确实通过线路(或至少通过 IP 层)。所有发送或接收非 UDP 或 TCP 连接的 IP 数据包的应用程序(例如 ping)都必须使用原始套接字。

Unix域套接字是机器本地的,它是同一机器上运行的进程之间的通信手段。

这两种类型的套接字都无法让您访问物理层。 Unix 域套接字没有物理层,原始 IP 套接字携带 IP 数据包。访问物理层需要不同类型的套接字,既不是IP也不是Unix。有时这可能被称为“原始”套接字,但这个名称相当具有误导性,因为它与原始 IP 套接字不同,就像它与 Unix 套接字不同一样。在Linux下,以太网或其他物理层数据包(例如ARP)通过以下方式访问网络链接插座。

相关内容