Co to jest ECMP?
ECMP (Equal-Cost Multi-Path) to mechanizm routingu rozkładający ruch na kilka równokosztowych ścieżek. Wyjaśniamy haszowanie przepływów i kolejność pakietów.
Ostatnia aktualizacja:
ECMP (Equal-Cost Multi-Path) to mechanizm routingu, który pozwala routerowi zainstalować w tablicy przekazywania wiele ścieżek o identycznym koszcie do tego samego celu i rozkładać na nie ruch jednocześnie. Zamiast wybierać jedną najlepszą trasę i ignorować pozostałe, router korzysta ze wszystkich równorzędnych łączy naraz. Zwiększa to przepustowość i odporność. ECMP działa zarówno z protokołami stanu łącza (OSPF, IS-IS), jak i z BGP, gdzie wymaga jawnego włączenia.
Jak działa ECMP
Gdy proces routingu wykryje dwie lub więcej tras do tego samego prefiksu o tej samej metryce, instaluje je wszystkie jako równoległe wpisy next-hop w tablicy przekazywania (FIB). Liczbę jednoczesnych ścieżek ogranicza platforma. Typowo jest to 8 do 64, a w nowoczesnych układach nawet więcej. Decyzja o tym, którym łączem wyjdzie dany pakiet, zapada sprzętowo w momencie przekazywania, dlatego ECMP nie obciąża dodatkowo płaszczyzny sterowania i skaluje się do prędkości łącza.
Haszowanie przepływów i kolejność pakietów
Aby uniknąć zmiany kolejności pakietów w obrębie jednego połączenia, ECMP rozkłada ruch per przepływ (per-flow), a nie per pakiet. Router oblicza funkcję skrótu (hash) z wybranych pól nagłówka i na jej podstawie przypisuje przepływ do konkretnego łącza. Wszystkie pakiety tego samego przepływu idą tą samą ścieżką, więc kolejność wymagana przez TCP jest zachowana.
- Typowa 5-krotka: źródłowy adres IP, docelowy adres IP, protokół, port źródłowy i port docelowy.
- Wariant 3-krotki (źródło, cel, protokół) bywa stosowany dla ruchu innego niż TCP/UDP.
- Haszowanie per-flow zachowuje kolejność pakietów, ale może powodować nierówny rozkład przy małej liczbie dużych przepływów (efekt elephant flow).
- Wiele platform dodaje konfigurowalne pola, np. etykiety MPLS lub etykietę przepływu IPv6, by poprawić równomierność.
- Rozkład per-packet rozkłada ruch idealnie równo, ale psuje kolejność i jest rzadko używany dla TCP.
ECMP w BGP i zastosowania
W BGP domyślnie do tablicy trafia tylko jedna najlepsza trasa, więc multipath trzeba włączyć jawnie (maximum-paths). Aby trasy uznać za równoważne, muszą mieć tę samą długość AS_PATH, ten sam MED, local preference i origin. Opcja multipath-relax na wielu platformach łagodzi ten wymóg, dopuszczając ścieżki o tej samej długości AS_PATH pochodzące od różnych sąsiednich systemów autonomicznych. ECMP jest powszechnie używany do agregacji łączy w warstwie 3, w sieciach leaf-spine w centrach danych oraz do równoległego rozkładania ruchu na wielu sesjach upstream.
ECMP a AS202520 SkyPass
ECMP to praktyczny sposób na zwiększenie przepustowości i niezawodności bez kupowania pojedynczego, droższego łącza. W sieci AS202520 SkyPass, z punktami styku w Warszawie i Wrocławiu oraz peeringiem w THINX, TPIX, we WRIX i 1-IX, ECMP pozwala równomiernie rozkładać ruch na wiele równoległych sesji BGP w ramach naszego tranzytu IP i połączeń peeringowych. Klient korzystający z multihomingu zyskuje większą zagregowaną pojemność oraz płynne przełączenie na pozostałe ścieżki w razie awarii jednego łącza.
Najczęstsze pytania
Ile ścieżek ECMP obsługuje router?
Zależy od platformy. Typowy zakres to 8 do 64 równoległych ścieżek na prefiks, choć nowsze układy sprzętowe potrafią obsłużyć więcej. Limit ustawia się parametrem maximum-paths.
Czy ECMP zmienia kolejność pakietów?
Nie, jeśli stosuje rozkład per-flow. Wszystkie pakiety jednego przepływu (tej samej 5-krotki) idą tą samą ścieżką, więc kolejność jest zachowana. Może się ona zmienić tylko przy rzadko używanym rozkładzie per-packet.
Dlaczego ruch na łączach ECMP nie jest idealnie równy?
Ponieważ rozkład odbywa się per-flow na podstawie funkcji skrótu. Przy małej liczbie dużych przepływów (elephant flows) hash może przypisać je do tego samego łącza, co powoduje nierównowagę mimo wielu dostępnych ścieżek.
Czy ECMP w BGP wymaga włączenia?
Tak. Domyślnie BGP instaluje tylko jedną najlepszą trasę. Multipath włącza się jawnie (np. maximum-paths), a trasy muszą być równoważne, m.in. mieć tę samą długość AS_PATH, MED, local preference i origin.
