UNIX 域套接字和 Internet 套接字之间的差异

UNIX 域套接字和 Internet 套接字之间的差异

我认为区别在于

  • 通过提供文件路径而不是目标 IP/端口来连接到服务器
  • 不存在所谓的源端口。此外,源 IP 只能是本地主机。

我认为每个打开的 UNIX 域套接字仍然具有相同的两个流,即输入流和输出流。

这一切都正确吗?

另外,连接到 UNIX 域套接字时是否需要知道该文件?非 root 用户可以找到 UNIX 域套接字并连接到它们吗?

答案1

是的,UNIX 域套接字使用文件系统作为地址名称空间,即文件路径,而不是 URL/IP 和端口。套接字手册页

插座 创建 Internet 域 TCP 或 UNIX 域流套接字并将其连接到 stdin 和 stdout。主机参数可以是点表示法的 Internet 号码(如“130.149.28.10”)或域名。在这种情况下,必须能够使用 gethostbyname 将名称解析为有效的 Internet 地址。端口参数可以是端口号或服务名称,可以通过 getservbyname 映射到端口号。如果要创建 UNIX 域套接字而不是 Internet 套接字,请指定路径而不是 Internet(规范域名或点表示法)主机。如果主机名至少包含一个斜杠,则将其视为路径名。即,如果要在当前目录中创建或连接套接字,请使用 ./filename 指定连接点。

对于本地进程间通信来说,Unix 域套接字比 IP 套接字更快,请参阅这里这里或这个相关问题

答案2

在Linux上netstat -x揭示。

相关内容