Thứ Hai, 25 tháng 2, 2013

Tìm hiểu về Giao Thức IGMP

Giao thức IGMP phát triển từ giao thức Host Membership Protocol, được mô tả trong tài liệu của Deering. IGMP phát triển từ IGMPv1 (RFC1112) đến IGMPv2 (RFC2236) và đến phiên bản cuối cùng IGMPv3 (RFC3376). Các thông điệp IGMP được gửi bên trong gói tin IP với trường protocol number bằng 2, trong đó trường TTL có giá trị bằng 1. Các gói IGMP chỉ được truyền trong LAN và không được tiếp tục chuyển sang LAN khác do giá trị TTL của nó. Hai mục đích quan trọng nhất của IGMP là:

- Thông báo cho router multicast rằng có một máy muốn nhận multicast traffic của một nhóm cụ thể.
- Thông báo cho router rằng một có một máy muốn rời một nhóm multicast (nói cách khác, có một máy không còn quan tâm đến việc nhận multicast traffic nữa). Các router thường dùng IGMP để duy trì thông tin cho từng cổng của router là những nhóm multicast nào router cần phải chuyển và những host nào muốn nhận.

Trước khi một host có thể nhận bất kỳ một multicast traffic nào, một ứng dụng multicast phải được cài đặt và chạy trên host đó. Sau khi một host tham gia vào một nhóm, phần mềm sẽ tính toán địa chỉ multicast và sau đó card mạng sẽ bắt đầu lắng nghe địa chỉ multicast MAC. Trước khi một host hoặc một người dùng muốn tham gia vào một nhóm, người dùng cần phải biết nhóm nào đang tồn tại và làm thế nào để tham gia vào nhóm đó. Đối với các ứng dụng mức doanh nghiệp, người dùng chỉ cần đơn giản nhấp vào một link trên một trang web hoặc địa chỉ multicast có thể cấu hình trước trên client. Ví dụ, một người dùng có thể được yêu cầu để log vào một máy chủ và xác thực bằng tên và người dùng. Nếu tên người dùng được xác thực, ứng dụng multicast sẽ tự động cài trên PC của người dùng, nghĩa là người dùng đã tham gia vào nhóm multicast. Khi người dùng không còn muốn dùng ứng dụng multicast nữa, người dùng phải rời khỏi nhóm. Ví dụ, người dùng đơn giản chỉ cần đóng ứng dụng multicast để rời khỏi nhóm. Đối với cơ chế multicast, một người dùng cần phải tìm ra ứng dụng nào họ muốn chạy, địa chỉ multicast được dùng bởi ứng dụng.

Làm thế nào một router biết được các máy cần nghe multicast traffic? Để nhận multicast traffic từ một nguồn, cả nguồn và các máy nhận đầu tiên phải gia nhập (join) vào một nhóm multicast. Nhóm này được xác định thông qua địa chỉ multicast. Một host có thể tham gia vào một nhóm multicast bằng cách gửi các yêu cầu đến router gần nhất. Tác vụ này được thực hiện thông qua giao thức IGMP. IGMPv1 được định nghĩa trong RFC1112 và bản cải tiến của nó, IGMPv2 được định nghĩa trong RFC2236. Khi có vài host muốn tham gia vào nhóm, giao thức PIM sẽ thông báo cho nhau giữa các router và hình thành nên cây multicast giữa các routers. IGMP và ICMP có nhiều điểm tương đồng, cùng chia sẽ một vài chức năng tương tự. IGMP cũng đóng gói trong gói tin IP (protocol number 2), nhưng IGMP giới hạn chỉ trong một kết nối lớp 2. Để đảm bảo router không bao giờ tiếp tục chuyển gói tin đi, trường TTL của IGMP luôn có giá trị bằng 1.

IGMPv1

Cứ mỗi 60 giây, một router trên mỗi phân đoạn mạng sẽ gửi truy vấn đến tất cả các host để kiểm tra xem các host này có còn quan tâm nhận multicast traffic nữa không? Router này gọi là router truy vấn IGMPv1 Querier và chức năng của nó là mời các host tham gia vào nhóm.

Nếu một host muốn tham gia vào một nhóm, hoặc nó muốn tiếp tục nhận traffic từ một nhóm mà nó đã tham gia, nó phải trả lời lại bằng thông điệp membership-report. Các host có thể tham gia vào các nhóm multicast ở bất kỳ thời điểm nào.

