PPPoEパケット
PPPoEはEthernet上でも通信可能であるため、通常のEthernetパケットを使用する。そのフォーマットを下記に以降に示す。
Ethernetパケット
PPPoE Discovery Stage及びPPP Session Stageで使用する、Ethernet パケットのフォーマットを図6に示す。
- Destination Address:宛先MACアドレス。PPPoE Active Discovery Initiation(PADI)では、ブロードキャスト(FF-FF-FF-FF-FF-FF)となる。
- Source Address:発信元MACアドレス。
- Ether Type:PPPoE Discovery StageとPPP Session Stageを識別するための値。
0x8863 :PPPoE Discovery Stage
0x8864 :PPP Session Stage - Ethernet Payload:PPPoEヘッダ、PPPoE Payload(データ)、PPPプロトコル識別、PPP Payload(データ)等が入る(2-2項参照)。
- Checksum:EthernetパケットのFCS。
Ethernet Payload
thernet Payloadのフォーマットを図7に示す。図7のVer、Type Code、Session ID、LengthがPPPoEヘッダとなる。
- Ver:Ver(PPPoEバージョン)フィールドは4ビット長で、0x1に設定される。
- Type:Typeフィールドは4ビット長で、0x1に設定される。
- Code:CODEフィールドは8ビット長で、PPPoE Discovery Stage及びPPP Session Stageのパケットを識別する。0x09:PPPoE Active Discovery Initiation (PADI)
0x07:PPPoE Active Discovery Offer (PADO)
0x19:PPPoE Active Discovery Request (PADR)
0x65:PPPoE Active Discovery Session-confirmation (PADS)
0xa7:PPPoE Active Discovery Terminate (PADT)
0x00:PPP Session Stage - Session ID:Session IDフィールドは16ビット長で、PPPoE Sessionの識別子として、ユニークな値を設定する。但し、PADI、PADO及びPADRパケットの場合は0x0000が設定される。また、0xffffは未定義で使用することはできない。
- Length:Lengthフィールドは16ビット長で、PPPoEのPayload長をOctetで設定し、Ethernetヘッダ及びPPPoEヘッダ長は含まない。
- PPPoE Payload:PPPoE Payloadは可変長で、PPPoE Discovery StageのTAGタイプ(2-3-1項参照)及びPPP Session Stage(2-3-2項参照)を設定する。
PPPoE Payload
PPPoE Discovery Stage(図6 Ether Typeが0x8863に設定された場合)とPPPoE Session Stage(図6 のEther Typeが0x8864に設定された場合)では、PPPoE Payloadの内容が下記のように変わる。
2.3.1.PPPoE Discovery Stage
Ether Type が0x8863に設定された場合、図8のTAGタイプが設定される。なお、TAGは、PPPoE Payloadに複数設定可能。
- TAG Type:TAG タイプフィールドは16ビット長で、TAG VALUEの種別を設定する。
- 0x0000:End of List
このパケットにこれ以上のTAGが存在しないことを表す。このフィールドに0x0000が設定された場合は、TAG Lengthの値が0x0000となるが、現在は未使用。 - 0x0101:Service Name
次に続くサービス名を表し、TAG_VALUEは、NULLで終了しないUTF-8のキャ ラクターセットを用いる。TAG_LENGTHがゼロの場合、このTAGは全てのサービスを受け入れられることを示す。Service-Name TAGの使用例として、ISP名、サービスのクラスもしくは質の表示がある。 - 0x0102:AC Name
特定のPPPoE アクセスサーバを、識別する文字列が次に続くことを示す。トレードマーク、モデル名、シリアル番号情報などの組み合わせ、もしくはMACアドレスのUTF-8表記で表される場合があり、NULLで区切られることはない。 - 0x0103:Host Uniq
特定のホスト(例:Broadband Router)からのリクエストに対して応答(PADOもしくはPADS)を行うユニークな値。TAG_VALUEはバイナリーデータで データ長はホストが選択する。PPPoE アクセスサーバがこのTAGを受け取った場合、関連するPADOもしくはPADSレスポンスパケットに このTAGを変更することなく含めなければならない。 - 0x0104:AC Cookie
外部からのアタックに対してPPPoEアクセスサーバを防御するために使用される。 - 0x0105:Vender Specific
ベンダー固有の情報を伝える場合に使用される。 - 0x0110:Relay Session ID
PPPoEパケットの中継を行う場合に使用する。 - 0x0201:Service Name Error
要求されたService-Name リクエストが受け入れられなかったことを表す。 - 0x0202:AC System Error
PPPoEアクセスサーバがホストのリクエストを実行する際にエラーを検出したことを表す。 - 0x0203:Generic Error
致命的なエラーを表す。
- 0x0000:End of List
- TAG Length:TAG Lengthは16ビット長のフィールドで、TAG VALUEの長さをOctetで示す。
- TAG VALUE:TAG Typeの実際の値を設定する(可変長)。
2.3.2.PPPoE Session Stage
Ether Type が0x8864に設定された場合、PPP Session Stageが開始される。図9にそのフレームフォーマットを示す。
PPP Protocol:PPPプロトコルの識別子
0xc021:LCP(Link Control Protocol)
Link制御プロトコル。通信設定要求、通信設定肯定応答、通信設定否定応答、通信設定拒否等をコントロールする。
0xc023:PAP(Password Authentication Protocol)
パスワード認証用プロトコル。
0xc223:CHAP(Challenge Handshake Authentication Protocol)
パスワード認証用プロトコル。
0xc8021:IPCP(Internet Protocol Control Protocol)
接続を行う双方が互いに使用するIPアドレスと、TCPのヘッダ圧縮(Van jakobson圧縮RFC1144)を行うかどうかを決める。
0x0021:Internet Protocol(IP)
PPPにおいて、IPパケットを取り扱うことを表す。