Thứ Ba, 26 tháng 2, 2013

IGMPv2 và sự khác nhau cơ bản giữa IGMPv1 & IGMPv2

IGMPv2

Phiên bản IGMPv2 giới thiệu vài sự khác biệt so với phiên bản đầu tiên. Các gói tin truy vấn bây giờ được gọi là General Queries. Các gói này có thể gửi tới địa chỉ all-hosts hoặc tới từng nhóm cụ thể. Một cải tiến khác nữa là các host được phép rời khỏi nhóm. Khi một host quyết định rời khỏi một nhóm nó đã tham gia, nó sẽ gửi thông điệp LeaveGroup đến địa chỉ all-router 224.0.0.2. Tất cả các router trên một phân đoạn mạng nội bộ sẽ lưu ý thông điệp này và router truy vấn sẽ tiếp tục quá trình. Router sẽ trả lời thông điệp trên bằng thông điệp truy cập gửi theo nhóm. Thông điệp này sẽ hỏi rằng có còn host nào muốn nhận traffic cho nhóm đó nữa không? Bất cứ host nào cũng phải trả lời lại bằng thông điệp membership report. Nếu khác đi, router sẽ kết luận một cách an toàn là không cần thiết chuyển traffic cho nhóm đó trên phân đoạn mạng đó. Khoảng thời gian này mặc định là 3 phút. 

Một trong những nguyên nhân IGMPv2 được phát triển là cung cấp một cơ chế rời khỏi nhóm tốt hơn. IGMPv2 có thêm một số tính năng mới:

- Group-specific Query: cho phép router gửi truy vấn cho một nhóm cụ thể thay vì cho tất cả các nhóm.

- Maximum response Time: Một trường mớI trong gói tin truy vấn, cho phép hiệu chỉnh khoảng thời gian cho thông điệp Host membership report. Đặc điểm này có thể hữu ích khi một số lớn các nhóm tồn tại trên một subnet và bạn muốn giảm số thông điệp trả lời bằng cách kéo dài những thông điệp trả lời ra một khoảng thời gian dài hơn. 

- Leave group message: cho phép host thông báo cho router rằng host muốn rời khỏi nhóm.

- Bầu chọn router truy vấn: cung cấp cơ chế cho phép bầu chọn router gửi ra các thông điệp truy vấn khi có nhiều router cùng kết nối vào một subnet. 

Thông điệp Membership report sẽ được gửi khi một host muốn tham gia một nhóm. Thỉnh thoảng, thông điệp loại này cũng được dùng để trả lời cho loại thông điệp truy vấn query từ router. Khi một host muốn tham gia một nhóm, nó sẽ không chờ gói tin query từ router. Thay vào đó, nó sẽ gửi membership report. Địa chỉ đích của membership report sẽ là địa chỉ đích của nhóm. Để đảm bảo rằng router nhận được thông điệp này, host sẽ gửi vài thông điệp, cách nhau mỗi 10 giây. 



IGMP v2 có bốn trường, được định nghĩa như sau:

1. Type: trường này có chiều dài 8bit, chỉ ra một trong bốn loại thông điệp được định nghĩa bởi IGMPv2. Các giá trị có thể có là:

a. Membershop query (giá trị là 0x11): được dùng bởi router để tìm ra sự hiện diện của các host trên một subnet. Thông điệp loại này gán giá trị địa chỉ nhóm về 0.0.0.0 giống như trong IGMPv1. Một thông điệp truy vấn cho một nhóm sẽ gán địa chỉ nhóm vào trường này. Thông điệp loại này thường được gửi khi router nhận được một thông điệp rời khỏi nhóm IGMPv2 Leave group từ một host. Thông điệp loại này được dùng để xác định xem có còn thành viên nào của một nhóm cụ thể không.

b. Membership report version 1 (mã 0x12): được dùng bởi IGMPv2 để tương thích với IGMPv1.

c. Membership report v2 (mã 0x16): được gởi bởi thành viên để thông báo cho router là còn ít nhất một thành viên trên mạng.

d. Leave group (0x17): được gửi bởi thành viên nhóm nếu nó là thành viên cuối cùng gửi thông điệp membership report. Thông điệp này báo cho router rằng host đang rời khỏi nhóm.

