UNIXドメインソケット(ユーニックスドメインソケット)とは | 意味や読み方など丁寧でわかりやすい用語解説
UNIXドメインソケット(ユーニックスドメインソケット)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。
読み方
日本語表記
ユニックスドメインソケット (ユニックスドメインソケット)
英語表記
UNIX domain socket (ユーニックス ドメイン ソケット)
用語解説
UNIXドメインソケットは、UNIX系OSが提供するプロセス間通信(IPC)の仕組みの一つである。同一ホスト上で動作する異なるプロセス間で、効率的かつセキュアにデータをやり取りするために用いられる。一般的なネットワーク通信に用いられるTCP/IPソケットが、ネットワーク上の異なるホスト間での通信を主な目的とするのに対し、UNIXドメインソケットは物理的に同じコンピュータ内での通信に特化している。
UNIXドメインソケットの最大の特徴は、通信のエンドポイントがファイルシステム上のパス名(例: /tmp/my_socket)として表現される点にある。これは通常のファイルと同じようにパス名を持つが、ディスク上にデータを格納するわけではなく、通信のための特殊なインターフェースとして機能する。アプリケーションは、このソケットファイルをオープンするような形で通信を開始し、データの送受信を行う。
詳細に説明すると、UNIXドメインソケットは、クライアント・サーバーモデルに基づいた通信を確立する。まずサーバー側のプロセスがソケットを作成し、それを特定のファイルシステムパスにバインド(関連付け)して、クライアントからの接続を待機する。このとき、ファイルシステム上にソケットファイルが生成される。次に、クライアント側のプロセスは、そのソケットファイルのパスを指定してサーバーへの接続を試みる。接続が確立されると、両プロセスはソケットを介してデータの読み書きが可能となる。この一連の動作は、TCP/IPソケットのAPIと非常によく似ており、多くのプログラミング言語で同様のインターフェースが提供されている。
TCP/IPソケットとの決定的な違いは、UNIXドメインソケットがネットワークプロトコルスタック(IP層、TCP層など)を介さない点にある。ネットワーク通信では、データはOSのカーネル内部で多くのレイヤーを通過し、ヘッダの付加やチェックサムの計算、ルーティング処理などが実行されるため、一定のオーバーヘッドが発生する。これに対し、UNIXドメインソケットでは、データはカーネルメモリ内で直接、あるいはより少ないコピー回数で、送信元プロセスから送信先プロセスへ渡される。このため、ネットワーク通信と比較して非常に高速であり、レイテンシ(通信遅延)も小さいという利点を持つ。特に、データ転送におけるCPU使用率を低く抑えたい場合や、大量のデータを短い間隔でやり取りする必要がある場合に有効である。
セキュリティ面においても、UNIXドメインソケットは優位性を持つ。ファイルシステム上のパス名を使用するため、ソケットファイルに対して通常のファイルと同様にパーミッション(読み書き実行権限)を設定できる。これにより、ソケットファイルの所有者やグループ、その他のユーザーに対してアクセス権限を細かく制御することが可能となる。例えば、特定のユーザーだけがソケットにアクセスできるように設定すれば、同一ホスト内の他の悪意あるプロセスからの不正な接続を防ぐことができる。これは、ポート番号に依存するTCP/IPソケットのアクセス制御よりも、よりきめ細やかなアクセス制御を実現できるケースがある。
具体的な利用例としては、データベースシステムが挙げられる。例えば、MySQLやPostgreSQLのようなデータベースサーバーが、同じホスト上で動作するクライアントアプリケーションからの接続を受け付ける際、TCP/IPソケットだけでなくUNIXドメインソケットも利用する。Webサーバー(NginxやApacheなど)とアプリケーションサーバー(PHP-FPM、uWSGIなど)間の通信でも、UNIXドメインソケットが頻繁に用いられる。これにより、Webサーバーからアプリケーションサーバーへのリクエスト転送が高速化され、全体のパフォーマンスが向上する。その他にも、D-Busのようなシステムレベルのプロセス間通信機構や、Dockerのようなコンテナ技術において、コンテナランタイムがホストOSのデーモンと通信する際にも利用される。
まとめると、UNIXドメインソケットは同一ホスト内でのプロセス間通信に特化した、高速かつセキュアなIPCメカニズムである。ネットワークプロトコルスタックのオーバーヘッドを回避し、ファイルシステムパーミッションによる厳格なアクセス制御が可能なため、多くのシステムやアプリケーションで内部通信の基盤として広く採用されている。その制約は同一ホスト内でのみ利用可能であることだが、その範囲内での性能とセキュリティは非常に高い。