[解決済み] Unixドメインソケットは複数のクライアントをどのように区別するのですか?
質問
TCPはタプルペア(IPアドレス/ポート/タイプ)で、あるクライアントと別のクライアントを区別しています。 UDPはクライアントのIPとポートを渡します。 Unix ドメインはどのように異なるクライアントを追跡するのでしょうか。
言い換えれば、サーバーは、/tmp/socketのようなパスにバインドされたソケットを作成します。 2 つ以上のクライアントが /tmp/socket に接続します。 クライアント 1 とクライアント 2 からのデータを追跡するために、その下で何が起こっているのでしょうか? 私は、ネットワーク スタックがドメイン ソケットで何の役割も果たさず、カーネルがここですべての作業を行っていると想像しています。
IPプロトコル形式とTCP/UDP形式があるように、unixドメインプロトコルフォーマットがありますか? ドメインソケットデータグラムプロトコルのフォーマットは、どこかで公開されていますか? すべての unix は異なっていますか、それとも POSIX のようなものがそれを標準化しますか?
どんな照明でもありがとうございます。 私は、これを説明するいかなる情報も見つけることができませんでした。 すべてのソースは、ドメイン ソケットを使用する方法について説明しています。
どのように解決するのですか?
を作成すると
PF_UNIX
型のソケットを作成すると
SOCK_STREAM
で、接続を受け付けると、接続を受け付けるたびに新しいファイルディスクリプタを(このメソッドの戻り値として) 取得します。
accept
システム コールの戻り値として)新しいファイル記述子を取得します。 このファイル記述子は、クライアントプロセスのファイル記述子からデータを読み取り、クライアントプロセスのファイル記述子にデータを書き込む。 このように、TCP/IP 接続と同様に機能します。
unixドメインプロトコルフォーマット」は存在しません。 Unixドメインソケットはネットワーク接続でピアに接続することができないので、ある必要はありません。 カーネルでは、ファイルディスクリプタに含まれる
SOCK_STREAM
Unixドメインソケットは、カーネルにどのファイルディスクリプタが接続のもう一方の端にあるかを伝えるデータ構造を指します。 ファイルディスクリプタにデータを書き込むと、カーネルは接続の相手側のファイルディスクリプタを探し、そのデータを他のファイルディスクリプタの読み込みバッファに追加します。 カーネルは、宛先を記述するヘッダーを持つパケット内にデータを置く必要はありません。
に対して
SOCK_DGRAM
ソケットでは、データを受信するソケットのパスをカーネルに伝える必要があり、カーネルはそれを使って受信ソケットのファイルディスクリプタを探します。
サーバソケットに接続する前に(あるいは
SOCK_DGRAM
を使用している場合はデータを送信する前に)、 サーバプロセスは
getpeername
(例えば
SOCK_STREAM
). に対して
SOCK_DGRAM
を指定した場合、受信側では
recvfrom
を使って送信側ソケットのパスを取得することができます。
パスをバインドしない場合、受信側のプロセスは相手を一意に識別するidを取得することができません。 少なくとも、私が実行している Linux カーネルでは (
2.6.18-238.19.1.el5
).
関連
-
Linux sarコマンドによるシステム性能の詳細解析事例
-
deepin linuxからmacosx仮想マシンに直接ファイルをドラッグ&ドロップする方法は?
-
Linux Mintでフェード効果をオンにする方法は?
-
Kali Linuxのマウスを左利き用に設定する方法は?Linuxマウス左利き操作選択方法
-
linux(ubuntu 18.04)でのアイデア運用データベース障害問題について
-
sudo が sudo として表示される: setuid root である必要がある
-
Apache の一般的な設定エラー
-
[解決済み] gzip: stdin: gzip 形式ではありません tar: 子プロセスはステータス 1 を返しました。エラーは回復不可能: 現在終了中
-
[解決済み] bash sh - command not found [重複].
-
[解決済み] 出力をファイルや標準出力にリダイレクトする方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
virtualboxが仮想マシンを開けない場合は?linuxがvirtualboxにアクセスできない時の解決策
-
Linux Mintで入力メソッドを削除する方法は?Linux Mintで冗長な入力メソッドを削除するためのヒント
-
Linux Mintでフェード効果をオンにする方法は?
-
Deepin20システムのフォントを設定するには?Deepin端末のフォントサイズを設定する方法
-
[解決済み] gzip: stdin: gzip 形式ではありません tar: 子プロセスはステータス 1 を返しました。エラーは回復不可能: 現在終了中
-
[解決済み] cronは内部でどのようにジョブをスケジューリングしているのですか?
-
[解決済み] mkdirのオプションが明確でない
-
[解決済み] Linuxで特定のテキストを含むすべてのファイルを検索するにはどうすればよいですか?
-
[解決済み] LinuxのシェルスクリプトでYes/No/Cancelの入力を促すにはどうしたらいいですか?
-
[解決済み] Linux/Unixで$PATHを永久に設定する方法 [終了しました].