ネットワークの「健康診断」をしよう!netstatで見るTCP接続のリアル
みなさん、こんにちは。データセンターの現場で、深夜の障害対応に追われながらも、ネットワークの奥深さに魅了され続けているエンジニアです。
インフラの世界に飛び込んだばかりの頃、「サーバーがなんだか重い」「通信が切れる」というアラートに、背筋を凍らせた経験はありませんか?そんな時、私たちが真っ先に頼るのが、今回紹介する netstat コマンドです。
一見、無機質な英数字の羅列に見えるかもしれませんが、これは「サーバーという街の郵便局が、いま何通の手紙をさばいていて、どんな配達員がどこへ向かっているのか」を教えてくれる、極めて人間味あふれる健康診断書なんです。一緒に紐解いていきましょう!
—
そもそも「ソケット」って何?
netstat を使う前に、まずは「ソケット」という言葉をイメージしてみましょう。
例えば、あなたが海外の友人に手紙を出すとします。あなたの家(サーバー)には「郵便ポスト(ポート)」がありますよね。手紙を出すときは、このポストに手紙を投函します。
この「手紙のやり取りの窓口」が、ネットワークの世界では「ソケット」と呼ばれます。
netstat コマンドは、この「いま、サーバーのどのポストが、誰と、どんな状態でつながっているか?」を一覧表示してくれるコマンドなんです。
—
netstat で何がわかるのか?
さっそく、現場で一番よく使うコマンドを打ってみましょう。
# -n: IPアドレスやポート番号を数字で表示(名前解決を待たないので速い!)
# -t: TCPの接続だけを表示
# -a: すべての接続を表示
netstat -nta
実行すると、こんな感じの表が出てきますよね。
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 192.168.1.10:80 10.0.0.5:54321 ESTABLISHED
tcp 0 0 192.168.1.10:80 10.0.0.8:54322 TIME_WAIT
ここで重要なのが、右端の State(状態)です。ここがトラブルシューティングの肝になります。
1. LISTEN:郵便局の窓口オープン!
「誰かから手紙が来ないかな?」と、郵便局員が窓口を開けて待っている状態です。Webサーバー(ApacheやNginxなど)が起動しているときに必ず見かける、平和な状態ですね。
2. ESTABLISHED:まさに配達中!
相手とのやり取りが確立され、絶賛通信中です。もしこの数値が異常に多い場合、たくさんの人が同時にあなたのサービスを使っている証拠です。人気店で注文が殺到しているような状態ですね!
3. TIME_WAIT:余韻に浸る時間
ここが一番の「あるある」ポイントです。手紙のやり取りが終わり、相手との接続を切った直後の状態です。
「念のため、もう一度何か送られてくるかもしれないから、しばらく窓口を閉めずに待っておこう」という、いわば「余韻」の期間です。この TIME_WAIT が多すぎると、新しい接続を受け付ける余力がなくなってしまい、サーバーが「満員御礼」でつながらなくなることがあります。
—
泥臭い現場の知恵:困ったときはこう使う!
教科書には載っていない、現場で私がよく使うテクニックを少しだけ教えますね。
通信が詰まっているか確認する
Recv-Q や Send-Q に大きな数字が入っていたら要注意です。
Recv-Q:届いているのに処理しきれていない手紙の山。サーバーがパンク気味です。Send-Q:相手に送りたいのに、相手が受け取ってくれない手紙の山。相手側のネットワークが詰まっているかもしれません。
# 接続数が多い順にソートして、誰が犯人か突き止める
netstat -nta | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr
これを使うと、「どのIPアドレスからのアクセスが一番多いか」が一瞬でわかります。DDoS攻撃や、特定のクライアントからの大量アクセスを切り分けるときに重宝しますよ。
—
最後に:コマンドは「サーバーの心の声」
「コマンドを覚えるのが大変…」と最初は思うかもしれません。でも、ネットワーク機器やサーバーは、決して意地悪をしているわけではありません。
netstat を叩くことは、苦しんでいるサーバーの「心の声」を聞くことと同じです。
「いまちょっと忙しいんだ」「さっきの人との別れが惜しくて整理がついていないんだ」…。
そんなふうに、サーバーを擬人化して見てあげてください。そうすれば、ただの英数字の羅列が、現場を救う大切なメッセージに見えてくるはずです。
最初は完璧じゃなくて大丈夫。今日、一つだけ netstat -nta を打ってみる。それだけで、あなたはもう立派なネットワークエンジニアへの一歩を踏み出しています!応援していますよ。
コメント