NetFlow, ruch Multicast i MDT
 

Jeśli nie wiemy które grupy multicast wykorzystywane są w naszej sieci, w jakim czasie i ile tego ruchu w ramach tych grup przepływa przez naszą sieć lub jej fragmenty, warto skorzystać z usługi NetFlow. W sieci pojawia się coraz więcej aplikacji umożliwiających transmisję grupową. Dotyczy to szczególnie rozmów głosowych i wideo. Spotkałem się także z wykorzystaniem multicastów do szybkiego przywracania stanu lub instalacji systemu operacyjnego na dużej ilości stanowisk komputerowych. Ruch ten znajduje coraz więcej zastosowań, a nie zawsze zdajemy sobie sprawę z tego, że bez odpowiedniej konfiguracji sieci i odpowiednich urządzeń, jest on transmitowany jak ruch broadcast. To oczywiście może sprawiać wiele problemów i niepotrzebnie marnować przepustowość sieci. Dzięki obsłudze ruchu multicast w NetFlow, możemy być bardziej świadomi tego ruchu.


Zainteresowanych zbieraniem danych o ruchu oraz jego analizą zachęcamy do zapoznania się z Cisco Stealthwatch.


Na obecnych platformach informacje o przepływach ruchu multicast zbierane są zaraz po uruchomieniu usługi NetFlow. W starszych, zbieranie informacji o ruchu multicast wymagało użycia dodatkowych poleceń trybu konfiguracji interfejsu ip multicast netflow ingress i ip multicast netflow egress

Rekordy zebrane na wejściu interfejsu, zawierają informację na temat ilości odebranego na nich ruchu, bez wskazania interfejsu wyjściowego. Wynika to z tego, że informacja o tym ruchu wychwytywana jest jeszcze zanim zostanie podjęta decyzja na temat jego replikacji. Należy też pamiętać, że w przypadku ruchu multicast, interfejsów tych może być potencjalnie więcej niż jeden, na co nie ma miejsca w rekordzie. Jeśli potrzebna jest nam ta informacja, należy zbierać informacje na wyjściu. Rekordy zebrane na wyjściu interfejsu będą zawierały informacje na temat ilości wysłanego ruchu przez danych interfejs, ze wskazaniem interfejsu wejściowego.

Zbieranie informacji o ruchu mutlicast zostało wprowadzone wraz z wersją 9 eksportu danych NetFlow. Dla przepływów wejściowych została dodana możliwość włączenia liczników zreplikowanych pakietów/bajtów (IPM: OPkts OBytes) na interfejsach wyjściowych. Daje to większy pogląd na ilość tego ruchu w sieci. Służy do tego polecenie trybu konfiguracji globalnej ip multicast netflow output-counters. Oprócz tego, istnieje możliwość włączenia zliczania błędów w weryfikacji RPF (Reverse Path Forwarding). Dokonać tego można poleceniem trybu konfiguracji globalnej ip multicast netflow rpf-failure. Weryfikacja RPF zapobiega pętlą w replikacji ruchu multicast.


Polecenia ip multicast netflow output-counters i ip multicast netflow rpf-failure nie działają zgodnie z dokumentacją na platformach Cisco ISR G1 2811, Cisco ISR G2 3945E i Cisco ISR G2 819 z różnymi wersjami oprogramowania 15.x. Wydanie pierwszego polecenia dodało do legendy wartość "IPM: OPkts OBytes", ale dane z nią związane nie były prezentowane i wysyłane do kolektora. Wydanie drugiego polecenia nie zmieniło nic w prezentowanych lokalnie informacjach i też tych wysyłanych do kolektora. W artykule tym zaczniemy najpierw od pokazania tego co nie działa, po czym przejdziemy do tego co działa. Na końcu zamieściłem jeszcze jedną informację, na temat niezgodnego z dokumentacją zachowania.


Ze zgodnością RPF nie ma zwykle problemów, kiedy PIM (Protocol Independent Multicast) działa na tych samych interfejsach, gdzie działają protokoły routingu IGP/EGP. Ruch multicast pojawia się wtedy na interfejsie, który według tablicy routingu wskazuje drogę do jego źródła. Kiedy jednak sygnalizacja PIM nie pokrywa się 1:1 z domeną routingu unicast, dochodzi do problemu, w którym to PIM nie ma jak zbudować drzewa na optymalnej trasie, gdyż nie został w jakimś jej fragmencie uruchomiony. Sprawia to, że ruch multicast pojawi się na interfejsie, który według tablicy routingu nie jest drogą do jego źródła, co jest sygnalizowane jako błąd RPF.

Istnieje możliwość nadpisania informacji, jakie wykorzystywane są podczas procedury RPF. Służy do tego polecenie trybu konfiguracji globalnej ip mroute. Możemy w nim wskazać inną lokalizację naszego źródła ruchu mutlicast, niż ta, która wynika z tablicy routingu. Aby zasymulować błędy RPF, wyłączony zostanie na chwilę protokół PIM pomiędzy R4 i R5. Doprowadzi to do sytuacji, gdzie ruch multicast nie będzie przesyłany tym połączeniem. Będzie on trafiał do R5 od drugiej strony, co według tablicy routingu nie będzie prawidłowe, zatem spowoduje błąd sprawdzenia RPF. 

