# Link Control Protocol

Das Protokoll LCP (Link Control Protocol) ist ein Begriff aus der Informatik.
Dieses Protokoll wird verwendet, um eine Datenverbindung bei einer PPP (Point-to-Point Protocol) Verbindung zu konfigurieren, aufzubauen und zu prüfen.

## Herstellung einer PPP-Verbindung

PPP stellt die Kommunikation über eine Punkt-zu-Punkt-Verbindung in vier Phasen her:
* Verbindungsaufbau und Konfigurationsaushandlung – Ein PPP-Ausgangsknoten sendet LCP-Rahmen zur Konfiguration und zum Aufbau der Datenverbindung.
* Bestimmung der Verbindungsqualität – Die Verbindung wird getestet, um zu bestimmen, ob ihre Qualität für den Aufruf von Vermittlungsschichtprotokollen (OSI-Schicht) ausreicht. (optionale Phase)
* Authentifizierung (optionale Phase)
* Aushandlung der Konfiguration des Vermittlungsschichtprotokolls – Der PPP-Ausgangsknoten sendet NCP-Rahmen zur Auswahl und Konfiguration. Die Protokolle wie IP, IPX und AppleTalk werden konfiguriert, so dass Pakete von jedem Protokoll gesendet werden können.
* Verbindungsbeendigung – Die Verbindung bleibt für die Kommunikation konfiguriert, bis LCP- oder NCP-Rahmen die Verbindung beenden oder ein externes Ereignis auftritt. (z. B. Inaktivität oder Benutzer)

## LCP-Paket-Formate
### LCP-Header

LCP Header (Link Control Protocol) :
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
| Code (Code) | Code (Code) | Code (Code) | Code (Code) | Code (Code) | Code (Code) | Code (Code) | Code (Code) | Identifier (Bezeichner) | Identifier (Bezeichner) | Identifier (Bezeichner) | Identifier (Bezeichner) | Identifier (Bezeichner) | Identifier (Bezeichner) | Identifier (Bezeichner) | Identifier (Bezeichner) | Length (Länge) | Length (Länge) | Length (Länge) | Length (Länge) | Length (Länge) | Length (Länge) | Length (Länge) | Length (Länge) | Length (Länge) | Length (Länge) | Length (Länge) | Length (Länge) | Length (Länge) | Length (Länge) | Length (Länge) | Length (Länge) |
| Data (Daten) ||||||||||||||||||||||||||||||||

#### Code Beschreibung Referenz

Der Code ist 8 Bit lang. Spezifiziert die Funktion, die ausgeführt werden soll.
| Code | Beschreibung | Referenz |
| 0 | Vendor Specific. | RFC 2153 |
| 1 | Configure-Request. |
| 2 | Configure-Ack. |
| 3 | Configure-Nak. |
| 4 | Configure-Reject. |
| 5 | Terminate-Request. |
| 6 | Terminate-Ack. |
| 7 | Code-Reject. |
| 8 | Protocol-Reject. |
| 9 | Echo-Request. |
| 10 | Echo-Reply. |
| 11 | Discard-Request. |
| 12 | Identification. | RFC 1570 |
| 13 | Time-Remaining. | RFC 1570 |
Das Bezeichnerfeld ist 8 Bit lang. Es wird verwendet, um die Anfragen und Antworten zu steuern.
Das Längenfeld ist 16 Bit lang. Größe des Pakets inklusive des Headers.
Die Daten haben eine variable Länge. Null oder mehr Bytes Daten wird durch das Längenfeld beschrieben. Dieses Feld beinhaltet eine oder mehr Optionen.

#### LCP-Konfigurations-Optionen

LCP Konfiguration Optionen :
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| Option (Optionen) | Option (Optionen) | Option (Optionen) | Option (Optionen) | Option (Optionen) | Option (Optionen) | Option (Optionen) | Option (Optionen) | Length (Länge) | Length (Länge) | Length (Länge) | Length (Länge) | Length (Länge) | Length (Länge) | Length (Länge) | Length (Länge) | Length (Länge) |
| Data (Daten) ||||||||||||||||
Das Optionsfeld ist 8 Bit lang.
| Option | Länge (Length) | Beschreibung | Referenz |
| 0 | | Vendor Specific. | RFC 2153 |
| 1 | 4 | Maximum-Receive-Unit. | RFC 1661 |
| 3 | ≥ 4 | Authentication-Protocol. | RFC 1334, RFC 1661, RFC 1994 |
| 4 | ≥ 4 | Quality-Protocol. | RFC 1661 |
| 5 | 6 | Magic-Number. | RFC 1661 |
| 7 | 2 | Protocol-Field-Compression (Deprecated). | RFC 1661 |
| 8 | 2 | Address-and-Control-Field-Compression. | RFC 1661 |
| 9 | 3 | FCS-Alternatives. | RFC 1570 |
| 10 | 3 | Self-Describing-Pad. | RFC 1570 |
| 11 | ≥ 4 | Numbered-Mode. | RFC 1663 |
| 12 | ≥ 8 | Identification. | RFC 1570 |
| 13 | ≥ 3 | Callback. | RFC 1570 |
| 14 | | Connect-Time (Deprecated). |
| 15 | 2 | Compound-Frames (Deprecated). | RFC 1570 |
| 16 | | Nominal-Data-Encapsulation (Deprecated). |
| 17 | 4 | Multilink Max-Receive-Reconstructed-Unit (MRRU). | RFC 1990 |
| 18 | 2 | Multilink Short Sequence Number Header Format. | RFC 1990 |
| 19 | variable | Multilink Endpoint Discriminator. | RFC 1990 |
| 20 | | Proprietary. |
| 21 | | DCE-Identifier. |
| 22 | 4 | MP+ Procedure Option. | RFC 1934 |
| 23 | 4 | Link Discriminator for BACP. | RFC 2125 |
| 24 | | LCP-Authentication-Option. |
| 25 | | COBS, Consistent Overhead Byte Stuffing. |
| 26 | variable | Prefix Elision. | RFC 2686 |
| 27 | 4 | Multilink header format. | RFC 2686 |
| 28 | ≥ 7 | Internationalization. | RFC 2484 |
| 29 | 2 | Simple Data Link on SONET/SDH. | RFC 2823 |
| 30 | | Reserved until 14-Oct-2002. |
Das Längenfeld ist 8 Bit lang. Die Länge der Optionen in Bytes inklusive der zwei Felder „Länge“ und „Option“. Das sind dementsprechend die Länge der Option plus 2 Bytes. Beispiel:
LCP Option MRU (1540 Bytes) :
| 0 | 1 | 2 | 3 |
| 0x01 | 0x04 | 0x0604 | 0x0604 |
Die Daten haben eine variable Länge. Null oder mehr Bytes für spezifische Optionen.

## LCP-Konfigurations-Optionen
### Maximum Receive Unit (MRU)

Diese Option informiert den Kommunikationspartner, welche maximale Paketgröße empfangen werden kann. Der Standardwert nach RFC 1661 ist 1500 Bytes. Der Sender darf auch kleinere Pakete schicken.

### Authentifizierungsprotokoll

Authentifizierungsprotokolle in RFC 1661 sind
* Password Authentication Protocol (PAP)
* Challenge Handshake Authentication Protocol (CHAP)

### Qualitätsprotokoll

Über diese Konfigurationsoption kann ein Protokoll für den Austausch von Verbindungsqualitätsdaten ausgehandelt werden.