2. Thời gian đáp ứng tối đa (Maximum Response Time): Trường có độ dài 8bit chỉ có trong các thông điệp truy vấn. Giá trị mặc định cho trường này là 100 (tương đương 10 giây). Giá trị sẽ thay đổi từ 1 đến 255 (nghĩa là từ 0.1 giây đến 25.5giây). 

3. Checksum: Chứa giá trị 16bit được tính toán bởi máy nguồn. IGMP checksum tính toán trên toàn bộ phần tải của IP chứ không phải chỉ 8bytes đầu tiên mặc dù IGMPv2 có độ dài 8bytes. 

4. Địa chỉ nhóm Group Address: Được gán giá trị 0.0.0.0 trong gói tin truy vấn và gán địa chỉ nhóm nếu thông điệp là cho từng nhóm cụ thể. Các thông điệp membership report hoặc thông điệp Leave Group có thể mang địa chỉ của nhóm trong trường này. 

Dùng lệnh sau để xem các nhóm multicast mà router biết:
#show ip igmp groups 

Nếu có nhiều router trên cùng một kết nối, router có IP address nhỏ nhất sẽ gửi ra gói tin truy vấn. Vì vậy, khi một router nhận được một gói tin truy vấn query từ một router nào đó, nó sẽ kiểm tra địa chỉ nguồn của gói tin đó. Nếu địa chỉ nguồn của router cục bộ nhỏ hơn địa chỉ nguồn trong gói tin vừa đến, router sẽ vẫn tiếp tục gửi gói tin query vì nó biết rằng nó sẽ giữ vai trò truy vấn. Còn nếu địa chỉ nguồn của gói tin query là nhỏ hơn, router sẽ từ bỏ vai trò truy vấn. 

IGMPv2 hỗ trợ tính tương thích ngược với IGMPv1. Mã số cho kiểu thông điệp query và report của IGMPv2 và IGMPv1 đều cùng là 0x11 và 0x12. Điều này cho phép các host chạy IGMPv2 và các router nhận ra IGMPv1 khi có các host chạy IGMPv1 trên mạng. IGMPv2 giúp giảm số lượng các thông điệp report được gửi bởi các host bằng cách cho phép người quản trị thay đổi khoảng thời gian truy vấn. IGMPv1 không có thông số Maximum Response Time, vì vậy các host chỉ đơn giản dùng khoảng thời gian mặc định là 10 giây. Tuy nhiên thông điệp IGMPv2 có bao gồm trường MRT, chỉ ra khoảng thời gian MRT được dùng bởi tất cả các host IGMPv2 trên LAN. Các tiến trình các host gửi các thông điệp Report của IGMPv2 cũng giống trong IGMPv1. Có một sự khác nhau nhỏ là các router gửi gói tin truy vấn IGMPv2 mỗi 125 giây thay vì mỗi 60 giây. 

IGMPv2 cải tiến quá trình Query/report bằng cách dùng cơ chế truy vấn cho từng nhóm cụ thể. Trong IGMPv2, khi một host rời một nhóm, nó gửi ra một thông điệp rời nhóm IGMPv2. Khi một router nhận được thông điệp leave group IGMPv2, thay vì chờ một khoảng thời gian truy vấn query là 125 giây, router sẽ gửi ngay một thông điệp truy vấn cho nhóm đó. Thông điệp này chỉ để hỏi là còn có host nào muốn lưu lượng cho nhóm multicast đó không. Kết quả là, router sẽ nhanh chóng biết được có còn host nào quan tâm đến traffic của nhóm đó. 

Thuận lợi chính của IGMPv2 so với IGMPv1 là thời gian rời khỏi nhóm của IGMPv2 ngắn hơn. IGMPv2 chỉ mất có ba giây để kết luận rằng không còn host nào trên subnet đó quan tâm đến multicast.

Các thông điệp rời bỏ nhóm (IGMPv2 Leave Group) và các thông điệp cho từng nhóm cụ thể (Group-Specific Query Messages)