Aby pierw zaobserwować transmisję bez błędów RPF, na R4 nadpisana zostanie poleceniem ip mroute informacja wykorzystywana podczas sprawdzenia RPF. Zgodnie ze skonfigurowanym chwilowo ip mroute, cały ruch multicast (0.0.0.0/0) powinien pojawiać się od strony R6 (172.16.56.6).

R4(config)# interface GigabitEthernet 0/1
R4(config-if)# no ip pim sparse-mode
R5(config)# interface FastEthernet 0/0
R5(config-if)# no ip pim sparse-mode
R5(config-if)# exit
R5(config)# ip mroute 0.0.0.0 0.0.0.0 172.16.56.6  
R5(config)# end
R5# show ip mroute count 
Use "show ip mfib count" to get better response time for a large number of mroutes.
 
IP Multicast Statistics
3 routes using 1560 bytes of memory
2 groups, 0.50 average sources per group
Forwarding Counts: Pkt Count/Pkts per second/Avg Pkt Size/Kilobits per second
Other counts: Total/RPF failed/Other drops(OIF-null, rate-limit etc)
 
Group: 239.8.8.8, Source count: 1, Packets forwarded: 5, Packets received: 173
  RP-tree: Forwarding: 0/0/0/0, Other: 168/168/0
  Source: 172.16.12.1/32, Forwarding: 5/0/512/1, Other: 5/0/0
 
Group: 224.0.1.40, Source count: 0, Packets forwarded: 0, Packets received: 0
R5# 

Jak widać powyżej, po wysłaniu pierwszych 5 pakietów na grupę 239.8.8.8 nie został zaobserwowany żaden błąd RPF. Na R5 zostały także dodane polecenie ip multicast netflow rpf-failure i ip multicast netflow output-conters. Jak widać poniżej, legenda zawiera dodatkowe informacje na temat replikacji ruchu multicast dla przepływów wejściowych (IPM: OPkts    OBytes). Niemniej, informacje te nie są w ogóle zbierane i prezentowane, co widać w rekordzie dla ruchu do grupy 239.8.8.8.

R5# show ip cache verbose flow 
IP packet size distribution (4374 total packets):
   1-32   64   96  128  160  192  224  256  288  320  352  384  416  448  480
   .001 .462 .314 .008 .000 .000 .000 .000 .000 .000 .000 .000 .000 .000 .000
 
    512  544  576 1024 1536 2048 2560 3072 3584 4096 4608
   .212 .000 .000 .000 .000 .000 .000 .000 .000 .000 .000
 
IP Flow Switching Cache, 278544 bytes
  5 active, 4091 inactive, 224 added
  5515 ager polls, 0 flow alloc failures
  Active flows timeout in 30 minutes
  Inactive flows timeout in 15 seconds
IP Sub Flow Cache, 34056 bytes
  5 active, 1019 inactive, 220 added, 220 added to flow
  0 alloc failures, 0 force free
  1 chunk, 1 chunk added
  last clearing of statistics never
Protocol         Total    Flows   Packets Bytes  Packets Active(Sec) Idle(Sec)
--------         Flows     /Sec     /Flow  /Pkt     /Sec     /Flow     /Flow
TCP-BGP             63      0.0         1    49      0.0       5.5      15.5
TCP-other           49      0.0        57    64      1.6       8.6      15.5
ICMP                16      0.0        14   483      0.1      15.3      15.0
IGMP                 8      0.0         1    32      0.0       0.0      15.6
IP-other            83      0.0         2    56      0.1       2.2      15.4
Total:             219      0.1        15    91      1.9       5.4      15.4
 
SrcIf          SrcIPaddress    DstIf          DstIPaddress    Pr TOS Flgs  Pkts
Port Msk AS                    Port Msk AS    NextHop              B/Pk  Active
IPM: OPkts    OBytes  BGP: BGP NextHop
Fa0/0          172.16.1.123    Local          172.16.5.0      06 10  18     306 
D876 /24 65234                 0016 /32 0     0.0.0.0                63    73.4
BGP: 0.0.0.0         
 
Fa0/1          172.16.56.8     Null           224.0.0.13      67 C0  10       2 
0000 /24 0                     0000 /0  0     0.0.0.0                58     0.0
BGP: 0.0.0.0         
 
Fa0/1          172.16.56.6     Null           224.0.0.13      67 C0  10       1 
0000 /24 0                     0000 /0  0     0.0.0.0                58     0.0
BGP: 0.0.0.0         
 
Fa0/0          172.16.1.123    Local          172.16.45.5     01 00  10       2 
0000 /24 65234                 0303 /32 0     0.0.0.0                56    14.0
BGP: 0.0.0.0         
 
Fa0/1          172.16.12.1     Null           239.8.8.8       01 00  10     717 
0000 /24 65234                 0800 /0  0     0.0.0.0               512   716.1
BGP: 0.0.0.0         
 
R5# show ip mroute count       
Use "show ip mfib count" to get better response time for a large number of mroutes.
 
IP Multicast Statistics
3 routes using 1560 bytes of memory
2 groups, 0.50 average sources per group
Forwarding Counts: Pkt Count/Pkts per second/Avg Pkt Size/Kilobits per second
Other counts: Total/RPF failed/Other drops(OIF-null, rate-limit etc)
 
