PPPoEとは

 PPPoE(PPP over Ethernet)とは、PPPの機能をEthernetを通して利用するためのプロトコルです。PPPについては、「PPPとは」を参考にして下さい。

 PPP(PPP over Ethernet)は、元々、ダイヤルアップや、ISDNでネットワークに接続するために開発されたもので、PPPoEは、PPPをADSLサービスやFTTHサービスの繋ぎ放題の環境でも利用できるようにしたものです。

 PPPoEは、PPPと異なり、NICに焼きこまれた固有のMACアドレスによって双方のコンピュータを識別し、その間に仮想回線を確立します。そして、その仮想回線上でPPPパケットをやりとりをして、ユーザ名やパスワードをチェックを行うことができるようになっています。

今や、PPPoEはブロードバンド接続において、インターネットの標準プロトコルとなっています。

●PPPoEフレーム

PCから送信されるMACフレームは、ブロードバンドルータで、MACフレームからIPパケットが取り出されます。

 そこで取り出したIPパケットの先頭にPPPヘッダでカプセル化を行い、さらにPPPoEヘッダでカプセル化を行います。これを再びMACフレームでカプセル化したものがPPPoEフレームとなるのです。

 PPPoE接続と言っても、運ばれるのは、上図のPPPoEフレームの構造を見れば分かるように、PPPoEフレームの中に入っているのは、PPPフレームです。

 PPPoEフレームを受け取ったプロバイダ側のアクセスサーバはPPPoEフレームからPPPフレームを取り出すことで、PPPでやり取りを行うことができるようになります。

PPPoE(MTUの問題)

ホームページを閲覧する場合の流れは以下の通りです。

  • Webブラウザは入力されたURLを元に、WebサーバとTCPコネクションを確立する。
  • そのコネクションで、SYNパケットのTCPオプションに「MTU-40」をセットして、Webサーバに自分が接続できるデータの最大長として送信する。
  • Webサーバは、通知されたMSSを元にしてIPパケットを作成して送信する。
  • WebブラウザはWebサーバから受信したパケットを順次組み立てて表示する。

※MTU (Maximum Transmission Unit)一度に転送できる最大のデータ量

 Webブラウザが接続先であるWebサイトにアクセスする時に、Webブラウザは相手のWebサーバに自分が受け取れる最大のデータサイズ値を通知するようになっています。

 Windowsであれ、Linuxであれ、Webブラウザが動作しているPCが、直接、Webサーバと接続しているのであれば、問題は起こりません。

しかし、ブロードバンドルーター経由で接続すると問題が発生する場合があります。

 それは、Webブラウザが動作しているPCでは、途中にPPPoEがあることまでは、分からないので、自分が接続しているイーサネットの最大値のMTU(1,500バイト)をMTUとして認識してしまうからです。MSSは1,500-40=1,460バイトとなります。

 これでは、イーサネットで運べるパケットの最大値である1,500バイトに、PPPoEヘッダーとPPPヘッダーの両方で8バイトが加わり、1,500+8=1,508バイトとなり、最大長を超えてしまうのです。

 PPPoEヘッダーとPPPヘッダーの両方で8バイトが加わるので、理論上、MTU=1,492バイト、MSS=1,452バイトでなければなりません。

 フレッツADSLの場合、MTU=1,454バイトで、MSSの最大長は、1,454-40=1,414バイトとなっています。

 Webブラウザが設定したデフォルトのMTU=1,500バイト、MSS=1,460バイトのままでは、イーサネットで運べるパケットの最大値である1,500バイトを超えてしまいます。

 そこで、最近のPPPoEに対応したルータでは、PC側で決定したMSSがルータで定めた値を上回る場合、MSSを書き換えて送信するようになっています。MTU(MSS)の値をコマンドで指定できる機種もあります。

 また、本来の理論値より、遥かに小さい値に設定されているルータもあります。それは、WAN上でパケットのカプセル化を行ったり、トンネルプロトコルを使用して通信を行った場合の影響を考慮してマージンを持たせているからです。

 いずれにしても、ルータ側で、パケットを分割して転送しなければならず、伝送効率が悪化するという問題が発生します。

PPPoEのセッション確立手順

PPPoEセッションの確立手順は下図の通りです。

 まず、PPPoEクライアントがネットワーク全体にブロードキャストを送信します。これは、クライアントがPPPoE通信を受け付けるPPPoEサーバを探すためです。

 ブロードキャストでPPPoE開始メッセージを受け取ったPPPoEサーバは、クライアントにオファーメッセージを返します。

 オファーを受け取ったクライアントは、セッションの開始を要求します。この後、PPPoEサーバがセッションIDを指定した確認メッセージを送信することで、PPPoEセッションが確立されます。

PPPoEのセッションが確立された後は、PPPのネゴシエーションが開始されます。

PPPのネゴシエーションについては、「PPPとは」を参考にして下さい。

PPPoE(ユーザ名@プロバイダ名)

 PPPは、電話回線やISDN回線などのダイヤルアップ接続で、利用者をユーザー名、パスワードのチェックを行なうことができます。
 
 PPPoEは、PPPとは異なり、NICが持つMACアドレスによって双方のコンピュータを識別し、その間に仮想回線を確立し、その仮想回線上でPPPパケットをやりとりをして、ユーザIDやパスワードをチェックを行うことができるようになっています。

 フレッツADSLでは、ユーザ認証に、メールアドレス風の表記を使って接続先のプロバイダ名とプロバイダのユーザIDを一括して処理しています。

 ユーザIDを「ユーザ名@プロバイダ名」という形式で運用することで、複数のプロバイダが選択できるようになっています。@以降の文字列でプロバイダ名を識別しています。

 PPPoEを利用すると、LAN(イーサネット)上からでも、ダイヤルアップ接続(PPP接続)のように、ユーザ認証やIPアドレスの割り当てなどが可能になることから、ADSLやCATV、FTTHなどの常時接続サービスにおいて、広く採用されています。

PPPoEとPPPを使って複数のISPを選択する仕組みを図で示すと以下のようになります。

※PPPoEサーバと同じ場所に、認証(RADIUS)サーバを設置して、ユーザ認証を行う場合もあります。

 このようにPPPoEを使うことで、通信事業者側は、ユーザを特定すること可能になり、利用者ごとに帯域幅を調整したり、利用者ごとにセキュリティのチェックが可能になります。

 PPPoEは、当初、通信事業者側からPPPoEソフトウェアとして提供されていましたが、Windows XPからは、標準実装されました。また、現在、多くのルータやブロードバンドルータでも、PPPoEがサポートされています。