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


Answers:


191

UNIX插座是一个进程间通信机制,允许在相同的机器上运行的进程之间的双向数据交换。

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

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

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


12
也许可以添加UNIX域套接字受文件系统权限的约束,而TCP套接字则不受文件系统许可的约束。结果,与TCP套接字相比,管理哪些用户可以访问UNIX域套接字要容易得多。
尼尔斯·托德曼

@ pQd,Dude,您可以将其称为Unix IPC而不是Unix套接字吗?
Pacerier '17

4
@Pacerier Unix套接字只是实现unix IPC(在进程间共享内存)的一种方法,因此将unix套接字称为unix IPC是不正确的。
fyquah95 '17

TCP套接字也由Unix处理吗?TCP套接字是TCP协议规范的一部分,或者任何协议都可以使用IP套接字?
Federico

@Federico我发布了一个答案,尝试解决您的查询,如果您需要更多的深度,请发布一个新问题。
彼得·格林

28

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

netstat -a -p --unix

玩得开心!


9
Windows上不存在Unix套接字。netstat但是在Windows上可以使用。
马克·汤姆林

4
@apache,在Windows中类似的东西叫做“命名管道”。
专家

5
在Linux上也存在命名管道。
萨希尔·辛格

9
@ expert,Windows中的命名管道等于Unix中的命名管道。Unix中的IPC套接字在Windows中不具有等效性
Pacerier's

2
Windows 10支持Unix套接字。有一些限制,但可以使用:blogs.msdn.microsoft.com/commandline/2017/12/19/…–
泰森(Tyson)

12

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

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

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

此外,在Unix套接字上接受连接的进程可以确定所连接进程的用户ID。这样可以避免进行身份验证步骤。无需为数据库服务器生成密码并将其副本包含在webapp的代码中,您只需告诉数据库服务器运行webapp的用户有权访问数据库中的相应用户帐户即可。


TCP套接字也由Unix处理吗?

当然

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

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

据我们所知,“ socket API”是BSD引入的,后来被复制到各处,并作为posix标准的一部分包含在内。TCP和UDP套接字的基本内容在不同平台上趋于相同,但更高级的内容以及与OS其他部分进行交互的内容也有所不同,例如,在类Unix系统上,套接字由文件句柄标识并且可以由文件API读取/写入,在Windows上则不是这种情况。

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

还是任何协议都可以使用IP套接字?

当应用程序使用“套接字”功能显式创建套接字(套接字也由accept函数创建)时,它将传递三个参数:“域”,“类型”和“协议”。在这三个参数之间,可以用来选择许多不同类型的套接字。

  • 域选择使用的协议/地址系列,例如,对于IPV4,使用AF_INET;对于IPV6,使用AF_INET6;对于UNIX文件系统路径,使用AF_Unix等。
  • type选择通信语义,主要是数据报和流,但还有其他更专门的类型。
  • protocol选择要使用的协议,如果将其设置为0,则将使用Domain和type组合的默认协议。

“侦听套接字位于文件系统层次结构中,可以通过文件系统权限控制对它们的访问。” 这是否意味着可以访问同一文件系统的两台服务器可以通过套接字进行通信?
user5359531

不幸的是,AIUI没有。superuser.com/questions/352263/...
彼得·格林
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.