Socket
從原始套接字讀取的數據中不存在物理層標頭?
我已經閱讀了有關 RAW 套接字的資訊,它們是 UNIX 域套接字,並且通常不會像 TCP 或 UDP 那樣通過線路。它們用於程序間通信。它們還用於實現新的傳輸層協議,也用於 ICMP(用於 ping)。
unix domain sockets
故意存在以減少傳輸成本。它們允許在應用程序之間交換數據,因此與[tcp/ip model][1]
. 不需要傳輸協議來確保排序、可靠性或流量控制。您不需要網路訪問層,因為消息傳輸的接收者是同一台機器中的一個程序。
原始套接字和 Unix 套接字不是一回事。原始 IP 套接字使您可以直接訪問 IP 數據包。它確實通過網路(或至少通過 IP 層)。所有發送或接收不是 UDP 或 TCP 連接的 IP 數據包的應用程序(例如 ping)都必須使用原始套接字。
Unix 域套接字是機器本地的,它是在同一台機器上執行的程序之間的一種通信方式。
兩種類型的套接字都不能讓您訪問物理層。Unix 域套接字沒有物理層,原始 IP 套接字承載 IP 數據包。訪問物理層需要不同類型的套接字,既不是 IP 也不是 Unix。這有時可能被稱為“原始”套接字,但這個名稱相當具有誤導性,因為它與原始 IP 套接字和 Unix 套接字一樣不同。在 Linux 下,乙太網或其他物理層數據包(例如用於 ARP)是通過netlink套接字訪問的。