リスニングソケットを作成すると、ディスクリプタ(ルートディスクリプタであると仮定)を返し、そのディスクリプタをアドレスにバインドします。新しいクライアント接続が可能になるたびに、ルート記述子は私たちに通知し、新しい接続を受け入れ、各クライアントに固有の記述子(クライアント記述子であると仮定)を受け取ります。これから、この記述子を使用してこのクライアントと通信できます。クライアント情報は、クライアント記述子が指す別の inode に保存されます。したがって、Linux はそのクライアントデータをその記述子に渡すことができます。
上記の内容が正しい場合(間違って理解した場合は訂正してください)、質問があります。 inodeに保存されているクライアント情報は何ですか? Linuxはどのようにクライアントを一意に識別しますか?
ベストアンサー1
TCP / IPおよびUDP / IPプロトコルは、ローカルおよびリモートのIPアドレスとポートによって定義された「セッション」を認識します[1]。たとえば、TCP / IPパケットには送信元と宛先のIPアドレスとポートが含まれています[2]。複数の接続を開くサーバーまたはクライアント(Firefoxなど)は、OSI [3]セッション層のアドレスとポートに分けられます。
Webブラウザを使用する場合は、シェルを開き、rootとして実行します。
netstat -tulpan
現在およびアクティブな接続を表示します[4]。
出力例:
# netstat -tulpan
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1966/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1902/cupsd
tcp 0 0 192.168.1.16:57374 172.217.23.165:443 ESTABLISHED 4730/firefox-bin
tcp 0 0 192.168.1.16:55478 104.26.11.30:443 ESTABLISHED 4730/firefox-bin
udp 0 0 127.0.0.1:53 0.0.0.0:* 1996/named
この行は、Firefoxがどのパケットがどの要求に応答するかを識別できるように、さまざまなローカルポートへのFirefoxの「設定済み」接続を示しています。
LISTEN 状態の他の行は、sshd
(Secure Shell Server)、cupsd
(Printer Daemon)、named
(Bind Name Server) を含むサーバープロセスとして実行されるローカルプログラムです.これにより、着信接続が許可されます。
その他の参考資料をご覧ください。
[1]https://en.wikipedia.org/wiki/Port_(コンピュータ_ネットワーキング)
[2]https://en.wikipedia.org/wiki/Transmission_Control_Protocol#TCP_segment_structまたhttps://en.wikipedia.org/wiki/IPv4_header#Header