IGMP Snooping – Vì Sao Switch Layer 2 “Hiểu” Multicast?
Trong thế giới switching, unicast rất đơn giản.
Switch học địa chỉ MAC nguồn, ghi vào CAM table, sau đó khi frame đi vào, switch chỉ cần tra bảng MAC để biết nên forward frame ra đúng cổng nào.
Mọi thứ cực kỳ hiệu quả.
Nhưng multicast thì khác.
Đây là nơi rất nhiều kỹ sư mạng mới học multicast thường thắc mắc:
Câu trả lời là:
IGMP Snooping.
Đây là cơ chế giúp switch Layer 2 “nghe lén” các bản tin IGMP để kiểm soát multicast forwarding thông minh thay vì flood toàn VLAN.
Multicast Problem trong Layer 2
Hãy hình dung tình huống quen thuộc.
Có một video server đang stream multicast tới group:
239.1.1.1
Địa chỉ multicast IP này sẽ được ánh xạ sang multicast MAC:
0100.5e01.0101
Switch Layer 2 chỉ nhìn MAC frame.
Nó không nhìn sâu vào IP payload như router.
Vấn đề phát sinh:
Kết quả:
Flood.
Traffic multicast bị đẩy ra toàn bộ các port trong VLAN.
Ngay cả các host không đăng ký group cũng vẫn nhận traffic.
Ví dụ:
Nhưng cả H1, H2, H3 đều nhận packet.
Điều này tạo ra:
Đây chính là lý do multicast không thể hoạt động hiệu quả nếu Layer 2 chỉ đơn thuần switching “ngu”.
IGMP Snooping Là Gì?
Tên gọi đã nói lên bản chất.
Snooping = nghe lén
Switch sẽ nghe lén các bản tin IGMP giữa:
để xây dựng forwarding state.
Switch không trở thành multicast router.
Switch chỉ quan sát control traffic để quyết định:
Switch Không Có IGMP Snooping Sẽ Hoạt Động Thế Nào?
Giả sử topology:
H1 muốn join group:
239.1.1.1
H1 gửi:
IGMP Membership Report
Switch nhận frame multicast.
Nhưng switch bình thường không hiểu IGMP semantics.
Nó chỉ thấy multicast MAC.
Do chưa có forwarding entry:
=> flood toàn VLAN
Traffic đi:
Điều này cực kỳ kém hiệu quả.
Switch Học Router Port Như Thế Nào?
IGMP Snooping không chỉ học receiver.
Nó còn phải biết:
multicast router đang ở đâu
Nếu không biết router port, switch không biết forward IGMP reports cho ai.
Switch nhận biết router port bằng cách nghe các control protocol multicast như:
Ví dụ multicast MAC thường gặp:
PIM:
0100.5e00.000d
IGMP:
0100.5e00.0001
Khi phát hiện router, switch đánh dấu interface đó là:
mrouter port
Điều này rất quan trọng.
ASIC vs CPU – Điểm Cốt Lõi Của IGMP Snooping
Đây là phần nhiều kỹ sư bỏ sót.
Không phải switch nào cũng xử lý giống nhau. Cheap Switch Behavior
Switch giá rẻ không có L3-aware ASIC.
Nó chỉ làm Layer 2 forwarding cơ bản.
Không thể phân biệt:
Khi multicast stream lớn đi vào:
Ví dụ:
10 Mbps multicast video
Switch có thể đẩy traffic lên CPU.
CPU nhanh chóng choke.
Kết quả:
Enterprise Switch Behavior
Catalyst switch dùng ASIC chuyên dụng.
ASIC có thể phân biệt:
Logic:
IGMP packets:
→ punt CPU
Multicast data:
→ hardware forwarding
Đây là lý do enterprise switch scale tốt hơn rất nhiều.
IGMP Snooping Table Hoạt Động Ra Sao?
Khi H1 join:
Switch học:
Group:
239.1.1.1
Port:
Gi0/1
Router port:
Gi0/4
Forwarding behavior:
Traffic cho group chỉ đi:
Không flood toàn VLAN nữa.
Đây là giá trị lớn nhất của IGMP Snooping.
Khi Host Leave Group
Giả sử:
H1 không muốn xem stream nữa.
Nó gửi:
IGMP Leave Group
Destination:
224.0.0.2
Switch nhận leave message.
Nhưng switch không thể ngay lập tức remove port.
Tại sao?
Vì có thể còn host khác trên cùng segment vẫn đang nghe multicast.
Nếu xóa ngay:
host khác sẽ mất traffic.
Last Member Query Process
Switch cần xác minh.
Nó gửi:
IGMP Group-Specific Query
Mục đích:
Nếu có host phản hồi bằng Membership Report:
→ giữ port
Nếu không có ai trả lời:
→ remove port khỏi multicast forwarding entry
Đây gọi là:
last-member query mechanism
Membership Maintenance
Một vấn đề khác.
Nếu host crash?
Hoặc NIC unplug?
Không gửi leave thì sao?
Switch sẽ giữ stale entry mãi mãi?
Không.
Router định kỳ gửi:
IGMP General Query
Các host đang active sẽ trả lời:
Membership Report
Switch nghe các report này để refresh membership state.
Nếu timeout:
entry bị aging out.
Report Suppression Và Một Chi Tiết Thú Vị
IGMP có cơ chế:
report suppression
Nếu nhiều host cùng group:
Mục tiêu:
giảm control traffic.
Nhưng với snooping switch có nuance thú vị.
Vì switch intercept report nên hosts đôi khi không nghe report của nhau.
Kết quả:
nhiều hosts đều report.
Điều này là expected behavior.
Unknown Multicast Source Problem
Một tình huống thực tế.
Source chỉ gửi multicast traffic.
Nó KHÔNG join group.
Không gửi IGMP report.
Switch không có membership state.
Lúc này làm gì?
Có vài chiến lược: Flood
Cách đơn giản:
flood toàn VLAN
Nhưng quá lãng phí. Forward Only to Router Port
Thông minh hơn:
chỉ gửi traffic tới mrouter port.
Router sẽ quyết định downstream replication.
Enterprise switch thường xử lý kiểu này.
Cisco Verification Commands
Kiểm tra global snooping:
show ip igmp snooping
Kiểm tra querier:
show ip igmp snooping querier
Kiểm tra groups:
show ip igmp snooping groups
Debug router discovery:
debug ip igmp snooping router
Debug group learning:
debug ip igmp snooping 239.1.1.1
Enable Multicast Router
Trên router:
ip multicast-routing
Interface:
interface GigabitEthernet0/1
ip pim sparse-mode
Practical Best Practices
Trong production:
Không nên chỉ “enable multicast” rồi hy vọng mọi thứ ổn.
Hãy kiểm tra:
Nếu không, multicast có thể trở thành silent bandwidth killer.
Kết Luận
IGMP Snooping là ví dụ kinh điển cho việc Layer 2 switch trở nên “thông minh hơn” mà không thực sự trở thành router.
Nó giúp:
Nếu không có IGMP Snooping:
multicast trong Layer 2 gần như chỉ là broadcast trá hình.
Trong thế giới switching, unicast rất đơn giản.
Switch học địa chỉ MAC nguồn, ghi vào CAM table, sau đó khi frame đi vào, switch chỉ cần tra bảng MAC để biết nên forward frame ra đúng cổng nào.
Mọi thứ cực kỳ hiệu quả.
Nhưng multicast thì khác.
Đây là nơi rất nhiều kỹ sư mạng mới học multicast thường thắc mắc:
“Switch Layer 2 đâu có hiểu IGMP, vậy làm sao nó biết host nào thực sự muốn nhận multicast?”
Câu trả lời là:
IGMP Snooping.
Đây là cơ chế giúp switch Layer 2 “nghe lén” các bản tin IGMP để kiểm soát multicast forwarding thông minh thay vì flood toàn VLAN.
Multicast Problem trong Layer 2
Hãy hình dung tình huống quen thuộc.
Có một video server đang stream multicast tới group:
239.1.1.1
Địa chỉ multicast IP này sẽ được ánh xạ sang multicast MAC:
0100.5e01.0101
Switch Layer 2 chỉ nhìn MAC frame.
Nó không nhìn sâu vào IP payload như router.
Vấn đề phát sinh:
- Switch chưa từng học multicast MAC này từ source
- CAM table không có entry tương ứng
- Switch không biết nên gửi traffic đi đâu
Kết quả:
Flood.
Traffic multicast bị đẩy ra toàn bộ các port trong VLAN.
Ngay cả các host không đăng ký group cũng vẫn nhận traffic.
Ví dụ:
- H1 muốn xem stream
- H2 không quan tâm
- H3 cũng không quan tâm
Nhưng cả H1, H2, H3 đều nhận packet.
Điều này tạo ra:
- Waste bandwidth
- CPU overhead trên host
- Performance degradation
- Broadcast-domain style congestion
Đây chính là lý do multicast không thể hoạt động hiệu quả nếu Layer 2 chỉ đơn thuần switching “ngu”.
IGMP Snooping Là Gì?
Tên gọi đã nói lên bản chất.
Snooping = nghe lén
Switch sẽ nghe lén các bản tin IGMP giữa:
- host
- multicast router
để xây dựng forwarding state.
Switch không trở thành multicast router.
Switch chỉ quan sát control traffic để quyết định:
“Multicast group này nên forward ra port nào?”
Switch Không Có IGMP Snooping Sẽ Hoạt Động Thế Nào?
Giả sử topology:
- R1 = multicast router
- SW1 = switch
- H1, H2, H3 = hosts
H1 muốn join group:
239.1.1.1
H1 gửi:
IGMP Membership Report
Switch nhận frame multicast.
Nhưng switch bình thường không hiểu IGMP semantics.
Nó chỉ thấy multicast MAC.
Do chưa có forwarding entry:
=> flood toàn VLAN
Traffic đi:
- tới H2
- tới H3
- tới router
- thậm chí internal CPU path
Điều này cực kỳ kém hiệu quả.
Switch Học Router Port Như Thế Nào?
IGMP Snooping không chỉ học receiver.
Nó còn phải biết:
multicast router đang ở đâu
Nếu không biết router port, switch không biết forward IGMP reports cho ai.
Switch nhận biết router port bằng cách nghe các control protocol multicast như:
- IGMP General Query
- PIM Hello
- DVMRP
Ví dụ multicast MAC thường gặp:
PIM:
0100.5e00.000d
IGMP:
0100.5e00.0001
Khi phát hiện router, switch đánh dấu interface đó là:
mrouter port
Điều này rất quan trọng.
ASIC vs CPU – Điểm Cốt Lõi Của IGMP Snooping
Đây là phần nhiều kỹ sư bỏ sót.
Không phải switch nào cũng xử lý giống nhau. Cheap Switch Behavior
Switch giá rẻ không có L3-aware ASIC.
Nó chỉ làm Layer 2 forwarding cơ bản.
Không thể phân biệt:
- IGMP control traffic
- multicast data traffic
Khi multicast stream lớn đi vào:
Ví dụ:
10 Mbps multicast video
Switch có thể đẩy traffic lên CPU.
CPU nhanh chóng choke.
Kết quả:
- dropped packets
- delayed IGMP processing
- unstable multicast
Enterprise Switch Behavior
Catalyst switch dùng ASIC chuyên dụng.
ASIC có thể phân biệt:
- IGMP control packets
- multicast data packets
Logic:
IGMP packets:
→ punt CPU
Multicast data:
→ hardware forwarding
Đây là lý do enterprise switch scale tốt hơn rất nhiều.
IGMP Snooping Table Hoạt Động Ra Sao?
Khi H1 join:
Switch học:
Group:
239.1.1.1
Port:
Gi0/1
Router port:
Gi0/4
Forwarding behavior:
Traffic cho group chỉ đi:
- Gi0/1
- Gi0/4
Không flood toàn VLAN nữa.
Đây là giá trị lớn nhất của IGMP Snooping.
Khi Host Leave Group
Giả sử:
H1 không muốn xem stream nữa.
Nó gửi:
IGMP Leave Group
Destination:
224.0.0.2
Switch nhận leave message.
Nhưng switch không thể ngay lập tức remove port.
Tại sao?
Vì có thể còn host khác trên cùng segment vẫn đang nghe multicast.
Nếu xóa ngay:
host khác sẽ mất traffic.
Last Member Query Process
Switch cần xác minh.
Nó gửi:
IGMP Group-Specific Query
Mục đích:
“Còn ai trên segment này muốn nhận group này không?”
Nếu có host phản hồi bằng Membership Report:
→ giữ port
Nếu không có ai trả lời:
→ remove port khỏi multicast forwarding entry
Đây gọi là:
last-member query mechanism
Membership Maintenance
Một vấn đề khác.
Nếu host crash?
Hoặc NIC unplug?
Không gửi leave thì sao?
Switch sẽ giữ stale entry mãi mãi?
Không.
Router định kỳ gửi:
IGMP General Query
Các host đang active sẽ trả lời:
Membership Report
Switch nghe các report này để refresh membership state.
Nếu timeout:
entry bị aging out.
Report Suppression Và Một Chi Tiết Thú Vị
IGMP có cơ chế:
report suppression
Nếu nhiều host cùng group:
- Host A report
- Host B nghe thấy
- Host B im lặng
Mục tiêu:
giảm control traffic.
Nhưng với snooping switch có nuance thú vị.
Vì switch intercept report nên hosts đôi khi không nghe report của nhau.
Kết quả:
nhiều hosts đều report.
Điều này là expected behavior.
Unknown Multicast Source Problem
Một tình huống thực tế.
Source chỉ gửi multicast traffic.
Nó KHÔNG join group.
Không gửi IGMP report.
Switch không có membership state.
Lúc này làm gì?
Có vài chiến lược: Flood
Cách đơn giản:
flood toàn VLAN
Nhưng quá lãng phí. Forward Only to Router Port
Thông minh hơn:
chỉ gửi traffic tới mrouter port.
Router sẽ quyết định downstream replication.
Enterprise switch thường xử lý kiểu này.
Cisco Verification Commands
Kiểm tra global snooping:
show ip igmp snooping
Kiểm tra querier:
show ip igmp snooping querier
Kiểm tra groups:
show ip igmp snooping groups
Debug router discovery:
debug ip igmp snooping router
Debug group learning:
debug ip igmp snooping 239.1.1.1
Enable Multicast Router
Trên router:
ip multicast-routing
Interface:
interface GigabitEthernet0/1
ip pim sparse-mode
Practical Best Practices
Trong production:
Không nên chỉ “enable multicast” rồi hy vọng mọi thứ ổn.
Hãy kiểm tra:
- IGMP Snooping enabled chưa
- mrouter port học đúng chưa
- querier có tồn tại không
- unknown multicast được xử lý thế nào
- ASIC forwarding hay punt CPU
- VLAN multicast scale
Nếu không, multicast có thể trở thành silent bandwidth killer.
Kết Luận
IGMP Snooping là ví dụ kinh điển cho việc Layer 2 switch trở nên “thông minh hơn” mà không thực sự trở thành router.
Nó giúp:
- giảm flooding
- tối ưu bandwidth
- bảo vệ host CPU
- scale multicast tốt hơn
- giữ multicast usable trong enterprise LAN
Nếu không có IGMP Snooping:
multicast trong Layer 2 gần như chỉ là broadcast trá hình.