ネットワークの「今」を覗き見る:netstatでソケットの状態を丸裸にする方法
こんにちは。データセンターの片隅で、深夜に鳴り響くアラート音を子守唄代わりにしているシニアエンジニアです。
皆さんは、Webサーバーが急に反応しなくなったとき、あるいはアプリケーションが「接続できません」とエラーを吐いたとき、まず何をしますか? ログを見るのも大事ですが、「今、このサーバーの通信経路はどうなっているのか?」というリアルタイムの状況を把握することは、トラブルシューティングの第一歩であり、最重要スキルです。
今回は、ネットワークの健康状態を診断するための必須ツール、netstatコマンドについて、現場の視点から紐解いていきましょう。
—
そもそも「ソケット」って何?
コマンドを叩く前に、少しだけイメージを共有しましょう。
サーバーという巨大なマンションがあると想像してください。このマンションにはたくさんの「窓口(ポート番号)」があります。Webサーバーなら「80番」や「443番」の窓口を開けて、お客さん(クライアント)からの注文を待っていますよね。
この「窓口でのやり取りの状態」を管理する仕組みが、「ソケット」です。netstatは、このマンションの受付係が「今、誰と、どんな状態で話しているか」を一覧表にまとめたものだと考えてください。
—
netstat -an で現実を直視する
現場で最もよく使うのが netstat -an というコマンドです。
-a:接続中だけでなく、待ち受け中のものも含めて全部見せる。-n:IPアドレスやポート番号を数字のまま表示する(名前解決による待ち時間を省き、高速に表示するためです)。
さっそく、ターミナルで実行してみましょう。
# サーバーで実行してみましょう
netstat -an
すると、ズラリと並んだ行が表示されますね。ここからが本題です。特に重要な「状態(State)」に注目してください。
—
現場で必ず見るべき3つの「状態」
ソケットの状態を知ることは、通信のトラブルを解決するための近道です。代表的なものを3つ紹介します。
1. LISTEN(待ち受け中)
これは、窓口が「いつでもどうぞ!」と空いている状態です。
サーバーが正しく起動し、クライアントからの接続を待機している証拠ですね。もし、Webサーバーを起動したはずなのに、ここに見当たらない場合は、「プロセスが死んでいる」か「設定ファイルでポートが間違っている」可能性が濃厚です。
2. ESTABLISHED(接続完了・通信中)
これは、相手としっかり繋がって、今まさにデータのやり取りをしている状態です。
「郵便配達員が手渡しで荷物を届け、返事を受け取っている」ような、非常に健全な状態です。この数が異常に多い場合、たくさんのユーザーがアクセスしてくれているか、あるいは接続が切られずに溜まっている(リソースの枯渇)兆候かもしれません。
3. TIME_WAIT(後片付け中)
これが、初学者が一番びっくりする状態です。通信が終わった後、ネットワーク上の「取り残されたパケット」がないか、安全のために少しだけ時間を置いている状態を指します。
いわば「さっきの取引の書類を整理して、机を片付けている時間」です。この状態が異常に多いと、サーバーが新しい接続を受け付けられなくなることもあるので注意が必要です。
—
実践:トラブルシューティングでの使い方
もし「Webサイトに繋がらない!」という報告を受けたら、以下のようにコマンドを組み合わせて絞り込みます。
# TCP接続のうち、特定のポート(例:80番)に関連するものだけを抽出する
netstat -an | grep :80
grep を使うことで、ノイズを除去して必要な情報だけを見ることができます。
補足:現代のエンジニアには ss もおすすめ
最近のLinuxサーバーでは、netstatよりも高速で情報量が多い ss コマンドが推奨されることも増えています。使い方はほとんど同じです。
# netstat -an とほぼ同じ情報を高速に表示
ss -an
—
最後に:ツールは「道具」に過ぎない
netstatで表示される数字の羅列は、最初は無機質に見えるかもしれません。しかし、そこに映っているのは「どこかの誰かが、あなたのサーバーと握手を交わそうとしている、あるいは交わしているリアルな時間」です。
トラブルが起きたとき、焦ってコマンドを打つのではなく、「今、通信の窓口はどうなっているかな?」と想像を膨らませてみてください。そうすれば、画面上の文字列が、ただのテキストから、生きたネットワークの鼓動に見えてくるはずです。
一歩ずつ、確実に。現場のエンジニアとしての勘を、一緒に養っていきましょう!
コメント