modified on 17 lis 2009 at 11:56 ••• 16 219 views

Routing Multicastowy w RouterOS 3.x

Z MikroTik Wiki

MikroTik używa implementacji protokołu PIM-SM opracowanej przez XORP, zintegrowanej we własnym programie.

Od RouterOS 3.16 dostępna jest także usługa prostego routingu multicastowego IGMP proxy.

Spis treści

Opis Routingu Multicastowego

Multicast IP jest technologią pozwalającą na rozsyłanie danych przez Internet trybem jeden-do-wielu i wielu-do-wielu. Nadawcy wysyłają swoje dane na adres multikastowy i odbierają wyrażenie chęci odbierania danych wysyłanych na taki adres. Następnie sieć zajmuje się rozsyłaniem danych od nadawców do odbiorców.

Jeśli nadawca i odbiorca grupy multicastowej znajdują się w tej samej lokalnej podsieci broadcastowej, routery nie biorą udziału w procesie rozsyłania, a komunikacja odbywa się bezpośrednio. Jeśli znajdują się w różnych podsieciach, protokół routingu multicastowego musi zestawić forwardowanie multicastowe pomiędzy nadawcą a odbiorcą.

MikroTik obsługuje protokół routingu multicastowego PIM-SM. PIM oznacza "multicast niezależny od platformy" (platform independent multicast), tzn. protokół nie jest powiązany z żadną konkretną unicastową metodą routingu. SM oznacza "tryb-rozsiany" (sparse-mode); w przeciwieństwie do trybu-skupionego, w protokołach trybu rozsianego bezpośrednie wiadomości kontrolne używane są wyłącznie w celu zapewnienia dostarczenia rucuh do podsieci, w których znajdują się odbiorcy, którzy wysłali żądania odbierania ruchu.

Dodatkowo, w protokołach routingu używanych do ustawienia rozgłaszanego forwardu pomiędzy podsieciami, występuje potrzeba wykrywania czy odbiorcy są bezpośrednio połączeni z podsiecią. Dla IPv4 tą rolę spełnia Internet Group Management Protocol (IGMP).

Modele Usług: ASM vs SSM

Są dwa modele multicastu IP:

  • Any Source Multicast (ASM), odbiorca dołącza do grupy milticastowej i obiera ruch od każdego nadawcy wysyłającego do tej grupy.
  • Source-Specific Multicast (SSM), odbiorca dołącza do wyraźnie zdefiniowanej pary (źródło, grupa).

Adresacja multicastowa

Dla IPv4 adresy multicastowe zawierają się pomiędzy 224.0.0.0. a 239.255.255.255 włącznie. Adresy w 224.0.0.0/24 zazwyczaj są typu link-local i nie powinny być forwardowane pomiędzy podsieciami. Adresy w 232.0.0.0/8 zarezerwowane są do użycia przez SSM. Adresy w 239.0.0.0/8 są adresami ASM dla różnych rozmiarów ograniczonego obszaru.

IGMP

Gdy odbiorca dołącza do grupy multicastowej, routery multicastowe poinformują podsieć odbiorcy, że dołączył on do grupy, i aby ruch multicastowy tej grupy mógł docierać do podsieci. IGMP jest protokołem link-local dla IPv4, który rozsyła taką informację pomiędzy odbiorcami i routerami. Tą samą rolę dla IPv6 spełnia protokół Multicast Listener Discovery (MLD).

Podstawowy mechnizm IGMP działa jak poniżej.

Gdy odbiorca multicastowy dołącza do grupy multikastowej wiadomość IGMP Join jest rozsyłana w podsieci, w której znajduje się odbiorca. Lokalne routery odbierają wiadomość i umożliwiają ruchowi multicastowemu tej grupy osiągnięcie podsieci. Okresowo jeden z lokalnych routerów wysyła w podsieci wiadomość IGMP Query. Jeśli w podsieci znajduje się wiele routerów multicastowych, jeden z nich jest wybierany jako jedyny mogący rozsyłać wiadomości w podsieci. W odpowiedzi na IGMP query, odbiorcy odpowiadają wysyłając ponownie IGMP Join. Jeśli nie zostanie otrzymana odpowiedź na IGMP query, wpis jest usuwany, i przestaje być przesyłany do podsieci ruch multicastowy.