Group: 239.8.8.8, Source count: 1, Packets forwarded: 22, Packets received: 190
  RP-tree: Forwarding: 0/0/0/0, Other: 168/168/0
  Source: 172.16.12.1/32, Forwarding: 22/1/512/4, Other: 22/0/0
 
Group: 224.0.1.40, Source count: 0, Packets forwarded: 0, Packets received: 0
R5#

Po usunięciu wcześniejszego polecenia ip mroute, widać pojawiające się błędy RPF. Niemniej, w interesującym nas rekordzie nie pojawiły się żadne informacje na temat błędów, a pakiety/bajty składające się na przepływ nadal są normalnie zliczane. Polecenie ip multicast netflow rpf-failure nie dodało również do legendy wartości "RPF Failed".  

R5(config)# no ip mroute 0.0.0.0 0.0.0.0 172.16.56.6
R5(config)# do show ip mroute count
Use "show ip mfib count" to get better response time for a large number of mroutes.
 
IP Multicast Statistics
3 routes using 1560 bytes of memory
2 groups, 0.50 average sources per group
Forwarding Counts: Pkt Count/Pkts per second/Avg Pkt Size/Kilobits per second
Other counts: Total/RPF failed/Other drops(OIF-null, rate-limit etc)
 
Group: 239.8.8.8, Source count: 1, Packets forwarded: 26, Packets received: 205
  RP-tree: Forwarding: 0/0/0/0, Other: 168/168/0
  Source: 172.16.12.1/32, Forwarding: 26/0/512/0, Other: 37/11/0
 
Group: 224.0.1.40, Source count: 0, Packets forwarded: 0, Packets received: 0
R5#show ip cache verbose flow 
IP packet size distribution (4504 total packets):
   1-32   64   96  128  160  192  224  256  288  320  352  384  416  448  480
   .001 .463 .314 .008 .000 .000 .000 .000 .000 .000 .000 .000 .000 .000 .000
 
    512  544  576 1024 1536 2048 2560 3072 3584 4096 4608
   .211 .000 .000 .000 .000 .000 .000 .000 .000 .000 .000
 
IP Flow Switching Cache, 278544 bytes
  7 active, 4089 inactive, 229 added
  5674 ager polls, 0 flow alloc failures
  Active flows timeout in 30 minutes
  Inactive flows timeout in 15 seconds
IP Sub Flow Cache, 34056 bytes
  7 active, 1017 inactive, 225 added, 225 added to flow
  0 alloc failures, 0 force free
  1 chunk, 1 chunk added
  last clearing of statistics never
Protocol         Total    Flows   Packets Bytes  Packets Active(Sec) Idle(Sec)
--------         Flows     /Sec     /Flow  /Pkt     /Sec     /Flow     /Flow
TCP-BGP             65      0.0         1    49      0.0       5.4      15.5
TCP-other           49      0.0        57    64      1.6       8.6      15.5
ICMP                17      0.0        13   480      0.1      15.2      15.0
IGMP                 8      0.0         1    32      0.0       0.0      15.6
IP-other            83      0.0         2    56      0.1       2.2      15.4
Total:             222      0.1        15    91      1.9       5.4      15.4
 
SrcIf          SrcIPaddress    DstIf          DstIPaddress    Pr TOS Flgs  Pkts
Port Msk AS                    Port Msk AS    NextHop              B/Pk  Active
IPM: OPkts    OBytes  BGP: BGP NextHop
Fa0/1          172.16.56.8     Local          172.16.56.5     06 C0  18       2 
87D4 /24 0                     00B3 /0  0     0.0.0.0                49     7.2
BGP: 0.0.0.0         
 
Fa0/0          172.16.1.123    Local          172.16.5.0      06 10  18     399 
D876 /24 65234                 0016 /32 0     0.0.0.0                63    96.3
BGP: 0.0.0.0         
 
Fa0/1          172.16.56.6     Local          172.16.56.5     06 C0  10       1 
ACD7 /24 0                     00B3 /0  0     0.0.0.0                40     0.0
BGP: 0.0.0.0         
 
Fa0/1          172.16.56.8     Null           224.0.0.13      67 C0  10       8 
0000 /24 0                     0000 /0  0     0.0.0.0                55    13.3
BGP: 0.0.0.0         
 
Fa0/1          172.16.56.6     Null           224.0.0.13      67 C0  10       2 
0000 /24 0                     0000 /0  0     0.0.0.0                70    13.7
BGP: 0.0.0.0         
 
Fa0/0          172.16.1.123    Local          172.16.45.5     01 00  10       1 
0000 /24 65234                 0303 /32 0     0.0.0.0                56     0.0
BGP: 0.0.0.0         
          
Fa0/1          172.16.12.1     Null           239.8.8.8       01 00  10     740 
0000 /24 65234                 0800 /0  0     0.0.0.0               512   739.1
BGP: 0.0.0.0         
 
R5#

Również w rekordach wysyłanych do kolektora, nie ma żadnych dodatkowych informacji na temat replikacji ruchu multicast dla przepływów wejściowych i błędów RPF. Wyglądają one tak samo, bez względu czy wysyłane są w trakcie błędu procedury sprawdzania RPF, czy podczas normalnego działania. Przykładowy rekord, który trafił do kolektora dla grupy 239.8.8.8 można zobaczyć poniżej.

 


