ssコマンド

Linux
OLYMPUS DIGITAL CAMERA

今回はネットワーク関連コマンド、 ” ssコマンド ” について。

ネットワークの状態を調べるlinuxコマンドの1つです。

旧netstatコマンドに相当します。(但しnetstatコマンドは今でも使えます)

ss = SockStat = Socket Statistics (ソケットの統計)の略

ソケットとは

私の勝手なイメージですが、外部とでデータをやり取りする際に、そのデータを積み下ろす(又は積み込む)港に、貿易相手先別に分類されたデータの一時保管倉庫が多数あって、その倉庫群のことをソケットと呼んでいるというイメージです。

” ss ” コマンドはその倉庫群(=ソケット群)をリアルタイムで一覧表示します。

正確には異なるプロセス間のデータ受け渡しにソケットが使用されるので、同じPC上のプロセス同士のデータ交換でもソケットが使用されます。(ソケットは、プロセスの要求に応じて、動的に作成され、また取り壊されています。)

ソケットはUNIXではファイルとして存在していますが、linuxではカーネルが直接管理しています。

ソケットの情報を表示することにより、結果的にそのソケットで利用されているポートの情報・サービスの情報がリアルタイムで表示されます。

コマンド

構文は以下の通り。

まずは、普通にオプションなしで、ssコマンドを表示させてみます。

このように100行以上が表示されています。

ss-1
ss-2

非常に多くの情報が出てきます。

この多くは内部的なプロセス間のやり取りに使用されているソケット群です。

内部同士のデータのやり取りは関係ないので、まずはこれをオプションで除外します。

そして最終的に、外部との通信のみのソケットに絞り込みます。

オプション

フィルタをかけるオプション

-t と -u と -4 と -6

“-t ” はTCPのみ、” -u ” はUDPのみを表示します。

” -4 ” と ” -6 ” は、それぞれ、 ” ipv4 ” と ” ipv6 ” のみを表示します。

オプション内容
-tTCPのみ表示
-uUDPのみ表示
-4IPv4のみ表示
-6IPv6のみ表示

これで外部通信用のソケットを絞り込みます。

例)TCPとUDPのIPv4を表示させました。

ss -tu4

オプションは、 ” -t ” と ” -u ” と ” -4 ” を足して ” -tu4 ” としています。

オプションの文字の順番は自由です ” -ut4 ” や ” -4tu ” などとしても、全て同じ意味で、同じ結果となります。

-a と -l

デフォルトではESTAB(TCP通信中)のソケットだけを表示します。

” -l ” はLISTEN(TCP接続待ち中)状態のみ表示。

” -a ” は全てを表示

オプション表示内容
” -l ” も ” -a ” も無し
(デフォルト)
ESTABを表示
-lLISTENのみ表示
-a全てのソケットを表示

例) ” -a ” オプションを付け加えてみました。

ss -tu4a

ESTAB状態に加えて、LISTEN の状態が追加されています。

出力結果の見方

ここで出力結果の見方の解説です。

出力結果内容LISTEN状態時ESTAB状態時
Netidプロトコル名
stateソケットの状態(次項で解説))
Recv-Q受信バッファ送信SYN数プロセスへの未渡バイト数
Send-Q送信バッファ受入可能な最大接続数ACK**未受信総バイト数
Local Adress:Port自分のアドレスとポート番号*
Peer Adress:Port相手のアドレスとポート番号*
Process (-p オプション時)使用しているプロセス
* 0.0.0.0、 * 、 [::] と表示されている場合は全ての番号を受け付けるという意味
** ACK相手側からの受信確認信号

多くの場合は、開いている自分のポート番号(赤色マーカーの所)を調べるためにこのコマンドは利用されます。

stateの内容の見方

LISTENTCP接続待ち
UNCONNUDP接続待ち
ESTABTCP接続確立中
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コマンドの結果です。

ss server

フィルタの構文

stateで指定した状態のみを表示。

例)

” ss -h ” のヘルプ表示より抜粋。

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
ssNetidStateRecv-QSend-QLocal Adress:PortPeer Adress:PortProcess
netstatProtoRecv-QSend-QLocal AdressForeign AdressStatePID/Program name
lsofCOMMANDPIDUSERFDTYPEDEVICESIZE/OFFNODENAME
赤色マーカーは自分の開いているポート番号の表示場所

幅が一番狭い ” netstat ” が、どちらかというと見やすいかなあ。

コメント

タイトルとURLをコピーしました