Są trzy różne wersje IGMP:

  • IGMP wersja 1 - działa jak opisano powyżej.
  • IGMP wersja 2 - dodana została obsługa wiadomości IGMP Leave aby pozwolić na szybkie opuszczanie grupy multicastowej.
  • IGMP wersja 3 - dodana została obsługa dołączania i odłączania nadawców do list, aby zezwolić odbiorcy na poinformowanie, że chce otrzymywać ruch od konkretnych nadawców.

Opis Protokołu PIM-SM (Ze specyfikacji PIM-SM RFC 4601)

PIM-SM oparty jest protokół zbierania informacji o topologi (underlying topology-gathering protocol) zapełniający tablicę routingu trasami. Tablica routingu nazywana jest MRIP lub Multicast Routing Information Base. Trasy w tablicy mogą być pobierane bezpośrednio z unicastowej tablicy routingu, lub mogą się różnić od tras z tej tablicy i są zapewniane przez oddzielny protokół routingu jak na przykład Multi-protocol BGP.

Niezależnie po co został stworzony, podstawowym celem MRIB w protokole PIM-SM jest zapewnienie informacji o następnym routerze na trasie (next-hop) do każdej docelowej podsieci. MRIB używany jest do określenia następnego węzła na trasie, do którego wysyłana jest wiadomość PIM Join/Prune. Przepływ danych następuje w przeciwnym kierunku niż przepływ wiadomości Join. W przeciwieństwie do unicastowego RIB, który określa następny węzeł przez który kierowany będzie pakiet aby dotrzeć do podsieci, MRIB zapewnia informację o trasie zwrotnej i określa trasę przez którą będzie transmitowany pakiet ze swojej źródłowej sieci do routera z włączonym protokołem MRIB.

Faza pierwsza: Drzewo RP

W fazie pierwszej, multicastowy odbiorca wyraża swoje zainteresowanie odbiorem ruchu grupy multicastowej. Zazwyczaj robi to używając IGMP lub MLD. Jeden z lokalnych routerów PIM staje się Designated Router (DR) dla tej podsieci. Przy odebraniu wiadomości o zainteresowaniu odbioru, DR wysyła wiadomość PIM Join przez Rednezvous Point (RP) do grupy multicastowej. RP jest routerem PIM-SM który został skonfigurowany jako miejsce zbiorcze dla grupy multicastowej. Ta wiadomość Join nazywana jest (*.G) Join ponieważ łączy grupę G ze wszystkimi elementami tej grupy. (*,G) Join podróżuje przez kolejne węzły do RP grupy i każdy router przez który przechodzi tworzy multicast tree state dla grupy G. Ewentualnie (*,G) Join osiąga RP lub osiąga router, przez który już przechodziła wiadomość (*,G) Join dla tej grupy. Gdy wielu obiorców dołącza do grupy, ich wiadomości Join spotykają się w RP i tworzą drzewo dystrybucji dla grupy G, które umieszczone jest w RP. Ten router już jest skonfigurowany przez (*,G) Join dla grupy. Drzewo jest nazywane RP Tree (RPT) i drzewo współdzielenia (shared tree) ponieważ jest dzielone przez wszystkie źródła wysyłające dla tej grupy. Wiadomości Join przesyłane są okresowo dopóki odbiornik znajduje się w grupie. Gdy wszyscy odbiorcy w sieciach-liściach opuszczają grupę, DR wysyła wiadomość PIM (*,G) Prune do RP grupy multicastowej. Jednakże wiadomość Prune nie jest wysyłana z każdego powodu i może ulec przedawnieniu.

