00 学習目標
01 トランスポート層の役割
02 多重化とソケット
03 ポート番号
04 TCP と UDP の位置づけ
05 まとめと用語
06 確認問題
学習目標
本講を終えると、以下の問いに学術的な言葉で答えられるようになります。
トランスポート層がホスト間通信 (ネットワーク層が提供)をプロセス間通信 へ拡張する役割を、多重化(multiplexing)/逆多重化(demultiplexing) の用語で説明できる
ポート番号 の3区分(ウェルノウン 0-1023 / 登録 1024-49151 / 動的・私用 49152-65535)と、それぞれの用途を区別できる
ソケット を「(IPアドレス, ポート番号)の組」として定義し、UDP ソケットの逆多重化規則(宛先ポートのみで識別)と TCP ソケットの逆多重化規則(4つ組で識別)の違いを説明できる
トランスポート層にTCP と UDP という二大プロトコルがある理由を、設計上の役割分担として説明できる
このレッスンの目次
トランスポート層の役割 ─ ホスト間からプロセス間へ
ネットワーク層(IP)は、世界中のホストに割り当てられた IP アドレスを頼りに、データグラムをホストからホストへ ベストエフォートで届けます。しかし、現実のホストでは同時に複数のアプリケーション (ブラウザ・メーラ・ビデオ会議・DNS リゾルバ…)が動いており、IP だけでは「届いたデータをどのアプリに渡せばよいか」が判別できません。トランスポート層 はこのギャップを埋め、ホスト間通信をプロセス間通信 へ拡張する層です。
POINT
トランスポート層 = 「プロセス間の論理通信」 を提供する層。
・送信側では複数プロセスからのデータを1本のIP通信に束ねる(多重化 )
・受信側では1本のIP通信を正しいプロセスへ振り分ける(逆多重化 )
・代表プロトコルは TCP (信頼性・順序・フロー/輻輳制御つき) と UDP (最小機能・多重化のみ)
ホスト間通信とプロセス間通信
同じ IP アドレス 192.0.2.10 を持つ1台の PC で、ブラウザ(Web)・メーラ・ビデオ会議アプリの3つが同時にネットを使っているとします。IP ヘッダには宛先 IP しか書いてありませんから、IP だけ見ると「どのアプリ宛か」が決まりません。トランスポート層はここでポート番号 という識別子を導入し、(IPアドレス, ポート番号) の組で個々のアプリ(正確にはソケット) を一意に指せるようにします。
IP はホストまで、トランスポートはプロセスまで
送信ホスト 192.0.2.10
ブラウザ
port: 51234(動的)
DNS リゾルバ
port: 52000(動的)
ビデオ会議
port: 60123(動的)
トランスポート(多重化)
IP 網
ホスト→ホストへ運ぶだけ
受信ホスト 198.51.100.5
トランスポート(逆多重化)
Web サーバ
port: 80 / 443
DNS サーバ
port: 53
SIP / RTP サーバ
port: 5060 / 5004…
図の見方:IP 網が運ぶのは「ホスト→ホスト」の1本の流れだけです。ホストの中に複数のアプリがあるとき、誰のための何のデータかを示すためにポート番号 を使い、トランスポート層が送信側で束ね(多重化)、受信側で振り分け(逆多重化)を行います。
考えてみよう: マンションを思い浮かべてください。建物の住所(=IPアドレス)だけ書いた郵便物では「どの部屋宛か」分かりません。部屋番号(=ポート番号) まで書いて、初めて住人(=プロセス)に届きます。トランスポート層はちょうど「マンションのフロント係」のような働きをしています。
多重化(マルチプレクシング)とソケット
ホスト内では、多重化(multiplexing) と逆多重化(demultiplexing) がトランスポート層の中核機能です。アプリは OS に対してソケット(socket) という抽象を通じて通信を依頼し、トランスポート層がそれぞれのソケットに付いたポート番号を見て送受信を振り分けます。
POINT
ソケット = アプリがネットワークと話すための窓口。(IPアドレス, ポート番号)の組 で一意に識別される。
UDP の逆多重化は「宛先ポート番号」 のみを見る。送信元 IP/ポートが違っても、宛先ポートが同じなら同じソケットに届く。
TCP の逆多重化は (送信元IP, 送信元ポート, 宛先IP, 宛先ポート) の4つ組 を見る(TCP の特徴。詳細は第18回)。
多重化アニメーション ─ 3つのアプリが1本のIPを共有
下の図は、ホスト内の3つのアプリが同じネットワーク経由で外部とやり取りする様子です。送信時はトランスポート層がそれぞれのデータに送信元ポート を付けて1本のIPに集約し、受信時は宛先ポート を見て元のアプリに振り分けます。再生・一時停止で観察してみましょう。
ブラウザ
src port 51234
DNS リゾルバ
src port 52000
ビデオ会議
src port 60123
トランスポート層
IP データグラム(1本の流れ)
トランスポート層
Webサーバ
dst port 443
DNSサーバ
dst port 53
RTPサーバ
dst port 5004
3つのアプリ → 1本のIP → 3つのプロセスへ振り分け
色のついた点が各アプリのデータグラム。ポート番号を見て出口が決まる。
▶ 再生
⏸ 一時停止
⟳ 最初から
図の見方:左の3アプリが送信したデータは、トランスポート層で送信元ポート を頭に付けてから IP に渡されます(多重化)。受信側のトランスポート層は宛先ポート を見て、対応するソケットへ届けます(逆多重化)。物理的には1本のIP通信ですが、論理的には独立した3本の対話が成立します。
UDP ソケットと TCP ソケットの違い(逆多重化規則)
UDP ソケット
識別子は (宛先IPアドレス, 宛先ポート) の2つ組のみ。
宛先ポート 5000 のサーバには、どのクライアントからのデータも同じソケット に届きます。サーバ側で送信元(IP, ポート) を見て返信先を決めます。
TCP ソケット
識別子は (送信元IP, 送信元ポート, 宛先IP, 宛先ポート) の4つ組。
クライアントごとに別ソケットが用意されるため、サーバは複数同時接続を独立に扱えます。これはコネクションを持つ TCP の特徴で、詳細は第18回で扱います。
もっと詳しく:ソケットの中身
OS の API レベルでは、socket システムコールが整数のソケット記述子(file descriptor) を返します。アプリはこの記述子を介して bind (自分のポートを決める)・sendto (UDP で送る)・recvfrom (UDP で受ける) などを呼び出します。OS 内部のソケット構造体には、ローカル/リモートのアドレス・ポート、プロトコル種別、受信バッファなどが保持されており、トランスポート層はパケット到着時にこの構造体を引いて該当アプリへ届ける、という仕組みです。Berkeley sockets API は 1980 年代の BSD UNIX に由来し、現在では POSIX として標準化されています。
ポート番号 ─ 16ビットの識別子
ポート番号は 16 ビットの整数 で、0〜65535 の範囲をとります。IANA(Internet Assigned Numbers Authority) はこの空間を3つに区分し、サービス毎の慣習を定めています。
POINT
ポート番号の3区分(IANA / RFC 6335):
・ウェルノウンポート(Well-Known) 0 〜 1023:標準サービス用(HTTP=80, HTTPS=443, DNS=53, SMTP=25, …)
・登録済ポート(Registered) 1024 〜 49151:申請に応じてアプリ・ベンダに割り当て
・動的・私用ポート(Dynamic / Ephemeral) 49152 〜 65535:クライアント側が一時的に使う
3区分を図で見る
ウェルノウン
0 〜 1023
サーバ標準
登録済
1024 〜 49151
アプリ・ベンダ申請
動的・私用
49152 〜 65535
クライアント一時利用
16 ビットのポート番号空間(0 〜 65535)
幅は実数比に近づけた目安(全 65536 ポート中、ウェルノウンは約 1.6%)
図の見方:全 65536 個のポートのうち、慣習でサーバが使う「ウェルノウン」はごく一部です。クライアントは通信を始めるたびに、空いている動的ポートから1つ選んで自分の送信元ポートとし、相手に返事をもらう「戻り口」として使います。
ウェルノウンポートの代表例
ポート プロトコル 役割 主に使う L4
20 / 21 FTP ファイル転送(データ / 制御) TCP
22 SSH 暗号化リモートログイン TCP
25 SMTP メール送信・転送 TCP
53 DNS ドメイン名解決 UDP (主)/ TCP
67 / 68 DHCP IP アドレス自動設定(サーバ/クライアント) UDP
69 TFTP 簡易ファイル転送(ブートローダ等) UDP
80 HTTP Web 平文 TCP
123 NTP 時刻同期 UDP
161 / 162 SNMP ネットワーク機器管理(Get/Trap) UDP
443 HTTPS / HTTP/3 Web 暗号化(TLS) / QUIC TCP / UDP
UDP を主に使うサービス(DNS・DHCP・SNMP・NTP・TFTP など)は、
1往復で完結する小さなやり取り か、
定期的にばらまく 性質を持つ点で共通しています。これは UDP のコネクションレス性と相性が良いためです。詳しくは
第19回 UDP で取り上げます。
動的ポートの選ばれ方
クライアントがサーバに接続するとき、自分用の送信元ポートを動的ポート範囲 (IANA 推奨 49152〜65535)から OS が選びます。実際の Linux カーネルではデフォルト範囲が /proc/sys/net/ipv4/ip_local_port_range で設定されており、ディストリビューションによっては 32768〜60999 など IANA 推奨より広い値が採用されています [要確認:具体的な数値はディストリビューション・カーネルバージョンに依存]。同じ送信元ポートが複数の通信で衝突しないよう、OS が空きを管理します。
小問:ウェルノウンポートの範囲として正しいものはどれですか。
A. 0 〜 255
B. 0 〜 1023
C. 1024 〜 49151
D. 49152 〜 65535
正解: B 。ウェルノウンポートは 0〜1023 で、HTTP(80)・HTTPS(443)・DNS(53) などの標準サービスが慣習的に使います。1024〜49151 は登録済(C)、49152〜65535 は動的・私用(D)です。A は IPv4 の8ビット値(オクテット)の範囲で、ポート番号とは無関係です。
考えてみよう: ブラウザで https://example.com を開いたとき、サーバ側のポートはほぼ確実に 443 です。一方、自分側(送信元)のポートは 51234 など、毎回違う動的ポートが選ばれます。なぜサーバ側だけ番号を固定にする慣習があるのでしょうか?(ヒント:クライアントは「どこに連絡すればよいか」を事前に知る必要があるが、サーバはクライアントから来た情報で返事先を知れる。)
TCP と UDP の位置づけ ─ 同じ層に並ぶ二つの選択肢
トランスポート層は「多重化を提供する」という共通土台を持ちつつ、その上に設計思想の異なる2つのプロトコル を並列に置いています。アプリは用途に応じて TCP か UDP を選びます。次回以降の各論に入る前に、両者の役割分担を俯瞰しておきましょう。
POINT
トランスポート層の二大プロトコル:
・TCP(Transmission Control Protocol, RFC 9293) ─ コネクション指向。再送・順序保証・フロー制御・輻輳制御つき。バイトストリーム抽象。
・UDP(User Datagram Protocol, RFC 768) ─ コネクションレス。多重化と簡易な誤り検出だけ。データグラム抽象。
どちらも本講で導入したポート番号・ソケット・多重化 の枠組みの上に乗る。
TCP と UDP の早見表
観点 TCP UDP
コネクション あり(3ウェイハンドシェイク) なし(コネクションレス)
信頼性 あり(ACK・再送) なし
順序保証 あり(シーケンス番号で並べ直し) なし
フロー制御 あり(受信窓 RcvWindow) なし
輻輳制御 あり(CongWin・AIMD 等) なし
ヘッダ長 最小 20 バイト(オプション込で最大 60) 固定 8 バイト
抽象 バイトストリーム(境界が消える) データグラム(境界が保たれる)
1対多通信 1対1のみ マルチキャスト・ブロードキャスト可
典型用途 HTTP/1.1, 2 / SMTP / SSH / FTP / IMAP DNS / DHCP / SNMP / NTP / VoIP / 動画 / ゲーム / QUIC
「どちらを選ぶか」の判断軸
TCP が向く場面
欠落・順序逆転が許されない :Web ページ、ファイル転送、メール、トランザクション
長く流れ続けるデータ:バイトストリームとして扱える方が便利
1対1の確立した会話:同じ相手と複数の往復をする
UDP が向く場面
1往復で完結する短い問い合わせ :DNS、NTP、SNMP
初期化通信のため TCP の前提が成り立たない :DHCP は IP 取得前に動く
リアルタイム性 > 信頼性 :VoIP、ライブ動画、ゲーム ─ 古いデータを再送しても無意味
1対多のばらまき :ブロードキャスト・マルチキャスト
アプリ層で独自の信頼性・輻輳制御を組みたい :QUIC(HTTP/3)
つながる知識: 「TCP は信頼性、UDP は速さ」という二分はおおむね正しい一方、QUIC(HTTP/3 が乗る)はUDP の上にアプリ層で TCP 相当の信頼性 を実装するという、新しい中間設計です。本講で固めた「ポート・ソケット・多重化」の上に、TCP・UDP・そして QUIC のような応用がどう積み上がるかを意識しておくと、第18回(TCP)・第19回(UDP)・発展編の QUIC 回への流れが一本に見えてきます。
Q. 「トランスポート層がプロセス間通信を提供する」とよく言われますが、ではネットワーク層(IP)が提供する通信 は何と何の間の通信でしょうか? 自分の言葉で答えてからクリック。
解答を見る
答えは「ホスト間通信」 です。
IP は IP アドレスで識別されるホスト(NIC) からホスト へデータグラムを運ぶ層。
ホストの中で動くアプリ(プロセス)を区別する仕掛けは IP には存在しない 。
そこで トランスポート層が ポート番号 を導入し、IP が運ぶ「ホスト→ホスト」の上に「プロセス→プロセス」の論理通信を作る。
つまり階層関係は次のようにまとめられます:
アプリケーション層 (意味のあるメッセージ) ↑トランスポート層 (プロセス間通信 = ホスト間通信 + ポート) ↑ネットワーク層 / IP (ホスト間通信) ↑リンク層 (隣接ノード間通信)
まとめと用語チェック
SUMMARY
1. トランスポート層 = ホスト間通信をプロセス間通信 へ拡張する層(多重化 / 逆多重化 )
2. ポート番号 は 16 ビットで、ウェルノウン(0-1023) / 登録(1024-49151) / 動的(49152-65535) の3区分
3. ソケット = (IPアドレス, ポート番号) の組。UDP では宛先ポートのみで逆多重化、TCP では4つ組で識別
4. トランスポート層にはTCP (信頼性・コネクション指向)とUDP (最小機能・コネクションレス)の二大プロトコルが並ぶ
5. アプリは「欠落不可・順序必須」なら TCP、「短い問い合わせ・リアルタイム性・独自制御」なら UDP を選ぶ
用語チェック
用語 1行説明
トランスポート層 OSI 第4層 / TCP/IP 第3層。プロセス間の論理通信を提供する
多重化(マルチプレクシング) 送信側で複数プロセスのデータを1本のIP通信に束ねる処理
逆多重化(デマルチプレクシング) 受信側で1本のIP通信を正しいプロセスに振り分ける処理
ポート番号 ホスト内のプロセス(ソケット)を識別する 16 ビットの番号
ウェルノウンポート 0〜1023。HTTP・DNS など標準サービス用に IANA が予約
登録済ポート 1024〜49151。アプリ・ベンダの申請に応じて IANA が割り当てる
動的(エフェメラル)ポート 49152〜65535。クライアントが一時的に使う送信元ポート
ソケット (IPアドレス, ポート番号) の組。アプリがネットワークと話す窓口
TCP(Transmission Control Protocol) RFC 9293。コネクション指向・信頼性つきのトランスポート
UDP(User Datagram Protocol) RFC 768。コネクションレス・8バイトヘッダの最小トランスポート
コネクションレス 事前のハンドシェイクなしで送信できる通信モデル
コネクション指向 送信前に双方で論理回線を確立してから通信するモデル
NEXT: 次回(第18回)は、本講で固めた多重化・ポート・ソケット の枠組みのうえに、信頼性のあるトランスポートである TCP を載せていきます。3ウェイハンドシェイク・シーケンス番号・ACK・再送・フロー制御・輻輳制御(AIMD)まで一気に深掘りします。続く第19回では、対極にある最小機能トランスポート UDP を、8 バイトヘッダから DNS / DHCP / VoIP / QUIC などの用途まで扱います。
確認問題
問1. トランスポート層の主たる役割の説明として、最も適切なものを1つ選べ。
次の選択肢から最も適切なものを選択してください。
A. 物理的な電気信号を符号化してケーブルへ送出する
B. ホストとホストの間で IP アドレスに基づいて経路を決定する
C. 同一ホスト上で動作する複数のプロセス間に論理的な通信を提供する(多重化と逆多重化)
D. ドメイン名と IP アドレスの対応関係を管理する
正解:C
トランスポート層はホスト間通信(IP が提供)をプロセス間通信に拡張する層であり、その鍵が多重化(送信側で束ねる)と逆多重化(受信側で振り分ける)です。A は物理層(L1)、B はネットワーク層(L3 / IP)、D はアプリケーション層の DNS の役割です。
問2. ポート番号の3区分について、正しい組み合わせを1つ選べ。
次の選択肢から最も適切なものを選択してください。
A. ウェルノウン:0〜255 / 登録:256〜32767 / 動的:32768〜65535
B. ウェルノウン:0〜1023 / 登録:1024〜49151 / 動的:49152〜65535
C. ウェルノウン:1〜1024 / 登録:1025〜32768 / 動的:32769〜65536
D. ウェルノウン:0〜4095 / 登録:4096〜49151 / 動的:49152〜65535
正解:B
IANA / RFC 6335 によると、ウェルノウンは 0〜1023(HTTP=80, DNS=53 など標準サービス)、登録済は 1024〜49151(申請に応じて割り当て)、動的・私用は 49152〜65535(クライアントの一時利用)です。なお Linux など実装では動的ポート範囲が IANA 推奨より広く取られていることもあります。
問3. ソケットの定義として、最も正確なものを1つ選べ。
次の選択肢から最も適切なものを選択してください。
A. (IPアドレス, ポート番号) の組で識別される、アプリがネットワークと通信するための窓口
B. ルータの物理ポートのうち LAN ケーブルが挿してあるもの
C. 特定の URL を指す文字列
D. プロセス ID(PID) と等価な識別子
正解:A
ソケットはアプリとネットワークをつなぐ窓口の抽象で、(IPアドレス, ポート番号) の組で一意に識別されます。OS の API では socket が返すソケット記述子(file descriptor)を介して操作します。B は物理ポート、C は URL、D は OS 内のプロセス識別子で、いずれもソケットとは別物です。
問4. UDP と TCP の逆多重化(demultiplexing)の違いについて、正しい記述を1つ選べ。
次の選択肢から最も適切なものを選択してください。
A. UDP は4つ組(送信元IP・送信元ポート・宛先IP・宛先ポート)で識別、TCP は宛先ポートのみで識別する
B. UDP も TCP も宛先ポート番号のみで識別する
C. UDP も TCP も4つ組で識別する
D. UDP は宛先ポートのみ、TCP は4つ組(送信元IP・送信元ポート・宛先IP・宛先ポート)で識別する
正解:D
UDP の逆多重化は宛先ポート番号だけを見るため、同じ宛先ポートに対するデータは送信元によらず同じソケット に届きます。一方 TCP はコネクションを保持するため、4つ組で識別し、クライアント毎に独立したソケットを用意します。これは TCP がサーバ側で多数の同時接続を独立に扱える理由になっています。
問5. クライアントがブラウザで https://example.com にアクセスする場合、送信元ポート に使われる典型的な値はどの範囲から選ばれるか。
次の選択肢から最も適切なものを選択してください。
A. 0〜1023 のウェルノウンポートから選ばれる(443 が選ばれることが多い)
B. 49152〜65535 などの動的・私用ポート範囲から、OS が空きを選んで割り当てる
C. 必ず固定で 80 が使われる
D. ポート番号は使われない(IP アドレスのみで通信が成立する)
正解:B
クライアントの送信元ポートは、通信を始めるたびに OS が動的ポート範囲(IANA 推奨 49152〜65535、Linux ではより広い範囲)から空いている値を選びます。一方サーバ側の宛先ポートは標準サービスを示すウェルノウンポート(HTTPS なら 443) が固定で使われます。クライアント側まで固定にすると、同じホストから同時に複数の接続を張れなくなってしまうため、動的に選ぶのが理にかなっています。