IGMPv2 RFC 2236 khuyến cáo rằng một host gửi ra một thông điệp rời khỏi nhóm chỉ nếu nó là host cuối cùng gửi thông điệp membership report. Tuy nhiên phần lớn các hiện thực IGMPv2 đều cho phép một host gửi ra thông điệp LeaveGroup khi bất kỳ host nào rời khỏi nhóm. 



1. H1 gửi một thông điệp rời bỏ nhóm IGMPv2 Leave Group. Địa chỉ đích của gói tin là 224.0.0.2. Đây là địa chỉ của tất cả các multicast router. Thông điệp này muốn báo rằng “Tôi không muốn nhận multicast traffic của 226.1.1.1”. 

2. R1 sẽ gửi ra một thông điệp cho riêng nhóm đó. Bởi vì H1 đã quyết định rời khỏi nhóm 226.1.1.1, R1 quyết định ngừng đẩy lưu lượng của nhóm 226.1.1.1 trên cổng f0/0 nếu H1 là thành viên cuối cùng của 226.1.1.1. Tuy nhiên, R1 cần phải đảm bảo rằng không còn host nào trên cổng này vẫn cần nhận lưu lượng của nhóm 226.1.1.1. Vì vậy, R1 gửi ra một thông điệp để xác định có còn thành viên nào của nhóm 226.1.1.1. R1 dùng địa chỉ đích 226.1.1.1 như là địa chỉ đích trên gói tin sao cho chỉ có các host là thành viên của nhóm này là nhận thông điệp và trả lời. Thông qua thông điệp này, R1 sẽ hỏi các host còn lại trong nhóm là “Có còn ai muốn nhận muticast traffic cho 226.1.1.1?”. 

3. H3 gửi một thông điệp membership report. H3 vẫn là một thành viên của nhóm 226.1.1.1. Máy H3 nghe thông điệp truy vấn theo nhóm và trả lời bằng một thông điệp IGMPv2 report để thông báo cho router là vẫn còn thành viên của nhóm 226.1.1.1. 

Router IGMPv2 lặp lại tiến trình ở bước 2 mỗi lần nó nhận được thông điệp rời bỏ nhóm trong bước 1. Trong ví dụ trước, R1 không ngừng việc gửi traffic. Trong hình dưới, H3 là host duy nhất còn lại của nhóm 226.1.1.1. Giả sử rằng H3 cũng muốn rời bỏ khỏi nhóm. 



Ba bước sau đây sẽ mô tả quá trình khi H3 rời khỏi nhóm:

1. H3 gửi ra một thông điệp rời khỏi nhóm IGMPv2 LeaveGroup. Địa chỉ đích của gói tin là 224.0.0.2 để thông báo cho tất cả các router trên subnet là “Tôi không muốn nhận traffic của nhóm 226.1.1.1”.

2. R1 gửi ra một thông điệp truy vấn cho riêng nhóm đó. R1 nhận thông điệp rời khỏi nhóm từ H3. R1 sẽ gửi các thông điệp truy vấn cho từng nhóm để xác định có còn máy nào vẫn là thành viên của nhóm 226.1.1.1. R1 dùng địa chỉ đích là 226.1.1.1 sao cho chỉ có những máy là thành viên của nhóm này nhận được thông điệp và trả lời. 

3. Không có thông điệp report nào là nhận được, vì vậy R1 sẽ ngừng đẩy traffic. Bởi vì không còn thành viên nào của nhóm 226.1.1.1, R1 sẽ không nhận được thông điệp trả lời nào cho thông điệp truy vấn trước đây do R1 gửi ra. Kết quả là R1 sẽ ngừng đẩy multicast traffic của nhóm 226.1.1.1 ra cổng f0/1. 

Mặc định, router sẽ dùng một giá trị MRT bằng 10 (1 giây) cho các thông điệp truy vấn cho nhóm. Bởi vì một router phải nhận một thông điệp trả lời cho thông điệp truy vấn theo nhóm trước đây trong khoảng thời gian MRT này, router sẽ dùng giá trị MRT như là khoảng thời gian để xác định thành viên cuối cùng rời khỏi nhóm. Router dùng tiến trình sau:

1. Gửi ra một thông điệp truy vấn cho từng nhóm cụ thể khi router nhận được một thông điệp rời khỏi nhóm.

