到 localhost 的连接是通过内存还是磁盘复制的?

问题描述

AFAIK,有两种通过套接字进行 IPC 的方法。 Unix 套接字和 TCP/IP 套接字。

UNIX 域套接字知道它们在同一个系统上执行,因此它们可以避免一些检查和操作(如路由);这使得它们比 IP 套接字更快、更轻。它们还通过文件系统传输数据包,这意味着磁盘访问是该过程的自然组成部分(AFAIU,使用文件系统意味着什么)。

IP 套接字(尤其是 TCP/IP 套接字)是一种允许进程间通过网络进行通信的机制。在某些情况下,您可以使用 TCP/IP 套接字与运行在同一台计算机上的进程通信(通过使用环回接口)。

我的问题是:在后一种情况下,数据包的传输究竟发生在哪里?如果它们通过内存传递,虽然看起来有逻辑开销,IP 套接字实际上比 UNIX 套接字的性能更高。

有什么我遗漏的吗?我知道从逻辑上讲 IP 套接字会引入开销,我想了解在这两种情况下消息会发生什么。

解决方法

UNIX 域套接字 ... 它们还通过文件系统传输数据包,这意味着磁盘访问是该过程的自然组成部分

这是错误的。虽然文件系统中有一个特殊的套接字文件,但它仅通过使用文件系统权限来管理对套接字的访问。数据传输本身完全在内存中完成。

IP 套接字 ... 数据包的传输究竟发生在哪里?

也在内存中。

,

Unix 变体在文件系统上映射了很多与实际磁盘驱动器完全无关的内容。

您所描述的仅在内存中,只是分层和开销的数量不同。 Unix 套接字只使用 DOS,而 IP 套接字使用完整的网络堆栈。