当我在查找 AF_INET
的含义时,我了解到还有另一种称为 UNIX 域套接字
的协议族。这是我阅读的 维基链接。
我不理解下面这段话的意思:
UNIX 域套接字使用文件系统作为它们的地址命名空间。它们被进程引用作为文件系统中的索引节点 (inode)。这允许两个进程打开相同的套接字以进行通信。然而,通信完全在操作系统内核中进行。
如果我想使用 SSH 或 FTP
,我应该使用哪个协议族: AF_INET 或 AF_UNIX
?我有点困惑。
当我在查找 AF_INET
的含义时,我了解到还有另一种称为 UNIX 域套接字
的协议族。这是我阅读的 维基链接。
我不理解下面这段话的意思:
UNIX 域套接字使用文件系统作为它们的地址命名空间。它们被进程引用作为文件系统中的索引节点 (inode)。这允许两个进程打开相同的套接字以进行通信。然而,通信完全在操作系统内核中进行。
如果我想使用 SSH 或 FTP
,我应该使用哪个协议族: AF_INET 或 AF_UNIX
?我有点困惑。
如果您想与远程主机通信,那么您可能需要一个 INET
套接字。
不同之处在于,INET
套接字绑定到IP地址-端口元组,而 UNIX
套接字则“绑定”到文件系统上的特殊文件。通常,只有运行在同一台计算机上的进程才能通过后者进行通信。
那么,为什么要使用 UNIX
套接字?正是出于上述原因:在同一主机上的进程间通信,是通过回环的轻量级替代品,相对于 INET
套接字。
事实上,INET
套接字位于完整 TCP/IP 协议栈的顶部,具有处理流量拥塞算法、退避等问题的功能。由于所有内容都被设计为局限于本地计算机,所以 UNIX
套接字不必处理任何这些问题,因此它的代码更简单,通信更快速。当然,在重载下(例如在 Nginx 后面反向代理应用服务器(Node.js、Tornado 等)时),您可能只会在重载下才会注意到差异。
UNIX
套接字完成的。 - Stefano Sanfilippo域套接字
的应用程序代码的完美示例是X服务器组件
。如果你在Linux上使用GNOME
或KDE
,你会看到在/tmp
中会有套接字。ls -la /tmp
将显示套接字,或者你甚至可以使用find /tmp -type s
。Remy的解释是为什么X服务器组件
使用域套接字
的原因。 - alvits