PIM-protokollet Ă€r en uppsĂ€ttning protokoll för överföring av multicast i nĂ€tverk mellan routrar. Grannskapsrelationer byggs pĂ„ samma sĂ€tt som i fallet med dynamiska routingprotokoll. PIMv2 skickar var 30:e sekund ett Hello-meddelande till den reserverade multicastadressen 224.0.0.13 (All-PIM-Routers). Meddelandet innehĂ„ller hĂ„lltimrar â som vanligtvis Ă€r 3,5 gĂ„nger Hello-timern, det vill sĂ€ga 105 sekunder som standard.
PIM anvĂ€nder tvĂ„ grundlĂ€ggande driftslĂ€gen â Dense och Sparse mode. LĂ„t oss börja med Dense mode.
KÀllbaserade distributions-trÀd.
Dense-mode-lĂ€get Ă€r lĂ€mpligt att anvĂ€nda nĂ€r det finns ett stort antal klienter i olika multicastgrupper. NĂ€r en router tar emot multicast-trafik, kontrollerar den först den mot RPF-regeln. RPF â denna regel anvĂ€nds för att verifiera kĂ€llan för multicast mot unicast-routingtabellen. Trafiken mĂ„ste komma in pĂ„ det grĂ€nssnitt dĂ€r den aktuella vĂ€rden döljer sig enligt den unicast-routingtabellen. Denna mekanism löser problemet med slinga vid överföring av multicast.
R3 fÄr frÄn multicast-meddelandet veta kÀllan för multicast (Source IP) och kontrollerar tvÄ strömmar frÄn R1 och R2 i sin unicast-routingtabell. Strömmen frÄn det grÀnssnitt som tabellen pekar pÄ (R1 till R3) kommer att vidarebefordras, medan strömmen frÄn R2 kommer att slÀppas, eftersom för att nÄ multicast-kÀllan mÄste paketen skickas via S0/1.
FrÄgan Àr, vad hÀnder om ni har tvÄ ekvivalenta rutter med samma metrik? I det hÀr fallet kommer routern att vÀlja baserat pÄ next-hop för dessa rutter. Den med högre IP-adress vinner. Om det Àr nödvÀndigt att Àndra detta beteende kan ECMP anvÀndas. Mer information .
Efter att ha kontrollerat RPF-regeln skickar routern multicast-paketet till alla sina PIM-grannar, förutom den frĂ„n vilken paketet mottogs. Ăvriga PIM-routrar upprepar denna process. VĂ€gen som multicast-paketet tog frĂ„n kĂ€llan till slutmĂ„len bildar ett trĂ€d som kallas â kĂ€llbaserat distributions-trĂ€d, shortest-path tree (SPT), kĂ€lltrĂ€d. Tre olika namn, vĂ€lj vilket som helst.
Hur ska man hantera frÄgan om vissa routrar inte lyckades fÄ nÄgot multicast-flöde att skicka, och den överordnade routern skickar det till dem? För detta har prune-mekanismen uppfunnits.
Prune-meddelande.
Till exempel, R2 fortsÀtter att skicka multicast till R3, Àven om R3 slÀpper den enligt RPF-regeln. Varför belasta kanalen? R3 skickar PIM Prune-meddelandet och R2, nÀr det mottar detta meddelande, kommer att ta bort grÀnssnittet S0/1 frÄn listan (outgoing interface list) för den aktuella strömmen, listan över grÀnssnitt som ska skicka denna trafik.
Följande Àr en mer formell definition av ett PIM Prune-meddelande:
PIM Prune-meddelandet skickas av en router till en andra router för att fÄ den andra routern att ta bort lÀnken pÄ vilken Prune-meddelandet tas emot frÄn en viss (S,G) SPT.
Efter att ha mottagit Prune-meddelandet, stÀller R2 in Prune-timern till 3 minuter. Efter tre minuter kommer den att börja skicka trafik igen, tills den fÄr ett nytt Prune-meddelande. Detta Àr i PIMv1.
I PIMv2 har dessutom en State Refresh-timer lagts till (standard Àr 60 sekunder). SÄ snart ett Prune-meddelande skickas frÄn R3, startas denna timer pÄ R3. NÀr timern löper ut, kommer R3 att skicka ett State Refresh-meddelande som ÄterstÀller R2:s 3-minuters Prune Timer för den aktuella gruppen.
Anledningar till att skicka Prune-meddelandet:
- NĂ€r multicast-paketet inte passerade RPF-kontrollen.
- NÀr det inte finns nÄgra lokalt anslutna kunder som begÀrt multicastgruppen (IGMP Join) och inga PIM-grannar att skicka multicasttrafik till (Non-prune Interface).
Graft-meddelande.
Anta att R3 inte ville ha trafik frÄn R2, skickade Prune och tog emot multicast frÄn R1. Men plötsligt föll lÀnken mellan R1 och R3 och R3 blev utan multicast. Man kan vÀnta 3 minuter tills R2:s Prune Timer löper ut. Att vÀnta 3 minuter Àr lÀnge, för att inte behöva vÀnta mÄste ett meddelande skickas som omedelbart avlÀgsnar detta grÀnssnitt S0/1 pÄ R2 frÄn det prunade tillstÄndet. Detta meddelande Àr Graft-meddelandet. Efter att ha mottagit Graft-meddelandet, kommer R2 att skicka ett svar, Graft-ACK.
Prune Override.
LĂ„t oss titta pĂ„ detta schema. R1 sĂ€nder multicast till segmentet med tvĂ„ routrar. R3 tar emot och sĂ€nder trafiken, medan R2 tar emot, men har ingen att sĂ€nda trafiken till. Han skickar ett Prune-meddelande till R1 i detta segment. R1 mĂ„ste ta bort Fa0/0 frĂ„n listan och sluta sĂ€nda i detta segment, men vad hĂ€nder med R3? R3 Ă€r i samma segment, har ocksĂ„ mottagit detta Prune-meddelande och förstĂ„r allvaret i situationen. Innan R1 slutar sĂ€nda stĂ€ller han in en timer pĂ„ 3 sekunder och slutar sĂ€nda efter 3 sekunder. 3 sekunder â det Ă€r den tid R3 har för att inte förlora sin multicast. DĂ€rför skickar R3 sĂ„ snart som möjligt ett Pim Join-meddelande för denna grupp och R1 tĂ€nker inte lĂ€ngre pĂ„ att sluta sĂ€nda. Mer om Join-meddelanden nedan.
Assert-meddelande.
TĂ€nk dig en situation dĂ€r tvĂ„ routrar sĂ€nder till ett nĂ€tverk samtidigt. De tar emot samma ström frĂ„n kĂ€llan och bĂ„da sĂ€nder den till ett nĂ€tverk via grĂ€nssnittet e0. DĂ€rför mĂ„ste de avgöra vem som blir den enda sĂ€ndaren för detta nĂ€tverk. För detta anvĂ€nds Assert-meddelanden. NĂ€r R2 och R3 upptĂ€cker duplikering av multicast-trafik, det vill sĂ€ga nĂ€r multicast som de sjĂ€lva sĂ€nder kommer till R2 och R3, förstĂ„r routrarna att nĂ„got Ă€r fel. I detta fall skickar routrarna Assert-meddelanden som inkluderar Administrative Distance och metrik för den vĂ€g som nĂ„r multicast-kĂ€llan â 10.1.1.10. Vinnaren avgörs sĂ„ hĂ€r:
- Den med lÀgst AD.
- Om AD Àr lika, den med lÀgst metrik.
- Om det fortfarande Àr jÀmt, den med högst IP-adress i nÀtverket dÀr de sÀnder denna multicast.
Den som vinner denna omröstning blir Designated Router. För att vÀlja DR anvÀnds Àven Pim Hello. I början av artikeln visades PIM Hello-meddelandet, dÀr DR-fÀltet kan observeras. Den med högst IP-adress pÄ denna lÀnk vinner.
Nyttig tabell:
MROUTE-tabell.
Efter en första genomgÄng av hur PIM-protokollet fungerar, mÄste vi förstÄ hur vi ska arbeta med multicast-routningstabellen. I mroute-tabellen lagras information om vilka strömmar som har begÀrts av klienterna och vilka strömmar som sÀnds frÄn multicastservrar.
Till exempel, nÀr ett IGMP Membership Report eller PIM Join mottas pÄ ett visst grÀnssnitt, lÀggs en post av typen ( *, G ) till i routingtabeln:
Denna post innebÀr att en begÀran om trafik har erhÄllits frÄn adressen 238.38.38.38. Flaggan DC innebÀr att multicast kommer att fungera i Dense mode och C stÄr för att mottagaren Àr direkt ansluten till routern, vilket innebÀr att routern har erhÄllit ett IGMP Membership Report och PIM Join.
Om det finns en post av typen (S,G) innebÀr det att vi har en multicastström:
I fĂ€ltet S â 192.168.1.11, har vi angivit IP-adressen för multicastkĂ€llan, vilket Ă€r den som kommer att kontrolleras av RPF-regeln. Vid problem Ă€r det första som mĂ„ste kontrolleras unicast-tabellen för en rutt till kĂ€llan. I fĂ€ltet Incoming Interface anges det grĂ€nssnitt som multicast tas emot pĂ„. I unicast-ruttabellen ska rutten till kĂ€llan hĂ€nvisa till det grĂ€nssnitt som anges hĂ€r. I Outgoing Interface anges vart multicast kommer att dirigeras. Om det Ă€r tomt, betyder det att det inte har inkommit nĂ„gra begĂ€rningar om denna trafik till routern. Mer information om alla flaggor kan hittas .
PIM Sparse-mode.
Strategin Sparse-mode Àr motsatsen till Dense-mode. NÀr Sparse-mode tar emot multicasttrafik, kommer den att skicka trafiken endast genom de grÀnssnitt dÀr det har kommit begÀrningar om denna ström, till exempel Pim Join eller IGMP Report-meddelanden med begÀran om denna trafik.
Likheterna mellan SM och DM:
- Grannskapsrelationer byggs ocksÄ, precis som i PIM DM.
- RPF-regeln fungerar.
- Valet av DR Àr liknande.
- Mechanismen Prune Overrides och Assert-meddelanden Àr likartade.
För att kontrollera vem, var och vilken multicasttrafik som behövs i nÀtverket, behövs ett gemensamt informationscentrum. Detta centrum kommer att vara Rendezvous Point (RP). Alla som vill ha viss multicasttrafik eller den som börjar ta emot multicasttrafik frÄn kÀllan, kommer att skicka den till RP.
NÀr RP fÄr multicasttrafik kommer den att skicka den till de routrar som tidigare har begÀrt denna trafik.
Anta en sÄdan topologi dÀr RP Àr R3. SÄ snart R1 fÄr trafik frÄn S1, kommer den att inkapsla detta multicastpaket i ett unicast PIM Register-meddelande och skicka det till RP. Hur vet den vem RP Àr? I detta fall Àr den statiskt konfigurerad, och vi kommer att diskutera dynamisk konfiguration av RP senare.
ip pim rp-address 3.3.3.3
RP kommer att kontrollera om det finns information frÄn nÄgon som önskar ta emot denna trafik. Anta att det inte finns nÄgon sÄdan information. DÄ kommer RP att skicka ett Register-Stop-meddelande till R1, vilket innebÀr att ingen behöver denna multicast och registreringen avvisas. R1 kommer inte att skicka multicast. Men kÀllan för multicast kommer att fortsÀtta att sÀnda, sÄ R1, efter att ha fÄtt Register-Stop, kommer att starta en timer för Register-Suppression, som Àr instÀlld pÄ 60 sekunder. Fem sekunder innan denna timer gÄr ut, kommer R1 att skicka ett tomt Register-meddelande med Null-Register-biten (det vill sÀga utan inkapslat multicast-paket) till RP. RP kommer Ä sin sida att agera pÄ följande sÀtt:
- Om det inte fanns nÄgra mottagare, sÄ svarar han med ett Register-Stop-meddelande.
- Om mottagarna dyker upp, kommer han inte att svara pÄ det. Om R1 inte fÄr nÄgon avvisning pÄ sin registrering inom 5 sekunder, kommer han att bli glad och skicka ett Register-meddelande med inkapslat multicast till RP.
Nu har vi förstÄtt hur multicast nÄr RP, sÄ lÄt oss besvara frÄgan om hur RP förmedlar trafiken till mottagarna. HÀr behöver vi introducera ett nytt begrepp - root-path tree (RPT). RPT Àr ett trÀd med roten i RP, som vÀxer mot mottagarna och grenar sig vid varje PIM-SM-router. RP skapar det genom att ta emot PIM Join-meddelanden och lÀgger till en ny gren i trÀdet. Detta gör varje lÀgre router.
- NÀr en PIM-SM-router tar emot ett PIM Join-meddelande pÄ nÄgon grÀnssnitt, med undantag för grÀnssnittet bakom vilket RP döljer sig, lÀgger den till en ny gren i trÀdet.
- En gren lÀggs ocksÄ till nÀr en PIM-SM-router fÄr en IGMP Membership Report frÄn en direkt ansluten vÀrd.
Anta att vi har en multicast-klient pĂ„ routern R5 för gruppen 228.8.8.8. SĂ„ snart R5 fĂ„r en IGMP Membership Report frĂ„n vĂ€rden, skickar R5 ett PIM Join-meddelande i riktning mot RP och lĂ€gger sjĂ€lv till grĂ€nssnittet som Ă€r riktat mot vĂ€rden till trĂ€det. DĂ€refter fĂ„r R4 PIM Join frĂ„n R5, lĂ€gger till grĂ€nssnittet Gi0/1 i trĂ€det och skickar PIM Join i riktning mot RP. Slutligen fĂ„r RP (R3) PIM Join och lĂ€gger till Gi0/0 i trĂ€det. SĂ„ skapas registreringen av multicast-mottagaren. Vi bygger ett trĂ€d med roten R3-Gi0/0 â R4-Gi0/1 â R5-Gi0/0.
Efter detta kommer en PIM Join skickas till R1 och R1 kommer börja sÀnda multicast trafik. Det Àr viktigt att notera att om vÀrden begÀrde trafik innan multicast sÀndningen började, sÄ kommer RP inte att skicka en PIM Join och överhuvudtaget inte skicka nÄgot till R1.
Om det skulle hÀnda att vÀrden slutar vilja ta emot multicast medan det fortfarande skickas, sÄ snart RP fÄr en PIM Prune pÄ grÀnssnittet Gi0/0, kommer det omedelbart att skicka en PIM Register-Stop direkt till R1, och dÀrefter en PIM Prune-meddelande via grÀnssnittet Gi0/1. PIM Register-Stop skickas unicast till den adress som PIM Register kom ifrÄn.
Som vi nÀmnde tidigare, sÄ snart routern skickar PIM Join till en annan, exempelvis R5 till R4, sÄ lÀggs en post till i R4:
Och en timer startas, som R5 stÀndigt mÄste ÄterstÀlla med PIM Join meddelanden, annars kommer R4 att undanta den frÄn outgoing list. R5 kommer att skicka PIM Join-meddelanden var 60:e sekund.
Switchover av kortaste vÀgenstrÀdet.
Vi kommer att lÀgga till ett grÀnssnitt mellan R1 och R5 och se hur trafiken flödar med denna topologi.
LÄt oss anta att trafiken skickades och mottogs enligt det gamla schemat R1-R2-R3-R4-R5 och nu har vi kopplat och konfigurerat grÀnssnittet mellan R1 och R5.
Först kommer vĂ„r unicast-routingtabell pĂ„ R5 att omstruktureras och nu nĂ„r nĂ€tverket 192.168.1.0/24 via grĂ€nssnittet R5 Gi0/2. Nu, nĂ€r R5 tar emot multicast pĂ„ grĂ€nssnittet Gi0/1, förstĂ„r den att RPF-regeln inte uppfylls och det skulle vara mer logiskt att ta emot multicast via Gi0/2. Den mĂ„ste koppla bort frĂ„n RPT och bygga ett kortare trĂ€d, som kallas Shortest-Path Tree (SPT). För detta skickar den en PIM Join till R1 via Gi0/2 och R1 börjar sĂ€nda multicast Ă€ven via Gi0/2. Nu mĂ„ste R5 avsĂ€ga sig RPT för att inte ta emot tvĂ„ kopior. För detta skickar den ett Prune-meddelande som anger kĂ€llans IP-adress och inkluderar en speciell bit â RPT-bit. Detta betyder att jag inte vill ha trafik skickad till mig, jag har ett bĂ€ttre trĂ€d hĂ€r. RP skickar ocksĂ„ PIM Prune-meddelanden mot R1, men skickar inte Register-Stop-meddelandet. En annan funktion Ă€r att R5 nu stĂ€ndigt kommer att skicka PIM Prune till RP, eftersom R1 fortsĂ€tter att skicka PIM Register till RP varje minut. RP kommer att svara med ett avslag sĂ„ lĂ€nge det inte finns nĂ„gra nya intressenter för denna trafik. R5 meddelar RP att det fortsĂ€tter ta emot multicast via SPT.
Dynamisk sökning av RP.
Auto-RP.
Denna teknik Àr proprietÀr frÄn Cisco och Àr inte sÀrskilt populÀr, men den lever fortfarande kvar. Auto-RP:s funktion bestÄr av tvÄ huvudaspekter:
1) RP skickar RP-Announce-meddelanden till den reserverade adressen â 224.0.1.39, dĂ€r den annonserar sig sjĂ€lv som RP för antingen alla eller vissa specifika grupper. Detta meddelande skickas varje minut.
2) En RP-mapping agent Àr nödvÀndig, som kommer att skicka RP-Discovery-meddelanden med information om vilken RP som ska lyssnas pÄ för vilka grupper. FrÄn detta meddelande kommer vanliga PIM-router att avgöra vilken RP de ska anvÀnda. Mapping Agent kan vara antingen den egna RP-routern eller en separat PIM-router. RP-Discovery skickas till adressen 224.0.1.40 med en timer pÄ en minut.
LÄt oss titta pÄ processen mer detaljerat:
Vi konfigurerar R3 som RP:
ip pim send-rp-announce loopback 0 scope 10
R2 som mapping agent:
ip pim send-rp-discovery loopback 0 scope 10
Och pÄ alla andra kommer vi att vÀnta pÄ RP via Auto-RP:
ip pim autorp listener
SÄ snart vi konfigurerar R3 kommer den att börja skicka RP-Announce:
Och R2, efter att ha konfigurerats som mapping agent, kommer att börja vÀnta pÄ RP-Announce-meddelanden. Endast nÀr den hittar minst en RP kommer den att börja skicka RP-Discovery:
SÄledes, sÄ snart vanliga routrar (PIM RP Listener) mottar detta meddelande, vet de var de ska leta efter RP.
Ett av de frÀmsta problemen med Auto-RP Àr att för att ta emot RP-Announce och RP-Discovery-meddelanden mÄste man skicka PIM Join till adresserna 224.0.1.39-40, och för att kunna skicka dem mÄste man veta var RP befinner sig. Den klassiska hönan och Àgget-problemet. För att lösa detta problem skapades PIM Sparse-Dense-Mode. Om routern inte kÀnner till RP kommer den att arbeta i Dense-mode, om den vet, kommer den att arbeta i Sparse-mode. NÀr PIM Sparse-mode och kommandot ip pim autorp listener Àr instÀllda pÄ grÀnssnitten av de vanliga routrarna kommer routern att arbeta i Dense-mode endast för multicast direkt relaterat till Auto-RP-protokollet (224.0.1.39-40).
BootStrap Router (BSR).
Denna funktion fungerar pÄ ett liknande sÀtt som Auto-RP. Varje RP skickar ett meddelande till mapping agenten, som samlar mappinginformation och dÀrefter informerar alla andra routrar. Vi beskriver processen pÄ samma sÀtt som Auto-RP:
1) SĂ„ snart vi konfigurerar R3 som kandidat att bli RP, med kommandot:
ip pim rp-candidate loopback 0
Kommer R3 inte att göra nÄgot, för att börja skicka speciella meddelanden mÄste den först hitta en mapping agent. SÄledes gÄr vi vidare till steg tvÄ.
2) Vi stÀller in R2 som mapping agent:
ip pim bsr-kandidat loopback 0
R2 börjar skicka PIM Bootstrap-meddelanden dÀr den anger sig sjÀlv som mapping agent:
Detta meddelande skickas till adress 224.0.0.13, som PIM-protokollet anvÀnder Àven för sina andra meddelanden. Det sÀnder dem i alla riktningar och dÀrför finns det inget problem med hönan och Àgget, som det var med Auto-RP.
3) SÄ snart RP fÄr ett meddelande frÄn BSR-router, skickar den omedelbart ett unicast-meddelande till BSR-router-adressen:
DÀrefter, nÀr BSR har fÄtt information om RP, skickar den ut dem som multicast till adress 224.0.0.13, som alla PIM-routrar lyssnar pÄ. DÀrför finns det ingen motsvarighet till kommandot ip pim autorp listener för vanliga routrar i BSR.
Anycast RP med Multicast Source Discovery Protocol (MSDP).
Auto-RP och BSR gör att vi kan fördela belastningen pÄ RP pÄ följande sÀtt: Varje multicast-grupp har endast en aktiv RP. Det gÄr inte att fördela belastningen för en multicast-grupp till flera RP. MSDP gör detta genom att ge RP-routrarna samma IP-adress med mask 255.255.255.255. MSDP fÄr information via en av metoderna: statik, Auto-RP eller BSR.
PÄ bilden har vi en Auto-RP-konfiguration med MSDP. BÄda RP Àr instÀllda med IP-adressen 172.16.1.1/32 pÄ Loopback 1-grÀnssnittet och anvÀnds för alla grupper. Vid RP-Announce berÀttar bÄda routrarna om sig sjÀlva och refererar till denna adress. Auto-RP mapping agent, som fÄr information, sprider RP-Discovery om RP med adressen 172.16.1.1/32. Om nÀtverket 172.16.1.1/32 informerar vi routrarna genom IGP. PÄ sÄ sÀtt begÀr eller registrerar PIM-routrarna flöden frÄn den RP som anges som next-hop i routen till nÀtverket 172.16.1.1/32. SjÀlva MSDP-protokollet Àr avsett för RP:erna, sÄ de kan utbyta meddelanden om information om multicast.
LÄt oss övervÀga en sÄdan topologi:
Switch6 sÀnder trafik till adress 238.38.38.38 och kÀnner bara till detta RP-R1. HÀr har Switch7 och Switch8 begÀrt denna grupp. Routrarna R5 och R4 kommer att skicka PIM Join till R1 respektive R3. Varför? Rutt till 13.13.13.13 hos R5 kommer att hÀnvisa till R1 baserat pÄ IGP-metriken, precis som hos R4.
RP-R1 kÀnner till flödet och börjar sÀnda det mot R5, men R4 vet inget om det, eftersom R1 inte kommer att skicka det utan anledning. DÀrför behövs MSDP. Vi konfigurerar det pÄ R1 och R5:
ip msdp peer 3.3.3.3 connect-source Loopback1 pÄ R1
ip msdp peer 1.1.1.1 connect-source Loopback3 pÄ R3
De kommer att skapa en session mellan varandra och vid mottagande av nÄgot flöde kommer de att informera sin RP-granne om det.
RP-R1 kommer sĂ„ snart den fĂ„r flödet frĂ„n Switch6 att skicka ett unicast MSDP Source-Active meddelande som innehĂ„ller information av typen (S, G) â information om kĂ€llan och destinationen för multicast. Nu, nĂ€r RP-R3 vet att det finns en kĂ€lla som Switch6, kommer den vid mottagande av en förfrĂ„gan frĂ„n R4 om detta flöde att skicka en PIM Join mot Switch6, baserat pĂ„ routingtabeln. DĂ€rmed, nĂ€r R1 fĂ„r en sĂ„dan PIM Join, kommer den att börja skicka trafik mot RP-R3.
MSDP fungerar över TCP, RP skickar keepalive-meddelanden till varandra för att kontrollera livability. Timern Àr 60 sekunder.
Funktionen för att dela MSDP peer i olika domĂ€ner förblir oklar, eftersom keepalive-meddelanden och SA inte anger tillhörighet till nĂ„gon domĂ€n. I denna topologi testades ocksĂ„ konfigurationen med olika domĂ€ner â det var ingen skillnad i prestanda.
Om nÄgon kan klargöra detta, skulle jag gÀrna lÀsa i kommentarerna.
KĂ€lla: habr.com
