Unixドメインソケット

TCP、UDP よりもイメージのつきにくい Unixドメインソケットについて簡単にまとめる。

TCP、UDP などの接続先が同一ホスト内のプロセスと通信を行うイメージ。外部の通信ではなく、カーネル内でのプロセス間通信。外部の通信よりも高速。WebサーバーとNginxなどのリバースプロキシ、あるいはWebサーバーとデータベースの間の通信等に用いられる。

サーバープロセスを起動するとホスト内でファイルを作成される。クライアントはサーバーが作成したファイルへアクセスを行うことにより通信する。Unixドメインソケットでサーバーとクライアントがやり取りを行うインターフェースとしてソケットファイルが用いられる。通信先としてIPアドレス、ポート番号を指定するのではなくソケットファイルのファイルパスを指定する。

データのやり取り時にカーネル内のバッファにデータをコピーし、サーバープロセス、クライアントのバッファへデータを書き込む。

ソケットによる通信としてはこの他にINETドメインソケットもある。こちらはネットワーク上でマシンを超えたプロセス間通信。通信先の特定方法はIPアドレスとポート番号。

Unixドメインソケットの種類として上記のファイルシステムパスを使用した通信方法以外にsocketpairを使用した名前空間のない接続状態のソケットのペアの生成(forkしてファイルディスクリプタをつなぎ直して、双方向のプロセス間通信を実現する)。ファイルシステムのパスではなく名前(文字列)を受け渡す抽象名前空間等の種類がある(Linuxでのみ利用可能)。

この記事が気に入ったらサポートをしてみませんか?