Protocolul de gestionare a grupurilor Internet

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

Protocolul de gestionare a grupurilor Internet este un protocol pentru gestionarea grupurilor multicast . Este mijlocul pentru o gazdă de a informa routerul conectat la acesta că o aplicație care rulează pe gazdă dorește să se alăture unui anumit grup multicast . IGMP funcționează între o gazdă și routerul conectat direct la acesta, dar este necesar un alt protocol pentru a coordona routerele multicast, astfel încât datagramele multicast să poată fi direcționate către destinațiile lor finale. Această funcționalitate este realizată de algoritmi de rutare multicast ai stratului de rețea: PIM , DVMRP , MOSPF . Protocolul se află în prezent în cea de-a treia versiune (IGMPv3), care a introdus o schimbare substanțială în comparație cu versiunile anterioare în ceea ce privește modelul Internet multicast: de fapt, IGMP este acum compatibil cu modelul Source Specific Multicast (SSM) , adică gazdele nu mai sunt forțat să primească de la întregul grup, dar poate selecta un subset de surse din care să primească. Protocolul în cea mai recentă versiune a acestuia este definit în RFC 3376 .

Adrese de grup

O adresă de grup sau multicast este o adresă IP multicast pe 32 de biți (Ipv4) sau pe 128 de biți (Ipv6). În cazul Ipv4, primii 4 biți ai primului octet sunt fixați și corespund modelului 1110, în timp ce restul de 28 biți constituie ID-ul grupului Multicast, prin urmare toate aceste adrese sunt în intervalul 224.0.0.0 - 239.255.255.255. Adresa Ethernet / MAC corespunzătoare (48 de biți) utilizează o parte a adresei IP multicast și se obține după cum urmează:

  • Primul octet este static și setat la 00000001;
  • Al doilea octet este static și este plasat 00000000;
  • Al treilea octet este static și setat la 01011110;
  • Restul este alcătuit dintr-un 0 urmat de cei 23 de biți de ordin scăzut ai adresei multicast.

Pentru a permite unei gazde să își configureze arhitectura pentru a recunoaște o adresă multicast ca locală, limbajele de programare furnizează primitive, cum ar fi SetSockOpt () în C, care atunci când este invocat declanșează configurația în arhitectura de pe o interfață de nivel. adresa Ethernet construită. Din gama de adrese, cele disponibile pentru aplicațiile multicast sunt de fapt un subset:

  • 224.0.0.0 este rezervat;
  • IP-urile 224.0.0.1 până la 224.0.0.255 sunt rezervate pentru rutare și protocoale de nivel scăzut pentru descoperirea / întreținerea topologiei rețelei. De exemplu, 224.0.0.1 se adresează tuturor grupurilor de gazde din subrețea, 224.0.0.2 se adresează tuturor grupurilor de routere din subrețea, 224.0.1.1 este rezervat protocolului NTP;
  • IP-urile 224.0.1.0 până la 238.255.255.255 sunt atribuite dinamic aplicațiilor multicast. Dintre acestea, adresele de la 232.0.0.0 la 232.255.255.255 sunt rezervate pentru Sursa Multicast Specifică;
  • IP-urile 239.0.0.0 până la 239.255.255.255 sunt rezervate în scopuri administrative.

Oricine dorește să anunțe începutul unei sesiuni de difuzare multiplă face acest lucru prin Session Directory (SDR) pe serverele corespunzătoare, specificând data și ora de începere și conținutul transmisiei. Gazdele interesate să primească transmisia multicast prin instrumentele SDR adecvate pot obține adresa la care sursa (sursele) își vor trimite traficul și se pot configura pentru a accepta traficul de la acea adresă.

Prezentare generală a protocolului

Funcționarea IGMP se bazează pe un modul prezent în gazde și un modul prezent în routere. Primul desfășoară toate activitățile necesare unei gazde care participă la sesiunea de difuzare multiplă: gestionarea stării recepției sale, răspuns la întrebări trimise de routerul desemnat (DR) pentru acea LAN, trimiterea rapoartelor declanșate către DR atunci când starea de recepție a unui interfața se schimbă pentru a-l informa despre noua stare de recepție. Al doilea la bordul unui router IGMP efectuează, pentru fiecare grup dorit, gestionarea și urmărirea stării de recepție a gazdelor LAN din care este DR și reglează redirecționarea pachetelor provenite din structura de rutare pe LAN, dacă este simultan DR IGMP și DR pentru protocolul de rutare utilizat, altfel sugerează regulile de redirecționare către router, care este DR pentru protocolul de rutare (în general, prin urmare, un router trebuie să aibă atât modul de membru, cât și modul de rutare la bord).