Przejdźmy teraz do tego co działa i da się zaobserwować w naszej sieci. Przyjrzyjmy się ruchowi do grup 239.1.1.1 i 239.8.8.8. Dla przepływów multicast zbierane są standardowe, omówione we wcześniejszych artykułach informacje. Różnicą jest brak interfejsu wyjściowego dla przepływów wejściowych.

Rekordy dla wyżej wspomnianych adresów będą wyglądały tak samo na R3 i R4, jako że ruch ten nie jest przenoszony z wykorzystaniem MPLS/MDT. MPLS przenosi w naszej sieci tylko ruch unicast. Natomiast MDT (Multicast Distribution Trees) wykorzystywane jest tylko do przenoszenia ruchu multicast w ramach vrf R2R4-VRF.

Ruch do grupy 239.8.8.8 kierowany jest z R2. Do grupy tej należy R5, R6 i R8. Ruch do grupy 239.1.1.1 kierowany jest z R8. Do grupy tej należy tylko R1. W obu przypadkach mamy do czynienia z ruchem ICMP (Pr ma wartość 0x01, co oznacza protokół ICMP). Ruch ten został wygenerowany poprzez użycie polecenia ping.

R3# show ip cache verbose flow | begin SrcIf
SrcIf          SrcIPaddress    DstIf          DstIPaddress    Pr TOS Flgs  Pkts
Port Msk AS                    Port Msk AS    NextHop              B/Pk  Active
Gi0/0          10.246.255.2    Gi0/1*         10.246.255.4    06 C0  18       2 
00B3 /0  0                     98DC /0  0     0.0.0.0                49    11.8
FFlags: 01  
 
Gi0/0          10.246.23.2     Gi0/1*         10.246.255.4    67 C0  10       6 
0000 /0  0                     0000 /0  0     0.0.0.0               128     4.0
FFlags: 01  
 
Gi0/1          172.16.5.0      Gi0/0*         172.16.12.2     01 00  10       3 
0000 /0  0                     0000 /0  0     0.0.0.0               100     4.0
FFlags: 01  
 
Gi0/1          172.16.8.1      Gi0/0*         172.16.27.2     01 00  10       3 
0000 /0  0                     0000 /0  0     0.0.0.0               100     4.0
FFlags: 01  
 
Gi0/1          172.16.6.0      Gi0/0*         172.16.12.2     01 00  10       3 
0000 /0  0                     0000 /0  0     0.0.0.0               100     4.0
FFlags: 01  
 
Gi0/1          172.16.8.1      Gi0/0*         10.246.255.2    01 00  10       3 
0000 /0  0                     0000 /0  0     0.0.0.0               100     4.0
FFlags: 01  
 
Gi0/1          10.246.255.4    Gi0/0*         239.255.0.0     2F C0  10       3 
0000 /0  0                     0000 /0  0     0.0.0.0                79     3.1
FFlags: 01  
 
Gi0/1          10.246.255.4    Gi0/0          239.255.0.0     2F C0  10       3 
0000 /0  0                     0000 /0  0     0.0.0.0                79     3.1
 
Gi0/0          10.246.255.2    Gi0/1*         239.255.0.0     2F C0  10       1 
0000 /0  0                     0000 /0  0     0.0.0.0                82     0.0
FFlags: 01  
 
Gi0/0          10.246.255.2    Gi0/1          239.255.0.0     2F C0  10       1 
0000 /0  0                     0000 /0  0     0.0.0.0                82     0.0
 
Gi0/1          172.16.8.1      Gi0/0*         172.16.12.2     01 00  10       3 
0000 /0  0                     0000 /0  0     0.0.0.0               100     4.0
FFlags: 01  
 
Gi0/0          172.16.12.1     Gi0/1*         172.16.8.1      01 00  10     110 
0000 /0  0                     0000 /0  0     0.0.0.0               256   116.8
FFlags: 01  
 
Gi0/0          172.16.12.1     Gi0/1*         172.16.56.8     01 00  10     109 
0000 /0  0                     0000 /0  0     0.0.0.0               256   115.8
FFlags: 01  
 
Gi0/1          172.16.6.0      Gi0/0*         172.16.27.2     01 00  10       3 
0000 /0  0                     0000 /0  0     0.0.0.0               100     4.0
FFlags: 01  
 
Gi0/1          172.16.5.0      Gi0/0*         172.16.27.2     01 00  10       3 
0000 /0  0                     0000 /0  0     0.0.0.0               100     4.0
FFlags: 01  
 
Gi0/0          10.246.255.2    Gi0/1*         239.8.8.8       01 00  10       3 
0000 /0  0                     0800 /0  0     0.0.0.0               100     4.0
FFlags: 01  
 
Gi0/0          10.246.255.2    Gi0/1          239.8.8.8       01 00  10       3 
0000 /0  0                     0800 /0  0     0.0.0.0               100     4.0
 
Gi0/1          10.246.34.4     Local          10.246.34.3     11 C0  10       1 
007B /0  0                     007B /0  0     0.0.0.0                76     0.0
 
Gi0/0          10.246.23.2     Gi0/1*         239.8.8.8       01 00  10       3 
0000 /0  0                     0800 /0  0     0.0.0.0               100     4.0
FFlags: 01  
 
Gi0/0          10.246.23.2     Gi0/1          239.8.8.8       01 00  10       3 
0000 /0  0                     0800 /0  0     0.0.0.0               100     4.0
 
