今回はネットワーク関連コマンド、 ” ssコマンド ” について。
ネットワークの状態を調べるlinuxコマンドの1つです。
旧netstatコマンドに相当します。(但しnetstatコマンドは今でも使えます)
ss = SockStat = Socket Statistics (ソケットの統計)の略
ソケットとは
私の勝手なイメージですが、外部とでデータをやり取りする際に、そのデータを積み下ろす(又は積み込む)港に、貿易相手先別に分類されたデータの一時保管倉庫が多数あって、その倉庫群のことをソケットと呼んでいるというイメージです。
” ss ” コマンドはその倉庫群(=ソケット群)をリアルタイムで一覧表示します。
正確には異なるプロセス間のデータ受け渡しにソケットが使用されるので、同じPC上のプロセス同士のデータ交換でもソケットが使用されます。(ソケットは、プロセスの要求に応じて、動的に作成され、また取り壊されています。)
ソケットはUNIXではファイルとして存在していますが、linuxではカーネルが直接管理しています。
ソケットの情報を表示することにより、結果的にそのソケットで利用されているポートの情報・サービスの情報がリアルタイムで表示されます。
コマンド
構文は以下の通り。
ss [オプション] [フィルター]
まずは、普通にオプションなしで、ssコマンドを表示させてみます。
このように100行以上が表示されています。
非常に多くの情報が出てきます。
この多くは内部的なプロセス間のやり取りに使用されているソケット群です。
内部同士のデータのやり取りは関係ないので、まずはこれをオプションで除外します。
そして最終的に、外部との通信のみのソケットに絞り込みます。
オプション
フィルタをかけるオプション
-t と -u と -4 と -6
“-t ” はTCPのみ、” -u ” はUDPのみを表示します。
” -4 ” と ” -6 ” は、それぞれ、 ” ipv4 ” と ” ipv6 ” のみを表示します。
オプション | 内容 |
-t | TCPのみ表示 |
-u | UDPのみ表示 |
-4 | IPv4のみ表示 |
-6 | IPv6のみ表示 |
これで外部通信用のソケットを絞り込みます。
例)TCPとUDPのIPv4を表示させました。
ss -tu4
オプションは、 ” -t ” と ” -u ” と ” -4 ” を足して ” -tu4 ” としています。
オプションの文字の順番は自由です ” -ut4 ” や ” -4tu ” などとしても、全て同じ意味で、同じ結果となります。
-a と -l
デフォルトではESTAB(TCP通信中)のソケットだけを表示します。
” -l ” はLISTEN(TCP接続待ち中)状態のみ表示。
” -a ” は全てを表示
オプション | 表示内容 |
” -l ” も ” -a ” も無し (デフォルト) | ESTABを表示 |
-l | LISTENのみ表示 |
-a | 全てのソケットを表示 |
例) ” -a ” オプションを付け加えてみました。
ss -tu4a
ESTAB状態に加えて、LISTEN の状態が追加されています。
出力結果の見方
ここで出力結果の見方の解説です。
出力結果 | 内容 | LISTEN状態時 | ESTAB状態時 |
Netid | プロトコル名 | ||
state | ソケットの状態(次項で解説)) | ||
Recv-Q | 受信バッファ | 送信SYN数 | プロセスへの未渡バイト数 |
Send-Q | 送信バッファ | 受入可能な最大接続数 | ACK**未受信総バイト数 |
Local Adress:Port | 自分のアドレスとポート番号* | ||
Peer Adress:Port | 相手のアドレスとポート番号* | ||
Process (-p オプション時) | 使用しているプロセス |
** ACK:相手側からの受信確認信号
多くの場合は、開いている自分のポート番号(赤色マーカーの所)を調べるためにこのコマンドは利用されます。
stateの内容の見方
LISTEN | TCP接続待ち |
UNCONN | UDP接続待ち |
ESTAB | TCP接続確立中 |
CLOSE-WAIT | 終了処理中 |
TIME-WAIT | 終了処理中 |
終了処理中とは、通信が終わって用済みとなって、もうすぐ廃止となる直前のソケットという意味です。
情報表示オプション
-n と -r
” -n ” :名前解決を行わず、番号(IPアドレス)で表示する。
” -r ” はその逆(ドメイン名で表示)。
-s
統計の概要を表示。
ss -tu4ans
上半分に統計情報が表示されています。
-p と -e と -i
これらは追加情報を表示します。
” -p ” はプロセスの情報も表示。
ss -tu4anp
” -e ” はTCPの詳細情報を表示
ss -tu4ane
” -i ” は内部TCP情報も表示。
ss -tu4ani
サーバー側
参考までにサーバー側で実施したssコマンドの結果です。
フィルタの構文
stateで指定した状態のみを表示。
例)
ss state established
” ss -h ” のヘルプ表示より抜粋。
詳細は省略。この辺りはTCP周りの、深い勉強が必要のようです。
まとめ
プロセス同士のデータのやり取りにはソケットというものが使われています。
そのソケットを調べると、他のコンピューターとのデータのやり取り(つまり通信の状態 = ポートの状態)をも調べることが出来ます。
そしてそれを調べるコマンドが ” ssコマンド ” です。
付録
ちなみに開いているポート番号を調べる時に頻用されるコマンド、 ” ss ” コマンド、 ” netstat ” コマンド、 ” lsof ” コマンドの3つを比べてみました。
ss
ss -tuanp4
netstat
netstat -tuanp4
lsof
” lsof ” コマンド ( LiSt Open Files ) はプロセスが開いているファイルの一覧を調べるコマンド。
” -i ” オプションで、ネットワーク関連の開いているファイルを選択して一覧表示出来、結果的に開いているポートを表示できます。
lsof -i4
3者まとめ
コマンド | 列1 | 列2 | 列3 | 列4 | 列5 | 列6 | 列7 | 列8 | 列9 |
ss | Netid | State | Recv-Q | Send-Q | Local Adress:Port | Peer Adress:Port | Process | ||
netstat | Proto | Recv-Q | Send-Q | Local Adress | Foreign Adress | State | PID/Program name | ||
lsof | COMMAND | PID | USER | FD | TYPE | DEVICE | SIZE/OFF | NODE | NAME |
幅が一番狭い ” netstat ” が、どちらかというと見やすいかなあ。
コメント