PPP とは
PPP (Point to Point Protocol , 読み方 : ぴーぴーぴー) は ISDN などのシリアルインタフェースでの通信方式の 1 つです。
通信のフォーマットだけでなく、制御手順も含まれます。制御は HDLC とほぼ同じ手続きですが、大きく違う点は、PPP には認証機能があることです。
その他、ヘッダ圧縮や品質監視、マルチリンク等の付加機能も特徴的です。
昔の ISDN の時代ではよく使われておりましたが、今は基本的に使われません。
ただし、最近は Ethernet 上で PPP の認証機能を使う PPPoE が主流ですので、技術自体は今も使われています。
PPP は LCP (Link Control Protocol) と NCP (Network Control Protocol) の 2 つのプロトコルから成ります。
LCP は主にリンク確立や認証、ヘッダ圧縮、キープアライブなど、通信の環境を整える働きをします。
一方、NCP は上位層に関する環境を整える働きをします。PPPの上位層として IP を使う場合の NCP を特に IPCP と言い、DHCP のように IP アドレスやデフォルトルートの割り当て等の NW 情報を提供します。
PPPのフレームフォーマット
PPPのフレームフォーマットは下記の通りです。
F
フラグです。通信の開始と終了を示しています。"01111110"で固定となります。
A
アドレスです。常にブロードキャストであるため常に"11111111"となります。
C
コントロールです。HDLCで規定されている「非番号制フレーム」を表す"00000011"で固定となります。
Protocol Type
PPP上に乗っているデータが制御系通信(LCP, PAP/CHAP認証, IPCP)なのか、通常のIP通信なのかを示します。
Code
制御系通信の場合、コードによって機能がさらに分類されます。
LCP/IPCP においては Ox01 と Ox02 で接続要求、接続承認を行い、その後は Ox09 と Ox0a で KeepAlive をし続けます。
接続を終了するときは Ox05 と Ox06 でやり取りを終えます。
PAP や CHAP においてはそれぞれのシーケンスに沿ってコードが割り当てられています。
Type
LCP/IPCP においてはさらに Typeで機能が分類されます。
LCP では MRU (MTU と同義) のネゴを行ったり、PAP を使うのか CHAP を使うのかを事前にネゴを行います。
IPCP では相手から IP アドレスをもらい、それを自身の PPP インタフェースに振ることができます。ただし、その時のサブネットマスクは必ず /32 になりますが、ポイント to ポイントインタフェースなのでサブネットは意味を成さないので問題ありません (ルーティングでは NextHop は IP ではなくインタフェースのみを指定するので)。
また、DNS サーバや WINS サーバの情報も取得できます。
なお、Cisco では IPCP でデフォルトルートをもらう、と誤解しそうな設定がありますが、実際にはもらっていません。
下記コマンドを設定したルータ上で、PPP のリンクが張れた際に、NextHop を PPP インタフェースにしてデフォルトルートを Static で作る機能です。
Dialer インタフェースでは通常の Static ルートを書くと CEF になりません (そもそも CEF の機能は『「ルーティングテーブル」と「NextHop IP の ARP テーブル」を FIB に 1 つにまとめ、ルーティングを 1 ステップで HW 処理できること』ですが、NextHop は IP ではないため) が、この設定では CEF によるルーティングが可能になります。
(config-if)# ppp ipcp route default
Ciscoの設定-簡易構成
以下のように R1 と R2 を PPP で接続する構成を考えます。R2 は R1 から IP アドレスをもらい、自動でデフォルトルートを作る設定とします。
シリアル IF での通信を PPP でカプセル化するためには以下を設定します。これが設定されていないとデフォルトの HDLC が利用されます。
(config-if)# encapsulation ppp
PPP のリンク先端末の IF にここで指定した IP アドレスを提示するためには以下を設定します。
(config-if)# peer default ip address [ip address]
peer default ip address コマンドにより提示された IP アドレスをローカル端末 (ルータ) の IF にアサインするには以下を設定します。その際サブネットは必ず /32 になります。
(config-if)# ip address negotiated
コメント