3. Spécification du protocole
Les sections précédentes qui décrivent le fonctionnement de LDP ont examiné des scénarios impliquant l'échange de messages entre pairs LDP. Cette section spécifie les encodages des messages et les procédures de traitement des messages.
Les échanges de messages LDP s'effectuent en envoyant des unités de données de protocole (Protocol Data Unit, PDU) LDP sur les connexions TCP de session LDP.
Chaque PDU LDP peut transporter un ou plusieurs messages LDP. Notez que les messages d'un PDU LDP ne doivent pas nécessairement être liés les uns aux autres. Par exemple, un seul PDU pourrait transporter un message annonçant des liaisons FEC-étiquette pour plusieurs FEC, un autre message demandant des liaisons d'étiquettes pour plusieurs autres FEC, et un troisième message Notification signalant quelque événement.
3.1. PDU LDP
Chaque PDU LDP est constitué d'un en-tête LDP suivi d'un ou plusieurs messages LDP. L'en-tête LDP est :
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Version | PDU Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| LDP Identifier |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Version Entier non signé de deux octets contenant le numéro de version du protocole. Cette version de la spécification spécifie la version 1 du protocole LDP.
PDU Length Entier de deux octets spécifiant la longueur totale de ce PDU en octets, à l'exclusion des champs Version et PDU Length.
La longueur maximale autorisée d'un PDU est négociable lors de l'initialisation d'une session LDP. Avant l'achèvement de la négociation, la longueur maximale autorisée est de 4096 octets.
LDP Identifier Champ de six octets qui identifie de manière unique l'espace d'étiquettes du LSR émetteur auquel ce PDU s'applique. Les quatre premiers octets identifient le LSR et DOIVENT (MUST) être une valeur globalement unique. Cela DEVRAIT (SHOULD) être un router Id sur 32 bits attribué au LSR et également utilisé pour l'identifier dans les Path Vectors de détection de boucles. Les deux derniers octets identifient un espace d'étiquettes au sein du LSR. Pour un espace d'étiquettes à l'échelle de la plateforme, ces deux octets DEVRAIENT (SHOULD) être tous deux nuls.
Notez qu'il n'y a aucune exigence d'alignement pour le premier octet d'un PDU LDP.
3.2. Procédures LDP
LDP définit des messages, des TLV et des procédures dans les domaines suivants :
- Découverte de pairs
- Gestion de session
- Distribution d'étiquettes
- Notification d'erreurs et d'informations à titre indicatif
Les sections qui suivent décrivent les encodages des messages et des TLV pour ces domaines, ainsi que les procédures qui s'y appliquent.
Les procédures de distribution d'étiquettes sont complexes et difficiles à décrire de façon complète, cohérente et non ambiguë sous forme d'un ensemble de spécifications distinctes de messages et de TLV.
L'annexe A, "LDP Label Distribution Procedures", décrit les procédures de distribution d'étiquettes en termes d'événements de distribution d'étiquettes pouvant survenir au niveau d'un LSR et de la manière dont le LSR doit y répondre. L'annexe A est la spécification des procédures de distribution d'étiquettes LDP. Si une procédure décrite ailleurs dans ce document entre en conflit avec l'annexe A, c'est l'annexe A qui spécifie le comportement de LDP.
3.3. Encodage type-longueur-valeur
LDP utilise un schéma d'encodage type-longueur-valeur (Type-Length-Value, TLV) pour encoder une grande partie des informations transportées dans les messages LDP.
Un TLV LDP est encodé sous la forme d'un champ de 2 octets qui utilise 14 bits pour spécifier un Type et 2 bits pour spécifier le comportement lorsqu'un LSR ne reconnaît pas le Type, suivi d'un champ Length de 2 octets, puis d'un champ Value de longueur variable.
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|U|F| Type | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
| Value |
~ ~
| |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
U-bit Unknown TLV bit. À la réception d'un TLV inconnu, si U est à 0, une notification DOIT (MUST) être renvoyée à l'origine du message et le message entier DOIT (MUST) être ignoré ; si U est à 1, le TLV inconnu DOIT (MUST) être ignoré silencieusement et le reste du message traité comme si le TLV inconnu n'existait pas. Les sections qui suivent et qui définissent des TLV spécifient une valeur pour le U-bit.
F-bit Forward unknown TLV bit. Ce bit ne s'applique que lorsque le U-bit est à 1 et que le message LDP contenant le TLV inconnu doit être transmis. Si F est à 0, le TLV inconnu n'est pas transmis avec le message conteneur ; si F est à 1, le TLV inconnu est transmis avec le message conteneur. Les sections qui suivent et qui définissent des TLV spécifient une valeur pour le F-bit. En positionnant à la fois les U- et F-bits, un TLV peut être propagé comme données opaques à travers des nœuds qui ne reconnaissent pas le TLV.
Type Encode la manière dont le champ Value doit être interprété.
Length Spécifie la longueur du champ Value en octets.
Value Chaîne d'octets de Length octets qui encode des informations à interpréter comme spécifié par le champ Type.
Notez qu'il n'y a aucune exigence d'alignement pour le premier octet d'un TLV.
Notez que le champ Value peut lui-même contenir des encodages TLV. Autrement dit, les TLV peuvent être imbriqués.
Le schéma d'encodage TLV est très général. En principe, tout ce qui apparaît dans un PDU LDP pourrait être encodé sous forme de TLV. Cette spécification n'utilise pas le schéma TLV dans toute sa généralité. Il n'est pas utilisé là où sa généralité est inutile et où son emploi gaspillerait inutilement de l'espace. Il s'agit généralement d'endroits où le type d'une valeur à encoder est connu, par exemple par sa position dans un message ou dans un TLV englobant, et où la longueur de la valeur est fixe ou facilement déductible de l'encodage de la valeur elle-même.
Certains des TLV définis pour LDP se ressemblent. Par exemple, il existe un Generic Label TLV, un ATM Label TLV et un Frame Relay TLV ; voir les sections "Generic Label TLV", "ATM Label TLV" et "Frame Relay TLV".
Bien qu'il soit possible de concevoir les TLV ainsi apparentés en termes d'un type de TLV qui spécifie une classe de TLV et d'un sous-type de TLV qui spécifie un type particulier de TLV au sein de cette classe, la présente spécification ne formalise pas la notion de sous-type de TLV.
La spécification attribue des valeurs de type pour des TLV apparentés, tels que les label TLVs, à partir d'un bloc contigu dans l'espace de numéros de type de TLV sur 16 bits.
La section "TLV Summary" énumère les TLV définis dans cette version du protocole et la section de ce document qui décrit chacun d'eux.