PPPとPPPoEについて
ネスペ勉強の一環で調べたことをまとめてみる。
PPP(Point to Point Protocol)
PPP(Point to Point Protocol)はLCP、NCP、PAP・CHAPなどの複数のプロトコルから構成される二つの機器間で直接通信を行う際のプロトコルとなっている。このプロトコルは物理層とネットワーク層の間にあるデータリンク層で主に動作し、電話回線を用いたダイアルアップ接続などで利用される(PPP自体はイーサネットのインフラでは通信ができない)。
PPPの特徴の一つが認証で、イーサネットなどではネットワークに接続するのに認証をかける機能はないが、PPPではデータリンク層で認証をかけられる機能を持っている。PPPの接続確立手順は、LCP、PAP・CHAP、NCPという順番になっているが、その中のPAP・CHAPが認証を担当している。
LCP
LCP(Link Controle Protocol)ではリンクの確立、管理、終了などを担当するプロトコルで、PPPの初めの接続確立時に利用される。その際に通信設定として認証や圧縮、エラー検出などをお互いに交渉する。
LCPの設定オプションは以下のようになっているらしい。
(ただ引用してきたサイトが文字化けが酷くあっているのかよくわからない…)
見てみると、認証方法や品質監視、圧縮などを指定できる。

PAP・CHAP
PAP(Password Authentication Protocol)とCHAP(Challenge Handshake Authentication Protocol)はそれぞれPPPで扱える認証機能で、PAPは簡単なパスワード認証を行うもので、CHAPはチャレンジレスポンス方式でPAPより安全性の高い認証を行う。
PAPはプレーンテキストでユーザ名・パスワードを送信してしまうので盗聴されるとそのまま認証情報が漏れてしまう。一方チャレンジレスポンス方式を採用したCHAPではサーバから送られた乱数に対してあらかじめ共有した秘匿情報でハッシュ化し送り返すため、秘匿情報の解読が困難となる。
NCP
NCP(Network Control Protocol)はLCP、PAP・CHAPのやり取りが完了した後に行われる上位層(ネットワーク層)の環境を整えるプロトコルとなっている。具体的には、IPやデフォルトルートの割り当てなどを担当する。
電話回線のダイアルアップ接続では自宅からISPの間でPPP接続をする場合が多いと思うが、PPPにIPパケットを入れてISP経由で遠くの離れたネットワークにあるサーバへと通信することができる。IPv4を想定している場合はNCPはIPCPと言われる。
PPPoE(PPP over Ethernet)
PPP通信をイーサネット上で行えるようにしたプロトコルをPPPoEと言う。現在では電話回線を利用したダイアルアップ接続はほぼ使われていない(と思う)ので、イーサネット上でもPPP通信が可能なように拡張されたPPPoEを用いてISPと接続を行っている場合がある。ちなみに光回線などでIPoEの場合はPPPを利用してISPと接続しているわけではない。
具体的には以下のようなフレームフォーマットで通信を行っている。

PPPoEの場合はPPPセッションを始める前に相手となるPPPoEサーバを探すステージ(Discovery Stage)がある。

