ネットワークの深淵へようこそ。今日は、インフラエンジニアの登竜門であり、ネットワークの「心臓部」とも言えるソケット通信と五つ組(5-tuple)についてお話しします。
「OSI参照モデル? パケット? 難しそう…」と身構える必要はありません。まずは、私たちの身近にある「手紙」のやり取りから紐解いていきましょう。
—
1. ネットワークは「巨大な郵便局」である
私たちがWebサイトを見るとき、裏側では膨大な量のデータがパケットという「封筒」に入れられて飛び交っています。
手紙が正しい相手に届くためには、何が必要でしょうか?
- 誰から(送信元)
- 誰へ(宛先)
- 何の手紙か(プロトコル:招待状なのか請求書なのか)
ネットワークの世界でも全く同じです。コンピュータ同士が通信するとき、OSは「この通信は誰と誰の、何のやり取りなのか」を識別するために、五つ組(5-tuple)という「管理札」をパケットに貼り付けます。
五つ組(5-tuple)の正体
五つ組とは、通信を一意に特定するための以下の5つの情報のセットです。
1. 送信元IPアドレス:あなたのコンピュータの住所
2. 送信元ポート番号:あなたのコンピュータ内の「どのアプリケーション(ブラウザ?メール?)」が送ったか
3. 宛先IPアドレス:相手のコンピュータ(サーバー)の住所
4. 宛先ポート番号:相手のコンピュータ内の「どのサービス(Webサーバー?DB?)」宛か
5. プロトコル:通信のルール(TCPかUDPか)
この5つが全て一致していれば、それは「同じセッション(会話のつながり)」であると判断されます。逆に言えば、一つでも欠けたり異なれば、それは別の通信として扱われるわけです。
—
2. 「ソケット」とは、窓口のこと
次に「ソケット」という概念について。これは、コンピュータというビルの中にある「通信専用の窓口」だと考えてください。
ブラウザでWebサイトを開こうとすると、OSはメモリ上に専用の「窓口(ソケット)」を一つ作成します。この窓口には、先ほどの五つ組がラベルとして貼られます。
- 窓口(ソケット)の中身:
192.168.1.10:54321(自分)と93.184.216.34:443(相手)が握手している。
OSは、届いたパケットのラベルを見て、「お、これはあの窓口に届けるべき郵便物だな」と判断し、該当するアプリケーションにデータを渡します。これが、PCの中で複数のタブを開いていても通信が混ざらない理由です。
—
3. Pythonで覗いてみる、通信のリアル
理屈はわかったけれど、実際に見てみないと実感が湧きませんよね。Pythonを使って、ごくシンプルな通信の「窓口」を作ってみましょう。
import socket
# 通信の窓口(ソケット)を作成します
# AF_INETはIPv4、SOCK_STREAMはTCP通信を意味します
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 宛先を指定(今回は例としてGoogleのサーバー)
server_address = ('www.google.com', 80)
# 通信を開始(ここで五つ組の一部が決まります)
s.connect(server_address)
# 自分の窓口(ローカルポート)を確認してみましょう
print(f"ローカル側(自分)の接続情報: {s.getsockname()}")
print(f"リモート側(相手)の接続情報: {s.getpeername()}")
# 終わったら窓口を閉じます
s.close()
このコードを実行すると、getsockname() でOSが自動的に割り当てた「送信元ポート番号」が表示されます。このように、OSは「空いている窓口」を探して通信を管理しているんです。
—
4. 現場のトラブルシューティングで役立つコマンド
インフラの現場で「通信が繋がらない!」という緊急事態に直面したとき、真っ先に確認すべきなのがこの五つ組です。
Linuxサーバーで現在どんな「窓口」が開いているかを確認するには、ss コマンド(昔で言う netstat)を使います。
# 現在確立されているTCP通信をすべて表示する
ss -nt
実行結果を見ると、こんな感じの表示が並びます。
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 0 192.168.1.5:443 203.0.113.10:56789
Local Address:Portが「自分側の五つ組」Peer Address:Portが「相手側の五つ組」
これを見れば、「どのポートが」「どこから」使われているか一目瞭然ですよね。ファイアウォール(iptablesやAWSのセキュリティグループ)で通信を許可・拒否する際も、この五つ組のどれを指定するかで設定の意味が変わってきます。
—
最後に:ネットワークを「視る」力を養おう
五つ組とソケット。最初は難しく感じるかもしれませんが、要は「誰が・誰と・何をしているか」を厳密に管理するための名札に過ぎません。
トラブルが起きたとき、パケットの海に溺れそうになったら、まずは深呼吸して「今、五つ組はどうなっているか?」を思い出してください。そこには必ず、解決のヒントが隠されています。
ネットワークの世界は、触れば触るほど奥が深い。これからも一緒に、一歩ずつレベルアップしていきましょう!
コメント