PPPoE

+ PPPoEとTCP/IPのプロトコルスタック アプリケーション層 FTP SMTP HTTP … DNS … トランスポート層 TCP UDP インターネット層 IPv4 IPv6 リンク層 PPP PPPoE イーサネット

PPPoE（Point-to-Point Protocol over Ethernet）は、イーサネットフレーム上にPPPフレームをカプセル化するための通信プロトコルである。によって定義される。主にDSLやCATV、FTTHなどでのインターネット接続サービスでのブリッジ接続用に利用される。

イーサネットではPPPoEを使わなくても、IPパケットを直接扱うことができる。あえてPPPoEを使うのは、PPPが持つユーザ認証などの機能を使うためである。代償としてMTU減少をはじめとするオーバーヘッドが発生する。

2000年頃、ISPのIPネットワークへのDSL接続を介してパケットをトンネリングするための技術として使われだした。2005年のネットワークの技術書には、「ほとんどのDSLプロバイダは、認証・暗号化・圧縮のためにPPPoEを使用する」と書かれている。一般的なPPPoEの利用では、ユーザー名とパスワードでユーザーを認証するためにPAPやCHAPが使用される。

カスタマ構内設備においては、PPPoEは、ブロードバンドルーターで実装される場合と、ルーティングを行わないDSLモデムを使用する場合には、PC上で実装される場合とがある。全てのオペレーティングシステムがPPPoEをサポートしている。

 PPPoEのステージ 
PPPoEは、以下の2つのステージを持つ。

 ディスカバリステージ 
伝統的なPPPは、すでに確立されたダイヤルアップ接続やATMの上での接続であり、このような接続では、送信したPPPフレームはすべて対向側に到達する。

しかし、イーサネットのネットワークは、ネットワークの各々のノードがその他のノードにアクセスすることができるマルチ・アクセスである。イーサネット・フレームは、転送先のノードのハードウェア・アドレス（MACアドレス）を含み、これによってフレームが意図された宛先に到達する。

そのため、イーサネットを介した接続を樹立するためのPPP制御パケットを送信する前に、相手のMACアドレスを互いに知っていなければならない。ディスカバリステージで、MACアドレスの伝達を行う。また、以降のパケットの交換のために使うSession IDの確立も行う。

 PPPセッションステージ 
ディスカバリステージによりPPPoEのセッションが確立すると、PPPセッションステージへ進む。

 PPPoEディスカバリ（PPPoED） 
伝統的なPPPはピア・ツー・ピアである。それに対しPPPoEは、1つの物理的接続を介して複数のホストがサービスプロバイダに接続できることから、本質的にクライアントサーバモデルである。

PPPoEディスカバリは、クライアントの働きをするホストコンピュータとサーバの働きをするISPのアクセス・コンセントレータの間で、以下の4つの段階を踏む。最後のPADTは、既存のセッションを閉じるために使用される。

 クライアント→サーバ：Initiation（PADI） 
PADIは「PPPoE Active Discovery Initiation」の略であるhttps://datatracker.ietf.org/doc/html/rfc2516#section-5.1。

ユーザがDSLを用いてインターネットにダイヤルアップ接続するとき、まずユーザのコンピュータはインターネットサービスプロバイダの(POP)のDSLアクセス・コンセントレータ(DSL-AC)を見つけなければならない。イーサネット上の通信は、MACアドレスを介してのみ行われる。そのため、コンピュータがDSL-ACのMACアドレスを知らない場合は、ブロードキャストによってPADIパケットを送信する。PADIパケットには、送信元のコンピュータのMACアドレスが含まれている。

 PADIパケットの例 
Frame 1 (44 bytes on wire, 44 bytes captured)
Ethernet II, Src: 00:50:da:42:d7:df, Dst: ff:ff:ff:ff:ff:ff
PPP-over-Ethernet Discovery
  Version: 1
  Type 1
  Code Active Discovery Initiation (PADI)
  Session ID: 0000
  Payload Length: 24
PPPoE Tags
  Tag: Service-Name
  Tag: Host-Uniq
    Binary Data: (16 bytes)
Src（source）は、PADIの送信元のMACアドレスである。Dst（destination）はブロードキャストアドレスである。PADIパケットは1つ以上のDSL-ACに到達する。「Service-Name」タグに記載されたDSL-ACのみが応答を行う。

 サーバ→クライアント：Offer(PADO) 
PADOは「PPPoE Active Discovery Offer」の略であるhttps://datatracker.ietf.org/doc/html/rfc2516#section-5.2。

ユーザのコンピュータがPADIパケットを送信すると、DSL-ACはPADIに記載されたMACアドレスを用いてPADOパケットを返信する。

PADOパケットにはDSL-ACのMACアドレス・名前・サービス名が含まれている。複数のPOPのDSL-ACがPADOを返信してきた場合、ユーザのコンピュータは名前とサービス名から適切なDSL-ACを選択する。

 PADOパケットの例 
Frame 2 (60 bytes on wire, 60 bytes captured)
Ethernet II, Src: 00:0e:40:7b:f3:8a, Dst: 00:50:da:42:d7:df
PPP-over-Ethernet Discovery
  Version: 1
  Type 1
  Code Active Discovery Offer (PADO)
  Session ID: 0000
  Payload Length: 36
PPPoE Tags
  Tag: AC-Name
    String Data: IpzbrOOl
  Tag: Host-Uniq
    Binary Data: (16 bytes)
AC-Name 以下の String dataはDSL-ACの名前である。SrcはDSL-ACのMACアドレスである。

 クライアント→サーバ: request(PADR) 
PADRは「PPPoE active discovery request」の略であるhttps://datatracker.ietf.org/doc/html/rfc2516#section-5.3。

PADRパケットは、ユーザのコンピュータから選択されたDSL-ACへ送信される。PADRパケットによりPPPoEセッションの開始を要求する。

 サーバ→クライアント: session-confirmation(PADS) 
PADSは"PPPoE Active Discovery Session-confirmation"の略であるhttps://datatracker.ietf.org/doc/html/rfc2516#section-5.4。

PADSパケットにより、PPPoEのセッションIDをクライアントに通知する。ここで、DSL-ACとユーザのコンピュータの間のPPPoEセッションが確立される。

 どちらかからもう一方へ: termination(PADT) 
PADTは「PPPoE Active Discovery Termination」の略であるhttps://datatracker.ietf.org/doc/html/rfc2516#section-5.5。

このパケットは、POPとの接続を切断するときに送信される。ユーザのコンピュータとDSL-ACのどちら側からも送信される可能性がある。

 脚注 

 関連項目 
 Point-to-Point Protocol (PPP)
 Point-to-Point Tunneling Protocol
 pppd

 外部リンク 
  - A Method for Transmitting PPP Over Ethernet(PPPoE)
  - Layer 2 Tunneling Protocol(L2TP) Active Discovery Relay for PPP over Ethernet(PPPoE)
  - Accommodating a Maximum Transit Unit/Maximum Receive Unit(MTU/MRU) Greater Than 1492 in the Point-to-Point Protocol over Ethernet(PPPoE)
  - PPP Over Ethernet(PPPoE) Extensions for Credit Flow and Link Metrics
 US Patent 6891825 Method and system of providing multi-user access to a packet switched network

Category:トンネリング
Category:リンク層プロトコル
2516