TCPとIPの基本
informationnetworksundergraduatelecture
data/lecture/information/networks/computer-network-basics.lecture.n.md
1導入
この講義では、IPによるデータグラム転送と、TCPによるバイトストリーム転送の責務を区別する。IPが提供するサービスの限界を確認したうえで、TCPが順序制御と再送によってどのような信頼性を付加するかを説明する。
2ネットワーク層とトランスポート層
IPはネットワーク層のプロトコルである。IPアドレスはネットワーク層のインタフェースを識別し、ルータは宛先IPアドレスのプレフィックスに基づいてデータグラムを次ホップへ転送する。経路情報を形成することをルーティング、その情報に従って個々のデータグラムを転送することをフォワーディングという。
TCPはトランスポート層のプロトコルであり、IPの上に構成される。TCPは後述するポート番号とIPアドレスを組み合わせて通信端点を識別し、アプリケーション間のデータ転送を支援する。
3IPのベストエフォート転送
IPは、上位層から受け取ったデータをIPデータグラムとして宛先へ転送する。ただし、IPが提供するサービスはベストエフォートである。ネットワークの混雑や機器の障害などにより、データグラムが欠落することも、送信順序と異なる順序で到着することも、重複して到着することもある。IPは、到達、到着順序、重複排除を保証しない。
4TCPの信頼性のあるバイトストリーム
TCPは、接続の両端に順序付きバイトストリームを提供する。TCPはデータへ通し番号を付与し、受信側からの確認応答によって受信状況を確認する。確認応答が得られないデータを再送し、順序が入れ替わったデータを整列することにより、アプリケーションへ順序付きのデータ列を渡す。
TCPは全二重通信を支援するため、両方向へ同時にバイトストリームを転送できる。ただし、TCPはアプリケーションが送信した個々のメッセージの境界を保存しない。アプリケーションは、データの長さや区切りを独自のプロトコルで表現する必要がある。
5ポート番号とTCP接続
IPアドレスがネットワーク層のインタフェースを識別するのに対し、ポート番号はTCPなどの特定のトランスポートプロトコルとIPアドレスの文脈で通信端点を識別する。TCP接続は、送信元IPアドレス、送信元ポート番号、宛先IPアドレス、宛先ポート番号の組みによって概念的に識別できる。
クライアントは一般に一時的なポート番号を使用し、サーバは提供するサービスに対応するポート番号で接続を待つ。ポート番号があるため、同一のIPアドレスを持つ計算機で複数のアプリケーションが通信できる。
6カプセル化と通信手順
アプリケーションのデータはTCPセグメントに格納され、TCPセグメントはIPデータグラムのペイロードに格納される。このように、上位層のデータへ下位層の制御情報を付加することをカプセル化という。
\text{アプリケーションデータ}
\longrightarrow \text{TCPセグメント}
\longrightarrow \text{IPデータグラム}
たとえば、HTTP/1.1またはHTTP/2の通信では、HTTPのデータをTCPがバイトストリームとして転送し、そのTCPセグメントをIPがデータグラムとして宛先へ転送する。
7保証範囲
TCPの信頼性は、接続が維持されている間に、送信側のバイト列を順序どおりに受信側へ提供することを対象とする。障害によって接続が失敗した場合の最終的な配送や、受信側のアプリケーションがデータを処理したことまでは保証しない。「TCPは常にデータを配送する」と解釈してはならない。
8要点
- IPはデータグラムをベストエフォートで転送し、到達や順序を保証しない。
- TCPはIPの上に順序付きで信頼性のある全二重バイトストリームを構成する。
- IPアドレスはネットワーク層のインタフェースを識別し、ポート番号はトランスポートプロトコルとIPアドレスの文脈で通信端点を識別する。
- TCPの保証は、アプリケーションによる処理完了の保証とは異なる。
9次に進む講義
data/lecture/information/networks/dns-basics.lecture.n.md