Gi0/0          10.246.23.2     Local          10.246.255.3    06 C0  18      12 
E887 /0  0                     0016 /0  0     0.0.0.0                66     2.0
 
Gi0/1          172.16.5.0      Gi0/0*         10.246.23.2     01 00  10       3 
0000 /0  0                     0000 /0  0     0.0.0.0               100     4.0
FFlags: 01  
 
Gi0/1          172.16.5.0      Gi0/0          10.246.23.2     01 00  10       3 
0000 /0  0                     0000 /0  0     0.0.0.0               100     4.0
 
Gi0/1          172.16.6.0      Gi0/0*         10.246.23.2     01 00  10       3 
0000 /0  0                     0000 /0  0     0.0.0.0               100     4.0
FFlags: 01  
 
Gi0/1          172.16.6.0      Gi0/0          10.246.23.2     01 00  10       3 
0000 /0  0                     0000 /0  0     0.0.0.0               100     4.0
 
Gi0/1          172.16.8.1      Gi0/0*         239.1.1.1       01 00  10     110 
0000 /0  0                     0800 /0  0     0.0.0.0               256   116.8
FFlags: 01  
 
Gi0/1          172.16.8.1      Gi0/0          239.1.1.1       01 00  10     110 
0000 /0  0                     0800 /0  0     0.0.0.0               256   116.8
 
Gi0/0          10.246.23.2     Null           224.0.0.2       11 C0  10     173 
0286 /0  0                     0286 /0  0     0.0.0.0                62   753.6
 
Gi0/1          172.16.8.1      Gi0/0*         10.246.23.2     01 00  10       3 
0000 /0  0                     0000 /0  0     0.0.0.0               100     4.0
FFlags: 01  
 
Gi0/1          172.16.8.1      Gi0/0          10.246.23.2     01 00  10       3 
0000 /0  0                     0000 /0  0     0.0.0.0               100     4.0
 
Gi0/1          10.246.34.4     Null           224.0.0.2       11 C0  10     174 
0286 /0  0                     0286 /0  0     0.0.0.0                62   754.2
 
Gi0/1          172.16.56.8     Gi0/0*         239.1.1.1       01 00  10     110 
0000 /0  0                     0800 /0  0     0.0.0.0               256   116.8
FFlags: 01  
 
Gi0/1          172.16.56.8     Gi0/0          239.1.1.1       01 00  10     110 
0000 /0  0                     0800 /0  0     0.0.0.0               256   116.8
 
Gi0/1          172.16.5.0      Gi0/0*         10.246.255.2    01 00  10       3 
0000 /0  0                     0000 /0  0     0.0.0.0               100     4.0
FFlags: 01  
 
Gi0/1          172.16.6.0      Gi0/0*         10.246.255.2    01 00  10       3 
0000 /0  0                     0000 /0  0     0.0.0.0               100     4.0
FFlags: 01  
 
Gi0/1          10.246.34.4     Null           224.0.0.13      67 C0  10       7 
0000 /0  0                     0000 /0  0     0.0.0.0                58     9.4
 
Gi0/0          10.246.23.2     Null           224.0.0.13      67 C0  10       1 
0000 /0  0                     0000 /0  0     0.0.0.0                58     0.0
 
R3# 

W naszej sieci widać też ruch do grupy 224.0.0.2 ("All Routers on this Subnets"), która obsługiwana jest przez wszystkie routery IPv4. Pole Pr ma wartość 0x11 (17 - UDP), a port źródłowy i docelowy 0x0286 (646 - LDP). Protokół LDP wykorzystywany jest w naszej sieci do dystrybucji informacji na temat etykiet MPLS pomiędzy R2, R3 i R4.

Widać także grupę 224.0.0.13 ("All PIM Routers"), która wykorzystywana jest przez protokół PIM. Jego zadaniem w naszej sieci jest kontrola routingu ruchu multicast. Pr tego rekordu ma wartość 0x67 (103 - PIM).

Na końcu warto zwrócić uwagę na grupę 239.255.0.0. Do transmisji ruchu multicast w ramach mVRF (Multicast VRF) wykorzystana została grupa 239.255.0.0 (MDT Default) oraz grupy w przedziale 239.255.1.0/24 (MDT Data). Do grupy 239.255.0.0 należą domyślnie wszystkie routery PE, w których został zdefiniowany mVRF R2R4-VRF. Strumień multicast pomiędzy urządzeniami PE jest dwukierunkowy. Są one jednocześnie jego źródłem, jak i odbiorcą.

Stąd widać po dwa przepływy (ingress/egress) dla każdego PE. Kiedy ilość ruchu multicast przekroczy zdefiniowany próg (w naszym przypadku 1kbps), następuje przełączenie ruchu na wybraną grupę w zakresie 239.255.1.0/24. Należeć do niej będą tylko zainteresowane tym ruchem PE (posiadające za sobą odbiorców przenoszonego w środku ruchu multicast), co zmniejsza obciążenie szkieletu sieci ruchem multicast.


Przyjrzyjmy się teraz ruchowi w ramach vrf R2R4-VRF. Odbiorcą ruchu dla grupy 239.40.40.40 jest R4, a źródłem R2. Ruch mVRF jest enkapsulowany w GRE (Generic Routing Encapsulation) i przenoszony w ramach MDF Default/MDT Data. Zatem po wygenerowaniu ruchu do grupy 239.40.40.40, zarówno na R4, jak i R3 będziemy widzieli przepływy odpowiadające zdefiniowanych grupą dla MDF Default i MDT Data.