2. Nếu không có thông điệp report nào nhận được trong khoảng thời gian MRT (Last member query interval), lặp lại bước 1.

3. Lặp lại bước 1 một số lần được chỉ ra trong thông số last member query count. Chỉ số này là số lần các thông điệp truy vấn theo nhóm được gửi trước khi router kết luận là không còn thành viên nào tích cực trong nhóm. Giá trị mặc định của thông số này bằng 2. Vì vậy thường chỉ mất dưới ba giây để xác định không còn thành viên nào trong nhóm. Trong khi đối với IGMPv1, thời gian này là ba phút.

 

Các router truy vấn IGMPv2 Querier

IGMPv2 định nghĩa một tiến trình bầu chọn router truy vấn. Tiến trình này được dùng khi có nhiều router kết nối vào cùng một mạng. Khi router IGMPv2 khởi động, các router này gửi ra các thông điệp truy vấn đến địa chỉ 224.0.0.1 dùng các địa chỉ cổng trong phần địa chỉ nguồn của gói tin. Khi một router IGMPv2 nhận được một thông điệp truy vấn từ các các router kia, nó sẽ so sánh địa chỉ nguồn IP của thông điệp với địa chỉ cổng của chính nó. Router có địa chỉ IP nhỏ nhất sẽ được bầu như router truy vấn. Các router không trở thành router truy vấn sẽ không gửi gói tin truy vấn nhưng vẫn giám sát tần suất của các gói tin truy vấn được gửi. Khi router truy vấn querier ngừng gửi một thông điệp truy vấn trong hai chu kỳ rưỡi, router truy vấn sẽ bị xem như đã chết và cần có một router truy vấn khác. RFC2236 qui định khoảng thời gian này là khoảng thời gian giới thiệu router truy vấn khác (Other querier present Interval). Giá trị mặc định cho khoảng thời gian này là 255 giây bởi vì khoảng thời gian mặc định của gói tin truy vấn của IGMPv2 là 125 giây và giá trị mặc định của thời gian trả lời truy vấn là 10 giây. 

Sự khác nhau cơ bản giữa IGMPv1 và IGMPv2

IGMPv1 không có thông điệp rời bỏ nhóm LeaveGroup. Điều này có nghĩa là sẽ tốn một khoảng thời gian dài hơn để host cuối cùng rời khỏi nhóm và router ngừng việc truy vấn. IGMPv1 không có thông điệp cho riêng từng nhóm. Điều này là kết quả của đặc điểm 1. IGMPv1 không có thông điệp Max_response-time. Các host có khoảng thời gian này mặc định là 10s. IGMPv1 không có tiến trình bầu chọn router truy vấn querier. Thay vào đó, nó dựa trên cơ chế routing multicast để để bầu ra router truy vấn. Do có thể có nhiều giao thức routing cho multicast khác nhau, sẽ có một khả năng là sẽ có nhiều router querier trong IGMPv1.

Tương thích giữa IGMPv1 và IGMPv2

IGMPv2 được thiết kế để tương thích ngược với IGMPv1. Sau đây là một vài trường hợp tương thích. 
- Host dùng IGMPv2 và router chạy IGMPv1.
- Host dùng IGMPv1 và router dùng IGMPv2.
- Router chạy IGMPv1 và một số router khác chạy IGMPv2. 

Host chạy IGMPv2 Host và router chạy IGMPv1

