3. SRv6 SID
3. SRv6 SID
[RFC8402] définit un SRv6 Segment Identifier (identifiant de segment) comme une adresse IPv6 explicitement associée au segment.
Lorsqu'un SRv6 SID se trouve dans le champ Destination Address (adresse de destination) d'un en-tête IPv6 d'un paquet, il est routé à travers les noeuds de transit dans un réseau IPv6 en tant qu'adresse IPv6.
Son traitement est défini dans la Section 4.3 de [RFC8754] et reproduit ici en guise de rappel:
Sans contraindre les détails d'une implémentation, le SR segment endpoint node (noeud de point de terminaison de segment) crée des entrées Forwarding Information Base (base d'informations de transfert, FIB) pour ses SID locaux.
Lorsqu'un noeud compatible SRv6 reçoit un paquet IPv6, il effectue une recherche de correspondance au préfixe le plus long sur l'adresse de destination du paquet. Cette recherche peut retourner l'un des éléments suivants:
Une entrée FIB qui représente un SRv6 SID instancié localement
Une entrée FIB qui représente une interface locale, non instanciée localement en tant que SRv6 SID
Une entrée FIB qui représente une route non locale
Aucune correspondance
La Section 4 de ce document définit un nouvel ensemble de SRv6 SID behaviors (comportements), en complément de celui défini dans la Section 4.3.1 de [RFC8754].
3.1. SID Format (Format SID)
Ce document définit un SRv6 SID comme composé de LOC:FUNCT:ARG, où un locator (localisateur, LOC) est encodé dans les L bits les plus significatifs du SID, suivi de F bits de function (fonction, FUNCT) et de A bits d'arguments (ARG). L, la locator length (longueur du localisateur), est flexible, et un opérateur est libre d'utiliser la longueur de localisateur de son choix. F et A peuvent avoir n'importe quelle valeur tant que L+F+A <= 128. Lorsque L+F+A est inférieur à 128, les bits restants du SID DOIVENT être à zéro.
Un locator peut être représenté comme B:N où B est le SRv6 SID block (bloc SRv6 SID, préfixe IPv6 alloué pour les SRv6 SID par l'opérateur) et N est l'identifiant du noeud parent instanciant le SID.
Lorsque la partie LOC des SRv6 SID est routable, elle mène au noeud qui instancie le SID.
Le FUNCT est une identification opaque d'un comportement local lié au SID.
Le terme "function" (fonction) fait référence à la chaîne de bits dans le SRv6 SID. Le terme "behavior" (comportement) identifie le comportement lié au SID. Certains comportements sont définis dans la Section 4 de ce document.
Un SRv6 Endpoint behavior (comportement de point de terminaison) peut nécessiter des informations supplémentaires pour son traitement (par exemple, relatives au flux ou au service). Ces informations peuvent être encodées dans les bits ARG du SID.
Dans un tel cas, la sémantique et le format des bits ARG sont définis dans le cadre de la spécification du SRv6 Endpoint behavior.
La valeur ARG d'un routed SID (SID routé) DEVRAIT rester constante parmi les paquets d'un flux donné. Des valeurs ARG variables parmi les paquets d'un flux peuvent entraîner un hachage ECMP différent et provoquer un réordonnancement.
3.2. SID Allocation within an SR Domain (Allocation de SID dans un domaine SR)
Les locators sont attribués conformément à l'allocation d'infrastructure IPv6. Par exemple, un opérateur de réseau peut:
-
Attribuer le bloc B::/48 au SR domain (domaine SR)
-
Attribuer un bloc B:N::/64 unique à chaque noeud activé SRv6 dans le domaine
À titre d'exemple, un fournisseur de services mobiles a déployé commercialement SRv6 sur plus de 1000 routeurs commerciaux et 1800 routeurs whitebox. Tous ces appareils sont activés pour SRv6 et annoncent des SRv6 SID. Le fournisseur a historiquement déployé IPv6 et attribué des adresses d'infrastructure à partir de l'espace Unique Local Address (adresse locale unique, ULA) [RFC4193]. Il a spécifiquement alloué trois préfixes /48 (Pays X, Pays Y, Pays Z) pour prendre en charge son infrastructure SRv6. À partir de ces préfixes /48, chaque routeur s'est vu attribuer un préfixe /64 à partir duquel tous les SID de ce routeur sont alloués.
Dans un autre exemple, un grand fournisseur de services mobiles et de lignes fixes a déployé commercialement SRv6 dans son réseau national. Ce fournisseur s'est vu attribuer un préfixe /20 par un Regional Internet Registry (registre Internet régional, RIR). Il a sous-alloué quelques préfixes /48 à son infrastructure pour déployer SRv6. Chaque routeur se voit attribuer un préfixe /64 à partir duquel tous les SID de ce routeur sont alloués.
La consommation d'adresses IPv6 dans ces deux exemples est minime, représentant respectivement moins d'un milliardième et d'un millionième de l'espace d'adressage disponible.
Un fournisseur de services recevant l'allocation minimale actuelle d'un préfixe /32 d'un RIR peut attribuer un préfixe /48 à son infrastructure déployant SRv6 et attribuer ensuite des préfixes /64 pour les SID à chaque noeud SRv6. L'attribution /48 représente un soixante-cinq millième (1/2^16) de l'espace d'adressage IPv6 utilisable disponible pour attribution par le fournisseur.
Lorsqu'un opérateur instancie un SID sur un noeud, il spécifie une valeur SID B:N:FUNCT et le comportement lié au SID en utilisant l'un des codepoints SRv6 Endpoint Behavior (point de code de comportement de point de terminaison) du registre défini dans ce document (voir Table 6).
Le noeud annonce le SID, B:N:FUNCT, dans le control plane (plan de contrôle) (voir Section 8) ainsi que le codepoint SRv6 Endpoint Behavior identifiant le comportement du SID.
Un SR source node (noeud source) ne peut pas déduire le comportement en examinant la valeur FUNCT d'un SID.
Par conséquent, le codepoint SRv6 Endpoint Behavior est annoncé avec le SID dans le plan de contrôle.
Un SR source node utilise le codepoint SRv6 Endpoint Behavior pour mapper le SID reçu (B:N:FUNCT) à un comportement.
Un SR source node sélectionne un comportement souhaité sur un noeud annonçant en sélectionnant le SID (B:N:FUNCT) annoncé avec le comportement souhaité.
À titre d'exemple:
-
Un opérateur de réseau peut attribuer un SRv6 SID block 2001:db8:bbbb::/48 à partir de son bloc d'opération interne pour son infrastructure SRv6.
-
Un opérateur de réseau peut attribuer un SRv6 Locator 2001:db8:bbbb:3::/64 à un routeur particulier, par exemple Router 3, dans son SR Domain.
-
Sur Router 3, dans le locator 2001:db8:bbbb:3::/64, l'opérateur de réseau ou le routeur effectue une attribution dynamique pour:
-
Function 0x0100 associée au behavior End.X (Endpoint with L3 cross-connect, point de terminaison avec interconnexion L3) entre router 3 et son routeur voisin connecté (par exemple, Router 4). Cette function est encodée comme une valeur de 16 bits et n'a pas d'arguments (F=16, A=0).
Ce SID est annoncé dans le plan de contrôle sous la forme 2001:db8:bbbb:3💯: avec une valeur de codepoint SRv6 Endpoint Behavior de 5.
-
Function 0x0101 associée au behavior End.X (Endpoint with L3 cross-connect, point de terminaison avec interconnexion L3) entre router 3 et son routeur voisin connecté (par exemple, Router 2). Cette function est encodée comme une valeur de 16 bits et n'a pas d'arguments (F=16, A=0).
Ce SID est annoncé dans le plan de contrôle sous la forme 2001:db8:bbbb:3:101:: avec une valeur de codepoint SRv6 Endpoint Behavior de 5.
-
Ces exemples n'excluent aucun autre schéma d'allocation d'adressage IPv6.
3.3. SID Reachability (Accessibilité SID)
Le plus souvent, le noeud N annoncerait des préfixes IPv6 correspondant aux parties LOC couvrant ses SID ou des préfixes de masque plus courts. La distribution de ces annonces et le calcul de leur accessibilité sont spécifiques au protocole de routage et sortent du cadre de ce document.
Un SRv6 SID est dit routed (routé) si son SID appartient à un préfixe IPv6 annoncé via un protocole de routage. Un SRv6 SID qui ne remplit pas cette condition est non-routed (non routé).
Fournissons une illustration classique:
Le noeud N est configuré explicitement avec deux SID: 2001:db8🅱️1💯: et 2001:db8🅱️2:101::.
Le réseau apprend un chemin vers 2001:db8🅱️1::/64 via l'IGP; par conséquent, un paquet destiné à 2001:db8🅱️1💯: serait routé jusqu'à N. Le réseau n'apprend pas de chemin vers 2001:db8🅱️2::/64 via l'IGP; par conséquent, un paquet destiné à 2001:db8🅱️2:101:: ne serait pas routé jusqu'à N.
Un paquet pourrait être dirigé via un non-routed SID 2001:db8🅱️2:101:: en utilisant une SID list (liste de SID) <...,2001:db8🅱️1💯:,2001:db8🅱️2:101::,...> où le non-routed SID est précédé d'un routed SID vers le même noeud. Un paquet pourrait également être dirigé vers un noeud instanciant un non-routed SID en le précédant dans la liste de SID avec un Adj-SID vers ce noeud. Les SRv6 SID routed et non-routed sont respectivement l'instanciation SRv6 des segments global et local [RFC8402].