Oryginalna grupa 239.40.40.40, widoczna byłaby dopiero na urządzeniu CE. Podobnie będzie z informacją na temat przenoszonych w środku danych danych. Pomimo tego, iż ruch został wygenerowany poleceniem ping (protokół ICMP), to w powstałych rekordach widać protokół GRE. Jeszcze raz przypomnę, że ruch mVRF nie jest enkapsulowany w MPLS, stąd nie pojawi się żadna informacja na temat etykiet, jak było to w przypadku ruchu unicast w ramach vrf R2R4-VRF. Warto też zwrócić uwagę na statystyki wykrytych w sieci protokołów, gdzie pojawiał się informacja o protokole GRE. W rekordach dla adresów 239.255.0.0 i 239.255.1.0 Pr ma wartość 0x2F (47 - GRE).

O ile MDT Default jest dwukierunkowe (każdy PE jest odbiorcą i źródłem), to grupy MDT Data tworzone są optymalnie od źródła do odbiorców i ruch ten będziemy widzieli zgodnie z faktycznym kierunkiem przepływu ruchu multicast. W związku z tym, na interfejsie Gi0/0 R4 widoczny jest tylko rekord wejściowy dla grupy 239.255.1.0. 

R4# show ip cache ver flow
IP packet size distribution (35469 total packets):
   1-32   64   96  128  160  192  224  256  288  320  352  384  416  448  480
   .003 .288 .268 .153 .004 .018 .001 .064 .002 .001 .000 .000 .000 .000 .000
 
    512  544  576 1024 1536 2048 2560 3072 3584 4096 4608
   .134 .028 .012 .014 .000 .000 .000 .000 .000 .000 .000
 
IP Flow Switching Cache, 278544 bytes
  16 active, 4080 inactive, 1777 added
  69090 ager polls, 0 flow alloc failures
  Active flows timeout in 30 minutes
  Inactive flows timeout in 15 seconds
IP Sub Flow Cache, 34056 bytes
  16 active, 1008 inactive, 1161 added, 1161 added to flow
  0 alloc failures, 0 force free
  1 chunk, 1 chunk added
  last clearing of statistics never
Protocol         Total    Flows   Packets Bytes  Packets Active(Sec) Idle(Sec)
--------         Flows     /Sec     /Flow  /Pkt     /Sec     /Flow     /Flow
TCP-BGP            200      0.0         1    55      0.1       3.6      15.4
TCP-other          478      0.1        33    77      5.5       9.0      15.5
UDP-NTP            148      0.0         1    76      0.0       0.0      15.5
UDP-other           41      0.0        12   109      0.1      62.6      15.4
ICMP               174      0.0        46   261      2.8      76.1      15.5
IGMP                46      0.0         1    32      0.0       0.0      15.4
GRE                 97      0.0         5   769      0.1       8.1      15.5
IP-other           250      0.0         7   318      0.6      14.8      15.4
Total:            1434      0.4        19   162      9.5      17.6      15.5
 
SrcIf          SrcIPaddress    DstIf          DstIPaddress    Pr TOS Flgs  Pkts
Port Msk AS                    Port Msk AS    NextHop              B/Pk  Active
IPM: OPkts    OBytes  
Gi0/0          10.246.255.2    Null           239.255.1.0     2F 00  10      35 
0000 /0  0                     0000 /0  0     0.0.0.0              1024    34.0
 
Gi0/0          172.16.1.123    Local          10.246.255.4    06 10  18      16 
D869 /0  0                     0016 /0  0     0.0.0.0                62     6.8
 
Gi0/0          10.246.255.2    Null           239.255.0.0     2F C0  10       2 
0000 /0  0                     0000 /0  0     0.0.0.0                45    13.2
 
Gi0/0          10.246.255.2    Null           239.255.0.0     2F 00  10      51 
0000 /0  0                     0000 /0  0     0.0.0.0              1024    42.0
 
Gi0/0          10.246.34.3     Null           224.0.0.2       11 C0  10     243 
0286 /0  0                     0286 /0  0     0.0.0.0                62  1054.4
 
Local          10.246.34.4     Gi0/0*         172.16.1.123    11 00  10       6 
D8B4 /0  0                     270B /0  0     0.0.0.0               716    57.0
FFlags: 05  
 
Pos:Lbl-Exp-S 1:16-0-1
Gi0/0          10.246.34.3     Null           224.0.0.13      67 C0  10       2 
0000 /0  0                     0000 /0  0     0.0.0.0                56     9.0
 
Gi0/2          172.16.46.6     Local          172.16.46.4     06 C0  10       1 
00B3 /0  0                     4FE5 /0  0     0.0.0.0                40     0.0
 
Gi0/0          10.246.34.3     Local          10.246.255.4    67 C0  10       1 
0000 /0  0                     0000 /0  0     0.0.0.0                28     0.0
 
Gi0/1          172.16.45.5     Gi0/0          172.16.1.123    11 00  10       2 
E39D /0  0                     270B /0  0     10.246.34.3           624    12.9
 
Gi0/1          172.16.45.5     Gi0/0*         172.16.1.123    11 00  10       2 
E39D /0  0                     270B /0  0     0.0.0.0               624    12.9
FFlags: 05  
 
