PPP

PPP, das sogenannte Point-to-Point-Protocol, ist nicht etwa nur eines, sondern eine ganze Gruppe von Protokollen für P2P-Verbindungen, die in RFC 1661 definiert ist und in verschiedenen weiteren RFCs (RFC1662, RFC1663) weiter ausgeführt wird.

Die drei wichtigsten Merkmale sind:

  1. Eine Rahmenformat das Anfang und Ende eindeutig kennzeichnet und eine Möglichkeit zur Fehlerkorrektur bietet.
  2. Ein Verbindungssteuerungsprotokoll namens Link Control Protocol (LCP) um Leitungen zu testen, Verbindungen auf- und abzubauen und Übertragungsoptionen auszuhandeln
  3. Die Möglichkeit auf der Vermittlungsschicht Optionen auszuhandeln, die von dem auf der Vermittlungsschicht gewählten Protokoll abhängen. Dabei läuft für jedes auf der Vermittlungsschicht gewählte Protokoll ein eigenes Network Control Protocol
  4. Authentifizierungsmöglichkeiten um sicherzugehen, das man mit dem richtigen Partner verbunden ist.
  5. Möglichkeiten zur Kompression von Header und Nutzdaten um die verfügbare Bandbreite möglichst optimal auszunutzen.

Philosophie von PPP

Bei PPP sind beide Partner gleichberechtigt, es kann also nicht eindeutig einem Partner die Rolle des Servers und dem anderen die Rolle des Clients zugeordnet werden. Die offizielle Dokumentation, die RFCs sprechen deshalb auch immer von »Peers« (Ebenbürtigen). 

Die Einzelheiten einer PPP-Session werden deshalb auch nicht von einem Rechner vorgegeben und dann vom anderen übernommen, sondern es wird alles ausgehandelt, d.h. die eine Seite macht einen Vorschlag und die andere Seite stimmt zu, lehnt ab oder macht einen Gegenvorschlag.  Kommt es zu keiner Einigung, so wird die PPP-Sitzung abgebrochen. Bei den meisten PPP-Implementierungen kann man dann in einer Protokolldatei nachlesen, woran die Verbindung gescheitert ist. So ist es zum Beispiel üblich, das eine Verbindung zu einem Internet Server Provider abgelehnt wird, wenn der einwählende Rechner die Authentifizierung verweigert, dagegen wird es meistens toleriert, wenn die PPP-Implementierung  des einwählenden Rechners die Komprimierung ablehnt.

Authentifizierung unter PPP

Mit PPP stehen 2 Möglichkeiten zur Authentifizierung zur Verfügung: Zum Ersten

PAP

das Password Authentification Protocol, bei dem Passworte unverschlüsselt über die Leitung übertragen werden. Dieses Verfahren ist anfällig für Lauschangriffe auf die Leitung und sollte deshalb vermieden werden. Eine wesentlich sicherere Methode ist 

CHAP

das Challenge Handshake Authentification Protocol, bei dem das Passwort selbst überhaupt nicht übertragen wird. Stattdessen sendet der Rechner gegenüber dem die Authentifizierung erfolgen soll eine einmalige Zeichenfolge, die sogenannte »Challenge« (Herausforderung). Der authentifizierende Rechner empfängt diese Challenge und verquickt diese Challenge mit mit einem MD5-Hash (einer nicht umkehrbaren aber eindeutigen Verschlüsselung) des Passworts und sendet das Ergebnis zurück. Stimmt das Ergebnis des authentifizierenden Rechners mit dem Ergebnis des  Rechners gegen den die Authentifizierung erfolgen soll überein, so ist die Authentifizierung erfolgt. Da der MD5-Hash nicht umkehrbar ist kann aus den abgehörten Daten nicht das Passwort rekonstruiert werden und da die Challenge für jede Session eine andere ist, kann auch durch einfaches Wiedersenden der abgehörten Informationen kein Zugang erworben werden.

Eine dritte Variante der PPP-Authentifizierung wurde von Microsoft entwickelt und hört auf den Namen

MS-CHAP

Diese Variante wird vom RAS-Dienst von Windows NT verwendet und funktioniert  nur zwischen Windows-Rechnern. Es gibt zwar Implementierungen für freie UNIX-Systeme, aber sie stellt keinen gültigen Standard dar. Die Auswahl dieser Option erlaubt zusätzlich noch den Datenstrom zu verschlüsseln.

