NET // communication networks
LESSON 17 / 標準編

トランスポート層の役割 ─ 多重化・ソケット・ポート

本講では、トランスポート層を「プロセス間通信を提供する層」として捉え直します。ネットワーク層(IP)が運ぶのは「ホスト→ホスト」の流れだけで、同じホスト上で動く複数アプリのうちどれが受け取るべきかは判別できません。トランスポート層は ポート番号 という識別子と ソケット という抽象を導入し、IP の上に「プロセス→プロセス」の論理通信路を作ります。送信側で複数プロセスの流れを 1 本に束ねる多重化と、受信側で正しいプロセスへ振り分ける逆多重化を、図と対話操作で深く整理します。次回以降に学ぶ TCP(信頼性つき)・UDP(最小機能)はいずれもこの枠組みの上に乗ります。

学習目標

本講を終えると、以下の問いに学術的な言葉で答えられるようになります。

本講は 標準編シリーズの 第11回 ネットワークの全体像 ─ 階層化とカプセル化(標準) で導入したカプセル化と、基礎編の 第3回 プロトコルと TCP/IP 階層モデル(基礎) で触れた TCP/UDP の対比を前提とします。次回(第18回)では本講で固めた多重化・ポート・ソケットの枠組みのうえに TCP(コネクション指向・3ウェイハンドシェイク・再送・フロー制御・輻輳制御) を、続く第19回ではUDP(最小機能・コネクションレス・8 バイトヘッダ) を載せていきます。

このレッスンの目次

01 トランスポート層の役割 ネットワーク層(IP)は、世界中のホストに割り当てられた IP アドレスを頼りに、デ… 02 多重化とソケット ホスト内では、 多重化(multiplexing) と 逆多重化(demultipl… 03 ポート番号 ポート番号は 16 ビットの整数 で、0〜65535 の範囲をとります。IANA(I… 04 TCP と UDP の位置づけ 同じ「多重化を提供する層」の上に、設計思想の異なる 2 つのプロトコルが並びます… 05 まとめと用語 本講の重要語句を整理 06 確認問題 理解度を問題でチェック

トランスポート層の役割 ─ ホスト間からプロセス間へ

ネットワーク層(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 / 21FTPファイル転送(データ / 制御)TCP
22SSH暗号化リモートログインTCP
25SMTPメール送信・転送TCP
53DNSドメイン名解決UDP(主)/ TCP
67 / 68DHCPIP アドレス自動設定(サーバ/クライアント)UDP
69TFTP簡易ファイル転送(ブートローダ等)UDP
80HTTPWeb 平文TCP
123NTP時刻同期UDP
161 / 162SNMPネットワーク機器管理(Get/Trap)UDP
443HTTPS / HTTP/3Web 暗号化(TLS) / QUICTCP / 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 が空きを管理します。

小問:ウェルノウンポートの範囲として正しいものはどれですか。
正解: 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 の早見表

観点TCPUDP
コネクションあり(3ウェイハンドシェイク)なし(コネクションレス)
信頼性あり(ACK・再送)なし
順序保証あり(シーケンス番号で並べ直し)なし
フロー制御あり(受信窓 RcvWindow)なし
輻輳制御あり(CongWin・AIMD 等)なし
ヘッダ長最小 20 バイト(オプション込で最大 60)固定 8 バイト
抽象バイトストリーム(境界が消える)データグラム(境界が保たれる)
1対多通信1対1のみマルチキャスト・ブロードキャスト可
典型用途HTTP/1.1, 2 / SMTP / SSH / FTP / IMAPDNS / 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)が提供する通信は何と何の間の通信でしょうか? 自分の言葉で答えてからクリック。

まとめと用語チェック

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) が固定で使われます。クライアント側まで固定にすると、同じホストから同時に複数の接続を張れなくなってしまうため、動的に選ぶのが理にかなっています。
← PREV
第16回 telnet で覗くアプリ層
NEXT →
第18回 TCP の信頼性