■ IGMP(RFC 2236)는 Ethernet 환경에서 단말(Multicast Host)이 라우터(Multicast 라우터)에게 Multicast 트래픽을 요청하기 위해 사용되는 IP 기반의 L3 프로토콜입니다.
■ Snooping이란 패킷의 목적지가 내가 아닌데 어떠한 이유로 그 패킷의 내용을 중간에서 훔쳐 보는 것을 말합니다. IGMP Snooping 이외에도 ARP Snooping, DHCP Snooping등이 있죠.
■ 그럼 IGMP Snooping(RFC 4541)이란? 통상적으로 이 기능은 IPTV 실시간 방송 서비스를 위해 L2 스위치에서 지원을 합니다. 그 목적은 L2 스위치가 단말(STB)과 라우터간에 주고 받는 IGMP 메시지를 중간에서 훔쳐 그 메시지를 해석하여 L2 스위치가 Multicast Group Membership(어느 포트(단말)에서 어느 Multicast 트래픽을 요청했나?)을 관리할 수 있도록 하는 기능입니다.
-
IGMP Snooping을 지원하지 않는 L2 스위치(지금은 그런 장비가 없겠지만요)가 Multicast 트래픽을 수신하는 경우에는 Broadcast 패킷과 동일하게 모든 포트로 Multicast 트래픽을 flooding 합니다.
-
하지만 IGMP Snooping을 지원하는 L2 스위치의 경우, Multicast 트래픽을 요청한 단말들에게만(해당 포트들로만) Multicast 트래픽을 전달합니다.
한 마디로 정리하면, L2 스위치의 IGMP Snooping 기능은 Multicast 트래픽을 모든 포트로 flooding 하지 않고, 이를 필요로 하는 단말들로만 전달하기 위한 기능이라 보시면 됩니다.
IGMP Snooping 기능은 그 동작 방식에 따라 매우 다양한 종류가 있습니다만 오늘은 가장 기본이 되는 기능 위주로 설명을 드리고자 합니다(Specific Query/General Query 설명 생략). 자세한 내용은 넷매니아즈 기술 문서 "IGMP Snooping 상세 동작 원리"를 참조하세요.
[1] 아무도 TV를 안봐
- STB1은 L2 스위치 1번 포트에 연결되어 있고, STB2는 2번 포트에 연결되어 있습니다. 아무도 실시간 방송 요청을 하지 않았으므로 STB과 L2 스위치로는 Multicast 스트림이 수신되고 있지 않습니다.
[2] STB1 이용자가 KBS1 채널 선택: KBS1 채널에 대한 IGMP Join(233.18.145.192) 보내기
- STB1은 KBS1 채널에 대한 IGMP Join(233.18.145.192) 메시지를 IP 망으로 전송하고,
- L2 스위치가 IGMP Join 메시지를 가로채서 "Port 1에서 Multicast 스트림 233.18.145.192를 요청했음"을 IGMP Snoop Table에 기록합니다.
- L2 스위치는 현재 Multicast Stream(233.18.145.192)을 수신하고 있지 않으므로 STB1이 보낸 IGMP Join 메시지를 업링크를 통해 IP 망으로 보내고,
- IP 망으로 부터 Multicast Stream(233.18.145.192)을 수신합니다.
- 그러면 IGMP Snoop Table에 기록된 정보를 토대로 Multicast Stream(233.18.145.192)을 Port 1로 전송하여 STB1이 수신할 수 있도록 합니다. (다른 Port로는 전송하지 않음)
[3] STB2 이용자가 MBC 채널 선택: MBC 채널에 대한 IGMP Join(233.18.145.194) 보내기
- STB2는 MBC 채널에 대한 IGMP Join(233.18.145.194) 메시지를 IP 망으로 전송하고,
- L2 스위치는 이 메시지를 가로채서 "Port 2에서 Multicast 스트림 233.18.145.194를 요청했음"을 IGMP Snoop Table에 기록합니다.
- L2 스위치는 현재 Multicast Stream(233.18.145.194)을 수신하고 있지 않으므로 STB2가 보낸 IGMP Join 메시지를 업링크로 전송하고,
- 업링크를 통해 Multicast Stream(233.18.145.194)을 수신합니다.
- 그리고 IGMP Snoop Table에 기록된 정보를 토대로 Multicast Stream(233.18.145.194)을 Port 2로 전송하여 STB2가 수신할 수 있도록 합니다.
[4-1] STB2 이용자가 MBC에서 KBS1으로 채널 변경 - 1단계: MBC 채널에 대한 IGMP Leave(233.18.145.194) 보내기
- STB2는 현재 수신되고 있는 MBC 채널(Multicast 스트림)을 더 이상 받지 않기 위해 IGMP Leave(233.18.145.194) 메시지를 IP 망으로 전송하고,
- L2 스위치는 IGMP Leave 메시지를 가로채서 IGMP Snoop Table에 기록되어 있던 {233.18.145.194, Port 2} 정보를 삭제합니다.
- IGMP Snoop Table에 정보가 삭제됨과 동시에 L2 스위치는 더 이상 Port 2로 Multicast Stream(233.18.145.194)을 전달하지 않습니다(Fast Leave).
- 그리고 L2 스위치는 Multicast Stream(233.18.145.194)을 수신할 STB이 더 이상 아무도 없으므로 STB2가 보낸 IGMP Leave 메시지를 업링크로 보내어
- 더 이상 Multicast Stream(233.18.145.194)이 L2 스위치로 수신되지 않도록 합니다.
[4-2] STB2 이용자가 MBC에서 KBS1으로 채널 변경 - 2단계: KBS1 채널에 대한 IGMP Join(233.18.145.192) 보내기
- STB2는 IGMP Leave(233.18.145.194) 메시지를 보낸 직후 KBS1 채널에 대한 IGMP Join(233.18.145.192) 메시지를 IP 망으로 전송하고
- 이를 가로챈 L2 스위치는 IGMP Snoop Table에 Port 2 정보를 추가합니다.
- L2 스위치는 IGMP Snoop Table에 Port 2를 추가함과 동시에 Port 1과 함께 Port 2로도 Multicast Stream (233.18.145.192)을 전송합니다(업링크 포트로 받은 Multicast 스트림을 2개의 다운링크 포트로 전달 - Multicasting 합니다). [2]번 과정에 의해서 Multicast Stream(233.18.145.192)이 이미 L2 스위치로 수신되고 있었으므로 STB2가 보낸 IGMP Join(233.18.145.192) 메시지는 업링크로 전달하지 않습니다(IGMP Snooping with Report/Leave Suppression - 이미 수신하고 있는 Multicast 스트림을 또 달라고(IGMP Join) 할 필요가 없잖아!).
▶ 역자 주: IGMP Snooping 모드에 따라 IGMP Join 메시지를 업링크로 전달 할 수도 있고(IGMP Transparent Snooping), 안 할 수도 있습니다(IGMP Snooping with Report/Leave Suppression).
[5] STB1 이용자가 TV 그만 보기: KBS1 채널에 대한 IGMP Leave(233.18.145.192) 보내기
- STB1은 현재 수신 중인 채널에 대해 IGMP Leave(233.18.145.192) 메시지를 전송하고
- 이를 수신한 L2 스위치는 IGMP Snoop Table에서 Port 1 정보를 삭제합니다.
- 삭제와 동시에 이제 더 이상 Port 1로는 Multicast Stream(233.18.145.192)을 전송하지 않습니다(Fast Leave). [4-2]번 과정에 의해 현재 Multicast Stream(233.18.145.192)이 Port 2로 전달 중에 있으므로 L2 스위치는 STB1이 보낸 IGMP Leave(233.18.145.192) 메시지를 업링크로 전달하지 않습니다(IGMP Snooping with Report/Leave Suppression - 다른 이용자에게 전달 중인 Multicast 스트림을 그만 보내라고(IGMP Leave) 할 필요가 없잖어!).
▶ 역자 주: IGMP Snooping 모드에 따라 IGMP Leave 메시지를 업링크로 전달 할 수도 있고(IGMP Transparent Snooping), 안 할 수도 있습니다(IGMP Snooping with Report/Leave Suppression).
[6] STB2 이용자가 TV 그만 보기: KBS1 채널에 대한 IGMP Leave(233.18.145.192) 보내기
- STB2는 현재 수신 중인 채널에 대해 IGMP Leave(233.18.145.192) 메시지를 전송하고
- 이를 수신한 L2 스위치는 IGMP Snoop Table에서 {233.18.145.192, Port 2} 정보를 삭제합니다.
- 삭제와 동시에 이제 더 이상 Port 2로는 패킷을 전송하지 않습니다(Fast Leave).
- Multicast Stream(233.18.145.192)을 필요로 하는 STB이 더 이상 없으므로 L2 스위치는 STB2가 보낸 IGMP Leave 메시지를 업링크로 전달하여
- 더 이상 Multicast Stream(233.18.145.192)이 L2 스위치로 전달되지 않도록 합니다.
* IGMP Join의 정확한 이름은 "IGMP Membership Report", IGMP Leave의 정확한 이름은 "IGMP Leave Group"입니다.
혹시 네이버 블로그에서 그런 기능을 제공하고 있다면 다음 URL에서 담아가시면 될 듯 합니다.
http://blog.naver.com/NETMANIASCOM
감사합니다.
감사 감사...
L2에서 snoop 하고 있다가 last leave 인 경우 uplink L3로 last leave message를 보내고, 가입자 단으로 실제 마지막 message 인지 확인 하는 query 를 보내는 것은 어떻게 동작하는 것이 옳을 까요? 표준이 있는지 ? 어떻게 동작해도 상관 없는 것인지 ?
감사합니다, 정말 이해가 쏙쏙 되네요
잘읽엇습니다 감사합니다^^
이해하기 쉽게 설명해 주셨네요. 자료 감사드립니다...
도움 감사 드립니다~
덕분에 이해가 잘 됐습니다
덕분에 쏙쏙 이해가 되었습니다. 감사합니다.
감사합니다.
좋은자료네요 감사합니ㅣ다
L2 SW에서 IGMP snoop table을 IP로 관리하는 것이 맞는지요? L2이니 MAC으로 table을 관리하는 것 아닌가요? 답변 부탁 드립니다
이해를 돕고자 IP 주소로 표현한 것이고, 이기태님 말씀처럼 Multicast MAC 주소가 들어가는게 맞습니다 (Multicast IP와 매핑되는 Multicast MAC 주소).
왜 스위치허브중에도 IGMP 모델이라고 몇천원씩 비싸게 받나 했더니 이런 기능이었군요. 좋은 글 감사합니다.
스위치 허브가 여러개일때는 어떻게 되나요?
Backbone스위치 (L3스위치)만 IGMP가 지원되고 하위에 있는 L2스위치는 IGMP가 지원되지 않는 상황에서 L2스위치에 STB가 연결될 경우가 궁금하네요