PPPoEとは
PPPoE(PPP over Ethernet)とは、PPPの機能をEthernetを通して利用するためのプロトコルです。
PPPは、もともと、ダイヤルアップや、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)の値をコマンドで指定できる機種もあります。
※MSSは、TCPオプショフィールドのMax Segment Sizeで指定されます。
また、本来の理論値より、遥かに小さい値に設定されているルータもあります。それは、WAN上でパケットのカプセル化を行ったり、トンネルプロトコルを使用して通信を行った場合の影響を考慮してマージンを持たせているからです。
いずれにしても、ルータ側で、パケットを分割して転送しなければならず、伝送効率が悪化するという問題が発生します。
PPPoEのセッション確立手順
PPPoEセッションの確立手順は下図の通りです。

まず、PPPoEクライアントがネットワーク全体にブロードキャストを送信します。これは、クライアントがPPPoE通信を受け付けるPPPoEサーバを探すためです。
ブロードキャストでPPPoE開始メッセージを受け取ったPPPoEサーバは、クライアントにオファーメッセージを返します。
オファーを受け取ったクライアントは、セッションの開始を要求します。この後、PPPoEサーバがセッションIDを指定した確認メッセージを送信することで、PPPoEセッションが確立されます。
PPPoEのセッションが確立された後、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がサポートされています。
PPPoA
PPPoAは、「PPP over ATM」の略で、ATMネットワーク上でPPP接続を行なうプロトコルです。これに対して、PPPoEとはEthernet上でPPP接続を行います。
電話やISDNでは、ダイヤルアップ接続サービスを提供するPPPサーバを用意しています。PPPoAやPPPoEは、この仕組みをそのまま利用するために開発された技術です。
この技術があれば、ダイヤルアップ接続と同等の手順を行うだけで、ADSLインターネットを提供することができます。
PPPoAは、もともと、PPPをADSLで使用するために開発されました。それは、ADSLがATM技術で通信を行うようになっていたからです。
しかし、ATMではVCでパスを管理しなければなりませんし、とても高価です。また、一般ユーザが気軽に利用できるようなパソコン向けの通信技術ではないので、導入するには問題がありました。そこで、開発されたのがPPPoEです。
※Windowsで利用する場合、別途ソフトウェアが必要です。
現在では、PPPoAは、あまり利用されていません。