Tuy nhiên IGMPv1 không có cơ chế để cho phép một host rời khỏi một nhóm nếu host đó không còn quan tâm đến nội dung của nhóm multicast đó. Thay vào đó, router sẽ kết luận là một cổng giao tiếp của bó không còn thuộc về một nhóm multicast nào nếu router không nhận được thông điệp membership-report trong ba chu kỳ truy vấn liên tiếp. Điều này có nghĩa là, ở chế độ mặc định, các lưu lượng multicast vẫn gửi vào một phân đoạn mạng trong ba chu kỳ truy vấn liên tiếp sau khi tất cả các thành viên của nhóm không còn lắng nghe multicast traffic nữa.
Ngoài ra, router không có giữ một danh sách đầy đủ các máy thành viên cho từng nhóm multicast. Thay vào đó, nó cần phải lưu những nhóm multicast nào là đang tồn tại trên những cổng nào của nó.

Để tham gia vào một nhóm multicast, một host sẽ gửi một thông điệp đăng ký tham gia vào nhóm đến router cục bộ của nó. Thông điệp này có tên là Membership Report IGMP. Thông điệp này sẽ thông báo cho router về địa chỉ nhóm multicast mà host muốn tham gia vào. Địa chỉ multicast tượng trưng cho tất cả các máy 224.0.0.1 được dùng như địa chỉ đích. Trong thông điệp này có chứa địa chỉ nhóm multicast.



Một thông điệp IGMPv1 có năm trường:

1. Version: trường này có độ dài 4-bit, luôn luôn gán giá trị bằng 1.
2. Type: Trường giá trị 4bit, chỉ ra hai loại thông điệp được định nghĩa bởi IGMPv1. Type 1 là kiểu Host Membership Query, được dùng chỉ bởi router. Type 2 là kiểu Host Membership report được dùng chỉ bởi host.
3. Unused: trường này có độ dài 8bit chứa giá trị 0 khi được gửi và bị bỏ qua khi được nhận.
4. Checksum: mang giá trị 16bit checksum được tính toán bởi nguồn của thông điệp IGMP. Thiết bị nhận thường kiểm tra giá trị checksum và nếu giá trị này không đúng bằng giá trị đã tính toán, máy nhận sẽ loại bỏ frame.
5. Địa chỉ nhóm: Được gán về giá trị 0.0.0.0 khi router gửi ra gói tin Membership query. Giá trị này được gán giá trị địa chỉ nhóm multicast khi một máy gửi thông điệp Membership report.

Lưu ý rằng khi bạn kết hợp hai trường version và trường type, giá trị dạng thập lục phân của một gói tin IGMPv1 Host Membership Query sẽ là 0x11 và IGMPv1 Host Membership report là 0x12. Các giá trị này sẽ được so sánh với các giá trị của IGMPv2.

Chức năng truy vấn IGMPv1 Host Membership Query



Các thông điệp IGMPv1 chỉ được gửi bởi router trên các cổng LAN. Chi tiết như sau:

