第4章 通信の制御|4-3|コース全体 19回中15本目
ポート番号とは ― IPアドレスとの役割分担
「ポート番号 とは」で調べている人向け。IPアドレスとの役割の違い、0〜65535という範囲の根拠、HTTP・HTTPS・DNSなど主要なポート番号、送信元ポートが混ざらない理由までを整理します。
ポート番号は、1台のコンピュータの中で「どのアプリ宛てか」を区別する番号
通信を届けるには、実は2段階の宛先指定が必要です。IPアドレスが「どのコンピュータか」を決め、ポート番号が「そのコンピュータの中のどのアプリ宛てか」を決めます。IPアドレスだけでは、 Webサーバ宛てなのかメールサーバ宛てなのか、同じ1台の中で区別がつきません。
ポート番号は0〜65535の数字1つで、TCPとUDPのヘッダにそれぞれ格納されています。 以下ではこの範囲の根拠と、実際にどう使われているかを順番に見ていきます。
なぜ0〜65535なのか
ポート番号はTCP・UDPヘッダの中で16ビットの領域に格納されます。16ビットで表せる組み合わせは2¹⁶ = 65536通りです。
サブネットマスクの記事で「2のべき乗の個数を、0から数えた最大値と混同しない」という話をしましたが、 ここでも同じ考え方です。個数は65536ですが、番号としての最大値は1小さい65535になります。
ポート番号の3つの区分
0〜65535のポート番号は、IANA(インターネットの番号資源を管理する組織)によって 用途ごとに3つの範囲に区分されています。
| 区分 | 範囲 | 個数 | 特徴 |
|---|---|---|---|
| ウェルノウンポート | 0〜1023 | 1,024個 | IANAが代表的なプロトコル用に割り当てた番号 |
| 登録済みポート | 1024〜49151 | 48,128個 | 特定のソフトウェアやサービスがIANAに登録して使う番号 |
| 動的ポート | 49152〜65535 | 16,384個 | 特定の用途に固定せず、通信のたびにOSが一時的に割り当てる番号 |
図と表からわかるとおり、ウェルノウンポートは全体からすればごくわずかな範囲です。 HTTPやHTTPSなど、誰もが知っている代表的なサービスの番号はこの狭い範囲に集まっています。
主要なポート番号
いずれもウェルノウンポートに属する、代表的なサービスのポート番号です。 サーバ側が待ち受ける番号(宛先ポート番号)だと考えてください。
| サービス | プロトコル | ポート番号 |
|---|---|---|
| HTTP | TCP | 80 |
| HTTPS | TCP | 443 |
| DNS | UDP / TCP | 53 |
| DHCP(サーバ側) | UDP | 67 |
| DHCP(クライアント側) | UDP | 68 |
| SSH | TCP | 22 |
| FTP(データ) | TCP | 20 |
| FTP(制御) | TCP | 21 |
| SMTP | TCP | 25 |
| POP3 | TCP | 110 |
| IMAP | TCP | 143 |
FTPだけ制御用(21番)とデータ転送用(20番)の2つの番号を使う点に注意してください。 またDNSは、通常の問い合わせはUDPの53番、応答が大きくなるゾーン転送などではTCPの53番も使います。
送信元ポートはどう決まるか
ここまでのポート番号は、すべて宛先(サーバ側)の番号でした。 では通信元(クライアント側)のポート番号は誰が決めるのでしょうか。
答えはOSです。PCがサーバへ新しく接続するたびに、OSは49152〜65535の動的ポートの中から、そのとき空いている番号を1つ選び、送信元ポート番号として自動的に割り当てます。人が指定する必要はありません (接続そのものを確立する3ウェイハンドシェイクの手順は前回の記事で扱いました)。
この仕組みのおかげで、同じPCから同じサイトへ2つのタブで同時にアクセスしても、通信は混ざりません。 2つの通信は、宛先IPアドレス・宛先ポート番号(サーバ側の443番)まではまったく同じですが、 OSがタブごとに別の送信元ポート番号を割り当てるため、戻ってきたデータがどちらのタブ宛てかを正しく区別できます。
なお、家庭用ルータの先でこの送信元ポートがさらに書き換えられる仕組み(NAPT)については、プライベートIPアドレスとNATの記事で扱っています。ここでは、 1台のPCの中で通信を区別しているのが送信元ポート番号だという点だけ押さえておけば十分です。
TCPのポートとUDPのポートは別物
ポート番号の領域は、TCPヘッダとUDPヘッダにそれぞれ独立して存在します。 つまりTCPの80番とUDPの80番は、番号が同じというだけで、実際には無関係の別々の窓口です。 TCPの80番が使用中かどうかは、UDPの80番の空き状況にはまったく影響しません。
次回は、このDNS自体のしくみ(ドメイン名をIPアドレスに変える方法)を扱います。
練習問題(全5問)
選んでから「採点する」を押すと、解説つきで答え合わせができます。
正解:0〜65535
ポート番号は16ビットで表され、2¹⁶ = 65536通りの値を持ちます。0から数えるため、最大値は65536ではなく65535になります。
正解:0〜1023
0〜1023がウェルノウンポートです。1024〜49151は登録済みポート、49152〜65535は動的ポートです。
正解:443
HTTPSは443番です。80番はHTTP、21番はFTPの制御用、25番はSMTPのポート番号です。
正解:送信元のポート番号がタブごとに異なる値になるから
宛先(サーバ側)のIPアドレスとポート番号はどちらのタブでも同じです。違うのは送信元ポート番号で、OSが接続のたびに動的ポートの中から空いている番号を割り当てます。この1点の違いだけで、PCは戻ってきた通信をどちらのタブ宛か区別できます。
正解:TCPとUDPはそれぞれ別のポート番号の並びを持ち、無関係の別の窓口として扱われる
ポート番号はTCPヘッダとUDPヘッダにそれぞれ別に存在する16ビットの領域です。番号が同じ80番でも、TCPの80番とUDPの80番は完全に独立していて、一方が使用中でももう一方には影響しません。