Unix 域套接字与网络有何关系?

Unix 域套接字与网络有何关系?

我知道网络也使用套接字,但我想知道 Unix 域 (IPC) 套接字是否以某种方式与网络层相关。如果是这样,这是否以某种方式使用网络硬件?它像环回一样工作吗?如果不是,那么为什么netstat在 Linux 中列出?

答案1

Unix 域套接字与常规套接字具有相同的语义,但仅此而已,底层代码与网络层无关。它们为同一主机上的进程(IPC)提供了一种有效的通信方式,其中需要类似网络的语义(侦听、连接……)

使用 Unix 域套接字与 TCP 套接字建立连接的成本是多少例如:

通过 TCP 套接字发送的消息必须通过网络堆栈一直到达环回接口(在 Unix 风格的系统中,环回接口是一种虚拟网络接口设备,通常称为“lo”),然后再返回到接收套接字。网络堆栈代码会添加 TCP 和 IP 标头,做出路由决策,通过“lo”将数据包转发给自己,然后进行更多路由并剥离标头。此外,由于 TCP 是一种网络协议,因此其连接建立部分具有各种额外的复杂性,以处理丢失的数据包。对您来说最重要的是,TCP 必须发送三条消息才能建立连接(SYN、SYN-ACK 和 ACK)。

对于 Unix 套接字来说,内核可以绕过所有这些,只在两个进程之间传递数据,因此开销较小。

谷歌搜索你可能会遇到一些基准

相关内容