1. Các máy H1 và H3 tham gia vào nhóm multicast 226.1.1.1. Tác vụ join làm cho các máy này sẵn sàng nhận các thông điệp được gửi đến cả hai địa chỉ 226.1.1.1 và địa chỉ 224.0.0.1 (là địa chỉ mà các gói tin truy vấn IGMPv1 query sẽ được gửi. Các máy multicast sẽ phải lắng nghe địa chỉ 224.0.0.1 để tham gia vào IGMP và để có thể nhận được các gói tin truy vấn gửi ra từ router. Hai địa chỉ MAC tương ứng là 01-00-5e-01-01-01 (của địa chỉ 226.1.1.1) và 01-00-5e-00-00-01 (tương ứng của 224.0.0.1).

2. R1 gửi một thông điệp IGMPv1 Report ra từng cổng LAN, tìm kiếm bất kỳ host nào quan tâm đến việc nhận lưu lượng multicast. R1 định kỳ mỗi 60 giây gửi thông điệp truy vấn IGMPv1 Query. Khoảng thời gian này được gọi là khoảng thời gian truy vấn.

Sau khi gửi ra thông điệp truy vấn, R1 mong đợi rằng bất kỳ máy nào tham gia vào nhóm 226.1.1.1 hoặc bất kỳ nhóm nào khác sẽ trả lời lại bằng thông điệp IGMPv1 report. Gói tin truy vấn IGMPv1 có TTL=1, điều này làm cho gói tin sẽ không bị định tuyến qua mạng khác. Trong trường địa chỉ nhóm của gói IGMPv1 Query, giá trị của trường này luôn luôn là 0.0.0.0. Bằng cách gửi thông điệp truy vấn IGMPv1 Query đến địa chỉ nhóm 0.0.0.0 router sẽ hỏi các host khác trong LAN là “Có còn ai muốn nhận multicast traffic cho bất kỳ nhóm nào không?”. Ở thời điểm này, router R1 vẫn không biết có host nào cần nhận multicast traffic nào hay không. Phần kế tiếp sẽ khảo sát các host trả lời bằng thông điệp IGMP report như thế nào.

Chức năng gửi báo cáo Host Membership

Các host dùng thông điệp IGMPv1 Host Membership report để trả lời cho các gói tin truy vấn IGMP và thông báo cho router rằng máy muốn nhận multicast. Các host multicast dùng thông điệp IGMPv1 report để giao tiếp với các router, nêu rõ địa chỉ nhóm multicast mà máy muốn nhận. Trong IGMPv1, một host gửi thông điệp IGMPv1 Host membership report dưới hai tình huống sau:

- Khi một host nhận được một gói tin truy vấn IGMPv1 Query từ router, host sẽ giả sử gửi HostMembership report cho tất cả các nhóm multicast mà nó muốn nhận traffic. Thông điệp này được gọi là IGMPv1 Solicited Host Membership report.

- Khi một host tham gia vào một nhóm mới, host muốn ngay lập tức gửi ra IGMPv1 Host Membership report để thông báo cho router rằng nó muốn nhận traffic cho nhóm đó mà không cần chờ gói tin truy vấn IGMPv1 Query. Thông điệp này được gọi là IGMPv1 unsolicited Host Membership report.

IGMPv1 Solicited Host Membership Report




Hình trên mô tả hoạt động của IGMPv1 Solicited Host Membership report và cơ chế để giảm thông điệp report. Hình trên mô tả các bước tiếp theo khi R1 đã gửi ra gói tin IGMPv1 Query. MRT Maximum responese Time, thời gian tính bằng giây, được host chọn lựa ngẫu nhiên. Nếu nhiều host đã chạy ứng dụng multicast và nếu tất cả các host này trả lời thông điệp truy vấn IGMPv1query bằng thông điệp Host membership report, sẽ có quá nhiều thông điệp report được gửi dư về router. Điều này làm lãng phí băng thông và tăng tải một cách không cần thiết trên router. Một router chỉ cần nhận một report cho mỗi ứng dụng trên mỗi cổng LAN của nó. Một router sẽ chuyển multicast traffic vào cổng LAN cho dù chỉ có một người dùng hay 200 người dùng trên phân đoạn mạng đó muốn nhận multicast traffic.

Cơ chế giảm thông điệp report giúp giải quyết vấn đề này. Cơ chế này dùng bộ định thời IGMPv1 MRT để giảm bớt những thông điệp IGMPv1 report. Bộ định thời này được gọi là khoảng thời gian trả lời truy vấn (Query Response Interval). Khoảng thời gian này được cấu hình cố định là 10 giây và không thể thay đổi sang giá trị khác trong IGMPv1. Nói cách khác, trong IGMPv1, khi có bất kỳ host nào nhận một thông điệp IGMPv1, nó sẽ có một khoảng thời gian tối đa là 10 giây để gửi thông điệp IGMPv1 report nếu nó thực sự muốn tiếp tục nhận multicast traffic.

Mỗi host muốn gửi IGMPv1 solicited host membership report sẽ chọn một khoảng thời gian ngẫu nhiên giữa 0 và 10 và bắt đầu một bộ định thời. Khi khoảng thời gian ngẫu nhiên này hết, host sẽ giả sử là gửi một report. Tuy nhiên, nếu một host nhận được một thông điệp report được gửi bởi một host khác cho cùng nhóm multicast mà nó cũng muốn nhận traffic, host này sẽ không gửi ra thông điệp report. Cơ chế này được gọi là cơ chế giảm thông điệp report.

Đơn vị đo lường cho khoảng thời gian MRT là 1/10 giây. Ví dụ, một khoảng thời gian 3 giây sẽ được mô tả bằng giá trị MRT=30.



3. Các máy H1 và H3 sẽ muốn gửi thông điệp IGMPv1 Solicited Host Membership report. Giả sử rằng H1 và H3 đã nhận được một gói tin IGMPv1 Query. Bởi vì cả H1 và H3 đều đã tham gia vào nhóm 226.1.1.1, cả hai host cần phải gửi một thông điệp IGMPv1 Solicited Host Membership report. Ngoài ra giả sử thêm rằng cả H1 và H3 đã chọn ngẫu nhiên một khoảng thời gian MRT là 3 giây và 1 giây.

4. Bộ định thời của H3 sẽ bị hết trong một giây, H3 chuẩn bị gửi ra thông điệp IGMPv1 Solicited Host Membershop report với giá trị TTL=1. H3 dùng địa chỉ IP đích là IGMPv1 là 226.1.1.1 và địa chỉ nguồn là 10.1.1.3. Địa chỉ đích MAC là 01-00-5e-01-01-01 được tính toán từ địa chỉ 226.1.1.1 và địa chỉ MAC của H3 là địa chỉ nguồn của frame.

5. Các máy H1, H2 và R1 nhận thông điệp IGMPv1 Solicited Host Membership report nhưng chỉ có H1 và R1 là xử lý gói report. Cạc mạng của H2 sẽ bỏ frame được gửi bởi H3 bởi vì nó không lắng nghe địa chỉ 01-00-5e-010-01-01. H1 nhận ra rằng H3 đã có gửi một yêu cầu đến router. Vì vậy H1 sẽ không gửi ra thông điệp report của nó. Bằng cách dùng địa chỉ nhóm là 226.1.1.1, H3 đang báo cho router là “Tôi muốn nhận multicast traffic cho nhóm 226.1.1.1”.

R1 nhận được thông điệp IGMPv1 Solicited Host Membership Report trên cổng F0/0 của nó nhưng R1 chưa nhận được thông điệp Host membership report trên cổng F0/1. R1 sẽ bắt đầu đẩy lưu lượng của nhóm 226.1.1.1 ra cổng F0/0.


Trong IGMPv1, một host không cần thiết phải nhận thông điệp truy vấn Query thì mới gửi thông điệp report. Một host có thể gửi thông điệp report bất kỳ lúc nào một người dùng khởi động một chương trình multicast. Đặc điểm này giúp một host giảm thời gian phải chờ để nhận multicast.



Ví dụ, trong hình trên, một người dùng đã chạy một ứng dụng dùng địa chỉ 226.1.1.1 trên H4. H4 sẽ gửi một thông điệp IGMPv1 Unsolicited Report. Thông điệp này sẽ được nhận bởi R1 trên cổng F0/1 của nó và sau đó R1 sẽ bắt đầu đẩy lưu lượng của nhóm 226.1.1.1 ra cổng F0/1.

Cơ chế rời khỏi nhóm của IGMPv1

IGMP không có một cơ chế để cho phép các host có thể rời khỏi một nhóm. Giả sử có một người dùng ngồi ở H4 quyết định rời khỏi nhóm. H4 sẽ lặng lẽ rời khỏi nhóm và R1 không biết về việc này. R1 sẽ tiếp tục đẩy traffic của 226.1.1.1 trên cổng F0/1 trong vòng 3 phút, ngay cả khi không có host nào muốn nhận nó. Sau khi R1 gửi thông điệp truy vấn ba lần, mỗi lần cách nhau 60 giây và không có host nào trả lời bằng thông điệp IGMPv1 report, R1 sẽ kết luận không còn host nào muốn nhận traffic cho 226.1.1.1 trên cổng F0/1. Khoảng thời gian ba phút này được gọi là khoảng thờI gian xác nhận thành viên nhóm (Group membership Interval).

Router truy vấn IGMPv1 Querier

Để tăng tính dự phòng, ta có thể triển khai nhiều router multicast trên cùng một mạng. Tuy nhiên nếu tất cả các router gửi gói tin truy vấn mỗi 60 giây thì sẽ rất lãng phí băng thông . Như vậy, nên có một router được gán vai trò gửi gói tin truy vấn và truyền lưu lượng multicast vào hoặc ra subnet. Nếu một router bị down, router thứ hai có thể đảm nhận trách nhiêm. IGMPv1 thường dựa vào các thông tin định tuyến của multicast để giải quyết vấn đề bầu chọn router này.

1 nhận xét: