インフラの世界へようこそ!NOC(ネットワークオペレーションセンター)で日々、数々のネットワークの修羅場をくぐってきたシニアエンジニアの私です。
突然ですが、あなたが管理しているWebサーバーや自分のパソコンで、「あれ?なんだか急に繋がらなくなったぞ…」と冷や汗をかいた経験はありませんか? ブラウザがクルクルと回り続け、エラー画面が表示される。そんなとき、私たちはどこを確認すればいいのでしょうか。
ネットワークのトラブルシューティングにおいて、目に見えないパケットの流れを可視化するツールは私たちの「レントゲン写真」のようなものです。その中でも、OSの足元で今何が起きているのかを丸裸にしてくれるのが、今回ご紹介する netstat コマンドです。
難しいパケットの構造や英語の専門用語は、いったん脇に置いておきましょう。今回は、身近な例えを交えながら、netstat を使ってシステムの状態を俯瞰する方法を一緒に優しく紐解いていきますね。一歩ずつ理解していきましょう!
—
1. 郵便配達で例える「TCP/UDPソケット」の世界
まず、netstat が教えてくれる「ソケット(Socket)」って何なんだろう?という疑問からクリアにしていきましょう。
ネットワーク通信を、身近な「手紙のやり取り(郵便配達)」に例えてみます。
- IPアドレスは、宛先の「住所」です。
- ポート番号は、その家の中にいる「宛先の部屋番号(窓口)」だと考えてみてください。
例えば、マンションの一室(IPアドレス)にある「Web係の窓口(ポート80番)」や「リモート管理係の窓口(ポート22番)」といった具合です。
そして、この窓口と窓口を結んで、実際に手紙の往来(データのやり取り)を行うための「通信の出入り口」のことを ソケット と呼びます。
netstat(Network Statistics)は、いわば「今、このビル(サーバー)の中で、どの部屋の窓口が開いていて、誰と手紙のやり取りをしているのか」を一覧にして見せてくれる受付台帳なのです。
—
2. なぜ netstat が必要なのか?
夜中の3時、「データベースサーバーに繋がらない!」というアラートが鳴り響きます。
アプリケーションのログを見ても「接続タイムアウト」としか書かれていません。ここで私たちが知りたいのは、次の疑問です。
1.そもそもサーバーのデータベース用窓口(ポート)は、ちゃんと開いて待ち構えているのか?
2.クライアントから届いた手紙は、ちゃんと届いて「お話し中(接続中)」の状態になっているのか?
3.おかしな相手から大量に話しかけられて、窓口がパンクしていないか?
こうした疑問に一発で答えてくれるのが netstat コマンドです。OSの心臓部を覗き込み、現在の通信状態を俯瞰するための必須アイテムなんですね。
—
3. 実践! netstat でシステムの状態を覗いてみよう
それでは、実際に黒い画面(ターミナルやコマンドプロンプト)を開いて、netstat を叩いてみましょう。
実務で最もよく使う、一番基本のコマンドはこちらです。
# 現在開いているすべてのTCP/UDPソケットと、待ち受け中のポートを一覧表示する
netstat -an
ここで使っているオプションの意味を優しく分解しておきましょう。
-a(All):今お話し中のものだけでなく、待ち受け中のものも含めて「全部」見せてね!という意味です。-n(Numeric):アドレスやポート番号を、名前に変換せず「数字のまま」表示してね!という意味です(DNSの逆引きをしない分、表示が爆速になります)。
このコマンドを実行すると、画面にバーっと文字が流れます。最初は見慣れない英語の羅列に圧倒されるかもしれませんが、怖がらなくて大丈夫です。中身を覗いてみましょう。
画面の見方を分解してみよう
出力結果は、だいたい次のようなフォーマットになっています。
Proto Local Address Foreign Address State
------------------------------------------------------------------
tcp 0.0.0.0:80 0.0.0.0:* LISTENING
tcp 192.168.1.10:52341 151.101.65.140:443 ESTABLISHED
1. Proto(プロトコル): 通信のルールのことです。tcp(確実にお返事を確認しながらやり取りする丁寧な方法)や udp(お構いなしにどんどん手紙を投げつけるスピーディーな方法)が表示されます。
2. Local Address(ローカルアドレス): 「自分自身」の住所とポート番号です。
3. Foreign Address(外部アドレス): 今、通信している「相手」の住所とポート番号です。
4. State(状態): ここが一番重要です!今の通信がどんなフェーズにあるのかを示しています。
—
4. 現場で絶対覚えるべき「State(状態)」のキーワード3選
netstat の一覧で最も注目すべきなのが、一番右端にある State(状態) です。すべてを覚える必要はありません。実務でトラブルシュートするときに役立つ、主要な3つだけをまずは押さえましょう!
① LISTENING(リスニング)
- 意味: 「いつでもお話しできますよ!」と、窓口を開けて待ち構えている状態です。
- 例え: 郵便局の窓口のシャッターが開き、係員が「次の番号の方、どうぞ〜」と待っている状態。
- チェックポイント: 「Webサービスを起動したはずなのに繋がらない」というときは、まずこの
LISTENINGが一覧にあるかを探します。ここになければ、そもそもサービスが起動していません。
② ESTABLISHED(エタブリスティッド)
- 意味: 相手と無事に繋がり、今まさにデータのやり取りをしている「お話し中」の状態です。
- 例え: 窓口のカウンター越しに、お客さんと係員が書類をやり取りして会話している状態。
- チェックポイント: 特定の相手からのアクセスが多すぎて、この状態の数が異常に膨れ上がっていないかなどを確認します。
③ TIME_WAIT(タイムウェイト)
- 意味: 通信が無事に終わったあと、「もしかしたら最後に言い忘れたことがあるかもしれないから、念のため少しだけ名残を惜しんで待っている」状態です。
- 例え: お客さんが窓口を去った後、係員が書類の片付けをしながら少しだけ窓口の席を空けている状態。
- チェックポイント: 大量のアクセスをさばくWebサーバーなどで、この状態のソケットが溜まりすぎて新しい通信ができなくなるトラブル(ポート枯渇)が起きることがあります。そんなときにこの状態の多さをチェックします。
—
5. シニアエンジニアが教える、現場のちょっとしたコツ
最後に、実務で netstat を使うときのちょっとしたテクニックをご紹介します。
OSによって netstat のオプションが少し違うことがあります(Linux、Windows、macOSなど)。また、最近のモダンなLinux環境では、より高機能な ss というコマンドが netstat の後継として使われることが増えてきました。
もしLinuxサーバーで「どのプロセスがそのポートを使っているんだっけ?」と調べたいときは、次のような組み合わせをよく使います。
# どのプログラム(プロセス)がどのポートを開いているかを、プロセス名つきで調べる(管理者権限が必要)
sudo ss -tulpn
※ -t (TCP), -u (UDP), -l (Listening), -p (プロセス名表示), -n (数値表示) の意味になります。
トラブルシューティングの基本は、「正常な状態を知り、異常な差分を見つけること」です。普段から動いている健全なサーバーの netstat の出力結果を眺めて、「あぁ、うちのシステムは普段こういう窓口が開いているんだな」と肌で感じておくことが、いざという時の素早い初動に繋がります。
—
まとめ
netstatは、OS全体の通信の窓口(ソケット)や状態を一覧で覗ける「レントゲン写真」である。- 郵便配達に例えると、IPアドレスは「住所」、ポート番号は「部屋番号(窓口)」、ソケットは「通信の出入り口」。
- トラブル時には、まずは
LISTENING(窓口が開いているか)やESTABLISHED(お話し中か)の状態を確認しよう。
ネットワークの世界は一見すると複雑で難しく見えますが、一つひとつのコマンドの意味を身近な例えに置き換えていけば、必ずあなたの味方になってくれます。
焦らず、一歩ずつ、ご自身のペースでインフラの世界を楽しんでいきましょう!それでは、また次回のNOCルームでお会いしましょう。
コメント