トランスポート層は IP ネットワークを介してアプリケーション端点を結びます。TCP と UDP はどちらも16ビットのポート番号を使いますが、アプリケーションへ提供する通信モデルと保証は異なります。
ネットワークの基本 · レッスン 6
トランスポート層
TCP と UDP がポートを使い、アプリケーション端点間へ異なる配送の性質を提供する仕組みを学びます。
ポートとソケット
宛先ポートは、OS が待ち受けソケットへ通信を届けるのに役立ちます。接続やフローは1つのポートだけでなく、プロトコル、送信元・宛先アドレス、送信元・宛先ポートの組み合わせで識別します。そのため同じサーバーポートで多数のクライアントを同時に扱えます。
1つの TCP サーバーポートが複数のクライアントを同時に扱えるのはなぜですか?
TCP バイトストリーム
TCP は接続が存続する間、信頼性のある順序付きバイトストリームを提供します。シーケンス番号、確認応答、再送、フロー制御、輻輳制御を使います。アプリケーションメッセージの境界は保持しません。1回の書き込みが複数回の読み取りで届いたり、複数の書き込みが1回の読み取りで返ったりするため、アプリケーション自身がフレーミングを定義します。
信頼性は絶対的な配送ではありません。タイムアウト、リセット、障害があり得て、確認応答もアプリケーションがデータを永続保存した証拠ではありません。
TCP ではアプリケーションメッセージの境界はどうなりますか?
TCP ハンドシェイク
通常の TCP 接続は3ウェイハンドシェイクで始まります。
- 開始側が初期シーケンス情報を持つ
SYNを送る。 - 待ち受け側が自身のシーケンス情報と確認応答を持つ
SYN-ACKを返す。 - 開始側が
ACKを返す。
これにより両端にトランスポート状態を確立しますが、アプリケーションサーバーの認証や、要求操作の成功までは証明しません。
通常の TCP 3ウェイハンドシェイクの順序はどれですか?
UDP データグラム
UDP はデータグラム境界を保持し、チェックサムによるエラー検出を提供しますが、TCP のような接続状態、順序、再送、フロー制御、輻輳制御は提供しません。必要な信頼性や輻輳動作はアプリケーションが追加できます。UDP が自動的に高速とは限らず、性能は設計、ワークロード、経路、実装次第です。
UDP がアプリケーションへ提供する性質はどれですか?
トランスポート端点を調べる
状態を変えずに ss で待ち受け中・接続中のソケットを調べます。
$ ss -lntup
$ ss -tn state established
プロセス情報には権限が必要な場合があります。待ち受けソケットが証明するのはローカルのトランスポート境界での準備だけで、ファイアウォール、ルーティング、アドレスファミリー、TLS、アプリケーションの正常性は別に検査します。
待ち受け中の TCP ソケットが確立する事実は何ですか?
レッスン完了
トランスポート層 を完了しました
TCP のストリーム動作と UDP のデータグラム動作を区別できるようになりました。
プロトコル、アドレス、ポートでフローを識別する。
TCP を、メッセージ境界を持たない信頼性のある順序付きバイトストリームとして扱う。
TCP ハンドシェイクが証明することと、しないことを理解する。
UDP の信頼性と輻輳動作をアプリケーション設計上の選択として扱う。
ローカルソケット状態を越えてアプリケーションの正常性を検証する。