Nadawca danych multicastowych zaczyna wysyłać dane do grupy multicastowej lokalny router nadawcy (DR) odbiera pakiety z danymi, enkapsuluje je unicastowo i wysyła je bezpośrednio do RP. RP odbiera enkapsulowane pakiety, dekapsuluje je i przesyła do drzewa współdzielenia. Pakiety podążają drzewem multicastowym (*,G) w RP, są powielane za każdym razem gdy napotykają odgałęzienie i docierają do odbiorców grupy multicastowej. Proces enkapsulacji pakietów wysyłanych do RP nazywany jest rejestracją, a enkapsulowane pakiety nazywane są pakietami PIM Register. Na końcu fazy pierwszej, ruch multicastowy przepływa enkapsulowany do RP i przepływa przez drzewo RP do multicastowych odbiorców.

Faza druga: Register-Stop

Rejestracja - enkapsulacja pakietów z danymi jest mało wydajne z dwóch powodów:

  • Enkapsulacja i dekapsulacja są stosunkowo drogimi operacjami wykonywanymi przez router, w zależności od tego czy router ma odpowiednie oprogramowanie do takich operacji.
  • Podróżując przez całą drogę do RP i potem w dół do drzewa współdzielenia mogą powodować, że pakiety będą pokonywać długą drogę zanim osiągną odbiorców, którzy są blisko nadawcy. Dla niektórych aplikacji, takie zwiększenie opóźnienia może być niepożądane.

Pomimo, że enkapsulacja może być dokonywana cały czas, z powyższych powodów, RP przeskoczy na zwykłe forwardowanie. RP odbiera enkapsulowany pakiet ze źródła S do grupy G, inicjuje zależny od źródła (S,G) Join do S. Ta wiadomość Join pokonuje kolejne skoki do S, tworząc drzewo multicastowe (S,G) w routerach wzdłuż trasy. Drzewo multicastowe (S,G) używane jest jedynie do forwardowania pakietów dla grupy G jeśli te pakiety pochodzą od nadawcy S. Na koniec wiadomości Join osiągają podsieć S lub router który już ma utworzone drzewo (S,G), po czym pakiety zaczynają przepływać z S przez drzewo (S,G) do RP. Pakiety z danymi mogą również przepływając do RP dotrzeć do routerów znajdujących się w drzewie (*,G), jeśli tak się stanie mogą w tym punkcie przeskoczyć do drzewa RP.

Gdy RP jest w procesie łączenia drzewem zależnym od S, pakiety z danymi będą nadal enkapsulowane i wysyłane do RP. Gdy pakiety od S również zaczną docierać w standardowy sposób do RP, RP będzie otrzymywać dwie kopie każdego pakietu. W tym momencie RP zaczyna odrzucać enkapsulowane zdublowane pakiety i wysyła wiadomość Register-Stop do DR powiązanym z S aby zatrzymać niepotrzebne enkapsulowanie pakietów.

Na końcu fazy 2, ruch przepływa standardowo z S przez drzewo zależne od źródła do RP, a stamtąd przez drzewo współdzielenia do odbiorców. Gdy dwa drzewa się przetną, ruch może przeskoczyć z drzewa do drzewa aby uniknąć podróżowania po łuku przez RP. Należy zaznaczyć, że nadawca może zacząć wysyłać dane przed lub po dołączenia się odbiorcy do grupy i faza druga może nastąpić zanim zostanie utworzone drzewo współdzielenia do odbiorcy.

Faza trzecia: Drzewo najkrótszej ścieżki (Shortest-Path Tree)

Zatrzymanie enkapsulacji i rozpoczęcie zwykłego forwardowania nie optymalizuje całkowicie tras. Dla wielu odbiorców trasa przez RP może wprowadzać znaczny nadkład drogi w porównaniu z najkrótszą trasą od nadawcy do odbiorcy. Aby otrzymać mniejsze opóźnienia, router w LANie odbiorcy, zazwyczaj jest to DR, może rozpocząć transfer z drzewa współdzielenia do zależnego od źródła drzewa najkrótszej ścieżki (SPT). Wysyłana jest wiadomość (S,G) Join do S. Wiadomość powoduje utworzenie toru pomiędzy routerami wzdłuż ścieżki do S. Ostatecznie wiadomość join dociera do podsieci S, lub do routera który już ma połączenie (S,G). Gdy tak się stanie pakiety z danymi zaczynają płynąć od S wzdłuż toru (S,G) do odbiorcy.

