ss -o
でソケットオプションを確認する
このステップでは、ss
コマンドを使用してソケットオプションを確認する方法を探ります。ss
コマンドはネットワークソケットを調査するための強力なツールです。netstat
に似ていますが、一般的に ss
の方が高速で、より詳細な情報を提供します。ここでは、拡張ソケット情報を表示する -o
オプションの使用に焦点を当てます。
まず、ソケットとは何かを理解しましょう。ソケットは、ネットワーク上で実行されている 2 つのプログラム間の双方向通信リンクのエンドポイントです。ソケットはネットワークプログラミングの基礎であり、ネットワークのトラブルシューティングや最適化において理解することが重要です。
-o
オプション付きの ss
コマンドを使用すると、TCP ウィンドウサイズ、TCP MSS (Maximum Segment Size)、その他の TCP 関連パラメータなど、さまざまなソケットオプションを表示できます。この情報は、ネットワークパフォーマンスの問題を診断するために非常に役立ちます。
まず、ターミナルを開きましょう。
では、-o
オプション付きの ss
コマンドを実行して、ソケット情報を表示しましょう。また、-n
オプションを使用して、ss
がサービス名を解決しようとするのを防ぎます。これにより、出力が遅くなるのを防げます。
ターミナルに以下のコマンドを入力し、Enter キーを押します。
ss -no state all
このコマンドは以下のことを行います。
ss
: ソケット統計ツールを起動します。
-n
: サービス名の解決を行いません。
-o
: 拡張情報を表示します。
state all
: ソケットの状態に関係なく、すべてのソケットを表示します。
以下のような出力が表示されるはずです。
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
nl UNCONN 0 0 rtnl:kernel
nl UNCONN 0 0 fib_trie:kernel
nl UNCONN 0 0 xfrm:kernel
tcp LISTEN 0 4096 0.0.0.0:22 0.0.0.0:*
skmem:(r0,rb369280,t0,tb87380) tclass 0 pclass 0
tcp ESTAB 0 0 127.0.0.1:38768 127.0.0.1:22
skmem:(r0,rb87380,t0,tb87380) tclass 0 pclass 0 rcv_space:2048,4194304,65535 rcv_qlen:0 snd_space:32768,4194304,65535 snd_qlen:0
tcp LISTEN 0 4096 [::]:22 [::]:*
skmem:(r0,rb369280,t0,tb87380) tclass 0 pclass 0
この出力には、さまざまなソケット接続、その状態、およびその他の関連情報が表示されます。skmem
フィールドには、ソケットに関連するメモリ使用量が表示されます。rcv_space
と snd_space
には、受信および送信バッファのサイズが表示されます。
では、出力をフィルタリングして、TCP ソケットに焦点を当て、プロセス情報を含めましょう。これにより、特定のソケットを使用しているプロセスを特定するのに役立ちます。
ターミナルに以下のコマンドを入力し、Enter キーを押します。
sudo ss -tnpo state all
このコマンドには以下のオプションが追加されています。
-t
: TCP ソケットをフィルタリングします。
-p
: ソケットを使用しているプロセスを表示します。
以下のような出力が表示されるはずです。
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 4096 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=942,fd=3))
ESTAB 0 0 127.0.0.1:22 127.0.0.1:49134 users:(("sshd",pid=1147,fd=5))
LISTEN 0 4096 [::]:22 [::]:* users:(("sshd",pid=942,fd=4))
Process
列には、各ソケットに関連付けられたプロセス名と PID (Process ID) が表示されます。これは、特定のネットワーク接続を使用しているアプリケーションを特定するのに非常に役立ちます。
ss -o
を使用することで、システム上のネットワークソケットの構成と状態に関する貴重な洞察を得ることができます。この情報は、ネットワークの問題をトラブルシューティングし、ネットワークパフォーマンスを最適化し、アプリケーションがネットワークリソースをどのように使用しているかを理解するために使用できます。