ネットワークの教科書NETWORK

第4章 通信の制御4-3コース全体 19回中15本目

入門読了 約8分

ポート番号とは ― IPアドレスとの役割分担

「ポート番号 とは」で調べている人向け。IPアドレスとの役割の違い、0〜65535という範囲の根拠、HTTP・HTTPS・DNSなど主要なポート番号、送信元ポートが混ざらない理由までを整理します。

結論

ポート番号は、1台のコンピュータの中で「どのアプリ宛てか」を区別する番号

通信を届けるには、実は2段階の宛先指定が必要です。IPアドレスが「どのコンピュータか」を決め、ポート番号が「そのコンピュータの中のどのアプリ宛てか」を決めます。IPアドレスだけでは、 Webサーバ宛てなのかメールサーバ宛てなのか、同じ1台の中で区別がつきません。

建物にたとえるとIPアドレスは建物の住所、ポート番号は部屋番号です。住所だけでは建物の前までしか届かず、 部屋番号がなければどの部屋(アプリ)に渡せばよいか分かりません。

ポート番号は0〜65535の数字1つで、TCPとUDPのヘッダにそれぞれ格納されています。 以下ではこの範囲の根拠と、実際にどう使われているかを順番に見ていきます。

根拠

なぜ0〜65535なのか

ポート番号はTCP・UDPヘッダの中で16ビットの領域に格納されます。16ビットで表せる組み合わせは2¹⁶ = 65536通りです。

0から数え始めるため、65536個目の値は65535になります。だからポート番号の範囲は0〜65535(65536個)です。

サブネットマスクの記事で「2のべき乗の個数を、0から数えた最大値と混同しない」という話をしましたが、 ここでも同じ考え方です。個数は65536ですが、番号としての最大値は1小さい65535になります。

分類

ポート番号の3つの区分

0〜65535のポート番号は、IANA(インターネットの番号資源を管理する組織)によって 用途ごとに3つの範囲に区分されています。

01,02449,15265,535ウェルノウン(0–1023)登録済み(1024–49151)動的(49152–65535)
ポート番号 0〜65535 のうち、ウェルノウンポートは先頭のごくわずかな範囲(1,024個)だけ。残りの大部分を登録済みポートと動的ポートが占める。
区分範囲個数特徴
ウェルノウンポート0〜10231,024個IANAが代表的なプロトコル用に割り当てた番号
登録済みポート1024〜4915148,128個特定のソフトウェアやサービスがIANAに登録して使う番号
動的ポート49152〜6553516,384個特定の用途に固定せず、通信のたびにOSが一時的に割り当てる番号

図と表からわかるとおり、ウェルノウンポートは全体からすればごくわずかな範囲です。 HTTPやHTTPSなど、誰もが知っている代表的なサービスの番号はこの狭い範囲に集まっています。

Linuxなど多くのOSでは、この歴史的な経緯から0〜1023番でアプリを待ち受けさせるには管理者権限が必要です。 1024番以降は一般ユーザーの権限でも自由に使えます。
一覧

主要なポート番号

いずれもウェルノウンポートに属する、代表的なサービスのポート番号です。 サーバ側が待ち受ける番号(宛先ポート番号)だと考えてください。

サービスプロトコルポート番号
HTTPTCP80
HTTPSTCP443
DNSUDP / TCP53
DHCP(サーバ側)UDP67
DHCP(クライアント側)UDP68
SSHTCP22
FTP(データ)TCP20
FTP(制御)TCP21
SMTPTCP25
POP3TCP110
IMAPTCP143

FTPだけ制御用(21番)とデータ転送用(20番)の2つの番号を使う点に注意してください。 またDNSは、通常の問い合わせはUDPの53番、応答が大きくなるゾーン転送などではTCPの53番も使います。

しくみ

送信元ポートはどう決まるか

ここまでのポート番号は、すべて宛先(サーバ側)の番号でした。 では通信元(クライアント側)のポート番号は誰が決めるのでしょうか。

答えはOSです。PCがサーバへ新しく接続するたびに、OSは49152〜65535の動的ポートの中から、そのとき空いている番号を1つ選び、送信元ポート番号として自動的に割り当てます。人が指定する必要はありません (接続そのものを確立する3ウェイハンドシェイクの手順は前回の記事で扱いました)。

この仕組みのおかげで、同じPCから同じサイトへ2つのタブで同時にアクセスしても、通信は混ざりません。 2つの通信は、宛先IPアドレス・宛先ポート番号(サーバ側の443番)まではまったく同じですが、 OSがタブごとに別の送信元ポート番号を割り当てるため、戻ってきたデータがどちらのタブ宛てかを正しく区別できます。

PC192.168.1.5タブA52001タブB52002サーバ203.0.113.10:443宛先は共通宛先443へ宛先443へ
送信元IPアドレス・宛先IPアドレス・宛先ポート番号はどちらの通信も同じだが、送信元ポート番号(52001と52002)だけが違う。この1点の違いだけで、PCは戻ってきた通信をタブAとタブBに正しく振り分けられる。

なお、家庭用ルータの先でこの送信元ポートがさらに書き換えられる仕組み(NAPT)については、プライベートIPアドレスとNATの記事で扱っています。ここでは、 1台のPCの中で通信を区別しているのが送信元ポート番号だという点だけ押さえておけば十分です。

注意

TCPのポートとUDPのポートは別物

ポート番号の領域は、TCPヘッダとUDPヘッダにそれぞれ独立して存在します。 つまりTCPの80番とUDPの80番は、番号が同じというだけで、実際には無関係の別々の窓口です。 TCPの80番が使用中かどうかは、UDPの80番の空き状況にはまったく影響しません。

例:DNSDNSは同じ53番という番号を、UDPとTCPの両方で使っています。これは「1つのポート番号を2つのプロトコルで共有している」のではなく、UDPの53番TCPの53番という、たまたま同じ数字を持つ2つの別々の窓口を、用途に応じて使い分けているだけです。

次回は、このDNS自体のしくみ(ドメイン名をIPアドレスに変える方法)を扱います。

練習

練習問題(全5問)

選んでから「採点する」を押すと、解説つきで答え合わせができます。

Q1ポート番号の範囲として正しいものは?
Q2ウェルノウンポートの範囲は?
Q3HTTPSの通信で使われるポート番号は?
Q4同じPCで同じWebサイトを2つのタブで開いても通信が混ざらないのはなぜ?
Q5TCPのポート80番とUDPのポート80番の関係として正しいものは?
次の回

コースを読み進める