套接字文件实际上是如何工作的?

B T*_*ion 3 unix sockets

我目前对 UNIX 系统很感兴趣。

对于 IPC(进程间通信),UNIX 使用名为socket. 我理解它的工作原理类似于服务器-客户端模型,写端和读端使用套接字文件相互通信。

但我想知道套接字内部是如何工作的。每个进程指定一个套接字文件(可能带有inode),然后对其进行写入和读取?如果这是真的,如果我正在观看此套接字文件,我可以观看原始数据(或封装数据)吗?

另外,socket文件有格式吗?例如,一些应用程序套接字文件,例如mysql.sockdocker.sock,它们有自己的格式吗?

小智 9

unix 套接字的正确名称是 Unix 域套接字,因为它们都驻留在一台计算机内。从某种意义上说,套接字是一个完全包含在内核中的网络;无需使用网络接口发送数据,相同的数据可以直接在程序之间发送

\n

尽管在磁盘上创建文件,Unix 套接字实际上不会将它们发送到磁盘的数据写入,因为那样会太慢。相反,所有数据都保留在内核内存中;套接字文件的唯一目的是维护对套接字的引用,并授予它文件系统权限来控制访问。例如,MySQL\xe2\x80\x99s 套接字通常位于:

\n
/var/lib/mysql/mysql.sock\n
Run Code Online (Sandbox Code Playgroud)\n

此文件不包含任何内容,您不应该直接修改它,但适用的权限除外。它\xe2\x80\x99只是一个名字。

\n