Protocol partea gazdă

Atunci când o aplicație de pe o gazdă dorește să primească de la o adresă multicast, configurează o interfață de nivel 2 care va accepta și livra traficul primit de la acea adresă. În acest scop, standardul definește o primitivă independentă de limbă (care trebuie implementată în limbaje de programare specifice) numită IPMulticastListen. Parametrii săi sunt:

  • ID de soclu cu care aplicația utilizează rețeaua;
  • Interfață de pe care aplicația dorește să primească;
  • Adresa multicast de la care vrea să primească aplicația;
  • Lista de surse care specifică de la ce surse să primească, conform modelului Sursă specifică Multicast (de la IGMPv3);
  • Un filtru care se aplică listei Sursă: includeți dacă aplicația dorește să primească numai din sursele specificate în listă, excludeți dacă dorește să primească de la toate, cu excepția celor specificate în listă.

Acest cvintuplu definește o înregistrare socket. Lista Sursă poate fi, de asemenea, goală: dacă filtrul asociat este include, include {} înseamnă a părăsi (ieși) din grup; dacă este exclude, exclude {} înseamnă să vă alăturați întregului grup. Înainte de IGMPv3 din cauza absenței modelului SSM (și, prin urmare, a listei Sursă), aceste două expresii erau singurele permise. Nu este permisă specificarea celor două filtre pentru aceeași înregistrare în același timp, deoarece interfața de rețea filtrează și gestionează maximum o înregistrare pentru fiecare adresă multicast. Unul dintre scopurile IGMP este de a sintetiza cât mai mult posibil informațiile de stare asociate cu un grup, prin urmare, în timp ce la nivelul 4 este utilizată înregistrarea socket, la nivelul 2 este utilizată înregistrarea interfeței, care este un cuplu obținut din înregistrarea socket la care eliminați ID-ul soclului. În acest fel nivelurile scăzute ale rețelei au informații de stare mai puțin asociate și pot funcționa mai repede, lăsând munca de demultiplexare a traficului primit la nivelurile superioare. O problemă cu a avea o singură înregistrare pentru fiecare grup este că gazda trebuie să îmbine directivele provenite din (posibile) aplicații diferite, atunci când aceste aplicații doresc să primească de la aceeași interfață. De exemplu, să presupunem că aveți două aplicații care ascultă pe aceeași interfață pentru același grup cu aceste înregistrări:

A1: <s1, ifc_i, group_address, include, {a, b, c}>
A2: <s2, ifc_i, group_address, include, {b, c, d}>

Interfața ifc_i se rezumă luând în considerare faptul că, dacă toate înregistrările au un filtru pentru aditivitatea acestuia (și pentru a satisface toate cererile), filtrul rezultat va fi inclus și lista Sursă va fi unirea listelor Sursă:

<adresa_grup, include, {a, b, c, d}>

Dacă, pe de altă parte, cel puțin unul dintre filtre este exclus, standardul sugerează că filtrul rezultat trebuie exclus și lista Sursă va fi dată de intersecția listelor de excludere minus sursele care apar în listele de includere. De exemplu, dacă 3 aplicații au asociat următoarele înregistrări:

A1: <s1, ifc_i, group_address, exclude, {a, b, c, d}>
A2: <s2, ifc_i, group_address, exclude, {b, c, d, e}>
A2: <s3, ifc_i, group_address, include, {d, e, f}>

interfața ifc_i își amintește ca un filtru de excludere și lista surselor va fi dată de ({a, b, c, d} ∩ {b, c, d, e}) - {d, e, f} = {b, c , d} - {d, e, f} = {b, c}.

Mesaje schimbate: Interogare

Interogările IGMP sunt modul în care routerul desemnat învață și rămâne informat cu privire la statutul de membru al gazdelor pe LAN. Există trei tipuri de interogări:

  • Interogare generală ;
  • Interogare specifică grupului ;
  • Interogare specifică pentru grup și sursă .

