IPv6 MLD snooping
얼마전 일하다가 특정 스위치에서 (모델=Cisco Catalyst 3850-12S) CPU사용률에 부하가 걸렸던 이슈가 있었습니다.
show process cpu sorted detailed | exclude 0.0
이라고 치면 CPU사용률중에 높은것을 기준으로 정렬해서 보여주고 0.0인건 빼라.. 라는 명령어인데
process "NGCW L2M"이라는 놈이 CPU를 막 사용하고 있더라고요
구글링해서 뒤져보니 ipv6 mld snooping을 걸어주면 해결된다 하였고 해서 이 이슈는 해결이 되었습니다
자, 그래서 제목처럼 IPv6 MLD Snooping이란 커맨드...가 아니라 개념에 대해서 알아봐야겠습니다
1. Multicast
MLD는 Multicast Listener Discovery의 약자입니다. 우리말로 하면 멀티캐스트 수신자 발견정도 되겠네요
그럼 Multicast가 뭐냐!?!?
인터넷에 찾아보면 쉽게 볼 수 있는 그림입니다
그림그대로 다른 종류의 통신과 비교하면 더 쉽죠. 멀티캐스트는 1개도 아니고 전체도아닌 다수에게 전송하는 방식으로 이해하면 되겠습니다
그럼 이 다수의 기준은? 여기서 listener의 개념이 등장하면 맞을 듯 합니다. 수신을 원하는 다수에게 전송을 해야겠죠
일반적은 예로 방송을 예로 들면 되겠네요. 우리가 채널을 TVN으로 맞추면 이 동작이 "우리는 TVN을 수신할 준비가 되어있어"라는 뜻이고 이 신호를 보고 방송사에서는 해당 방송을 우리에게 송출하게 되죠
그럼 다시, 방금 이야기한 우리의 수신준비와 송출하기까지의 과정도 존재하겠죠? 자세한 방식은 다른 포스팅에서 하기로 하고 간단하게 이야기 하면 오늘 이야기할 MLD가 이 역할을 하게 됩니다
IPv4에서는 IGMP가 이와 유사한 기능을 하고 IPv6에서는 ICMPv6의 일부 기능이 이를 수행합니다
2. MLD
위에서 이야기했듯이 MLD는 멀티캐스트 그룹 관리용 프로토콜입니다 (IPv6에서)
MLD의 메세지 유형에는 MLQ, MLR, MLD 세가지가 있습니다
MLQ (Multicast Listener Query, 조회). ICMPv6 type 130. 특정 그룹에 참여하는 호스트가 있는지 확인 (라우터>호스트)
MLR (Multicast Listener Report, 보고). ICMPv6 type 131. 가입코자 하는 그룹의 멀티캐스트 주소를 밟히는 것 (호스트>라우터)
MLD (Multicast Listener Done, 종료). ICMPv6 type 132. 더이상 특정 멀티캐스트 수신을 원하지 않음 (호스트>라우터)
이렇게 나눌 수 있습니다.
3. MLD Snooping 개요
snooping 이라하면 보안에서 공격자의 용어로 친근합니다 저는... 그래서 그런지 개념을 이해하기가 많이 어렵습니다
어쨌든 시스코 문서를 뒤져보면
MLD Snooping은 스위치가 MLD 패킷을 검사하고 해당 컨텐츠를 기반으로 포워딩을 결장할 수 있도록 만들어주는 기능을 이야기합니다. MLD snooping 쿼리어(조회자 또는 조회하는 기기)나 MLD로부터 MLD쿼리를 수신하는 서브넷에 설정할 수 있다고 나와있습니다. 무슨말인지 어려우시죠? (저도 그렇습니다만..)
정리하면 MLD를 수신하거나 조회하는 기기 어느쪽에든 config가 가능하다. 이렇게 이해하면 될 것 같습니다
MLD snooping의 역할은 IPv6 multicast 트래픽을 수신하기 원하는 포트(2계층)들에 유동적으로 설정하여 multicast 트래픽을 제한하는 겁니다
[문서 그대로 번역했습니다만, 원래 멀티캐스트가 수신을 원하는 목적지로만 전송하는거 아닌가? IPv6는 좀 다를 수 있나봅니다]
정리하면, CPU부하율의 원인은 IPv6 multicasat traffic이다
ipv6 mld snooping으로 트래픽을 제한하였다
트래픽을 어떻게 제한하였냐.. 는 IPv6 멀티캐스트 알고리즘을 살펴봐야 겠습니다
4. IPv6 Multicast Group 가입
그림은 사실 별 쓸데없어 보입니다
IPv6 멀티캐스트 알고리즘을 보면 왜 Snooping이 트래픽을 제한하게 되는지 알 수 있습니다
1) 호스트는 ipv6 multicast router에 대한 응답으로 MLD report를 보내 그룹에 가입합니다
2) 스위치는 이러한 report를 스누핑합니다
3) 스누핑된 MLD report대한 응답으로 스위치는 report를 VLAN별로 묶어서 Layer2 포워딩 테이블에 저장합니다
4) 1)~3)의 과정으로 생성된 다른 report들을 VLAN별로 묶어서 하나의 테이블만 생성합니다
5) MLD 스누핑은 multicast 그룹별로 하나만 냅두고 나머지는 제한하고 남겨진 하나의 report 포워딩 테이블이 ipv6 multicast router로 포워딩 됩니다
요약하면, ipv6 mld snooping은 여러 호스트들을 vlan별로 묶어서 하나의 포워딩테이블로 요약하여 사용한다~ 이렇게 정리할 수 있겠네요. 이 snooping기능이 disable되어 있으면 호스트별로 multicast 포워딩테이블이 생성되어 중복처리로 cpu에 부하가 걸린다는 거죠
5. MLD Snooping Querier
이제 거의 다 왔습니다
멀티캐스트 트래픽을 라우팅할 필요가 없어서 PIM 및 MLD가 구성되지 않은 VLAN에서 MLD Snooping을 사용할 때 MLD Snooping Querier를 사용합니다
반대로 멀티캐스트 라우팅이 구성된 네트워크에서는 라우터가 MLD Querier역할을 합니다
MLD snooping이 enable되면 MLD snooping querier가 MLD 쿼리를 주기적으로 내보내는데 이 MLD쿼리가 멀티캐스트를 수신하기 원하는 스위치들로 부터 report 메세지를 송신하는 역할입니다
6. MLD Snooping Querier Configuration
config는 의외로 어렵지 않습니다.
아래 cisco 홈페이지에서 발췌한 config 입니다.
7. MLD Snooping configuration
이건 더 쉬워요
댓글
댓글 쓰기