トランスポート層のプロトコル
TCP と UDP のどちらを使うかは、何を基準に決まるか。
到達と順序の保証が必要かどうかで決まる。TCP は確認応答と再送で保証を得る。 UDP は保証を持たず、ヘッダは 8 オクテットと TCP の 20 オクテットより小さい。
IP アドレスがホストを特定するのに、なぜポート番号が必要なのか。
1 台のホストの上で複数のアプリケーションが同時に通信するため。IP アドレスは「どのホストか」までしか 特定できず、その中のどのアプリケーションへ渡すかはポート番号が決める。
トランスポート層はポート番号でアプリケーションを識別し、信頼性を確保する TCP と、配送と重複防止を保証しない UDP がある。
| 観点 | TCP | UDP |
|---|---|---|
| 接続 | コネクション型(3 ウェイハンドシェイクで確立) | コネクションレス |
| 配送の保証 | 再送によって全セグメントの配送を確保する | 保証しない |
| 順序 | 全オクテットにシーケンス番号が付く | 保証しない |
| 重複の検出 | 累積的な確認応答の機構によって検出できる | 保証しない |
| 流量の調整 | 受信側が広告するウィンドウに従う | (根拠にした記録に無い) |
| 経路の混雑への対処 | 輻輳制御あり(RFC 5681) | (根拠にした記録に無い) |
| ヘッダ長(オプション除く) | 20 オクテット | 8 オクテット |
| アプリケーションの識別 | ポート番号 | ポート番号 |
RFC 1122 は Transport Layer を「アプリケーションのために端点どうしの通信サービスを提供する層」と位置づけ、 コネクション型の TCP とコネクションレスの UDP を挙げている。どちらもポート番号を使ってアプリケーションを識別する。 RFC 9293 は、TCP がポート番号によってアプリケーションサービスを識別し、ホスト間の別々の流れを多重化すると述べている。
TCP が信頼性を得る仕組み
Section titled “TCP が信頼性を得る仕組み”TCP は通信に先立ってコネクションを確立する。RFC 9293 によれば、この同期は 「双方が自分の初期シーケンス番号を送り、相手からその確認応答を受け取る」ことを必要とする。
データについては、TCP コネクション上で送られるすべてのオクテットにシーケンス番号が付く。 確認応答は累積的で、シーケンス番号 X の確認応答は「X を含まない、そこまでのすべてのオクテットを受け取った」ことを示す。 そして TCP は再送によって全セグメントの配送を確保する。
流量の調整には 2 つの別な仕組みがある。1 つは受信側が「自分が受け取れる量」を広告するウィンドウで、 もう 1 つは送信側が経路の混雑を推定する輻輳ウィンドウである。RFC 5681 は、送信側が 「確認済みの最大シーケンス番号に cwnd と rwnd の小さい方を足した値」を超えるデータを送ってはならないと定めている。 つまり送信側は自分の混雑推定と相手の受け取り能力の、厳しい方に従う。
UDP が保証しないこと
Section titled “UDP が保証しないこと”RFC 768 は UDP を「トランザクション指向であり、配送と重複防止は保証されない」と述べている。 順序の保証もなく、順序付きで信頼できる配送が必要なアプリケーションは TCP を使うべきだとしている。 ヘッダは送信元ポート、宛先ポート、長さ、チェックサムの 4 つで、合計 8 オクテットである。
ネットワーク層のプロトコル との違い
| 観点 | トランスポート層のプロトコル(このノート) | ネットワーク層のプロトコル |
|---|---|---|
| 届ける相手 | ホストの中のアプリケーション | ホスト |
| 宛先の指定 | ポート番号 | IP アドレス |
| 到達と順序の保証 | 選んだプロトコル(TCP / UDP)による | なし |
前提
関連