ネットワークの「運び屋」!TCPヘッダーという名の「送り状」を紐解く
ネットワークの世界へようこそ!インフラエンジニアへの第一歩、おめでとうございます。
皆さんは普段、Webサイトを閲覧したり、ファイルをダウンロードしたりするとき、裏側で何が起きているか想像したことはありますか?データは目に見えない電気信号や光となってネットワークを駆け巡っていますが、実はその中身は、まるで「大量の荷物を細かく分けて送る宅配便」のような仕組みになっているんです。
今回は、その荷物に必ず付いてくる「送り状」こと、TCPセグメントヘッダーの正体を解き明かしていきましょう。難しい専門用語の裏側にある「なるほど!」を見つけに行きますよ。
—
TCPは「責任感の強い配達員」
まず前提として、TCP(Transmission Control Protocol)は、相手に荷物が届いたかを確認し、もし届かなければ再送してくれる「非常に真面目で責任感の強い配達員」です。
この配達員が、荷物の箱(パケット)にペタッと貼り付けているのがTCPヘッダーです。ここには、荷物がどこから来て、どこへ行き、どんな順番で組み立てればいいのかという情報がびっしり詰まっています。
1. 送信元ポート番号・宛先ポート番号:マンションの「部屋番号」
IPアドレスが「建物(サーバー)」の住所だとしたら、ポート番号は「どの部屋(アプリケーション)宛か」を示す部屋番号です。
80番や443番はWebサーバー22番はSSH(リモート接続)
これらがあるからこそ、メールを読みながらWebブラウザで動画を見る、といったマルチタスクが可能になるんですね。
2. シーケンス番号と確認応答番号:ジグソーパズルの「番号札」
大きなデータを送るとき、ネットワーク上ではパケットがバラバラに到着したり、順番が入れ替わったりすることがあります。
- シーケンス番号: 「これは全体の中の何番目のピースか?」という通し番号。
- 確認応答番号(ACK番号): 「何番まで無事に受け取ったから、次はこれちょうだい!」という返信。
この2つがキャッチボールされることで、パケットの欠落や順序の逆転を防いでいるんです。
—
コントロールフラグ:配達員の「ジェスチャー」
TCPヘッダーには、配達の状況を伝えるための「スイッチ(フラグ)」が用意されています。代表的なものを見てみましょう。
- SYN: 「荷物を送りたいです!通信を開始してもいいですか?」という挨拶。
- ACK: 「確かに受け取りました!」という返事。
- FIN: 「全ての荷物を送り終えました。接続を閉じましょう」という終了合図。
- RST: 「ネットワークエラーや拒否!強制終了!」という緊急停止ボタン。
これらを組み合わせることで、有名な「3ウェイ・ハンドシェイク(通信開始の握手)」が行われます。
—
現場で役立つ!TCPの状態を覗いてみよう
理論だけではつまらないですよね。実際にLinuxサーバー上で、今どんな通信が行われているかを確認するコマンドを叩いてみましょう。
# 現在のTCP接続状態を一覧表示するコマンド
# -n: ホスト名解決をしない(IPで表示)
# -t: TCP接続のみ表示
# -p: どのプロセスが通信しているか表示(要root権限)
sudo netstat -ntp
実行結果を見ると、Stateという項目に ESTABLISHED(接続中)や TIME_WAIT(終了待ち)といった表示が出るはずです。これがまさに、TCPが「今の配達状態」を管理している証拠です。
また、トラブルシュートの最強ツール tcpdump を使えば、パケットの中身(フラグの動き)を直接観察できます。
# 特定のポート(443)の通信をキャプチャして中身を見るコマンド
# [S]はSYNフラグ、[.]はACKフラグを指します
sudo tcpdump -i eth0 port 443
—
最後に:ネットワークは「思いやり」でできている
いかがでしたか?TCPヘッダーは、単なるデータの羅列ではなく、「相手に確実に届けるための配慮」の結晶です。
- 「順番通りに並べてね」
- 「届かなかったら言ってね」
- 「終わったらちゃんと閉じてね」
こうしたやり取りの一つひとつが、私たちが何気なく見ているWebサイトの安定感を作っています。まずはこの「送り状」の構造をなんとなくイメージできるようになれば、ネットワークトラブルに直面したときも、「あ、今パケットが再送待ちをしているな」と、パケットの気持ちが少しだけ想像できるようになるはずです。
次回は、このTCPの上で動く「通信の作法」について、もう少し掘り下げていきましょう。現場からは以上です!応援していますよ!
コメント