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

3

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

在IPC(进程间通信)方面,UNIX使用名为socket的文件。我了解它的工作原理类似于服务器-客户端模型,写入端和读取端使用socket文件进行通信。

但是我想知道socket内部是如何工作的。每个进程指定一个socket文件(可能带有inode),然后在上面进行读写操作吗?如果是这样,如果我观察此socket文件,是否可以查看原始数据(或封装的数据)?

还有一个问题,socket文件有格式吗?例如,一些应用程序socket文件如mysql.sockdocker.sock,它们有自己的格式吗?

2个回答

8

Unix sockets的正式名称为Unix Domain Sockets,因为它们全部驻留在一台计算机内。从某种意义上说,sockets是完全包含在内核中的网络;而不是使用网络接口来发送数据,同样的数据可以直接在程序之间发送。

尽管在磁盘上创建文件,但Unix sockets实际上并不将它们发送的数据写入磁盘,因为这样做速度太慢了。相反,所有数据都保留在内核内存中;socket文件的唯一作用是维护对socket的引用,并给予它文件系统权限以控制访问。例如,MySQL的socket通常位于:

/var/lib/mysql/mysql.sock

这个文件里面没有任何内容,除了适用权限之外,你不应该直接修改它。它只是一个名称。


1

套接字本身不包含任何内容。它们有点像应用程序可以读写的“洞口”。

Unix 套接字会创建更少的开销,通信速度比本地 IP 套接字更快。

使用套接字是完成任务更高效的方式,但通常只被重 I/O 应用程序(例如邮件传输代理)所使用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接