Beispiel einer PPP-Session

  • Ernst Förster möchte eine PPP-Verbindung zu seinem Internet-Provider aufbauen um sich über die neuesten Angebote für jagdlich nutzbare Mittelstreckenraketen  zu informieren.

  • Der PC ruft nun also den Einwahlknoten des Providers an, und wartet bis sich das gegnerische Modem, beziehungsweise der gegnerische ISDN-Router meldet. und eine physikalische Verbindung aufgebaut hat.

  • Nachdem die Verbindung aufgebaut wurde sendet der PC dem gegnerischen Router eine Reihe von LCP-Pakten im Nutzdatenfeld von einem oder mehreren PPP-Rahmen. Diese Pakete und ihre Antworten wählen die zu verwendenden Optionen. Die RFC 1661 definiert 11 Sorten LCP-Pakete mit denen über die Leitung verhandelt werden kann: Der aufbauende PC ist Initiator, der Router der Reagierende

    Bezeichnung Richtung Zweck
    Configure Request zum Reagierenden Liste der gewünschten Optionen
    Configure-ack zum Initiierende Alle Optionen angenommen
    Configure-nack zum Initiierenden Einige Optionen nicht angenommen
    Configure-reject zum Initiierenden Einige Optionen sind nicht verhandelbar
    Terminate-Request zum Reagierenden Anforderung die Verbindung zu trennen
    Terminate-ack zum Initiierenden Verbindung trennen bestätigt
    Code-Reject zum Initiierenden Unbekannte Anforderung erhalten
    Protocol-reject zum Initiierenden Unbekanntes Protokoll erhalten
    Echo-Request zum Reagierenden Anforderung den Frame zurückzuschicken
    Echo-Reply zum Initiierenden Frame zurück
    Discard-Request zum Reagierenden Anforderung den Frame zu ignorieren

    Zu den verhandelbaren Optionen gehören z.B. die maximale Größe von Datenrahmen ( Maximum Transfer Unit (MTU), das zu verwendende Protokoll, wie man sich authentifiziert, verschiedene Verfahren der Header-Kompression und was sonst noch so anfällt.

  • Nach dem die beiden Rechner den LCP-Teil abgehandelt haben, werden mehrere NCP (Network Core Protocol)-Pakete ausgetauscht. Hier wird z.B. festgelegt was für eine IP-Adresse Foersters PC von seinem Provider bekommt. Außerdem wird auf dieser Ebene auch noch eine eventuelle Authentifizierung durchgeführt.

  • Ist auch das abgehandelt, kann Ernst Foerster seine (in diesem Fall wohl IP-) Pakete senden und empfangen um zur Seite seines Waffenhändlers zu surfen und sich zu informieren

  • Ist er fertig, so beendet er diese Verbindung. Dabei wird das NCP benutzt um die Verbindung auf der Vermittlungsschicht abzubauen, dann wird über LCP die Verbindung auf der Sicherungsschicht beendet und schließlich bekommt auf der Transportschicht das zuständige Gerät den Befehl aufzulegen.

PPP-Session

Der PPP-Frame

 

Bytes 1 1 1 1 oder 2 variabel 2 oder 4 1
  Flag (01111110) Adresse (11111111) Steuerung (11111111) Protokoll (11111111) Nutzdaten (11111111) Prüfsumme (11111111) Flag (01111110)
  • Alle PPP-Frames beginnen und Enden mit einem Flag, das Anfang und Ende markiert. Wenn dieses Flag in den Nutzdaten auftaucht, dann wird es natürlich gestopft.

  • Als nächstes kommt das Adressfeld, das immer auf den Wert 255 gesetzt ist, und damit anzeigt, das alle Stationen den Frame akzeptieren. RFC 1662 empfiehlt Frames mit einer anderen Adresse einfach wegzuwerfen.

  • Darauf folgt das Feld Steuerung mit dem Vorgabewert 00000011. Das bezeichnet einen unnummerierten Frame und damit eine unzuverlässige Verbindung , aber das kann über LCP noch verhandelt werden.

    Nachdem in Adresse und Steuerung sowieso immer das Gleiche steht kann auch eine Protokollvariante ausgehandelt werden, die diese beiden Felder einfach weglässt

  • Feld Nummer 4 ist das Protokollfeld, das angibt, welche Art von Paketen sich im Nutzdatenfeld befindet. Es gibt definierte Codes für LCP, NCP, IP, IPX, .... Protokolle die mit einem 0-Bit beginnen sind Protokolle der Vermittlungsschicht, solche die mit einem 1-Bit beginne sind Protokolle der Sicherungsschicht.

  • Die Länge des Nutzdatenfeldes wird mit LCP ausgehandelt. Wird keine Länge ausgehandelt, so sind es 1500 Bytes. Sind weniger Daten zu übertragen, als der Länge des Nutzdatenfeldes entspricht, dann wird es aufgefüllt. Man spricht hier von Padding

  • Als vorletztes kommt eine Prüfsumme, die über ein CRC-Verfahren berechnet wird