소개
이 문서에서는 Catalyst 9K 시리즈 스위치의 IGMP(Internet Group Management Protocol) 기능이 디버그에서 어떻게 작동하는지 설명합니다.
사전 요구 사항
다음 주제에 대한 지식을 보유하고 있으면 유용합니다.
- L2 프로토콜 및 스위칭에 대한 기본적인 이해
- PIM 및 IGMP 멀티캐스트 이해의 기본
사용되는 구성 요소
이 문서의 정보는 다음 소프트웨어 및 하드웨어 버전을 기반으로 합니다.
- Catalyst 9300 버전 17.9.4a
- Catalyst 9500x 버전 17.13.1
- VLC 플레이어가 있는 Windows 10 PC
이 문서의 정보는 특정 랩 환경의 디바이스를 토대로 작성되었습니다. 이 문서에 사용된 모든 디바이스는 초기화된(기본) 컨피그레이션으로 시작되었습니다. 현재 네트워크가 작동 중인 경우 모든 명령의 잠재적인 영향을 미리 숙지하시기 바랍니다.
배경 정보
IGMP 기능이 없으면 레이어 2 스위치는 멀티캐스트 프레임을 모든 포트(수신 포트 제외)로 전달하는데, 이는 스위치 리소스의 낭비입니다.
IGMP 스누핑은 스위치에서 호스트로부터 보고서를 듣고 메시지를 남김으로써 특정 그룹에 가입한 수신자에게만 멀티캐스트 데이터 프레임을 보낼 수 있게 합니다. 기본적으로 이 기능은 Cisco 레이어 2 스위치에서 활성화됩니다. 특정 VLAN에 대해서만 활성화하려는 경우 전역적으로 비활성화하고 필수 VLAN-id로 구성할 수ip igmp snooping vlan vlan-id 있습니다.
L2 스위치에 연결된 클라이언트가 멀티캐스트 트래픽을 요청하면 스위치는 이 정보를 스누핑하고 멀티캐스트 테이블을 구축하여 스위치의 모든 포트를 플러딩하는 대신 원하는 수신자 포트로 트래픽을 전달할 수 있도록 합니다.
토폴로지
멀티캐스트 토폴로지
설명
멀티캐스트 통신에서 IGMP 시그널링 및 트래픽 흐름을 포괄적으로 파악하려면 수신기 및 소스 관점에서 이를 검토해야 합니다.
수신자측 포워딩
IGMP 프로세스를 이해하기 위해서는 mrouter 포트 및 IGMP querier의 개념을 이해해야 합니다.
일반적으로 PIM이 라우터 인터페이스 또는 스위치의 SVI에서 활성화되면 PIM은 각 VLAN 브로드캐스트 도메인에서 주기적으로 IGMP 쿼리를 보내기 시작합니다. 쿼리를 전송하는 라우터 인터페이스는 IGMP 쿼리 작성기일 뿐이며 쿼리를 수신하는 스위치 인터페이스는 해당 VLAN에 대한 스위치의 라우터 포트입니다.
특정 브로드캐스트 도메인의 모든 디바이스에는 하나의 라우터 포트만 있습니다. 스위치는 각 라우터 포트 아래에 IGMP 스누핑 그룹 테이블 작성을 시작합니다.
참고: 동일한 브로드캐스트 도메인에서 여러 쿼리를 실행하는 경우 선택 프로세스가 수행됩니다.
SW1 및 SW2는 라우팅이 없는 순수 레이어 2 스위치입니다.
디버그를 통해 IGMP 스누핑의 프로세스를 이해할 수 있습니다.
#debug ip igmp snooping
SW2의 Gi 1/0/17에 연결된 PC21에는 239.1.2.3 멀티캐스트 스트림이 필요합니다. 그래서 PC21에서 가입 보고서를 스위치로 보냈습니다.
SW2는 1/0/17에 Gi에 대한 공동 보고를 받았습니다.
*Apr 2 15:49:54.353: IGMPSN: Received IGMPv2 Report for group 239.1.2.3 received on Vlan 2717, port Gi1/0/17
*Apr 2 15:49:54.353: IGMPSN: NEW report: Call process_report port:Gi1/0/17 Querier is IGMPv1, Vlan 2717, quer_ver numeric 0.
*Apr 2 15:49:54.353: IGMPSN: Group: Received IGMPv2 report for mcast group 239.1.2.3 from Client 172.16.1.1. Received on Vlan 2717, port Gi1/0/17.
*Apr 2 15:49:54.353: IGMPSN: group: Adding client ip 172.16.1.1, port_id Gi1/0/17, on vlan 2717
이 경우 브로드캐스트 도메인에 쿼리 발송자가 없으므로 VLAN에 대한 스위치에 라우터 포트가 없습니다.
따라서 스위치는 Gi 1/0/17에서 들어오는 IGMP 보고서를 취소할 수밖에 없습니다.
*Apr 2 15:49:54.353: IGMPSN: No mroute detected: Drop IGMPv2 report for group 239.1.2.3 from client 172.16.1.1 received on Vlan 2717, port Gi1/0/17
IGMP V2 클라이언트가 멀티캐스트 스트림의 가입을 해제하려는 경우 스위치로 IGMP-leave 메시지를 전송하여 해제할 수 있습니다.
여기서는 IGMP-Leave 보고서 예를 설명합니다.
일반적으로 스위치가 IGMP leave를 수신하면 스위치는 IGMP 스누핑 그룹 테이블에서 엔트리를 제거합니다.
*Apr 2 15:52:11.237: IGMPSN: Received IGMP Leave for group 239.1.2.3 received on Vlan 2717, port Gi1/0/17
*Apr 2 15:52:11.238: IGMPSN: group: Leave for group 239.1.2.3 from Client 172.16.1.1 received on Vlan 2717, port Gi1/0/17, mvr group (No)
*Apr 2 15:52:11.238: IGMPSN: group: Skip client info adding - src_addr 172.16.1.1, client_addr 172.16.1.1, port_id Gi1/0/17, on vlan 2717
*Apr 2 15:52:11.238: IGMPSN: MCAST IP address 239.1.2.3, MAC address 0100.5e01.0203
스위치에는 mrouter 포트가 없으므로 IGMP 스누핑 그룹 테이블을 생성할 수 없습니다. 따라서 포트 Gi 1/0/17에 대한 IGMP 항목이 없습니다. 따라서 동일한 위치를 찾을 수 없습니다.
*Apr 2 15:52:11.238: IGMPSN: Can not Locate gce 0100.5e01.0203, on Vlan 2717
*Apr 2 15:52:11.238: IGMPSN: group: Group does not exist - Leave for group 239.1.2.3 from Client 172.16.1.1 received on Vlan 2717, port Gi1/0/17 send to router port
*Apr 2 15:52:11.238: IGMPSN: Call platform_l2mc_snoop_send_mrouter
Mrouter 포트 생성은 스위치가 IGMP 스누핑을 성공적으로 시작하는 데 필요한 첫 번째이자 중요한 단계입니다.
앞에서 언급한 것처럼 IGMP 일반 쿼리는 PIM에 의존하므로 PIM Dense Mode가 R2 G1/0/45에서 활성화되었습니다(Interface Configuration Mode 명령ip pim dense-mode ).
*Apr 2 15:53:30.730: IGMPSN: router: Received non igmp pak on Vlan 2717, port Gi1/0/1
*Apr 2 15:53:30.730: IGMPSN: router: PIMV2 Hello packet received in 2717
*Apr 2 15:53:30.730: IGMPSN: l2mc_mrd_learn_router_port_internal Gi1/0/1 on Vlan 2717
*Apr 2 15:53:30.730: IGMPSN: router: Is not a router port on Vlan 2717, port Gi1/0/1
*Apr 2 15:53:30.730: IGMPSN: router: Is not a router port on Vlan 2717, port Gi1/0/1
*Apr 2 15:53:30.730: IGMPSN: router: Created router port on Vlan 2717, port Gi1/0/1
*Apr 2 15:53:30.730: IGMPSN: mgt: Reverting flood mode to only multicast router ports for Vlan 2717.
*Apr 2 15:53:30.730: IGMPSN: Adding router port Gi1/0/1 to all GCEs in Vlan 2717
*Apr 2 15:53:30.730: IGMPSN: added rport Gi1/0/1 on Vlan 2717
*Apr 2 15:53:30.734: IGMPSN: Notify others Gi1/0/1 on Vlan 2717
*Apr 2 15:53:30.734: IGMPSN: After l2mcm_rport_add-1 Gi1/0/1 on Vlan 2717
*Apr 2 15:53:30.734: IGMPSN: router: Calling HA mrouter sync Iport:Gi1/0/1 p_type:1 mrt_enable:0
*Apr 2 15:53:30.734: IGMPSN: igmpsn_ha_sync_mrouter_port_info enter Port Gi1/0/1 in vlan 2717
*Apr 2 15:53:30.734: IGMPSN: router: Learning port: Gi1/0/1 as rport on Vlan 2717
*Apr 2 15:53:30.734: IGMPSN: router: Received IGMP pak on Vlan 2717, port Gi1/0/1
*Apr 2 15:53:30.734: IGMPSN: l2mc_mrd_learn_router_port_internal Gi1/0/1 on Vlan 2717
*Apr 2 15:53:30.734: IGMPSN: router: Is a router port on Vlan 2717, port Gi1/0/1
*Apr 2 15:53:30.734: IGMPSN: router: Learning port: Gi1/0/1 as rport on Vlan 2717
*Apr 2 15:53:30.734: IGMPSN: Received IGMP Query for group 0.0.0.0 received on Vlan 2717, port Gi1/0/1 *****
*Apr 2 15:53:30.734: IGMPSN: IGMPv2 General Query received on Vlan 2717, port Gi1/0/1 Resp time 2500 (25 100) msecs, LLQ interval 2000 (2, 1000)
*Apr 2 15:53:30.734: IGMPSN: IGMP general queries received on Vlan 2717 updates all groups
*Apr 2 15:53:30.734: IGMPSN: timer: start report_timer 2500 msecs of vlan 2717
스위치는 쿼리된 일반 쿼리를 받는 각 VLAN에 대한 라우터 포트를 생성합니다.
SW2#show ip igmp snooping vlan 2717
Vlan 2717:
--------
IGMP snooping : Enabled
Pim Snooping : Disabled
IGMPv2 immediate leave : Enabled
Explicit host tracking : Enabled
Multicast router learning mode : pim-dvmrp
CGMP interoperability mode : IGMP_ONLY
Robustness variable : 2
Last member query count : 2
Last member query interval : 1000
SW2#show ip igmp snooping querier
Vlan IP Address IGMP Version Port
-------------------------------------------------------------
2717 172.17.1.254 v2 Gi1/0/1
SW2#show ip igmp snooping mrouter
Vlan ports
---- -----
2717 Gi1/0/1(dynamic)
Querier는 60초마다 IGMP 일반 쿼리를 보냅니다.
~
*Apr 6 10:37:02.793: IGMPSN: Received IGMP Query for group 0.0.0.0 received on Vlan 2717, port Gi1/0/1
*Apr 6 10:37:02.793: IGMPSN: IGMPv2 General Query received on Vlan 2717, port Gi1/0/1 Resp time 10000 (100 100) msecs, LLQ interval 2000 (2, 1000)
*Apr 6 10:37:02.793: IGMPSN: IGMP general queries received on Vlan 2717 updates all groups
~
~
*Apr 6 10:38:02.793: IGMPSN: Received IGMP Query for group 0.0.0.0 received on Vlan 2717, port Gi1/0/1
*Apr 6 10:38:02.793: IGMPSN: IGMPv2 General Query received on Vlan 2717, port Gi1/0/1 Resp time 10000 (100 100) msecs, LLQ interval 2000 (2, 1000)
*Apr 6 10:38:02.793: IGMPSN: IGMP general queries received on Vlan 2717 updates all groups
~
포트 Gi 1/0/17(PC21)에 연결된 호스트는 239.1.2.3으로 향하는 멀티캐스트 스트림이 필요하므로, PC21은 쿼리 작성기 172.17.1.254로 향하는 239.1.2.3으로 향하는 보고서를 보냅니다.
스위치는 동일한 패킷을 스누핑하고 IGMP 스누핑 테이블에 엔트리를 생성합니다.
*Apr 6 10:38:03.714: IGMPSN: Received IGMPv2 Report for group 239.1.2.3 received on Vlan 2717, port Gi1/0/17
*Apr 6 10:38:03.714: IGMPSN: NEW report: Call process_report port:Gi1/0/17 Querier is IGMPv1, Vlan 2717, quer_ver numeric 2.
*Apr 6 10:38:03.714: IGMPSN: Group: Received IGMPv2 report for mcast group 239.1.2.3 from Client 172.17.1.1. Received on Vlan 2717, port Gi1/0/17.
*Apr 6 10:38:03.714: IGMPSN: group: Adding client ip 172.17.1.1, port_id Gi1/0/17, on vlan 2717
*Apr 6 10:38:03.714: IGMPSN: MCAST IP address 239.1.2.3, MAC address 0100.5e01.0203
*Apr 6 10:38:03.714: IGMPSN: Locate gce 0100.5e01.0203, on Vlan 2717
*Apr 6 10:38:03.714: IGMPSN: locate group 239.1.2.3, on Vlan 2717
*Apr 6 10:38:03.714: IGMPSN: Add v2 group 239.1.2.3 member port Gi1/0/17, on Vlan 2717
*Apr 6 10:38:03.714: IGMPSN: group: Added port Gi1/0/17 to group 239.1.2.3
*Apr 6 10:38:03.714: TIMER_START for group239.1.2.3 for time 10000 * 100
*Apr 6 10:38:03.714: IGMPSN: group: Forwarding 239.1.2.3 report to router ports
*Apr 6 10:38:03.714: IGMPSN: Call platform_l2mc_snoop_send_mrouter
SW2#show ip igmp snooping group
Vlan Group Type Version Port List
-----------------------------------------------------------------------
2717 239.1.2.3 igmp v2 Gi1/0/17
스위치가 업링크 Gi1/0/1 또는 VLAN 2717의 다른 포트에서 멀티캐스트 그룹 239.1.2.3으로 향하는 데이터 트래픽을 수신하는 경우, 스위치는 이를 인터페이스 Gi1/0/17로만 전달하며 VLAN 2717의 다른 포트로는 전달하지 않습니다.
또한 IGMP 보고서는 SW2의 라우터 포트에서 Querier(R2)에 도달하며 Querier는 이에 대한 각 IGMP 그룹 항목을 생성합니다. R2가 239.1.2.3으로 향하는 멀티캐스트 데이터 트래픽을 수신하면 SW2로 전달됩니다.
발신자/소스 측 전달
PC11, 172.16.1.1이 SW1 Gi 1/0/3에 연결되어 239.1.2.3 UDP 포트 1234로 향하는 멀티캐스트 트래픽을 전송합니다.
SW1#show int gigabitEthernet 1/0/3
GigabitEthernet1/0/3 is up, line protocol is up (connected)
Hardware is Gigabit Ethernet, address is 2416.9d7a.1083 (bia 2416.9d7a.1083)
~
~
5 minute input rate 1857000 bits/sec, 170 packets/sec
5 minute output rate 0 bits/sec, 0 packets/sec
9410 packets input, 12890025 bytes, 0 no buffer
Received 9394 broadcasts (9394 multicasts)
0 runts, 0 giants, 0 throttles
0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored
0 watchdog, 9394 multicast, 0 pause input
0 input packets with dribble condition detected
~
~
SW1#show int gigabitEthernet 1/0/3 counters
Port InOctets InUcastPkts InMcastPkts InBcastPkts
Gi1/0/3 12890593 17 9396 0
!
SW1#show int te 1/1/1 counters
Port InOctets InUcastPkts InMcastPkts InBcastPkts
Te1/1/1 1166336 3940 1251 14
Port OutOctets OutUcastPkts OutMcastPkts OutBcastPkts
Te1/1/1 3229106605 2731 2358824 6
!
SW1#show ip igmp snooping querier
Vlan IP Address IGMP Version Port
-------------------------------------------------------------
2716 172.16.1.254 v2 Te1/1/1
!
SW1#show ip igmp snooping mrouter
Vlan ports
---- -----
2716 Te1/1/1(dynamic)
SW1에서 IGMP 스누핑이 활성화되어 있고 스위치에 이미 라우터 포트가 있는 경우, 스위치는 기본적으로 라우터 포트에서 수신된 멀티캐스트 데이터 트래픽을 쿼리 발생기 쪽으로 전달합니다.
소스 인터페이스 Gi 1/0/3의 EPC
SW1#show monitor capture file flash:mycap1.pcap
Starting the packet display ........ Press Ctrl + Shift + 6 to exit
1 0.000000 172.16.1.1 -> 239.1.2.3 RTCP 102 Sender Report Source description
2 0.000100 172.16.1.1 -> 239.1.2.3 UDP 1370 59218 -> 1234 Len=1328
3 0.000140 172.16.1.1 -> 239.1.2.3 UDP 1370 59218 -> 1234 Len=1328
4 0.000178 172.16.1.1 -> 239.1.2.3 UDP 1370 59218 -> 1234 Len=1328
5 0.000234 172.16.1.1 -> 239.1.2.3 UDP 1370 59218 -> 1234 Len=1328
스위치 SW1에 들어오고 Te 1/1/1에서 PIM 라우터 또는 Querier 172.16.1.254로 나가는 멀티캐스트 데이터 스트리밍.
멀티캐스트 라우팅 및 PIM은 Core, R1 및 R2에서 10.0.10.0/24, 10.0.20.0/24,172.16.1.0/24 및 172.17.1.0/24에 대해 활성화됩니다. 멀티캐스트 라우팅은 L3 네트워크에서 멀티캐스트 스트림을 포워딩하고, 마지막으로 스트림이 R2에 도달하는 것을 보장합니다. R2는 이전에 IGMP 보고 프로세스를 통해 학습된 IGMP 그룹 테이블 엔트리를 가지고 있으므로, R2는 스트림을 SW2로 전달한다.
SW2#show int gigabitEthernet 1/0/17 counters
Port InOctets InUcastPkts InMcastPkts InBcastPkts
Gi1/0/17 200 1709 103 0
Port OutOctets OutUcastPkts OutMcastPkts OutBcastPkts
Gi1/0/17 3661503 3 2667 0
마지막으로, PC21이 멀티캐스트 스트림을 수신합니다. Gi 1/0/17의 OutMcastPkts가 증가합니다.
SW2의 인터페이스 Gi 1/0/17의 EPC.
SW2#show monitor capture file flash:mycap1.pcap
Starting the packet display ........ Press Ctrl + Shift + 6 to exit
~
~
14 18.002140 172.16.1.1 -> 239.1.2.3 UDP 1370 59218 -> 1234 Len=1328
15 18.002178 172.16.1.1 -> 239.1.2.3 UDP 1370 59218 -> 1234 Len=1328
16 18.002234 172.16.1.1 -> 239.1.2.3 UDP 1370 59218 -> 1234 Len=1328
~
~
Gi 1/0/1에서 스위치 SW2로 들어가서 Gi 1/0/17에서 멀티캐스트 스트림을 요청하는 호스트로 나가는 멀티캐스트 데이터 스트리밍.