W tym momencie odbiorca (lub router odbiorcy) będzie otrzymywać dwie kopie danych - jedną z SPT, drugą z RPT. Gdy zaczynają przychodzić pakiety z SPT, DR lub router zaczyna odrzucać pakiety do G od S, które przychodzą z drzewa RP. Dodatkowo, wysyła wiadomość (S,G) Prune przez RP. Wiadomość nazywana jest (S,G,rpt) Prune. Wiadomość Prune podróżuje pomiędzy węzłami, informując każdy węzeł wzdłuż trasy RP, że ruch z S do G NIE powinien być transmitowany w tą stronę. Prune jest propagowana dopóki nie osiągnie RP lub routera, który musi transmitować ruch z S do innych odbiorców. Teraz odbiorca będzie odbierał ruch z S przesyłanego wzdłuż drzewa najkrótszej drogi (shortest-path tree) umieszczonego pomiędzy odbiorcą a nadawcą. RP również odbiera ruch z S, ale ten ruch nie dociera do odbiorcy przez drzewo RP. Jest to ostateczne drzewo dystrybucji.

Wielodostępowe przesyłające sieci LANs

W przeciwieństwie do interfejsów PtP, wielodostępowe LAN posiadają pewną wadę. Może występować więcej niż jeden router, który jest połączony do sieci wysyłającej i odbierającej. Jeśli te wszystkie routery przesyłałyby ruch multicastowy do klientów, byłaby to strata pasma. Aby tego uniknąć, tylko jeden router zostaje wybrany jako przekazujący ruch. Wybór dokonywany jest przy użyciu wiadomości PIM Assert.

RP Discovery

Routery PIM-SM muszą znać adres RP aby osiągać każdą grupę do której mają formułę (*,G). Adres otrzymywany jest prze mechanizm bootstrap lub przez konfigurację statyczną. Jedynym dynamicznym sposobem jest użycie mechanizmu Bootstrap Router (BSR). W każdej domenie PIM-SM wybierany jest jeden router jako Bootstrap Router w prosty sposób. Wszystkie routery w domenie, które mogą być RP okresowo wysyłają swoją kandydaturę do BSR. BSR wybiera RP i okresowo ogłasza wybór RP-set w wiadomościach Bootstrap. Wiadomości Bootstrap przepływają przez całą domenę dopóki wszystkie routery nie otrzymają wiadomości o wybranym PR-set. Aby przypisać grupę do RP, router haszuje adres grupy do RP-set używając "haszującą funkcję zachowującą kolejność" (order-preserving hash function). Ostatecznie RP jest jedynym routerem, który jest używany jako RP dla tej grupy.

Multicast i Wireless

Działanie Multicastu (i broadcastu) po sieciach bezprzewodowych zależy od tego, kto transmituje pakiet multicastowy:

Jeśli AP transmituje pakiet, pakiet jest przysyłane przez powietrze z adresem odbiorcy multicastowego (tak - tylko jedna kopia pakietu jest przesyłana niezależnie od ilości zarejestrowanych klientów). Ponieważ nie ma jednego odbiorcy pakietu, nie zostaje wysłane potwierdzenie odebrania - dostarczenie pakietu nie jest pewne (brak retransmisji w przypadku gdy ktos nie odbierze pakietu). Z tego powodu używana jest najmniejsza możliwa prędkość aby zapewnić możliwie najbardziej poprawne odebranie pakietu. Nawet jeśli wysyłasz strumień unicastowy pomiędzy AP i Stacją wykorzystując prędkość 54 Mbps, strumień multicastowy przesyłany jest jedyni z prędkością 6 Mbps (zakładając, że 6 Mbps jest najniższą możliwą prędkością).