Pos:Lbl-Exp-S 1:16-0-1
Gi0/0          172.16.1.123    Gi0/1*         172.16.45.5     01 00  10       2 
0000 /0  0                     0303 /0  0     172.16.45.5            56    12.9
FFlags: 01  
 
Gi0/0          172.16.1.123    Gi0/1          172.16.45.5     01 00  10       2 
0000 /0  0                     0303 /0  0     172.16.45.5            56    12.9
 
Gi0/2          172.16.46.6     Null           224.0.0.13      67 C0  10       6 
0000 /0  0                     0000 /0  0     0.0.0.0                54    14.3
 
Gi0/0          172.16.1.123    Local          10.246.34.4     01 00  10       6 
0000 /0  0                     0303 /0  0     0.0.0.0                56    57.0
 
Gi0/1          172.16.45.5     Null           224.0.0.13      67 C0  10       6 
0000 /0  0                     0000 /0  0     0.0.0.0                54    19.3
 
R4# 

Poniżej możemy zobaczyć informację na temat początkowej grupy (MDT Default), jaka stosowana jest do przenoszenia ruchu multicast w ramach vrf R2R4-VRF. Widać, że pokrywa się ona z powstałymi rekoradami.

R4# show bgp ipv4 mdt vrf R2R4-VRF
BGP table version is 3, local router ID is 172.16.4.129
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
x best-external, a additional-path, c RIB-compressed,
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

