HTTP は TCP の 80 番、DNS は UDP の 53 番のように、通信の話ではポート番号がよく出てきます。学び始めたころは「IP アドレスがあるのに、なぜポート番号も必要なのか」と疑問に思うかもしれません。
この記事では、細かい正確さより全体のつかみやすさを優先して、ポート番号をマンションの部屋番号にたとえて説明します。
- IP アドレスとポート番号の役割の違い(マンション名と部屋番号)
- ウェルノウンポートと、クライアントが使うポートの違い
- リクエストとレスポンスで、送信元と宛先のポート番号がどう入れ替わるか
ポート番号のイメージ
部屋が6万5千室以上もある、超大型のマンションを思い浮かべてください。しかもこのマンションには、TCP 棟と UDP 棟の2棟があります。
マンション名が IP アドレスです。IP アドレスが「インターネットの住所」といわれるのも、このイメージからわかると思います。そして各部屋には、アプリケーションが住んでいます。部屋番号がポート番号です。
ポート番号は 0〜65535 の範囲で、TCP と UDP で別々に数えます。同じ 53 番でも、TCP 棟の 53 号室と UDP 棟の 53 号室は別の部屋です。
0〜1023 号室は、住む人が決まっています。たとえば、TCP 棟の 80 号室には HTTP サーバさんが、UDP 棟の 53 号室には DNS サーバさんが住みます。このように、よく使うサービスのために決められた番号をウェルノウンポート(Well-Known Port)といいます。
| 範囲 | 呼び方 | 主な使われ方 |
|---|---|---|
| 0〜1023 | ウェルノウンポート | HTTP(80)や DNS(53)など、代表的なサービスの番号 |
| 1024〜49151 | 登録済みポート | 特定のアプリケーション向けに登録された番号 |
| 49152〜65535 | 動的・プライベートポート | クライアントが通信のたびに一時的に使う番号 |
| サービス | プロトコル | ポート番号 |
|---|---|---|
| FTP | TCP | 20、21 |
| SSH | TCP | 22 |
| Telnet | TCP | 23 |
| SMTP | TCP | 25 |
| DNS | UDP(TCP も使う) | 53 |
| DHCP | UDP | 67(サーバ)、68(クライアント) |
| HTTP | TCP | 80 |
| NTP | UDP | 123 |
| SNMP | UDP | 161 |
| HTTPS | TCP | 443 |
通信のイメージ
192.168.100.1 マンションにいる HTTP クライアントさんが、192.168.1.1 マンションの HTTP サーバさんへ荷物を届ける場面を考えます。
クライアントさんは、住む人が決まっていない部屋のうち、空いている部屋にまず住みます。ここでは 10000 号室に住み始めたとします。そして、192.168.100.1 マンションの 10000 号室から、192.168.1.1 マンションの TCP 棟 80 号室宛てに荷物を送ります。これで HTTP サーバさんに荷物が届きます。
マンション名だけでは、荷物は自分の部屋に届きません。それと同じで、IP アドレスだけでは、どのアプリケーション(どの部屋)に渡せばよいかがわからず、データを届けられません。
HTTP サーバさんが返事をするときは、受け取った荷物の差出人が 192.168.100.1 マンションの 10000 号室だとわかるので、そこへ返します。返事では、送信元と宛先が入れ替わり、送信元が 80 番、宛先が 10000 番になります。
- クライアントが使う送信元ポートは、OS が空いている番号から自動で選びます。どの範囲から選ぶかは OS や設定によって違います。この記事の 10000 番は説明用の例です。
- ブラウザでタブを2つ開いて同じサーバにつなぐと、それぞれ別の送信元ポートを使います。通信は「送信元 IP、宛先 IP、送信元ポート、宛先ポート、プロトコル」の組み合わせで区別されるので、返事が混ざることはありません。
通信が終わると、クライアントさんは部屋を出ます(ポートを解放します)。一方、HTTP サーバさんは、いつ荷物が届いてもよいように 80 号室に住み続け、待ち受けを続けます。
まとめ
| たとえ | 実際 | 役割 |
|---|---|---|
| マンション名 | IP アドレス | どの機器に届けるかを決める |
| TCP 棟と UDP 棟 | TCP と UDP | ポート番号は TCP と UDP で別々に数える |
| 部屋番号 | ポート番号 | 機器の中のどのアプリケーションに渡すかを決める |
| 住む人が決まった部屋 | ウェルノウンポート(0〜1023) | サーバが待ち受けに使う代表的な番号 |
| 空き部屋に一時的に住む | クライアントの送信元ポート | 通信のたびに OS が空いている番号を選ぶ |
これがポート番号のざっくりしたイメージです。この感覚を持ったうえで TCP/IP の参考書などを読むと、理解が深まると思います。
コメント