Jeśli stacja transmituje pakiet multicastowy, przesyłany jest przez powietrze z unicastowym adresem odbiorczego AP (Stacja zawsze wysyła wszystkie pakiety do AP i zawsze używa unicastowego adresu odbiorcy). Z tego powodu przesyłanie pakietów ze stacji do AP jest pewne i używana jest maksymalna dostępna prędkość, co komplikuje sprawę - gdy AP odbiera pakiet multicastowy, przetwarza go oraz wysyła z powrotem aby pozostałe stacje bezprzewodowe mogły go odebrać (traktuj AP jako switch ethernetowy, z tą różnicą, że nie musi wysyłać wielu kopii pakietu do każdego klienta). Powoduje to wykonanie procedury transmisji multikastowej opisanej powyżej, z tym że każdy pakiet transmitowany jest bezprzewodowo dwa razy - najpierw przez stację (z normalną prędkością), potem przez AP (z minimalną prędkością). Można to zmienić poprzez wyłączenie opcji "przekazywania" pakietów dla konkretnych stacji w AP (lub użycie opcji "default-forwarding" dla wszystkich stacji) - wyłączenie forwardingu powoduje, że AP nie przekazuje ruchu pomiędzy klientami oraz wyłącza "odsyłanie" pakietów multicastowych i broadcastowych otrzymanych od klienta. Może to być traktowane jako specjalny przypadek transmitowania ruchu pomiędzy klientami.

Jeśli ruch multicastowy jest forwardowany przez łącze WDS, jest transmitowany bezprzewodowo z unicastowym adresem odbiorcy (drugi koniec łącza WDS), przez co występuje pewność transmisji do celu z normalną prędkością.

Z powyższego możemy wyciągnąć kilka wniosków, jak zwiększyć przepustowość sieci bezprzewodowej:

  • Zapewnić, aby używany był unicastowy adres odbiorcy podczas transmisji multicastowej
  • Zwiększenie najmniejszej możliwej prędkości

Kilka pomysłów zastosowania powyższych wniosków:

  • W przypadku, gdy ruch multicastowy musi być dostarczany przez łącze point-to-point (np. niektóre łącza szkieletowe), powinieneś spowodować, aby ruch był przesyłany bezprzewodowo z użyciem unicastowego adresu udbiorcy. Można użyć tuneli (jak wcześniej omówiony) lub użyć łączy WDS (AP-to-AP WDS lub AP-to-Station WDS). Jeśli użyjesz łączy WDS, musisz zwrócic uwagę aby nie przesyłać rucuh multicastowego przez normalne interfejsy bezprzewodowe (aby uniknąć normalnej procedury transmisji multicastowej z AP).
  • W przypadku, gdy nie będzie użyty WDS, sieć powinna być tak zaplanowana, aby na stacji transmitującej multicastowo i AP było wyłączone forwardowanie.
  • Gdy ruch multicastowy jest dostarczana do wielu miejsc docelowych w sieci bezprzewodowej, najlepiej jest zorganizować sieć, aby AP transmitował multicastowo (ponieważ AP będzie transmitować tylko jedną kopię) ze zwiększoną minimalną prędkością, jeśli typowa przepustowość jest za mała.

składnia konfiguracji

Ustawienia ogólne

switch-to-spt - pozwala na przejście z drzewa RP do drzewa najkrótszej drogi po przekroczeniu progu.

switch-to-spt-interval - określa przedział czasu w sekundach, w którym mierzona jest przepływność ruchu od nadawcy multicastowego. Przedział czasu nie powinien być ustawiony zbyt mały. Domyślną wartością jest 100 sekund.

switch-to-spt-bytes - określa maksymalną ilość bajtów wysłaną przez nadawcę, które mogą być odebrane w danym przedziale czasu. Jeśli ten próg zostaje przekroczony, router spróbuje przełączyć się na drzewo najkrótszej drogi od nadawcy.

Interfejsy PIM

Zezwala na włączenie i skonfigurowanie protokołów PIM i IGMP na konkretnym interfejsie. PIM będzie aktywny jeśli dostępna jest konfiguracja interfejsu.

Multicast Routing Information Base (MRIB)

Routery MRIP używane są do sprawdzania forwardingu zwrotnego wzdłuż ścieżki. Wykonują odwrotną funkcję do FIB (Forwarding Information Base): FIB używany jest do znalezienia domyślnej trasy, MRIB są zapełniane przez trasy FIB. Użyj łańcuch filtr routingu "multicast" w celu kontroli lub ustawienia odpowiednich parametrów z importowanych tras FIB (tzn. możesz zmienić odległość trasy). Dodatkowo możesz określić statyczne trasy MRIB. Jest to użyteczne tylko jeśli używasz multihoming i przepływ pakietów multicastowych jest inny od przepływu pakietów unicastowych.

