题 Unix套接字和TCP / IP套接字有什么区别?


这是答案:

https://stackoverflow.com/questions/2482411/is-this-pdo-bug-fixed-now/2482424#2482424


81
2018-03-20 09:13






答案:


一个 UNIX套接字 是一种进程间通信机制,允许在同一台机器上运行的进程之间进行双向数据交换。

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

UNIX域套接字知道它们在同一系统上执行,因此它们可以避免一些检查和操作(如路由);这使得它们比IP套接字更快更轻。因此,如果您计划与同一主机上的进程通信,这是比IP套接字更好的选择。

编辑:按照 Nils Toedtmann的评论:UNIX域套接字受文件系统权限限制,而TCP套接字只能在数据包筛选器级别进行控制。


144
2018-03-20 09:39



也许补充一点,UNIX域套接字受文件系统权限的限制,而TCP套接字则不受。因此,规范哪些用户可以访问UNIX域套接字比使用TCP套接字更容易。 - Nils Toedtmann
@pQd,Dude你能称之为Unix IPC而不是Unix Sockets吗? - Pacerier
@Pacerier Unix套接字只是实现unix IPC(共享进程内存等)的一种方式,因此调用unix IPC的unix套接字是不正确的。 - fyquah95
TCP套接字也由Unix处理? TCP套接字是TCP协议规范的一部分,还是任何协议都可以使用IP套接字? - Federico
@Federico我发布了一个试图解决您的查询的答案,如果您需要更多深度,请发布一个新问题。 - Peter Green


您可以使用以下命令列出自己的计算机本地unix套接字:

netstat -a -p --unix

玩得开心!


21
2018-03-20 13:49



Windows上不存在Unix套接字。 netstat 但是可以在Windows上运行。 - Mark Tomlin
@apache,Windows中类似的东西称为“命名管道”。 - expert
命名管道也存在于Linux上。 - Sahil Singh
@expert,Windows中的命名管道等同于Unix中的命名管道。 Unix中的IPC套接字在Windows中没有等价 - Pacerier
注意一个区别是命名管道一次只能连接一个客户端(2个进程总共通信)。 UNIX套接字(如IP套接字)可以同时连接多个客户端,每个客户端都会收到单独的响应。 - peterflynn


Unix套接字和TCP / IP套接字有什么区别?

TCP / IP套接字用于跨TCP / IP网络进行通信。连接的TCP套接字由本地IP,本地端口,远程IP和远程端口的组合标识。侦听TCP套接字由本地端口和可能的本地IP标识。至少在Linux TCP / IP套接字上的AIUI总是导致TCP / IP数据包的生成和解码,即使客户端和服务器在同一台机器上也是如此。

另一方面,unix域套接字(有时缩短为unix套接字)在单个机器上运行。侦听套接字位于文件系统层次结构中,对文件系统权限的访问可以通过文件系统权限进行控制。

此外,接受Unix套接字上的连接的进程可以确定连接的进程的用户ID。这可以避免需要认证步骤。您可以告诉数据库服务器运行Web应用程序的用户可以访问数据库中相应的用户帐户,而不是为您的数据库服务器生成密码并在其中包含它的副本。


TCP套接字也由Unix处理?

当然

TCP套接字是TCP协议规范的一部分

Internet协议规范只关注线路上发生的事情,TCP规范包含Socket的定义,但该定义与“套接字API”使用该术语的方式不同。

我们知道它的“套接字API”是由BSD引入的,但后来被复制到所有地方并作为posix标准的一部分包含在内。 TCP和UDP套接字的基本内容在不同平台上往往大致相同,但更高级的东西和与操作系统其他部分交互的东西各不相同,例如在类Unix系统上,套接字由文件句柄识别并且可以由文件API读/写,在Windows上不是这种情况。

rfcs中已经记录了套接字API的一些扩展,但这些RFC只是“信息性的”。

或任何协议可以使用IP套接字?

当应用程序使用“socket”函数显式创建套接字(套接字也由accept函数创建)时,它传递三个参数,“domain”,“type”和“protocol”。在它们之间,这三个参数可用于选择许多不同类型的套接字。

  • domain选择使用中的协议/地址族,例如用于ipv4的AF_INET,用于ipv6的AF_INET6,用于unix文件系统路径的AF_Unix等。
  • type选择通信语义,主要是数据报和流,但也有其他更专业的类型。
  • protocol选择要使用的协议,如果设置为0,将使用Domain和type组合的默认协议。

3
2017-09-13 17:32