工具通訊環境的不同,端點之間可以選擇不同的工具進行通信,距離近可以直接對話,距離遠可以選擇打電話、微信聊天。這些工具就被稱為 Socket。
同理,在計算機中也有類似的概念:
在 Unix 中,壹次通信由兩個端點組成,例如 HTTP 服務端和 HTTP 客戶端。
端點之間想要通信,必須借助某些工具,Unix 中端點之間使用 Socket 來進行通信。
Socket 原本是為網絡通信而設計的,但後來在 Socket 的框架上發展出壹種 IPC 機制,就是 UDS。
Unix Domain Socket(UDS,Unix 域套接字),它還有另壹個名字叫 IPC(inter-process communication,進程間通信)。
使用 UDS 的好處顯而易見:不需要經過網絡協議棧,不需要打包拆包、計算校驗和、維護序號和應答等,只是將應用層數據從壹個進程拷貝到另壹個進程。這是因為,IPC 機制本質上是可靠的通訊,而網絡協議是為不可靠的通訊設計的。
UDS 與網絡 Socket 最明顯的區別在於,網絡 Socket 地址是 IP 地址加端口號,而 UDS 的地址是壹個 Socket 類型的文件在文件系統中的路徑,壹般名字以 .sock 結尾。
這個 Socket 文件可以被系統進程引用,兩個進程可以同時打開壹個 UDS 進行通信,而且這種通信方式只會發生在系統內核裏,不會在網絡上進行傳播。
MySQL 在本地可以通過 socket 方式連接。
在本地登錄時,如果 my.cnf 配置文件中的 [client] 部分沒有指定 socket 文件路徑,mysql 默認會去尋找 /tmp/mysql.sock(編譯裝)或 /var/lib/mysql/mysql.sock(rpm安裝),所以如果 mysqld 服務啟動的時候,生成的 socket 文件不是默認路徑的話,登陸可能會報錯(ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock')。
其實 [mysqld] 部分及 [client] 部分都配置具體路徑可避免此問題,也可以在 tmp 路徑下建立軟連接,如:ln -s /pah/to/mysql.sock /tmp/mysql.sock 。
同樣的,socket 文件目錄權限要對 mysql 系統用戶放開。
在docker官方文檔docker-engine中,介紹了三種訪問docker Remote API的方式,分別是unix套接字文件、tcp監聽端口和fd文件描述符。
MySQL中的pid與socket是什麽?
/s/MehZ8GeRD9SBm8PxfGugRw
網絡協議之:socket協議詳解之Unix domain Socket
/17-unix-domain-socket
/s/4RwASqJu3Vc_suslKSbBkw
如何給UNIX域Socket套接字抓包?
/s/SrV9_RouBJtZaUgG4WlamQ
Unix域套接字(Unix Domain Socket)介紹
/s/psmAL216huaqytwrbcoIMw
關於/var/run/docker.sock文件的理解
/developer/article/1454335
Daemon socket option
/engine/reference/commandline/dockerd/#description
使用 Unix Domain Socket 與上遊集群通信
/s/5i_y1O7bSafAW7I51S7N8w
徹底搞懂文件描述符fd
/article/file-fd