Khi một host gửi ra một thông điệp IGMP report với kiểu thông điệp là 0x16 (kiểu này không được định nghĩa trong IGMPv1, router đang chạy IGMPv1 sẽ xem kiểu thông điệp này là không hợp lệ và bỏ qua nó. Vì vậy, một máy chạy IGMPv2 phải gửi thông điệp IGMPv1 report khi router IGMPv1 đang tồn tại. Nhưng bằng cách nào một host IGMPv2 phát hiện sự tồn tại của một IGMPv1 router? 

IGMPv2 sẽ xác định router truy vấn đang dùng IGMPv1 hay IGMPv2 dựa trên giá trị của trường MRT của các thông điệp truy vấn định kỳ. Trong IGMPv1, trường này bằng 0, trong IGMPv2, trường này là khác không. Khi một host chạy IGMPv2 nhận được một truy vấn từ IGMPv1, router biết rằng có một router IGMPv1 đang tồn tại trên subnet và đánh dấu cổng này như là IGMPv1. Host chạy IGMPv2 sau đó sẽ không gửi thông điệp IGMPv2. 

Bất cứ khi nào một host IGMPv2 nhận một thông điệp truy vấn IGMPv1, nó sẽ khởi tạo một bộ định thời version 1 router Present timeout có thời lượng 400 giây. Bộ định thời này sẽ được khởi tạo lại bất cứ khi nào host nhận được một thông điệp truy vấn IGMPv1. Nếu timer này hết, có nghĩa là không có router IGMPv1 nào tồn tại trên mạng, host sẽ bắt đầu gửi thông điệp IGMPv2. 

Host chạy IGMPv1 và router chạy IGMPv2

Các router chạy IGMPv2 có thể dễ dàng xác định sự tồn tại của các host chạy IGMPv1 dựa vào việc host có gửi IGMPv1 (0x12) hay IGMPv2 (0x16). Giống như router chạy IGMPv1, các router IGMPv2 sẽ định kỳ gửi các gói tin truy vấn. Một host chạy IGMPv1 trả lời bình thường bởi vì thông điệp truy vấn IGMPv2 thì tương tự với định dạng của IGMPv1, ngoại trừ octet thứ hai. Các host IGMPv1 sẽ bỏ qua giá trị chứa trong octet này. Vì vậy, một router IGMPv2 sẽ kiểm tra tất cả các thông điệp report để tìm ra bất kỳ host nào chạy IGMPv1 tồn tại trên LAN. 

Nếu một host IGMPv2 cũng tồn tại trên cùng một subnet, nó sẽ gửi các thông điệp IGMPv2 report. Tuy nhiên, các host IGMPv1 sẽ không hiểu các thông điệp IGMPv2 report và bỏ qua các thông điệp này. Các thông điệp này không kích hoạt các cơ chế giảm thông điệp report trong các host chạy IGMPv1. Vì vậy, thỉnh thoảng một router IGMPv2 sẽ nhận cả thông điệp report từ v1 và v2. Khi một router chạy IGMPv2 biết rằng có một host IGMPv1 tồn tại trên LAN, router sẽ bỏ qua thông điệp rờI bỏ nhóm Leave và cũng không gởi ra các thông điệp truy vấn cho từng nhóm. Điều này là cần thiết vì nếu một router IGMPv2 trả lời lại thông điệp rời bỏ nhóm Leavegroup bằng thông điệp truy vấn cho từng nhóm, các host chay IGMPv1 sẽ không hiểu thông điệp này và sẽ bỏ qua. Khi một router IGMPv2 không nhận được một trả lời cho thông điệp truy vấn theo nhóm, nó có thể kết luận sai rằng không còn ai muốn nhận traffic và sẽ ngừng chuyển traffic vào LAN đó. Vì vậy nếu một hoặc nhiều host IGMPv1 đang lắng nghe đến một nhóm nào đó, router cần phải bỏ quá trình tối ưu giúp giảm thiểu độ trễ khi các host rời khỏi nhóm. Router IGMPv2 tiếp tục bỏ qua thông điệp leave cho đến khi nào khoảng thời gian IGMPv1-host-present countdown là hết. 

Khi router IGMPv2 nhận được một thông điệp report IGMPv1, router sẽ thiết lập một bộ định thời IGMPv1 host-present-countdown. Khoảng thời gian này phải bằng với khoảng thời gian xác định thành viên nhóm Group membership Interval, mặc định là 180 giây trong IGMPv1 và 260 giây trong IGMPv2. Đây là khoảng thời gian mà trong đó một router không nhận được một thông điệp IGMP report, router sẽ kết luận là không còn thành viên nào trên mạng. 

IGMPv1 và IGMPv2 Routers

RFC 2236 định nghĩa rằng khi có các router chạy IGMPv1 và IGMPv2 tồn tại trên cùng một network, người quản trị mạng phải cấu hình thủ công tất cả các router IGMPv2 hoạt động như IGMPv1.

Bảng dưới đây tóm tắt các thông số thời gian trong IGMP 

0 nhận xét:

Đăng nhận xét