Toate interogările sunt trimise într-un pachet IP cu câmpul Protocol = 2 (IGMP) și TTL = 1 (difuzare locală pe LAN). Interogările generale sunt trimise periodic și adresate tuturor gazdelor. Acestea permit DR să-și reîmprospăteze statutul cu privire la situația actuală de membru; răspunsurile la astfel de interogări necesită o prelucrare redusă de către router și nu determină în general o actualizare a stării pe care o menține pentru fiecare grup. Adresa către care sunt trimise este 224.0.0.1 (grupul all-hosts). Interogările specifice grupului și interogările specifice grupului și sursei sunt adresate numai gazdelor care primesc de la adresa multicast specificată și sunt trimise de router în urma unei actualizări de stare pentru acel grup specific pentru a înțelege dacă există încă o gazdă interesată să primească de la grup (primul caz) sau din surse specifice pentru acel grup (al doilea caz). Adresa de destinație este cea a grupului multicast care este interogat.
O interogare IGMP constă din următoarele câmpuri:

  • Type = 0x11 identifică faptul că acest mesaj este o interogare IGMP;
  • Max Resp Code (MRC) este o valoare pe 7 biți (între 0 și 127) care este utilizată de gazde pentru a obține un timp de răspuns maxim folosit pentru desincronizarea răspunsurilor lor, pentru a evita coliziunile pe mediul de difuzare și problema ack -implozie pe partea routerului. Timpul maxim de răspuns se obține după cum urmează:

