コンテンツにスキップ
TCP と UDP のどちらを使うかは、何を基準に決まるか。

到達と順序の保証が必要かどうかで決まる。TCP は確認応答と再送で保証を得る。 UDP は保証を持たず、ヘッダは 8 オクテットと TCP の 20 オクテットより小さい。

IP アドレスがホストを特定するのに、なぜポート番号が必要なのか。

1 台のホストの上で複数のアプリケーションが同時に通信するため。IP アドレスは「どのホストか」までしか 特定できず、その中のどのアプリケーションへ渡すかはポート番号が決める。

トランスポート層はポート番号でアプリケーションを識別し、信頼性を確保する TCP と、配送と重複防止を保証しない UDP がある。

観点TCPUDP
接続コネクション型(3 ウェイハンドシェイクで確立)コネクションレス
配送の保証再送によって全セグメントの配送を確保する保証しない
順序全オクテットにシーケンス番号が付く保証しない
重複の検出累積的な確認応答の機構によって検出できる保証しない
流量の調整受信側が広告するウィンドウに従う(根拠にした記録に無い)
経路の混雑への対処輻輳制御あり(RFC 5681)(根拠にした記録に無い)
ヘッダ長(オプション除く)20 オクテット8 オクテット
アプリケーションの識別ポート番号ポート番号

RFC 1122 は Transport Layer を「アプリケーションのために端点どうしの通信サービスを提供する層」と位置づけ、 コネクション型の TCP とコネクションレスの UDP を挙げている。どちらもポート番号を使ってアプリケーションを識別する。 RFC 9293 は、TCP がポート番号によってアプリケーションサービスを識別し、ホスト間の別々の流れを多重化すると述べている。

TCP は通信に先立ってコネクションを確立する。RFC 9293 によれば、この同期は 「双方が自分の初期シーケンス番号を送り、相手からその確認応答を受け取る」ことを必要とする。

データについては、TCP コネクション上で送られるすべてのオクテットにシーケンス番号が付く。 確認応答は累積的で、シーケンス番号 X の確認応答は「X を含まない、そこまでのすべてのオクテットを受け取った」ことを示す。 そして TCP は再送によって全セグメントの配送を確保する。

流量の調整には 2 つの別な仕組みがある。1 つは受信側が「自分が受け取れる量」を広告するウィンドウで、 もう 1 つは送信側が経路の混雑を推定する輻輳ウィンドウである。RFC 5681 は、送信側が 「確認済みの最大シーケンス番号に cwnd と rwnd の小さい方を足した値」を超えるデータを送ってはならないと定めている。 つまり送信側は自分の混雑推定と相手の受け取り能力の、厳しい方に従う。

RFC 768 は UDP を「トランザクション指向であり、配送と重複防止は保証されない」と述べている。 順序の保証もなく、順序付きで信頼できる配送が必要なアプリケーションは TCP を使うべきだとしている。 ヘッダは送信元ポート、宛先ポート、長さ、チェックサムの 4 つで、合計 8 オクテットである。

ネットワーク層のプロトコル との違い

観点トランスポート層のプロトコル(このノート)ネットワーク層のプロトコル
届ける相手ホストの中のアプリケーションホスト
宛先の指定ポート番号IP アドレス
到達と順序の保証選んだプロトコル(TCP / UDP)によるなし

前提

関連