Aktywne wpisy MRIB, które zostały zimportowane z FIB oznaczane są flagą "dynamic".

Punkty Rendezvous (RP)

Statyczna konfiguracja RP.

Bootstrap (bsr-candidates, rp-candidates, bsr)

Konfiguracja protokołu Bootstrap.

Sąsiedzi

Informacja tylko-do-odczytu o statusie sąsiednich routerów z włączonym PIM.

Łączenie

Informacja tylko-do-odczytu o aktywnych IGMP joins.

MFC

Informacja tylko-do-odczytu o Pamięci podręcznej forwadowania multicastu (Multicast Forwarding Cache).

Przykład

Minimalna konfiguracja, w której potrzebny jest routing multicastowy:

  • nadawca multicastowy (serwer);
  • Odbiorca multicastowy (klient);
  • dwa routery pomiędzy niemi z uruchomionym PIM.

W tym przykładzie ruch multicastowy będzie nadawany na adres docelowy 224.0.1.20

Przepływ ruchu:

 Nadawca -- (podsieć I) --> Router A -- (podsieć II) --> Router B -- (podsieć III) --> Odbiorca

Router A zostanie skonfigurowany jak Punkt Rednezvous.

Włącz PIM i IGMP na routerze A:

[admin@A] > routing pim interface add
[admin@A] > routing pim interface p
Flags: X - disabled, I - inactive, D - dynamic, R - designated-router,
v1 - IGMPv1, v2 - IGMPv2, v3 - IGMPv3
 #      INTERFACE    PROTOCOLS
 0   v2 all          pim
                     igmp
 1 DRv2 ether3       pim
                     igmp
 2 DR   register     pim

Statycznie ustaw punkt rendezvous:

[admin@A] > routing pim rp add address=<IP of router A>


Włącz PIM i IGMP na routerze B:

[admin@B] > routing pim interface add interface=ether1
[admin@B] > routing pim interface p
Flags: X - disabled, I - inactive, D - dynamic, R - designated-router,
v1 - IGMPv1, v2 - IGMPv2, v3 - IGMPv3
 #      INTERFACE    PROTOCOLS
 0  Rv2 ether1       pim
                     igmp
 1 DR   register     pim

Statycznie ustaw punkt rendezvous:

[admin@B] > routing pim rp add address=<IP of router A>

Dodaj trasę u nadawcy multicastowego:

# ip route add 224.0.1.20/32 via <IP of router A>

Uruchom programy nadawcy i odbiorcy. Możesz napisać własne programiki lub użyć jednego z poniższych:

Hej, to działa! Klient powinien odbierać dane.

Ostrzeżenia

  • Metryka trasy nie może być konfigurowana, Zawsze używana jest wartość 0xffff (istotne dla PIM). Długość trasy ( z FIB lub statycznego MRIB) używana jest preferencje metryki i zawierać się może w przedziale 0..255
  • Strefy nie są wspierane
  • Nie jest do końca wiadome czy jądro Linuksa w pełni obsługuje IGMPv3.

FAQ

Q. Czy MT wspiera Source Specific Multicast (SSM)?

A. Tak, SSM jest częścią specyfikacji PIM-SM i jest obsługiwane.

Q. Czy planowane jest wprowadzenie wsparcia PIM-DM?

A. Nie, ponieważ PIM-SM działa bardzo dobrze w prawie wszystkich konfiguracjach.

Odnośniki

  1. XORP User Manual, chapters 11 - 14
  2. Multicast tutorial. Deals with multicast addressing IGMP, PIM-SM / SSM, MSDP and MBGP
  3. RFC 2236: Internet Group Management Protocol, Version 2
  4. RFC 3376: Internet Group Management Protocol, Version 3
  5. RFC 4601: Protocol Independent Multicast - Sparse Mode (PIM-SM): Protocol Specification (Revised)
  6. RFC 5059: Bootstrap Router (BSR) Mechanism for PIM