IF (MRC <128) THEN Timp de răspuns = MRC;
ELSE {MRC = [1 <exp> <mantissa>]; Timp de răspuns = (mant | 0x10) << (exp +3); };

  • Suma de verificare este utilizată pentru a recupera orice erori care au apărut în timpul transmisiei;
  • Adresa de grup nu este nulă numai în interogările specifice grupului și interogările specifice grupului și sursei și reprezintă adresa solicitată;
  • Resv este un set de biți rezervat pentru utilizare viitoare;
  • Steagul S (Suprimare procesare pe partea de ruter), dacă este setat, spune routerelor de recepție să suprime actualizările normale ale temporizatorului;
  • QRV (Querier's Robustness Variable) reprezintă variabila de robustețe: de câte ori gazdele trebuie să trimită așa-numitul raport nesolicitat (notificarea schimbării stării unei interfețe) pentru a se asigura că routerul îl primește fără pierderi din cauza coliziunilor. Este o valoare reîmprospătată de router de fiecare dată când trimite o interogare, lucru pe care routerul îl poate face, deoarece routerele atașate la o rețea LAN sunt, în general, gateway-uri, dispozitive mai avansate decât un router obișnuit, care poate face primind semnale de blocare din cauza coliziunilor. estimarea a cât de mult trafic este prezent pe rețeaua LAN;
  • QQIC (Querier's Query Interval Code) este intervalul dintre trimiterile de interogare generală, reprezentat ca Cod de răspuns maxim. Oferă o indicație celorlalte routere (dacă există) când trebuie audiate, deoarece dacă acest timp a trecut nu văd interogare probabil că s-a întâmplat ceva cu actualul DR;
  • Numărul de surse (N) indică numărul de surse dintr-o interogare specifică pentru grup și sursă;
  • Adresa sursă [1], ....., Adresa sursă [N] specifică fiecare adresa IP unicast a unei surse pentru grupul indicat în câmpul Adresă grup. Lista surselor nu este goală numai în interogările specifice grupului și sursei.

Mesaje schimbate: Rapoarte

Rapoartele IGMP sunt mesaje trimise de gazde către DR la adresa 224.0.0.22 (routere IGMPv3_capable). Pot fi de două tipuri:

  • Rapoarte trimise ca răspuns la o interogare generală;
  • Raport nesolicitat , trimis atunci când are loc o schimbare de stare într-o interfață. Sunt nesolicitat, deoarece trimiterea nu este solicitată de o interogare din partea DR.

Un raport IGMP are următoarele câmpuri:

  • Type = 0x22 identifică faptul că acest mesaj este un raport IGMP;
  • Rezervat : rezervat pentru utilizare viitoare;
  • Suma de verificare este utilizată pentru a recupera orice erori care au apărut în timpul transmisiei;
  • Număr de înregistrări de grup (M) : numărul de grupuri pentru care gazda raportează starea recepției;
  • Înregistrare grup [1],… .., Înregistrare grup [M] : fiecare dintre aceste câmpuri este la rândul său un mesaj care detaliază starea recepției pentru grupul respectiv.

În timp ce răspunsul la o interogare generală conține o înregistrare de grup pentru fiecare grup de la care gazda primește în prezent, răspunsul la alte tipuri de interogări conține doar înregistrarea de grup pentru grupul care este interogat. Fiecare înregistrare de grup include următoarele câmpuri:

  • Tipul înregistrării spune ce tip de informații conține înregistrarea;
  • Date auxiliare Len indică lungimea informațiilor auxiliare prezente în mesaj;
  • Numărul de surse (N) indică numărul de surse pentru grupul specificat;
  • Adresa Multicast specifică adresa grupului la care se referă această înregistrare de grup;
  • Adresa sursă [1], ...., Adresa sursă [N] specifică fiecare adresa IP unicast a unei surse aparținând grupului indicat în câmpul Adresă multicast. Lista surselor este cea a interfeței;
  • Datele auxiliare conțin informații auxiliare despre grup dacă este lăsat spațiu, cu toate acestea aceste informații nu ar trebui să fie niciodată prezente.

Câmpul Tip înregistrare diferă în funcție de tipul raportului. Dacă este un răspuns la o interogare generală, este de tip Current_state și este unul dintre cele două Mode_Is_Include sau Mode_Is_Exclude . În caz contrar, raportul notifică o modificare a stării unei interfețe și poate fi:

  • Filter_Mode_Change : unul dintre Change_To_Include_Mode sau Change_To_Exclude_Mode ;
  • Source_List_Change : fie Allow_New_Sources fie Block_Old_Sources .

Toate mesajele IGMP trebuie să fie într-un pachet IP. Dacă numărul de surse (care determină lungimea mesajului) depășește dimensiunea pachetului, este necesar să se fragmenteze rapoartele. În acest caz, comportamentul diferă în funcție de conținutul câmpului Record_Type. Dacă este unul dintre Mode_Is_Include, Change_To_Include_Mode sau Source_List_Change, atunci este posibil să se fragmenteze pe mai multe pachete IP succesive, altfel (datorită non-aditivității filtrului de excludere) gazda trimite un singur pachet în care introduce cât mai multe surse posibil iar celelalte nu sunt indicate. Standardul sugerează că sursele indicate ar trebui să fie întotdeauna aceleași în rapoartele ulterioare. Deoarece filtrul este exclus, aceasta înseamnă că unele surse care nu ar trebui să treacă vor trece în schimb: perspectiva multicast-ului este că preferați să treceți puțin mai mult în situații de incertitudine decât să riscați să nemulțumiți utilizatorii plătitori.

Schimbarea stării interfeței

Ca urmare a directivelor IPMulticastListen de la niveluri superioare, starea de recepție pentru un anumit grup pe o anumită interfață se poate modifica. În consecință, interfața afectată trebuie să trimită un raport nesolicitat către DR-ul curent cât mai repede posibil pentru a-i informa despre schimbare. DR va actualiza apoi starea lor pentru grupul respectiv. Pentru robustețe, se așteaptă ca aceste rapoarte să fie trimise de un anumit număr de ori, într-un număr definit de câmpul QRV prezent în interogările trimise de DR, la intervale aleatorii între 0 și Intervalul de raport nesolicitat (acesta din urmă este un parametru care poate să fie configurat de administratorul de rețea). Următorul tabel prezintă modificările de stare care pot apărea pe o interfață. Aici A și B reprezintă mai multe seturi de surse decât surse unice.

Old State Stare nouă Raport trimis (e)
Include (A) Include (B) Allow_New (BA); Block_Old (AB)
Excludeți (A) Excludeți (B) Allow_New (AB); Block_Old (BA)
Include (A) Excludeți (B) Change_To_Exclude (B)
Excludeți (A) Include (B) Change_To_Include (B)

Procedură pentru a răspunde la o întrebare

Când o gazdă primește o interogare de la DR, execută o rutină pentru a programa un răspuns care ia în considerare orice interogări în așteptare (primite anterior și în așteptarea răspunsului). Gazda încearcă să condenseze diferitele interogări în așteptare într-un singur raport ori de câte ori este posibil. Următoarea procedură (în pseudo-cod) este invocată de gazdă:

  întârziere aleatoare [0, Max Timp de răspuns];
if ( Interogare generală Și răspuns_pendent R t . c . start_time_R < current_time + delay ) 
apoi săriți ;
else if ( Interogare generală )
apoi eliminați răspunsurile existente în așteptare ;
     START_TIME  current_time + întârziere;
else if (nici un răspuns pentru același grup în așteptare)
apoi start_time  current_time + delay ;
else if ( Pending_response R AND ( Group_Specific_Query SAU source_list == {})
apoi start_time  min { current_time + delay ; start_time_R };
altfel dacă ( Group_And_Source_Specific_Query AND Pending_response R AND source_list ! = {})
apoi source_list  source_list U new_sources ;
     start_time  min { current_time + delay ; start_time_R };
incheie daca

Protocol lateral al routerului

La fel ca gazdele, un router IGMP încearcă să rezume cât mai mult starea de recepție pentru fiecare grup din care gazdele sunt interesate să primească. Structura menținută pentru fiecare grup este o cvadruplă definită după cum urmează:

<multicast_address, group_timer, filter_mode, {source_record}>

unde este:

  • multicast_address este adresa multicast a grupului;
  • timer_grup este un temporizator asociat întregului grup, actualizat de fiecare dată când primește un raport;
  • {source_record} este un set de perechi de valori <source_address, source_timer>, unde source_timer este reîmprospătat de fiecare dată când sursa apare într-un raport.

Group_timer a fost conceput pentru a permite protocolului de rutare DR să întrerupă traficul nedorit de la orice gazdă atunci când filtrul curent este exclus și temporizatorul expiră. De fapt, exclude trece tot traficul, cu excepția celui care provine din sursele specificate în listă: dacă temporizatorul expiră înseamnă că nicio gazdă din starea de excludere nu și-a reîmprospătat starea de recepție (altfel cel puțin unul ar fi trimis un raport) și, prin urmare, foarte probabil gazdele nu mai sunt interesate să primească de la grup. Apoi, DR convertește filtrul pentru a include doar sursele care au un temporizator asociat> 0, restricționând cantitatea de trafic care este redirecționat pe LAN. Dacă acum și pentru sursele rămase, DR vede că temporizatorul expiră, atunci poate deduce cu certitudine că nimeni nu este mai interesat să primească de la grup și poate anula înregistrarea asociată.

Structura filtrului Include și Exclude

Filtrul Include a asociat o singură listă de surse cu un temporizator> 0. Dacă temporizatorul expiră pentru o sursă, acesta poate fi anulat de filtru. Dacă ultima sursă rămasă este, de asemenea, astfel încât source_timer = 0, filtrul rezultat include {} este echivalent cu o ieșire din grup și înregistrarea pentru grup poate fi ștearsă. Filtrul de excludere a asociat în schimb două liste: una care corespunde surselor cu temporizator> 0 și una cu cele cu temporizator = 0; forma sa generală este deci Excludeți (X, Y). Prima listă este cea a surselor provizorii , pentru care routerul, în urma unei actualizări a înregistrării pentru grup (care derivă din primirea unui raport nesolicitat), trimite grupului o interogare specifică grupului sau specifică grupului și sursei către verificați dacă c 'este o gazdă care dorește să primească încă din acele surse. În așteptarea unui răspuns, acesta transmite traficul din acele surse. Dacă într-un anumit timp nu primește un răspuns, routerul le blochează, dar nu le șterge înregistrările, deoarece cineva le-a dorit și pot fi activate din nou, altfel le scoate din filtru și le lasă să treacă. A doua listă include sursele cu temporizator asociat = 0 care sunt blocate. Tabelul de mai jos prezintă regulile de redirecționare sugerate de IGMP atunci când routerul primește un pachet multicast de la o anumită sursă.

Filtru Cronometru sursă Acțiune
Include > 0 Redirecţiona
Include == 0 Nu redirecționați - Ștergeți sursa
Include Fără sursă Nu redirecționați: părăsiți grupul
Exclude > 0 Redirecţiona
Exclude == 0 Nu înaintați
Exclude Fără sursă Redirecționare: Alăturați-vă întregului grup

Actualizare informații despre stare

De fiecare dată când DR primește un raport de la o gazdă, își actualizează starea pentru fiecare grup care apare în raport cu scopul de a menține statutul cel mai concis, dar precis posibil al statutului de membru în LAN. Actualizările necesită, în general, ca routerul să trimită interogare specifică grupului / grupului și sursei specifice pentru a verifica dacă, în urma dorinței unei gazde de a șterge unele surse, există și alte gazde care doresc să primească de la acestea. Dacă filtrul real deținut de router pentru grup este Include, cazurile posibile sunt următoarele, unde A și B indică din nou grupuri de surse.

Old State Raport primit Stare nouă Acțiuni necesare
Include (A) Mode_Is_Include (B) Include (A + B)
Include (A) Mode_Is_Exclude (B) Excludeți (A∩B, BA) Șterge (AB); Trimiteți Q (G, A∩B)
Include (A) Change_To_Include (B) Include (A + B) Trimiteți Q (G, AB)
Include (A) Change_To_Exclude (B) Excludeți (A∩B, BA) Șterge (AB); Trimiteți Q (G, A∩B)
Include (A) Allow_New (B) Include (A + B)
Include (A) Block_Old (B) Include (A) Trimiteți Q (G, A∩B)

Se aplică următoarele reguli:

  • când filtrul este Include și raportul primit are Include filtru, routerul nu trebuie să schimbe niciodată filtrul în Exclude;
  • când filtrul este Include și raportul primit are Exclude filter, routerul trebuie să schimbe filtrul în Exclude.

Dacă filtrul curent este Exclude există următoarele cazuri:

Old State Raport primit Stare nouă Acțiuni necesare
Excludeți (X, Y) Mode_Is_Include (A) Excludeți (X + A, YA)
Excludeți (X, Y) Mode_Is_Exclude (A) Excludeți (AY, Y∩A) Șterge (XA); Șterge (YA)
Excludeți (X, Y) Change_To_Include (A) Excludeți (X + A, YA) Trimiteți Q (G, XA); Trimiteți Q (G)
Excludeți (X, Y) Change_To_Exclude (A) Excludeți (AY, Y∩A) Șterge (XA); Șterge (YA); Trimiteți Q (G, AY)
Excludeți (X, Y) Allow_New (A) Excludeți (X + A, YA)
Excludeți (X, Y) Block_Old (A) Excludeți (X + (AY)), Y) Trimiteți Q (G, AY)

Interogările sunt trimise pentru intensitate Last_Member_Query_Count times fiecare la distanță Last_Member_Query_Interval. Dacă pentru un timp egal cu produsul dintre aceste două valori, numit Last_Member_Query_Time, routerul nu primește niciun răspuns, poate continua să elimine grupuri sau surse.

Alegerea routerului desemnat de IGMP

Fiecare rețea LAN alege un singur router care are sarcina de a trimite periodic mesaje de interogare către gazde și de a urmări statutul de membru. Acest router se numește router desemnat sau mai corect Querier . Mecanismul de alegere este foarte simplu: fiecare router menține un cronometru Other_Querier_Present care este actualizat de fiecare dată când primește o interogare de la un router cu o adresă IP mai mică decât a sa. Querier este routerul cu cea mai mică adresă IP; dacă un alt router primește o interogare de la acesta, acesta încetează să-l mai trimită pe al său. Dacă un router care anterior era Querier nu mai vede sosirea interogărilor, reia trimiterea acestora, preluând ca nou Querier. Faptul că într-o rețea LAN mesajele sunt primite de către toate routerele conectate la aceasta înseamnă că toată lumea poate construi progresiv starea completă de membru, astfel încât dacă Querierul actual scade, noul Querier are deja informații de stare actualizate.

linkuri externe

Controlul autorității GND ( DE ) 4585813-5
Telematică Portal telematic : accesați intrări Wikipedia care vorbesc despre rețele, telecomunicații și protocoale de rețea