Het merendeel van de routeringsprotocollen die momenteel worden gebruikt, zijn bedoeld voor ‘best effort’- ‘shortest path’- en ‘least-cost-path’-routering. Grote volumes aan internetverkeer worden op deze manier gerouteerd. Vandaag de dag vragen netwerktoepassingen om een bepaalde vorm van kwaliteitsborging of ‘fastest path’-routering. En, bij netwerkstoringen moet de mogelijkheid bestaan om direct terug te vallen op een reservepad.
Operators zijn daarnaast op zoek naar manieren om de complexiteit terug te dringen. Ze hebben behoefte aan een eenvoudiger netwerkontwerp, open standaarden, technologie van verschillende leveranciers en kostenbesparingen. Segment routing (sr) biedt uitkomst; het biedt innovatieve methoden voor het aansturen van netwerkverkeer en verbeterde functies die aanzienlijk meer flexibiliteit bieden dan de huidige routeringsprotocollen. Bovendien zijn er door het gebruik van sr minder protocollen nodig wat het netwerkbeheer eenvoudiger maakt.
Definities
Segment routing is een relatief nieuw fenomeen. De basisterminologie behoeft daarom enige uitleg. Sr kan bovendien gebruikmaken van verschillende forwarding planes: MPLS of IPv6. En om het ‘eenvoudig’ te maken voor operators zijn er twee opties beschikbaar voor IPv6-verkeer, namelijk srv6 en srm6. We leggen verderop in dit stuk de verschillen tussen beide uit.
Het sr-domein is een verzameling van nodes (bijvoorbeeld routers) die deelnemen aan segment routing. Een sr-node kan verschillende functies hebben: ingress (waarbij een inkomend pakket van een extra header wordt voorzien), transit (waarbij een pakket wordt gerouteerd op basis van informatie in de toegevoegde header) en egress waarbij de header wordt verwijderd en het pakket wordt doorgestuurd op basis van zijn oorspronkelijke routeringsprotocol (bijvoorbeeld IPv4).
Een sr-pad omvat een geordende lijst van segmenten. Het sr-pad koppelt een ingress-node via transit-nodes aan een egress-node. Een sr-pad kan het ‘least cost’-pad van de ingress-node naar de egress-node volgen, of een ander pad volgen op basis van de gedefinieerde segmenten.
Bij segment routing worden verschillende typen segmenten gedefinieerd. Dit zijn onder meer adjacency- en prefix-segmenten.
- Een adjacency-segment is een instructie die ervoor zorgt dat een pakket via een gespecificeerde verbinding gerouteerd wordt.
- Een prefix-segment is een instructie die ervoor zorgt dat een pakket het ‘least cost’-pad naar een node of prefix volgt.
Je zou kunnen zeggen dat een prefix-segment dynamischer is.
In de afbeelding zijn alle verbindingen op basis van dezelfde IGP geconfigureerd. Een sr-pad verbindt R1 met R6 en bevat de volgende prefix-segmenten:
- Segment 1 (adjacency-segment), zorgt ervoor dat pakketten het pad van R1 naar R2 volgen.
- Segment 2 (prefix-segment), zorgt ervoor dat pakketten vervolgens het ‘least cost’-pad volg vanaf R2 naar R6.
Dit voorbeeld laat zien dat het mogelijk is om sr te gebruiken om specifiek gedrag in bepaalde delen van het netwerk af te dwingen. Tegelijkertijd blijft er ruimte voor standaard IGP-protocollen die de verkeersstromen in andere delen van het netwerk regelen. In ons voorbeeld dwongen we het transport af van R1 naar R2 en verzonden we het netwerkpakket vervolgens via het ‘least cost’-pad van R2 naar R6.
Een voordeel van het gebruik van prefix-segmenten ten opzichte van adjacency-segmenten is dat ze zorgen voor een reductie van het aantal sid’s (segment-id’s) dat aan het pakket moet worden toegevoegd, iets wat in grotere netwerken problemen kan opleveren.
Forwarding planes
Zoals eerder aangestipt kan sr gebruikmaken van verschillende forwarding planes: MPLS of IPv6 waarbij die laatste twee opties biedt in de vorm van srv6 en srm6.
Bij sr-MPLS worden pakketten voorzien van MPLS-label stacks. Elke vermelding in een label stack vertegenwoordigt een segment in het sr-pad. MPLS wordt gebruikt voor het netwerktransport van de ingekapselde pakketten. Dat betekent dat operators sr direct en op eenvoudige wijze in hun MPLS-netwerk kunnen toepassen. En zodra ze het hele netwerk hebben overgezet naar sr-MPLS, kunnen ze LDP en RSVP-TE uit hun netwerk verwijderen. Op die manier hoeven er minder protocollen te worden beheerd.
Hoewel sr-MPLS op het eerste gezicht misschien redelijk ongecompliceerd overkomt en de eenvoudigste optie kan lijken, is sr via IPv6 niet veel complexer. Operators kunnen simpelweg de sr-uitbreidingen gebruiken die hun bestaande IGP-protocollen (OSPF/ISIS) bieden.
Zoals gezegd zijn er twee opties voor het implementeren van sr op basis van IPv6 in plaats van MPLS. Volgens dit concept standaarddocument van de Internet Engineering Task Force (IETF) kan het verschil tussen beide benaderingen het beste op de volgende manier worden gedefinieerd:
- srv6 definieert een routeringsheader genaamd segment routing header (srh). De srh bevat een veld dat het srv6-pad vertegenwoordigt in de vorm van een geordende reeks van sid’s. De lengte van elke sid in dat veld bedraagt 128 bits.
- srm6 definieert twee routeringsheaders: crh-16 en crh-32. Beide headers bevatten een veld dat het srv6-pad vertegenwoordigt in de vorm van een geordende reeks van sid’s.
- In de crh-16 header bedraagt de lengte van elke sid 16 bits.
- In de crh-32 header bedraagt de lengte van elke sid 32 bits.
Grote routeringsheaders zijn mogelijk niet wenselijk, en wel om de volgende redenen:
- Veel op ASIC gebaseerde routers en switches kopiëren de complete keten van de IPv6-headers naar het chipgeheugen. Maar hoe groter de omvang van de IPv6-uitbreidingsheader, des te hoger de “kosten” die met deze kopie gepaard gaan.
- Path MTU Discovery (PMTUD) [>RFC8201] is niet volledig betrouwbaar. Daarom verzenden veel IPv6-hosts geen pakketten die groter zijn dan de maximale pakketgrootte van de IPv6-verbinding (1280 bytes). Bij kleine pakketten valt de overhead van grote routeringsheaders te hoog uit.
Srm6 voorkomt deze problemen door kleinere headers te gebruiken.
De voordelen
Omdat de ingress-nodes padgegevens in de sr-header schrijven, hoeven transit-nodes geen informatie bij te houden welke weg pakketten moeten volgen. Het enige wat ze hoeven te doen, is de segment-id’s verwerken die in de pakketheader worden aangetroffen en het pakket van het huidige segment naar het volgende segment te routeren.
Dit is hét grote voordeel van sr. Omdat transit-nodes geen padgegevens bij hoeven houden, wordt er een einde gemaakt aan een hoop benodigde overhead in de node zelf. Door deze informatie over paden (segmenten) van de transit-routers naar het pakket te verplaatsen, maakt sr een einde aan de noodzaak om gebruik te maken van protocollen als LDP en RSVP-TE.
Hoewel het verwijderen van padgegevens uit de transit-node en het in het pakket meesturen van deze informatie mogelijk een aantal nieuwe problemen met zich meebrengt, slaat de balans vanuit technisch opzicht hoofdzakelijk positief uit. Segment routing vereenvoudigt de routeringsprotocollen, zorgt voor verbeterde schaalbaarheid en biedt een oplossing voor tal van problemen rond het netwerkbeheer.