3. SRv6 SID
3. SRv6 SID
[RFC8402] definisce un SRv6 Segment Identifier (identificatore di segmento) come un indirizzo IPv6 esplicitamente associato al segmento.
Quando un SRv6 SID si trova nel campo Destination Address (indirizzo di destinazione) di un header IPv6 di un pacchetto, viene instradato attraverso i nodi di transito in una rete IPv6 come indirizzo IPv6.
La sua elaborazione è definita nella Sezione 4.3 di [RFC8754] e riprodotta qui come promemoria:
Senza vincolare i dettagli di un'implementazione, il SR segment endpoint node (nodo endpoint di segmento) crea voci Forwarding Information Base (base di informazioni di inoltro, FIB) per i suoi SID locali.
Quando un nodo compatibile con SRv6 riceve un pacchetto IPv6, esegue una ricerca di corrispondenza del prefisso più lungo sull'indirizzo di destinazione del pacchetto. Questa ricerca può restituire uno dei seguenti:
Una voce FIB che rappresenta un SRv6 SID istanziato localmente
Una voce FIB che rappresenta un'interfaccia locale, non istanziata localmente come SRv6 SID
Una voce FIB che rappresenta una route non locale
Nessuna corrispondenza
La Sezione 4 di questo documento definisce un nuovo insieme di SRv6 SID behaviors (comportamenti), in aggiunta a quello definito nella Sezione 4.3.1 di [RFC8754].
3.1. SID Format (Formato SID)
Questo documento definisce un SRv6 SID come composto da LOC:FUNCT:ARG, dove un locator (localizzatore, LOC) è codificato negli L bit più significativi del SID, seguito da F bit di function (funzione, FUNCT) e A bit di arguments (argomenti, ARG). L, la locator length (lunghezza del localizzatore), è flessibile e un operatore è libero di utilizzare la lunghezza del localizzatore di sua scelta. F e A possono essere qualsiasi valore purché L+F+A <= 128. Quando L+F+A è inferiore a 128, i bit rimanenti del SID DEVONO essere zero.
Un locator può essere rappresentato come B:N dove B è il SRv6 SID block (blocco SRv6 SID, prefisso IPv6 allocato per i SRv6 SID dall'operatore) e N è l'identificatore del nodo padre che istanzia il SID.
Quando la parte LOC dei SRv6 SID è instradabile, conduce al nodo che istanzia il SID.
Il FUNCT è un'identificazione opaca di un comportamento locale associato al SID.
Il termine "function" (funzione) si riferisce alla stringa di bit nel SRv6 SID. Il termine "behavior" (comportamento) identifica il comportamento associato al SID. Alcuni comportamenti sono definiti nella Sezione 4 di questo documento.
Un SRv6 Endpoint behavior (comportamento endpoint) può richiedere informazioni aggiuntive per la sua elaborazione (ad esempio, relative al flusso o al servizio). Queste informazioni possono essere codificate nei bit ARG del SID.
In tal caso, la semantica e il formato dei bit ARG sono definiti come parte della specifica del SRv6 Endpoint behavior.
Il valore ARG di un routed SID (SID instradato) DOVREBBE rimanere costante tra i pacchetti in un dato flusso. Valori ARG variabili tra i pacchetti in un flusso possono risultare in hashing ECMP diverso e causare riordinamento.
3.2. SID Allocation within an SR Domain (Allocazione SID all'interno di un dominio SR)
I locators sono assegnati coerentemente con l'allocazione dell'infrastruttura IPv6. Ad esempio, un operatore di rete può:
-
Assegnare il blocco B::/48 al SR domain (dominio SR)
-
Assegnare un blocco B:N::/64 univoco a ciascun nodo abilitato SRv6 nel dominio
Come esempio, un fornitore di servizi mobili ha distribuito commercialmente SRv6 su oltre 1000 router commerciali e 1800 router whitebox. Tutti questi dispositivi sono abilitati per SRv6 e annunciano SRv6 SID. Il fornitore ha storicamente distribuito IPv6 e assegnato indirizzi di infrastruttura dallo spazio Unique Local Address (indirizzo locale univoco, ULA) [RFC4193]. Hanno specificamente allocato tre prefissi /48 (Paese X, Paese Y, Paese Z) per supportare la loro infrastruttura SRv6. Da quei prefissi /48, a ciascun router è stato assegnato un prefisso /64 da cui vengono allocati tutti i SID di quel router.
In un altro esempio, un grande fornitore di servizi mobili e di linea fissa ha distribuito commercialmente SRv6 nella loro rete nazionale. A questo fornitore è stato assegnato un prefisso /20 da un Regional Internet Registry (registro Internet regionale, RIR). Hanno sotto-allocato alcuni prefissi /48 alla loro infrastruttura per distribuire SRv6. A ciascun router viene assegnato un prefisso /64 da cui vengono allocati tutti i SID di quel router.
Il consumo di indirizzi IPv6 in entrambi questi esempi è minimo, rappresentando rispettivamente meno di un miliardesimo e un milionesimo dello spazio di indirizzamento disponibile.
Un fornitore di servizi che riceve l'allocazione minima attuale di un prefisso /32 da un RIR può assegnare un prefisso /48 alla propria infrastruttura che distribuisce SRv6 e successivamente allocare prefissi /64 per i SID a ciascun nodo SRv6. L'assegnazione /48 è un sessantacinquemillesimo (1/2^16) dello spazio di indirizzamento IPv6 utilizzabile disponibile per l'assegnazione da parte del fornitore.
Quando un operatore istanzia un SID su un nodo, specifica un valore SID B:N:FUNCT e il comportamento associato al SID utilizzando uno dei codepoint SRv6 Endpoint Behavior (punti codice di comportamento endpoint) del registro definito in questo documento (vedere Tabella 6).
Il nodo annuncia il SID, B:N:FUNCT, nel control plane (piano di controllo) (vedere Sezione 8) insieme al codepoint SRv6 Endpoint Behavior che identifica il comportamento del SID.
Un SR source node (nodo sorgente) non può dedurre il comportamento esaminando il valore FUNCT di un SID.
Pertanto, il codepoint SRv6 Endpoint Behavior viene annunciato insieme al SID nel piano di controllo.
Un SR source node utilizza il codepoint SRv6 Endpoint Behavior per mappare il SID ricevuto (B:N:FUNCT) a un comportamento.
Un SR source node seleziona un comportamento desiderato presso un nodo annunciante selezionando il SID (B:N:FUNCT) annunciato con il comportamento desiderato.
Come esempio:
-
Un operatore di rete può assegnare un SRv6 SID block 2001:db8:bbbb::/48 dal proprio blocco operativo interno per la propria infrastruttura SRv6.
-
Un operatore di rete può assegnare un SRv6 Locator 2001:db8:bbbb:3::/64 a un particolare router, ad esempio Router 3, nel proprio SR Domain.
-
Su Router 3, all'interno del locator 2001:db8:bbbb:3::/64, l'operatore di rete o il router esegue un'assegnazione dinamica per:
-
Function 0x0100 associata al behavior End.X (Endpoint with L3 cross-connect, endpoint con interconnessione L3) tra router 3 e il suo router vicino connesso (ad esempio, Router 4). Questa function è codificata come valore a 16 bit e non ha argomenti (F=16, A=0).
Questo SID viene annunciato nel piano di controllo come 2001:db8:bbbb:3💯: con un valore di codepoint SRv6 Endpoint Behavior di 5.
-
Function 0x0101 associata al behavior End.X (Endpoint with L3 cross-connect, endpoint con interconnessione L3) tra router 3 e il suo router vicino connesso (ad esempio, Router 2). Questa function è codificata come valore a 16 bit e non ha argomenti (F=16, A=0).
Questo SID viene annunciato nel piano di controllo come 2001:db8:bbbb:3:101:: con un valore di codepoint SRv6 Endpoint Behavior di 5.
-
Questi esempi non escludono nessun altro schema di allocazione degli indirizzi IPv6.
3.3. SID Reachability (Raggiungibilità SID)
Nella maggior parte dei casi, il nodo N annuncerebbe prefissi IPv6 corrispondenti alle parti LOC che coprono i suoi SID o prefissi con maschera più breve. La distribuzione di questi annunci e il calcolo della loro raggiungibilità sono specifici del protocollo di routing e sono al di fuori dell'ambito di questo documento.
Si dice che un SRv6 SID sia routed (instradato) se il suo SID appartiene a un prefisso IPv6 annunciato tramite un protocollo di routing. Un SRv6 SID che non soddisfa questa condizione è non-routed (non instradato).
Forniamo un'illustrazione classica:
Il nodo N è configurato esplicitamente con due SID: 2001:db8🅱️1💯: e 2001:db8🅱️2:101::.
La rete apprende un percorso verso 2001:db8🅱️1::/64 tramite l'IGP; quindi, un pacchetto destinato a 2001:db8🅱️1💯: verrebbe instradato fino a N. La rete non apprende un percorso verso 2001:db8🅱️2::/64 tramite l'IGP; quindi, un pacchetto destinato a 2001:db8🅱️2:101:: non verrebbe instradato fino a N.
Un pacchetto potrebbe essere diretto attraverso un non-routed SID 2001:db8🅱️2:101:: utilizzando una SID list (lista SID) <...,2001:db8🅱️1💯:,2001:db8🅱️2:101::,...> dove il non-routed SID è preceduto da un routed SID verso lo stesso nodo. Un pacchetto potrebbe anche essere diretto verso un nodo che istanzia un non-routed SID precedendolo nella lista SID con un Adj-SID verso quel nodo. I SRv6 SID routed e non-routed sono rispettivamente l'istanziazione SRv6 dei segmenti global e local [RFC8402].