Tháng 10 năm 2002, RFC3376 định nghĩa đặc tả cho IGMP phiên bản 3. IGMP phiên bản 3 là một phiên bản cải tiến của giao thức IGMP và là giao thức khá phức tạp. Để dùng các đặc điểm mới của IGMP, router trạm cuối cùng phải được cập nhật, hệ điều hành của máy trạm phải thay đổi và ứng dụng Multicast phải thiết kế và viết lại. Ở thời điểm hiện tại, chỉ có rất ít các ứng dụng của IGMP phiên bản 3 là có sẵn. Phần này chỉ tóm tắt các đặc điểm chủ yếu của IGMP phiên bản 3.
Trong IGMP phiên bản 1 và IGMP phiên bản 2, khi một máy trạm tham gia vào một nhóm, router sẽ truyền các lưu lượng cho nhóm đó vào phân đoạn mạng bất chấp địa chỉ nguồn của gói tin. Ví dụ, giả sử có một buổi hội thảo đa phương tiện đang diễn ra. Một thành viên của nhóm quyết định phá hỏng phiên hội thảo bằng cách gửi ra một số dữ liệu nhiễu bằng cách nói chuyện hay gửi nhạc cho các thành viên của nhóm. Mặc dù các ứng dụng đa phương tiện cho phép một người dùng làm im lặng các thành viên khác, ứng dụng không làm dừng các lưu lượng không mong muốn phân phối đến máy trạm.
Nếu một nhóm các hacker quyết định phát tán một mạng của một công ty bằng các dữ liệu băng thông cao dùng cùng địa chỉ nhóm Multicast mà công ty đang dùng, nó có thể tạo ra kiểu tấn công từ chối dịch vụ. Cả IGMP phiên bản 1 và IGMP phiên bản 2 đều không có cơ chế để ngăn ngừa một kiểu tấn công như vậy.
IGMP phiên bản 3 cho phép các máy trạm lọc các lưu lượng đi vào dựa trên địa chỉ IP nguồn thông qua một tính năng gọi là Multicast theo từng nguồn (Source Specific Multicast –SSM). IGMP phiên bản 3 cho phép các máy trạm chỉ định các lưu lượng xuất phát từ một nguồn cụ thể hoặc nhận từ tất cả ngoại trừ từ một nguồn nào đó.
Hình 19.17 mô tả hoạt động cơ bản của cơ chế báo cáo IGMP phiên bản 3.
Hình 19.17: Hoạt động cơ bản của IGMP phiên bản 3
Trong hình 19.17, lưu lượng của nhóm 226.1.1.1 là xuất phát từ hai nguồn, R1 nhận lưu lượng từ cả hai nguồn. H1 chuẩn bị thông điệp báo cáo quan hệ IGMP phiên bản 3 dùng địa chỉ đích là 224.0.0.22, được gán bởi IANA cho các thông điệp báo cáo quan hệ IGMP phiên bản 3. Kiểu thông điệp là 0x22 với một trường bao gồm “địa chỉ nguồn 209.165.201.2”, có nghĩa là “tôi muốn tham gia vào nhóm Multicast 226.1.1.1 nhưng chỉ nếu nhóm này đến từ nguồn 209.165.201.2”.
Làm thế nào một máy trạm có thể học địa chỉ nguồn của một nhóm? Cisco đã phát triển tính năng URD và IGMP phiên bản 3 để dùng các tính năng của IGMP phiên bản 3 cho đến khi nào các ứng dụng IGMP phiên bản 3 là sẵn sàng và hệ điều hành được cập nhật.
Đặc điểm |
IGMP phiên bản 1 |
IGMP phiên bản 2 |
IGMP phiên bản 3 |
Giá trị của byte đầu tiên trong thông điệp truy vấn |
0x11 |
0x11 |
0x11 |
Địa chỉ nhóm cho thông điệp truy vấn |
0.0.0.0 |
0.0.0.0 |
0.0.0.0 |
Địa chỉ đích cho thông điệp truy vấn |
224.0.0.1 |
224.0.0.1 |
224.0.0.1 |
Thời gian truy vấn mặc định |
60 giây |
125 giây |
125 giây |
Giá trị của byte đầu tiên của thông điệp báo cáo |
0x12 |
0x16 |
0x22 |
Địa chỉ nhóm cho thông điệp báo cáo |
Địa chỉ nhóm Multicast |
Địa chỉ nhóm Multicast |
Địa chỉ nhóm Multicast, có tham khảo thêm nguồn |
Địa chỉ đích của thông điệp báo cáo |
Địa chỉ nhóm Multicast |
Địa chỉ nhóm Multicast |
224.0.0.22 |
Có cơ chế làm giảm thông điệp báo cáo hay không? |
Có |
Có |
Không |
Thời gian trả lời tối đa có thể được cấu hình |
Không, cố định ở 10 giây |
Có, từ 0 đến 25,5 giây |
Có, từ 0 đến 53 phút |
Một máy trạm có thể gửi thông điệp rời khỏi nhóm hay không? |
Không |
Có |
Có |
Địa chỉ đích cho thông điệp rời khỏi nhóm |
- |
224.0.0.2 |
224.0.0.2 |
Một router có thể gửi một thông điệp cho từng nhóm cụ thể |
Không |
Có |
Có |
Một máy trạm có thể gửi một thông điệp báo cáo cho từng nhóm và từng nguồn cụ thể hay không? |
Không |
Không |
Có |
Router có thể gửi truy vấn cho từng nguồn và từng nhóm cụ thể hay không? |
Không |
Không |
Có |
Luật bầu chọn router truy vấn |
Không, phụ thuộc vào giao thức định tuyến |
Router có địa chỉ IP thấp nhất |
Router có địa chỉ IP thấp nhất |
Tương thích với các phiên bản khác của IGMP |
Không |
Có, chỉ với IGMP phiên bản 1 |
Có, với cả IGMP phiên bản 1 và IGMP phiên bản 2 |
RFC2710 định nghĩa đặc tả cho giao thức phát hiện các máy chạy Multicast (Multicast Listener Discovery – MLD). MLD là một giao thức được phát triển từ IGMP phiên bản 2 và được thiết kế cho IP phiên bản 6. Hoạt động của MLD thì tương tự như IGMP phiên bản 2. Sự khác nhau giữa IGMP phiên bản 2 và MLD là các thiết bị Multicast trên mạng dùng địa chỉ IP liên kết cục bộ phiên bản 6 như là địa chỉ nguồn trong giao tiếp của nó đến những thiết bị Multicast khác. Việc sử dụng địa chỉ nguồn là liên kết cục bộ ngăn ngừa các gói tin MLD đi ra khỏi phân đoạn mạng cục bộ đó. Trong MLD, khi một máy trạm muốn rời khỏi một nhóm, nó gửi ra thông điệp Thực hiện (Done). Thông điệp Done thì tương tự như thông điệp rời khỏi nhóm của IGMP phiên bản 2. Thông điệp này sẽ gửi đến tất cả các router IP phiên bản 6, FF02::2.
Trong MLD, router truy vấn (Querier) thì được gọi là MLQ (Multicast Listener Querier). Khi một router nhận một thông điệp Done, nó gửi một thông điệp truy vấn địa chỉ Multicast xác định (Multicast-Address-Specific Query). Chức năng của nó tương tự như truy vấn từng nhóm IGMP phiên bản 2 (Group-Specific Query).
Không chỉ router cần phải biết cổng LAN nào để chuyển lưu lượng Multicast mà switch cũng cần phải biết những cổng nào cần nó cần chuyển lưu lượng . Mặc định, nếu một switch nhận được khung tin Multicast trên một cổng, switch sẽ phát tán khung tin trên toàn Vlan giống như Broadcast hay là Unicast chưa biết. Lý do là các switch sẽ không bao giờ tìm ra địa chỉ MAC Multicast như là một địa chỉ nguồn. Quyết định của một switch phát tán các khung tin Multicast có nghĩa là nếu có bất kỳ máy trạm nào trong cùng Vlan, cho dù máy trạm đó có yêu cầu nhận khung tin Multicast hay không, cũng sẽ nhận được lưu lượng Multicast. Trạng thái này đã đi ngược lại một trong những mục tiêu thiết kế ban đầu của Multicast trong đó nêu rõ chỉ phân phối lưu lượng Multicast đến những máy nào yêu cầu trong khi vẫn tăng hiệu suất của băng thông.
Để truyền lưu lượng hiệu quả hơn, các switch cần phải trả lời các câu hỏi sau:
Có ba giao thức khác nhau CGMP, giám sát IGMP (IGMP snooping) và RGMP cho phép các switch tối ưu các cơ chế chuyển lưu lượng Multicast của nó. Phần kế tiếp sẽ khảo sát làm thế nào các router và máy trạm dùng IGMP để đảm bảo rằng router có nên chuyển Multicast lưu lượng ra một cổng LAN hay không.
Các router hoặc các switch đa lớp MLS có thể xây dựng các cây Multicast và chuyển các gói tin đi một cách hiệu quả. Tuy nhiên ở lớp 2, một switch chỉ kiểm tra phần đầu của khung tin Ethernet để tìm địa chỉ nguồn và địa chỉ đích. Các switch này không thể hoạt động ‘theo yêu cầu’ giống như router. Thông tin tốt nhất mà một switch biết được là địa chỉ Multicast đích và khi đó khung tin đó cần phải được phát tán ra tất cả các cổng của Vlan.
Có hai phương thức được phát triển để cho phép các switch chuyển các gói tin Multicast một cách thông minh. Một là dùng giám sát IGMP (IGMP snooping) và hai là dùng CGMP. Một phương thức đòi hỏi phần cứng mạnh, còn phương thức kia thì học hỏi thông tin từ các router láng giềng.
Trong chế độ hoạt động bình thường, một máy trạm muốn tham gia vào một nhóm Multicast phải liên lạc với một router ngõ ra để router đưa máy trạm đó vào nhóm Multicast. IGMP snooping cho phép một switch lắng nghe các thông điệp báo cáo quan hệ IGMP này sao cho nó có thể tìm ra máy trạm nào đang yêu cầu nhóm nào.
Để tham gia vào một nhóm, một máy trạm phải gửi các thông điệp báo cáo quan hệ Multicast về chính địa chỉ Multicast của nhóm đó. Một switch L2 phải lắng nghe đến tất cả các khung tin Multicast để tìm ra thông tin IGMP. Đây rõ ràng là một gánh nặng cho CPU của switch.
Một thiết bị L3 switch thì có lợi thế rõ ràng hơn, nó có thể tách ra thông tin L3 trong một khung tin. Kiểu switch này phải lắng nghe mọi gói IGMP. Khi một thông điệp báo cáo quan hệ được lắng nghe, switch sẽ thêm địa chỉ MAC của nhóm Multicast vào bảng CAM của nó cùng với cổng nguồn nơi mà một gói IGMP được nhận. Tác vụ này sẽ liên kết địa chỉ nhóm với các máy trạm đã yêu cầu tham gia nhóm.
Khi các máy trạm khác cũng yêu cầu tham gia nhóm, các cổng tương ứng sẽ được thêm vào bảng CAM. Khi có một khung tin cần đến một địa chỉ Multicast, nó có thể được nhân bản ra chính xác các cổng của các máy trạm.
Với IGMP snooping, có hai trường hợp đặc biệt trong bảng CAM. Một là, tất cả các địa chỉ IGMP là nhận biết bởi switch (cập nhật động) cũng sẽ được lưu trong bảng CAM. Các khung tin Multicast cũng phải được nhân bản về phía các router để các lưu lượng này có thể được định tuyến nếu cần thiết. Hai là, CPU của switch cũng là một thành viên của nhóm Multicast vì nó có thể xem các gói IGMP đến và đi. Chỉ có lưu lượng của IGMP là được xử lý. CPU sẽ không kiểm tra các khung tin Multicast khác.
IGMP snooping được cho phép trên tất cả các cổng của switch và các giao tiếp Vlan. Các dòng switch Catalyst 2950, 3550, 4500 và 6500 là có hỗ trợ IGMP snooping.
Điều gì sẽ xảy ra nếu hệ thống mạng có vài switch không phải của Cisco? Bạn không thể dùng CGMP bởi vì đây là giao thức của Cisco. IGMP snooping có thể được dùng cho một môi trường có nhiều loại switch khác nhau để kiểm soát việc phân phối lưu lượng ở lớp 2. IGMP snooping yêu cầu phần mềm switch nghe lén các trao đổi IGMP giữa các máy trạm và các router. Switch sẽ kiểm tra các thông điệp IGMP và học vị trí của các router Multicast và các thành viên nhóm.
Ba bước dưới đây sẽ mô tả quá trình tổng quát của IGMP snooping:
Ngay khi các switch phát hiện các router trong Vlan, switch sẽ thêm vào danh sách cổng của tất cả các GDA trong VLAN đó.
Tương tự, khi một switch nhận được một thông điệp rời khỏi nhóm, CPU sẽ tìm địa chỉ GDA, xóa các cổng ra khỏi bảng CAM và không đẩy lưu lượng ra cổng đó. Switch sẽ kiểm tra đây có phải là cổng cuối cùng của GDA hay không. Nếu đây không phải là cổng cuối cùng, có nghĩa là có ít nhất một máy trong Vlan vẫn muốn nghe lưu lượng , switch sẽ bỏ thông điệp rời bỏ, nếu khác đi, nó sẽ gửi thông điệp rời bỏ đến router.
Như vậy, IGMP snooping giúp cho các switch gửi lưu lượng chỉ cho những nhóm cần nó và tránh lãng phí băng thông. Để tăng hiệu quả hoạt động, IGMP snooping yêu cầu phần cứng phải hỗ trợ chức năng lọc bằng phần cứng sao cho nó có thể phân biệt sự khác nhau giữa các báo cáo IGMP và lưu lượng Multicast bình thường. CPU của switch cần phải thấy các thông điệp báo cáo IGMP (và các thông điệp định tuyến Multicast khác) bởi vì IGMP snooping có thể làm tốn CPU. Tuy nhiên, quá trình đẩy khung tin đi không yêu cầu chu kỳ CPU mà chỉ cần phần cứng ASIC của switch.
Những switch cũ hơn, đặc biệt là những switch không có L3 sẽ không thể nhận dạng một gói tin là IGMP. Các switch này bị ràng buộc về CPU bằng cách gửi tất cả các Multicast lưu lượng . Phần lớn các switch hiện đại ngày nay hỗ trợ đủ tính năng L3 để nhận biết IGMP sao cho IGMP snooping sẽ không ràng buộc CPU.
Hình 19.18: Quá trình hoạt động của giám sát IGMP
Khi H1 và H2 gửi thông điệp tham gia IGMP:
H1 gửi thông điệp tham gia IGMP cho nhóm 226.6.6.6. Ở mức 2, H1 dùng địa chỉ Multicast MAC 0x0100.5e06.0606 (đây là địa chỉ MAC cho nhóm 226.6.6.6) như là địa chỉ đích và dùng địa chỉ MAC của nó 0x0006.7c11.1101 như là địa chỉ nguồn. SW1 sẽ nhận gói tin của nó trên cổng fa0/1 và lưu ý đây là gói tin IGMP, đẩy gói tin này đến CPU của switch. CPU sẽ dùng thông tin này để thiết lập một hàng trong bảng định tuyến Multicast, bao gồm cổng số 0 tượng trưng cho CPU, 1 cho máy H1 và 8 cho R1. Lưu ý rằng bảng CAM liệt kê ra hai hàng cho cùng một địa chỉ đích 0x0100.5e06.0606. Một hàng cho cổng 0 và một hàng khác cho những khung tin không phải là IGMP cho cổng 1 và 8. CPU của switch sẽ ra lệnh cho switch không chuyển các khung tin ra cổng 0, tượng trưng cho CPU.
H2 gửi một thông điệp tham gia IGMP cho nhóm 226.6.6.6. Ở lớp 2, H2 dùng địa chỉ Multicast MAC là 0x0100.5e06.0606 như là địa chỉ đích và dùng địa chỉ MAC 0x0006.7c11.1102 như là địa chỉ nguồn. SW1 sẽ nhận gói tin trên cổng F0/2 và switch sẽ kiểm tra gói tin. Tiến trình phân tích gói tin được lập lại từ bước 1 và bảng CAM sẽ được cập nhật.
Router R1 đẩy gói tin cho nhóm. R1 sẽ nhận lưu lượng Multicast cho nhóm 226.6.6.6 và bắt đầu chuyển lưu lượng về Sw1. Sw1 bắt đầu nhận các Multicast lưu lượng trên cổng f0/8. Cơ chế chuyển mạch sẽ kiểm tra gói tin và xác định đây không phải gói tin IGMP, switch sẽ tìm kiếm trong bảng CAM và xác định rằng nó nên chuyển lưu lượng ra cổng F0/1 và F0/2.
Nếu so sánh với CGMP, IGMP thì kém hiệu quả hơn trong việc duy trì thông tin nhóm. Khi router R1 định kỳ gửi thông điệp truy vấn đến địa chỉ tất cả các máy trạm 224.0.0.1 (GDA 0x0100.5e00.0001), SW1 sẽ chấp nhận các truy vấn và truyền thông qua các cổng của Vlan 5. Trong CGMP, nhờ vào giao tiếp từ router đến switch, switch sẽ biết chính xác những cổng nào sẽ có các máy trạm Multicast gắn vào và vì vậy, sẽ chỉ truyền các gói tin truy vấn ra chỉ những cổng này.
Ngoài ra, trong IGMP snooping, khi các máy trạm gửi các thông điệp báo cáo IGMP, switch phải bắt các thông điệp này và duy trì thông tin GDA trong bảng CAM. Kết quả là, các máy trạm không nhận các thông điệp báo cáo IGMP khác, làm gián đoạn cơ chế giảm thông điệp báo cáo và làm cho các máy gửi thông điệp báo cáo IGMP. Tuy nhiên, switch chỉ gửi một thông điệp báo cáo IGMP cho từng nhóm đến Router.
Trong CGMP, switch không cần phải nghe các thông điệp báo cáo IGMP, bởi vì việc duy trì thông tin nhóm trên switch không phụ thuộc vào việc kiểm tra các gói IGMP từ máy trạm thay vào đó switch có thể dùng thông điệp CGMP từ router.
Hình 19.19: Tiến trình rời bỏ nhóm trong cơ chế giám sát IGMP
Hình 19.19 mô tả tiến trình rời bỏ nhóm cho cơ chế IGMP snooping. Ba bước sau đây sẽ mô tả các sự kiện khi H1 và H2 gửi thông điệp rời bỏ nhóm IGMP.
Để cho phép hoặc tắt IGMP, dùng lệnh
Switch(config)# [no] ip igmp snooping
IGMP snooping trở nên phức tạp khi có nhiều Multicast router là kết nối với nhau và các switch kết nối với nhau thông qua kết nối trung kế. Ngoài ra CGMP và IGMP kiểm soát việc phân phối các lưu lượng Multicast chỉ trên những cổng có máy trạm. Các giao thức này không có cơ chế nào để kiểm soát những cổng có router kết nối vào.
Link phần 5: CƠ CHẾ MULTICAST (Phần 5)