
コンピュータネットワークにおいて、ポイントツーポイントプロトコル(PPP)は、間にホストや他のネットワークを介さずに直接2台のルータ間で行われるデータリンク層(レイヤー2)通信プロトコルです。 [ 1 ]ループ検出、認証、伝送暗号化、[ 2 ]データ圧縮などの機能を提供します。
PPPは、シリアルケーブル、電話回線、幹線、携帯電話、専用無線リンク、ISDN、SONETなどの光ファイバーリンクなど、様々な種類の物理ネットワークで使用されています。IPパケットは、送信フレームの開始位置と終了位置を識別できるデータリンクプロトコルがなければ、モデム回線だけで送信できないため、インターネットサービスプロバイダー(ISP)は、顧客のインターネットへのダイヤルアップアクセスにPPPを使用しています。
PPPは、以前のダイヤルアップネットワーク回線で使用されています。 [ 3 ] PPPの2つの派生技術であるPoint-to-Point Protocol over Ethernet(PPPoE)とPoint-to-Point Protocol over ATM(PPPoA)は、ISPが顧客とのデジタル加入者線(DSL)インターネットサービスLP接続を確立するために最も一般的に使用されています。
PPP は、同期回線および非同期回線での接続におけるデータリンク層プロトコルとして非常に一般的に使用されており、古いシリアルラインインターネットプロトコル(SLIP) や電話会社が規定した標準 ( X.25プロトコルスイートのリンクアクセスプロトコル、バランス(LAPB)など) に取って代わっています。 PPP の唯一の要件は、提供される回線が二重であることです。 PPP は、インターネットプロトコル(IP)、TRILL、Novell のインターネットワークパケット交換(IPX)、NBF、DEC net、AppleTalkなど、さまざまなネットワーク層プロトコルで機能するように設計されています。 SLIP と同様に、これはモデムを介した電話回線を介した完全なインターネット接続です。 インターネットパケットが損傷なく到着することを二重にチェックするため、SLIP よりも信頼性があります。[ 4 ]損傷したパケットを再送信します。
PPPは、オリジナルのHDLC仕様に多少倣って設計されました。PPPの設計者は、当時まで独自のデータリンクプロトコルにしか見られなかった多くの追加機能を組み込みました。PPPはRFC 1661で仕様が規定されています。
RFC 2516 では、DSLで使用されることもあるEthernet上で PPP を伝送する方法として、Point-to-Point Protocol over Ethernet (PPPoE) について説明しています。RFC 2364 では、 ATMアダプテーション層 5 ( AAL5 )上で PPP を伝送する方法として、Point-to-Point Protocol over ATM (PPPoA) について説明しています。これも、 DSL で使用される PPPoE の一般的な代替手段です。
PPP、PPPoE、PPPoAはWAN回線で広く使用されています。
PPPは3つのコンポーネントを持つ階層型プロトコルです。[ 4 ]
LCPは接続をスムーズに開始および終了し、ホスト間の接続オプションのネゴシエーションを可能にします。これはPPPの不可欠な要素であり、同じ標準仕様で定義されています。LCPは、両端のインターフェースの自動設定(データグラムサイズ、エスケープ文字、マジックナンバーの設定など)と、オプションの認証の選択を提供します。LCPプロトコルはPPP(PPPプロトコル番号0xC021)上で実行されるため、LCPによる設定を行う前に、基本的なPPP接続を確立する必要があります。
RFC 1994では、ISPとのダイヤルアップ接続の確立に推奨されるチャレンジハンドシェイク認証プロトコル(CHAP)について規定されています。廃止されているものの、パスワード認証プロトコル(PAP)も依然として使用されることがあります。
PPP 経由の認証のもう 1 つのオプションは、RFC 2284 で説明されている 拡張認証プロトコル(EAP) です。
リンクが確立された後、追加のネットワーク(レイヤー3)構成が行われる場合があります。最も一般的にはインターネットプロトコル制御プロトコル(IPCP)が使用されますが、かつてはインターネットワークパケット交換制御プロトコル(IPXCP)やAppleTalk制御プロトコル(ATCP)も普及していました。[ 5 ] [ 6 ] 将来、IPv6が主要なレイヤー3プロトコルとして IPv4に取って代わると、インターネットプロトコルバージョン6制御プロトコル(IPv6CP)の使用が拡大するでしょう。
| IP | |||
| LCP | チャップパップEAP | IPCP | |
| PPPカプセル化 | |||
| HDLCのようなフレーミング | PPPoE | PPPoA | |
| RS-232 | POS | イーサネット | ATM |
| ソネット/SDH | |||
PPPは、複数のネットワーク層プロトコルを同一の通信リンク上で動作させることを可能にします。使用されるネットワーク層プロトコルごとに、複数のネットワーク層プロトコルのオプションをカプセル化し、ネゴシエートするために、個別のネットワーク制御プロトコル(NCP )が提供されます。NCPは、接続が確立された後、 ネットワークアドレスや圧縮オプションなどのネットワーク層情報をネゴシエートします。
例えば、IP は IPCP を使用し、Internetwork Packet Exchange (IPX) は Novell IPX Control Protocol ( IPX/SPX ) を使用します。NCP には、PPP 接続がカプセル化するネットワーク層プロトコルの種類を示す標準化されたコードを含むフィールドが含まれています。
PPP では次の NCP を使用できます。
PPPはマジックナンバー機能を用いてループしたリンクを検出します。ノードがPPP LCPメッセージを送信する際、これらのメッセージにはマジックナンバーが含まれる場合があります。回線がループしている場合、ノードはピアのマジックナンバーを含むメッセージではなく、自身のマジックナンバーを含むLCPメッセージを受信します。
前のセクションでは、特定のWAN接続要件を満たすためのLCPオプションの使用について説明しました。PPPには、次のLCPオプションが含まれる場合があります。
PPP フレームはHDLCフレーム のバリエーションです。
| 名前 | バイト数 | 説明 |
|---|---|---|
| フラグ | 1 | 0x7E、PPPフレームの始まり |
| 住所 | 1 | 0xFF、標準ブロードキャストアドレス |
| コントロール | 1 | 0x03、番号なしデータ |
| プロトコル | 2 | 埋め込みデータのPPP ID |
| 情報 | 変数(0以上) | データグラム |
| パディング | 変数(0以上) | オプションのパディング |
| フレームチェックシーケンス | 2 | フレームチェックサム |
| フラグ | 1 | 0x7E、連続するPPPパケットでは省略される |
両ピアがLCP中のアドレスフィールドと制御フィールドの圧縮に同意した場合、これらのフィールドは省略されます。同様に、両ピアがプロトコルフィールドの圧縮に同意した場合、0x00バイトは省略できます。
プロトコルフィールドはペイロードパケットのタイプを示します。LCPの場合は0xC021 、各種NCPの場合は0x80xy 、IPの場合は0x0021、AppleTalkの場合は0x0029、IPXの場合は0x002B、マルチリンクの場合は0x003D、NetBIOSの場合は0x003F 、MPPCおよびMPPEの場合は0x00FDなどです。[ 7 ] PPPには制限があり、イーサタイプとは異なり、一般的なレイヤー3データを含めることはできません。
情報フィールドにはPPPペイロードが含まれます。このフィールドは可変長で、最大転送単位( MTU)と呼ばれるネゴシエートされた最大値を持ちます。デフォルトでは、最大値は1500オクテットです。伝送時にパディングが行われる場合があります。特定のプロトコルの情報がパディング可能な場合、そのプロトコルは情報とパディングを区別できるようにする必要があります。
PPPフレームは、フレーミング機能を提供する下位層プロトコルにカプセル化され、伝送エラーを検出するためのチェックサムなどの他の機能も提供される場合があります。シリアルリンク上のPPPは通常、 IETF RFC 1662で規定されている HDLCに類似したフレーミングでカプセル化されます。
| 名前 | バイト数 | 説明 |
|---|---|---|
| フラグ | 1 | フレームの開始または終了を示す |
| 住所 | 1 | ブロードキャストアドレス |
| コントロール | 1 | 制御バイト |
| プロトコル | 1または2または3 | 情報フィールドのl |
| 情報 | 変数(0以上) | データグラム |
| パディング | 変数(0以上) | オプションのパディング |
| FCS | 2(または4) | エラーチェック |
フラグ フィールドは、HDLC のようなフレーミングを備えた PPP が使用される場合に存在します。
アドレス フィールドと制御フィールドの値は、常に 16 進数 FF (「すべてのステーション」) と 16 進数 03 (「番号なし情報」) であり、PPP LCP アドレスおよび制御フィールド圧縮 (ACFC) がネゴシエートされるときは省略できます。
フレームチェックシーケンス(FCS)フィールドは、個々のフレームにエラーがあるかどうかを判定するために使用されます。このフィールドは、フレーム全体にわたって計算されたチェックサムを含み、伝送中のエラーに対する基本的な保護を提供します。これは、イーサネットで使用されるものなど、他のレイヤー2プロトコルのエラー保護方式で使用されるCRCコードに類似しています。RFC 1662によると、FCSのサイズは16ビット(2バイト)または32ビット(4バイト)のいずれかです(デフォルトは16ビット - 多項式x 16 + x 12 + x 5 + 1)。
FCS は、メッセージがカプセル化された後、アドレス、制御、プロトコル、情報、およびパディング フィールドに対して計算されます。
マルチリンクPPP ( MLPPP、MP、MPPP、MLP 、またはマルチリンクとも呼ばれる)は、複数の異なるPPP接続にトラフィックを分散させる方式を提供します。RFC 1990で定義されています。例えば、従来の56Kモデム2台を使用して自宅のコンピュータをインターネットサービスプロバイダに接続したり、2本の専用線を介して企業間を接続したりするのに使用できます。
単一のPPP回線ではフレームが順序どおりに到着することはありませんが、複数のPPP接続に分割されている場合は順序が乱れる可能性があります。そのため、マルチリンクPPPでは、フレームが到着した際に正しい順序に戻せるよう、フラグメントに番号を付ける必要があるのです。
マルチリンクPPPはリンク集約技術の一例です。Cisco IOSリリース11.1以降はマルチリンクPPPをサポートしています。
PPP では、単一のリンク上で複数の異なる PPP 接続を同時に確立することはできません。
マルチリンクPPPではこれも不可能です。マルチリンクPPPはパケットのすべてのフラグメントに連続した番号を使用するため、あるパケットのフラグメントシーケンスの送信を中断して別のパケットを送信するということはできません。これにより、同じリンク上でマルチリンクPPPを複数回実行することが防止されます。
マルチクラスPPPは、トラフィックの各「クラス」が個別のシーケンス番号空間と再構成バッファを使用するマルチリンクPPPの一種です。マルチクラスPPPはRFC 2686で定義されています。
| 応用 | FTP | SMTP | HTTP | … | DNS | … |
| 輸送 | TCP | UDP | ||||
| ネットワーク | IP | |||||
| データリンク | 購買力平価 | |||||
| 応用 | SSH | |||||
| 輸送 | TCP | |||||
| ネットワーク | IP | |||||
| データリンク | イーサネット | ATM | ||||
| 物理的な | ケーブル、ハブなど | |||||
PPTP (Point-to-Point Tunneling Protocol) は、暗号化 ( MPPE ) と圧縮 ( MPPC ) を使用してGRE経由で 2 つのホスト間を接続する PPP の形式です。
IPネットワーク上でデータをトンネリングするには、多くのプロトコルを使用できます。SSL 、SSH、L2TPなどは仮想ネットワークインターフェースを作成し、トンネルエンドポイント間に直接的な物理接続があるかのように見せかけます。例えばLinuxホストでは、これらのインターフェースはtun0またはppp0と呼ばれます。
トンネルにはエンドポイントが2つしかないため、トンネルはポイントツーポイント接続となり、仮想ネットワークインターフェース間のデータリンク層プロトコルとしてPPPが最適な選択肢となります。PPPはこれらの仮想インターフェースにIPアドレスを割り当てることができ、これらのIPアドレスは、例えばトンネルの両側のネットワーク間のルーティングに使用できます。
歴史的に、トンネルモードのIPsecは、トンネルがTCP/IPスタックによって直接処理されるため、トンネルの終端に仮想物理インターフェースを作成しませんでした。L2TPはこれらのインターフェースを提供するために使用でき、この技術はL2TP/IPsecと呼ばれます。この場合も、PPPはトンネルの終端にIPアドレスを提供します。最近のIPsec実装では、仮想トンネルインターフェース、つまりVTIインターフェースが提供されています。VTIインターフェースは、2000年代半ばから独自プラットフォームで利用可能になっています[ 8 ]。また、2012年からはLinuxでも利用可能です[ 9 ]。
PPPはRFC 1661(ポイントツーポイントプロトコル、1994年7月)で定義されています。RFC 1547(インターネット標準ポイントツーポイントプロトコルの要件、1993年12月)は、PPPの必要性と開発に関する歴史的情報を提供しています。TCP /IP、DECnet、AppleTalk、IPXなど、様々なネットワーク制御プロトコルがPPPとどのように連携するかを定義する一連の関連RFCが作成されており、それらはIETFのウェブサイトDatatrackerで閲覧できます。[ 10 ]