PPP over Ethernet

PPP over Ethernet (PPPoE) ist die Verwendung des Netzwerkprotokolls Point-to-Point Protocol (PPP) über eine Ethernet-Verbindung.
Das Protokoll definiert zwei Phasen: PPPoE Discovery und PPP Session. In der ersten Phase PPPoE Discovery wird die MAC-Adresse eines Access Concentrators ermittelt. Danach werden in der zweiten Phase PPP Session Daten nach PPP ausgetauscht.

Verbreitung 
PPPoE wird heute bei DSL-Anschlüssen in Deutschland verwendet.

In Österreich wurde ursprünglich für ADSL-Zugänge das Point To Point Tunneling Protocol (PPTP) verwendet. Für VDSL & GPON Anschlüsse von A1 wird auch PPPoE verwendet.

Motivation für die Entwicklung von PPPoE war, die Möglichkeiten von PPP wie Authentifizierung und Netzwerkkonfiguration (IP-Adresse, Gateway) auf dem schnelleren Ethernet zur Verfügung zu stellen. Auch erleichtert PPPoE den Providern die Verwaltung, da die Infrastrukturen für Point-to-Point Protocol PPP bei den meisten ISPs schon aus den Zeiten der Analog- und ISDN-Modems bestehen. Zeittarife und automatische Konfiguration bei der Einwahl sind für ADSL, SDSL etc. erst mit PPPoE möglich, technisch sind diese Leitungen Standleitungen und daher immer verfügbar. PPPoE stellt hier die „Wählverbindung“ virtuell wieder her.

DSL-Modem und Access Concentrator (DSL-AC) des Zugangsanbieters kommunizieren über die Ethernet-LAN-Emulation von ATM (LANE). PPPoE wird auf dieser Schicht übertragen. Wenn das Modem keinen Ethernet-Anschluss hat, sondern ein internes PCI-Gerät ist oder über USB verbunden wird, wird zumindest durch den Gerätetreiber und/oder das DSL-Modem eine Ethernet-Emulation bereitgestellt. Auf dieser kann dann der PPPoE-Client des Betriebssystems eine Verbindung herstellen.

Aufbau eines PPPoE-Pakets 
Das PPPoE-Paket befindet sich im Nutzdatenfeld des Ethernet-Frame.

Typfeld des Ethernet-Frame

Dieses Feld gibt bei PPPoE an, ob es sich um eine PPPoE-Discovery oder eine PPPoE-Session handelt.
Folgende Werte hat das Typ-Feld:

0x8863 – PPPoE DiscoveryDas betrifft die Suche eines PoP („Point of Presence“) mittels Ethernet-Broadcast, die Herstellung der Verbindung zum PoP und deren Abbau.
0x8864 – PPPoE SessionDas betrifft die Konfiguration und Kontrolle der Verbindung und die Zuweisung von zum Beispiel IP-Adressen, sowie der ganz normale Internet-Verkehr. Genaueres im Artikel PPP.

Version

Ist immer konstant und enthält den Wert 1.
Also PPPoE-Version 1.

Typ

Ist immer konstant und enthält den Wert 1.
Also PPPoE-Typ 1.

Code

Das Feld Code ist wichtig für das PPPoE-Discovery.
Es zeigt die Discovery-Frame-Art an.
Während der PPPoE-Session enthält das Feld immer den Wert 0x00.

Werte in hexadezimal für das Feld 'Code':

0x00 – Session Data
0x07 – PADO (PPPoE Active Discovery Offer)
0x09 – PADI (PPPoE Active Discovery Initiation)
0x19 – PADR (PPPoE Active Discovery Request)
0x65 – PADS (PPPoE Active Discovery Session-confirmation)
0xa7 – PADT (PPPoE Active Discovery Termination)

Session-ID

Die Session-ID wird durch den PoP mit dem PADS-Frame vergeben und ist gültig für eine Verbindung. Vorher ist der Wert 0x0000.

Length

Größe der Nutzdaten in Byte.

PPP Protocol und Nutzdaten

PPP Protocol und Nutzdaten haben denselben Aufbau und dieselben Funktionen wie bei PPP.

PPPoE Discovery (PPPoED)

PADI 
PADI steht für PPPoE Active Discovery Initiation.
Möchte sich ein Internetnutzer über DSL einwählen, so muss sein Rechner erst einmal feststellen, ob ein PoP (DSL-AC) vorhanden ist. Eine Kommunikation ist nur über die MAC-Adressen möglich. Da aber der Rechner des Nutzers die MAC-Adresse des PoP nicht kennt, sendet er das PADI-Paket über einen Ethernet-Broadcast (MAC: ff:ff:ff:ff:ff:ff). Das PADI-Paket enthält natürlich die MAC des Absenders.

Beispiel für ein PADI-Paket:

 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)

Unter Src. (Source/Quelle) steht die MAC-Adresse des sendenden Rechners.
Unter Dst. (Destination/Ziel) ist die Ethernet-Broadcast-Adresse zu erkennen.
Das PADI-Paket können mehrere PoP empfangen.

PADO 
PADO steht für PPPoE Active Discovery Offer.
Nachdem der Rechner des Nutzers das PADI-Paket gesendet hat, schickt der PoP ein PADO-Paket.
Das ist möglich, da der PoP die Absenderadresse mit dem PADI-Paket bekommen hat.
Das PADO-Paket enthält die MAC-Adresse des PoP, seinen Namen (zum Beispiel LEIX11-erx für den Telekom-DSL-AC in Leipzig) sowie die Dienstbezeichnung.
Senden mehrere PoP ein PADO-Paket, so wählt der Rechner des Nutzers einen PoP über den Namen oder den Dienst aus.

Hier sehen wir ein Beispiel für ein PADO-Paket:

 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: Service-Name
   Tag: AC-Name
     String Data: lpzbr001
   Tag: Host-Uniq
     Binary Data: (16 bytes)

Unter AC-Name→String Data sehen wir den AC-Namen „lpzbr001“ (Arcor DSL-AC in Leipzig)
Unter Src. ist die MAC-Adresse des PoP.
Aus dieser MAC-Adresse kann man auch den Hersteller des PoP feststellen (hier Nortel Networks).

PADR 
PADR steht für PPPoE Active Discovery Request.
Wie schon erwähnt, muss der Rechner nun einen PoP auswählen. Das erfolgt mit dem PADR-Paket, das an die MAC-Adresse des PoP gesendet wird.

PADS 
PADS steht für PPPoE Active Discovery Session-confirmation.
Das PADR-Paket wird vom PoP mit dem PADS-Paket bestätigt sowie eine Session-ID vergeben.
Die Verbindung ist mit dem PoP nun aufgebaut und kann verwendet werden.

PADT 
PADT steht für PPPoE Active Discovery Termination.
Das Paket hat die Aufgabe, die Verbindung zum PoP zu trennen. Es kann vom Rechner des Nutzers wie auch vom PoP gesendet werden.

Siehe auch 
 Breitband-Zugangsserver
 PPP over ATM

Spezifikationen

Einzelnachweise 

Point-to-Point Protocol
Internet-Zugangsprotokoll