1. 序論 (Introduction)
PPTP は、クライアント・サーバーアーキテクチャを使用して、既存のネットワークアクセスサーバー (Network Access Server, NAS) の機能を分離することを可能にします。従来、NAS は以下の機能を実装していました。
-
PSTN または ISDN への物理的なネイティブインターフェースと外部モデムまたは端末アダプターの制御
NAS は、電気通信会社のアナログまたはデジタル回線に直接インターフェースするか、外部モデムまたは端末アダプターを介して接続することができます。回線交換接続の制御は、モデム制御または DSS1 ISDN 呼制御プロトコルのいずれかで実現されます。
NAS は、モデムまたは端末アダプターと連携して、レート適応、アナログからデジタルへの変換、同期から非同期への変換、またはデータストリームの他の多くの変更を実行することができます。
-
ポイントツーポイントプロトコル (Point-to-Point Protocol, PPP) リンク制御プロトコル (Link Control Protocol, LCP) セッションの論理的な終端
-
PPP 認証プロトコル [3,9,10] への参加
-
PPP マルチリンクプロトコル (Multilink Protocol) のチャネル集約とバンドル管理
-
各種 PPP ネットワーク制御プロトコル (Network Control Protocol, NCP) の論理的な終端
-
NAS インターフェース間のマルチプロトコルルーティングおよびブリッジング
PPTP は、これらの機能を PAC と PNS の間で分割します。PAC は機能 1、2、および場合によっては機能 3 を担当します。PNS は機能 3 を担当する場合があり、機能 4、5、6 を担当します。PAC と PNS の間で PPP プロトコルデータユニット (Protocol Data Unit, PDU) を伝送するために使用されるプロトコル、および呼制御と管理は PPTP によって対処されます。
NAS 機能の分離により、以下の利点が提供されます。
柔軟な IP アドレス管理。ダイヤルインユーザーは、共通の PNS からサービスを受ける限り、異なる PAC にダイヤルインする際に単一の IP アドレスを維持できます。企業ネットワークが未登録アドレスを使用する場合、企業に関連付けられた PNS は、プライベートネットワークに意味のあるアドレスを割り当てます。
IP ネットワークの背後にあるダイヤルネットワークに対する非 IP プロトコルのサポート。これにより、例えば AppleTalk や IPX を IP のみのプロバイダー経由でトンネリングすることができます。PAC はこれらのプロトコルを処理する必要がありません。
「マルチリンクハントグループ分割」問題の解決。通常 ISDN B チャネルを集約するために使用されるマルチリンク PPP (Multilink PPP) は、マルチリンクバンドルを構成するすべてのチャネルが単一の NAS にグループ化される必要があります。マルチリンク PPP バンドルは単一の PNS で処理できるため、バンドルを構成するチャネルは複数の PAC に分散される可能性があります。
1.1. プロトコルの目標と前提 (Protocol Goals and Assumptions)
PPTP プロトコルは PAC と PNS によってのみ実装されます。他のシステムは PPTP を認識する必要がありません。ダイヤルネットワークは、PPTP を認識することなく PAC に接続できます。標準 PPP クライアントソフトウェアは、トンネル化された PPP リンク上で引き続き動作するべきです (SHOULD)。
PPTP は、IP ネットワーク経由で PPP セッションをトンネリングするためにも使用できます。この構成では、PPTP トンネルと PPP セッションは同じ 2 台のマシン間で実行され、発呼者が PNS として機能します。
PAC と PNS の間には多対多の関係があることが想定されています。1 つの PAC は多数の PNS にサービスを提供できます。例えば、インターネットサービスプロバイダーは、多数のプライベートネットワーククライアントに対して PPTP をサポートし、それらのために VPN を作成することを選択できます。各プライベートネットワークは、1 つ以上の PNS を運用できます。単一の PNS は、多数の地理的に分散したサイトからのトラフィックを集中させるために、多数の PAC と関連付けることができます。
PPTP は、ユーザー PPP パケットを伝送するために GRE の拡張バージョンを使用します。これらの拡張機能により、PAC と PNS 間でユーザーデータを伝送するために使用されるトンネルに低レベルの輻輳制御およびフロー制御を提供できます。このメカニズムにより、トンネルで利用可能な帯域幅を効率的に使用でき、不要な再送信やバッファオーバーランを回避できます。PPTP は、この低レベル制御に使用される特定のアルゴリズムを規定していませんが、これらのアルゴリズムが機能するために通信する必要があるパラメーターを定義しています。推奨されるアルゴリズムは、セクション 4 に含まれています。
1.2. 用語 (Terminology)
アナログチャネル (Analog Channel)
各方向で 3.1 kHz のオーディオを伝送することを目的とした回線交換通信パス。
デジタルチャネル (Digital Channel)
各方向でデジタル情報を伝送することを目的とした回線交換通信パス。
呼 (Call)
PSTN または ISDN 上の 2 つの端末エンドポイント間の接続または接続試行。例えば、2 つのモデム間の電話呼。
制御接続 (Control Connection)
各 PAC-PNS ペアに対して作成され、TCP 上で動作する接続。制御接続は、トンネルとトンネルに割り当てられたセッションの側面を管理します。
ダイヤルユーザー (Dial User)
オンデマンド PSTN または ISDN に接続されたエンドシステムまたはルーターで、呼の発信者または受信者のいずれかです。
ネットワークアクセスサーバー (Network Access Server, NAS)
ユーザーに一時的なオンデマンドネットワークアクセスを提供するデバイス。このアクセスは、PSTN または ISDN 回線を使用したポイントツーポイント接続です。
PPTP アクセスコンセントレーター (PPTP Access Concentrator, PAC)
1 つ以上の PSTN または ISDN 回線に接続され、PPP 操作と PPTP プロトコルの処理が可能なデバイス。PAC は、1 つ以上の PNS にトラフィックを渡すために TCP/IP のみを実装する必要があります。非 IP プロトコルをトンネリングすることもできます。
PPTP ネットワークサーバー (PPTP Network Server, PNS)
PNS は、汎用コンピューティング/サーバープラットフォーム上で動作することが想定されています。PNS は PPTP プロトコルのサーバー側を処理します。PPTP は TCP/IP に完全に依存し、インターフェースハードウェアから独立しているため、PNS は LAN および WAN デバイスを含む任意の IP インターフェースハードウェアの組み合わせを使用できます。
セッション (Session)
PPTP はコネクション型です。PNS と PAC は、PAC に接続されている各ユーザーの状態を維持します。ダイヤルユーザーと PNS 間でエンドツーエンド PPP 接続が試行されると、セッションが作成されます。セッションに関連するデータグラムは、PAC と PNS 間のトンネルを介して送信されます。
トンネル (Tunnel)
トンネルは PNS-PAC ペアによって定義されます。トンネルプロトコルは、GRE の修正バージョンによって定義されます。トンネルは、PAC と PNS 間で PPP データグラムを伝送します。複数のセッションが単一のトンネル上で多重化されます。TCP 上で動作する制御接続が、セッションとトンネル自体の確立、解放、および維持を制御します。
1.3. プロトコル概要 (Protocol Overview)
PPTP には 2 つの並列コンポーネントがあります: 1) 各 PAC-PNS ペア間で TCP 上で動作する制御接続、2) 同じ PAC-PNS ペア間で動作し、ペア間のユーザーセッション用の GRE カプセル化 PPP パケットを転送するために使用される IP トンネル。
1.3.1. 制御接続概要 (Control Connection Overview)
PAC と PNS 間で PPP トンネリングが発生する前に、それらの間に制御接続を確立する必要があります。制御接続は、PPTP 呼制御および管理情報が渡される標準の TCP セッションです。制御セッションは、PPTP トンネルを介してトンネリングされるセッションと論理的に関連付けられていますが、分離されています。各 PAC-PNS ペアには、トンネルと制御接続の両方が存在します。制御接続は、トンネルを介して伝送されるセッションの確立、管理、および解放を担当します。これは、関連する PAC での着信呼が PNS に通知される手段であり、また PAC が発信ダイヤル呼を行うように指示される手段でもあります。
制御接続は、PNS または PAC のいずれかによって確立できます。必要な TCP 接続の確立に続いて、PNS と PAC は Start-Control-Connection-Request および -Reply メッセージを使用して制御接続を確立します。これらのメッセージは、PAC と PNS の基本的な動作能力に関する情報を交換するためにも使用されます。制御接続が確立されると、PAC または PNS は、アウトバウンド呼を要求するか、インバウンド要求に応答することによってセッションを開始できます。制御接続は、Set-Link-Info メッセージを使用して、個々のユーザーセッションの動作特性の変化を伝達できます。個々のセッションは、PAC または PNS のいずれかによって、制御接続メッセージを介して解放されることもあります。
制御接続自体は、キープアライブエコーメッセージによって維持されます。これにより、PNS と PAC 間の接続障害をタイムリーに検出できます。その他の障害は、制御接続上の Wan-Error-Notify メッセージを介して報告できます。
制御接続は、将来的には、PNS が特定の PAC のステータスを要求できるようにするメッセージなど、管理関連のメッセージも伝送することが意図されています。これらのメッセージタイプはまだ定義されていません。
1.3.2. トンネルプロトコル概要 (Tunnel Protocol Overview)
PPTP は、通信する各 PNS-PAC ペアに対してトンネルを確立する必要があります。このトンネルは、特定の PNS-PAC ペアに関係するすべてのユーザーセッション PPP パケットを伝送するために使用されます。GRE ヘッダーに存在するキーは、特定の PPP パケットがどのセッションに属するかを示します。
このようにして、PPP パケットは、特定の PNS-PAC ペア間の単一のトンネル上で多重化および多重化解除されます。キーフィールドで使用する値は、制御接続上で行われる呼確立手順によって確立されます。
GRE ヘッダーには、トンネル上である程度の輻輳制御とエラー検出を実行するために使用される確認応答およびシーケンス情報も含まれています。制御接続は、トンネルを介した特定のセッションの PPP パケットのフローを調整するために使用されるレートとバッファリングパラメーターを決定するために再度使用されます。PPTP は、輻輳制御とフロー制御に使用する特定のアルゴリズムを規定していません。トンネル上でドロップされたデータまたは確認応答から回復するための適応タイムアウトの決定に関する提案アルゴリズムは、本文書のセクション 4.4 に含まれています。
1.4. メッセージフォーマットとプロトコル拡張性 (Message Format and Protocol Extensibility)
PPTP は、PNS と特定の PAC 間の制御接続上で TCP データとして送信される一連のメッセージを定義します。制御接続の TCP セッションは、ポート 1723 への TCP 接続を開始することによって確立されます。送信元ポートは、未使用の任意のポート番号に割り当てられます。
各 PPTP 制御接続メッセージは、8 オクテットの固定ヘッダー部分で始まります。この固定ヘッダーには、メッセージの全長、PPTP メッセージタイプインジケーター、および「マジッククッキー」が含まれています。
PPTP メッセージタイプフィールドは、2 つの制御接続メッセージタイプを示します:
- 1 - 制御メッセージ (Control Message)
- 2 - 管理メッセージ (Management Message)
管理メッセージは現在定義されていません。
マジッククッキーは常に定数 0x1A2B3C4D として送信されます。その基本的な目的は、受信者が TCP データストリームと適切に同期していることを確認できるようにすることです。送信者が不適切にフォーマットされたメッセージを発行した場合、TCP データストリームを再同期する手段として使用すべきではありません (SHOULD NOT)。同期の喪失は、制御接続の TCP セッションの即座のクローズを引き起こさなければなりません (MUST)。
明確化のため、次のセクションのすべての制御接続メッセージテンプレートには、完全な PPTP 制御接続メッセージヘッダーが含まれています。0x で始まる数値は16進数値です。
現在定義されている制御メッセージ(機能別にグループ化)は次のとおりです:
制御接続管理 (Control Connection Management)
- Start-Control-Connection-Request (1)
- Start-Control-Connection-Reply (2)
- Stop-Control-Connection-Request (3)
- Stop-Control-Connection-Reply (4)
- Echo-Request (5)
- Echo-Reply (6)
呼管理 (Call Management)
- Outgoing-Call-Request (7)
- Outgoing-Call-Reply (8)
- Incoming-Call-Request (9)
- Incoming-Call-Reply (10)
- Incoming-Call-Connected (11)
- Call-Clear-Request (12)
- Call-Disconnect-Notify (13)
エラー報告 (Error Reporting)
- WAN-Error-Notify (14)
PPP セッション制御 (PPP Session Control)
- Set-Link-Info (15)
Start-Control-Connection-Request および -Reply メッセージは、使用される制御接続プロトコルのバージョンを決定します。これらのメッセージで伝送されるバージョン番号フィールドは、上位オクテットのバージョン番号と下位オクテットのリビジョン番号で構成されます。バージョン処理については、セクション 2 で説明されています。バージョン番号フィールドの現在の値は、バージョン 1、リビジョン 0 の場合は 0x0100 です。
PPP ユーザーパケットのカプセル化に使用される GRE ライクヘッダーの使用は、セクション 4.1 で規定されています。
GRE にカプセル化されたユーザーデータパケットの MTU は、IP および GRE ヘッダーを含まない 1532 オクテットです。