Network Next Hop Metric LocPrf Weight Path
Route Distinguisher: 65234:40 (default for vrf R2R4-VRF)
*>i 10.246.255.2/32 10.246.255.2 0 100 0 ?
*> 10.246.255.4/32 0.0.0.0 0 ?
R4# show bgp ipv4 mdt vrf R2R4-VRF 10.246.255.2
BGP routing table entry for 65234:40:10.246.255.2/32 version 2
Paths: (1 available, best #1, table IPv4-MDT-BGP-Table)
Not advertised to any peer
Refresh Epoch 1
Local
10.246.255.2 from 10.246.255.2 (172.16.2.129)
Origin incomplete, metric 0, localpref 100, valid, internal, best,
MDT group address: 239.255.0.0

rx pathid: 0, tx pathid: 0x0
R4# show bgp ipv4 mdt vrf R2R4-VRF 10.246.255.4
BGP routing table entry for 65234:40:10.246.255.4/32 version 3
Paths: (1 available, best #1, table IPv4-MDT-BGP-Table)
Advertised to update-groups:
1
Refresh Epoch 1
Local
0.0.0.0 from 0.0.0.0 (172.16.4.129)
Origin incomplete, localpref 100, valid, sourced, local, best,
MDT group address: 239.255.0.0

rx pathid: 0, tx pathid: 0x0
R4# 

Na R3 możemy zaobserwować przepływy dla grup 239.255.0.0 i 239.255.1.0 zebrane w obydwóch kierunkach (ingress/egress). Jako, że ruch do grupy 239.40.40.40 enkapsulowany jest w GRE i przenoszony w ramach MDT Default/MDT Data, to szkielet sieci nie jest świadomy wykorzystywanych przez klienta mVRF grup.

Ponad to, wiele grup klienta może być przenoszone w ramach tego samego MDT Default/MDT Data, co zmniejsza ilość informacji, jaka przetrzymywana i obsługiwana jest w szkielecie sieci przez routery P, a klientom umożliwia stosowanie dowolnych grup multicast.

Dzięki zastosowaniu MPLS i MDT, szkielet sieci umożliwia wykorzystanie dowolnej adresacji IP i dowolnych grup mutlicast przez każdego z dołączonych do niej klientów. Mogą one się spokojnie pokrywać, gdyż ruch ten jest w pełni odseparowany od siebie.

R3# show ip cache verbose flow
IP packet size distribution (27282 total packets):
   1-32   64   96  128  160  192  224  256  288  320  352  384  416  448  480
   .001 .328 .269 .127 .003 .013 .001 .063 .001 .001 .000 .001 .000 .000 .000
 
    512  544  576 1024 1536 2048 2560 3072 3584 4096 4608
   .087 .037 .025 .001 .032 .000 .000 .000 .000 .000 .000
 
IP Flow Switching Cache, 4456704 bytes
  21 active, 65515 inactive, 1633 added
  62951 ager polls, 0 flow alloc failures
  Active flows timeout in 30 minutes
  Inactive flows timeout in 15 seconds
IP Sub Flow Cache, 533256 bytes
  0 active, 16384 inactive, 0 added, 0 added to flow
  0 alloc failures, 0 force free
  1 chunk, 1 chunk added
  last clearing of statistics never
Protocol         Total    Flows   Packets Bytes  Packets Active(Sec) Idle(Sec)
--------         Flows     /Sec     /Flow  /Pkt     /Sec     /Flow     /Flow
TCP-BGP            133      0.0         1    49      0.0       2.7      15.4
TCP-other          517      0.1        26   101      4.6       7.7      15.4
UDP-NTP            211      0.0         1    76      0.0       0.0      15.3
UDP-other           66      0.0        15   132      0.3      84.7      15.0
ICMP               157      0.0        45   273      2.3      79.9      15.4
IGMP                44      0.0         1    32      0.0       0.0      15.5
GRE                366      0.1         4   611      0.5       5.2      15.4
IP-other           118      0.0        23   237      0.9      33.2      15.4
Total:            1612      0.5        16   190      8.9      17.5      15.4
 
SrcIf          SrcIPaddress    DstIf          DstIPaddress    Pr TOS Flgs  Pkts
Port Msk AS                    Port Msk AS    NextHop              B/Pk  Active
Gi0/1          10.246.34.4     Gi0/0*         172.16.1.123    11 00  10       4 
D8B4 /0  0                     270B /0  0     0.0.0.0               812    30.0
FFlags: 01  
 
Gi0/1          10.246.255.4    Gi0/0*         10.246.255.2    06 C0  18       2 
98DC /0  0                     00B3 /0  0     0.0.0.0                49     1.8
FFlags: 01  
 
Gi0/0          10.246.255.2    Gi0/1*         10.246.255.4    06 C0  18       2 
00B3 /0  0                     98DC /0  0     0.0.0.0                49     1.4
FFlags: 01  
 
Gi0/0          10.246.255.2    Gi0/1*         239.255.1.0     2F 00  10      10 
0000 /0  0                     0000 /0  0     0.0.0.0              1048     9.0
FFlags: 01  
 
Gi0/0          10.246.255.2    Gi0/1          239.255.1.0     2F 00  10      10 
0000 /0  0                     0000 /0  0     0.0.0.0              1048     9.0
 
Gi0/0          10.246.255.2    Gi0/1*         239.255.0.0     2F C0  10       2 
0000 /0  0                     0000 /0  0     0.0.0.0                75     8.3
FFlags: 01  
 
Gi0/0          10.246.255.2    Gi0/1          239.255.0.0     2F C0  10       2 
0000 /0  0                     0000 /0  0     0.0.0.0                75     8.3
 
Gi0/0          10.246.255.2    Gi0/1*         239.255.0.0     2F 00  10      26 
0000 /0  0                     0000 /0  0     0.0.0.0              1048    17.0
FFlags: 01  
 
Gi0/0          10.246.255.2    Gi0/1          239.255.0.0     2F 00  10      26 
0000 /0  0                     0000 /0  0     0.0.0.0              1048    17.0
 
Gi0/0          172.16.1.123    Gi0/1*         172.16.45.5     01 00  10       1 
0000 /0  0                     0303 /0  0     0.0.0.0                56     0.0
FFlags: 01  
 
Gi0/0          10.246.23.2     Null           224.0.0.1       02 C0  10       1 
0000 /0  0                     0094 /0  0     0.0.0.0                32     0.0
 
Gi0/0          172.16.1.123    Gi0/1*         172.16.6.0      06 10  18       3 
D87A /0  0                     0016 /0  0     0.0.0.0                62     0.0
FFlags: 01  
 
Gi0/1          172.16.6.0      Gi0/0*         172.16.1.123    06 C0  18       2 
0016 /0  0                     D87A /0  0     0.0.0.0                58     0.0
FFlags: 01  
 
Gi0/0          10.246.23.2     Local          10.246.255.3    06 C0  18     112 
E887 /0  0                     0016 /0  0     0.0.0.0                59    14.9
 
Gi0/0          10.246.23.2     Null           224.0.0.2       11 C0  10     196 
0286 /0  0                     0286 /0  0     0.0.0.0                62   853.1
 
Gi0/0          172.16.1.123    Gi0/1*         10.246.34.4     01 00  10       4 
0000 /0  0                     0303 /0  0     0.0.0.0                56    30.0
FFlags: 01  
 
Gi0/0          172.16.1.123    Gi0/1          10.246.34.4     01 00  10       4 
0000 /0  0                     0303 /0  0     0.0.0.0                56    30.0
 
Gi0/1          10.246.34.4     Null           224.0.0.2       11 C0  10     197 
0286 /0  0                     0286 /0  0     0.0.0.0                62   854.0
 
Gi0/1          172.16.45.5     Gi0/0*         172.16.1.123    11 00  10       1 
E39D /0  0                     270B /0  0     0.0.0.0              1144     0.0
FFlags: 01  
 
Gi0/1          10.246.34.4     Null           224.0.0.13      67 C0  10      52 
0000 /0  0                     0000 /0  0     0.0.0.0                60    98.0
 
Gi0/0          10.246.23.2     Null           224.0.0.13      67 C0  10       6 
0000 /0  0                     0000 /0  0     0.0.0.0                54    24.8
          
R3#

Na platformach Cisco ISR G1 2811 i Cisco ISR G2 3945E z oprogramowaniem w wersji 15.x (nie sprawdzałem na innych), tak zebrane rekordy przepływów multicast da się eksportować do kolektora w wersjach 1, 5 i 9. Przy czym należy pamiętać, że wersje 1 i 5 nie zawierają informacji o kierunku zbierania informacji. Według dokumentacji, eksport rekordów multicast nie powinien być możliwy, bez włączenia eksportu danych w wersji 9 - "Configure NetFlow v9 (Version 9) data export (otherwise, multicast data is visible in the cache but is not exported).". W każym razie, pomimo tego że się da, nie zalecam dokonywania eksportu danych w wersji innej niż minimum 9.


Zapraszamy do kontaktu drogą mailową This email address is being protected from spambots. You need JavaScript enabled to view it. lub telefonicznie +48 797 004 932.