Định tuyến cho traffic multicast, kiểm tra RPF và hoạt động của giao thức PIM-DM
Định tuyến cho traffic multicast
Chức năng của bất kỳ giao thức định tuyến nào là giúp router chuyển một gói tin đi theo
đúng hướng để cuối cùng giúp gói tin đến được địa chỉ đích dự kiến. Để định tuyến một
gói tin, router sẽ kiểm tra địa chỉ đích của gói tin, tìm ra giá trị next-hop trong bảng định
tuyến và đẩy gói tin ra cổng phù hợp. Một gói tin unicast sẽ được truyền dọc theo một
đường đi duy nhất từ nguồn đến đích.
Hình trên mô tả một router sẽ ra quyết định về việc định tuyến một gói tin unicast như thế
nào thông qua việc tham khảo bảng định tuyến. Tuy nhiên khi router nhận được một gói
tin multicast, router không thể tiếp tục chuyển gói tin đi bởi vì địa chỉ IP multicast không
được liệt kê trong bảng định tuyến unicast.
Ngoài ra, router thường phải chuyển các gói multicast đồng thời ra nhiều cổng để đến tất
cả các máy nhận. Các yêu cầu này làm cho quá trình định tuyến multicast phức tạp hơn
unicast. Trên hình vẽ hiển thị một router đã nhận được một gói tin multicast với địa chỉ
đích là 226.1.1.1. Địa chỉ đích tượng trưng cho một nhóm thường xuyên biến động của
các máy nhận, không chỉ là địa chỉ của một máy nhận. Làm thế nào để router tìm ra các
người dùng này nằm ở đâu? Router sẽ đẩy những gói tin multicast này về đâu?
Chức năng của unicast-routing là tìm đường đi ngắn nhất đến một địa chỉ đích nào đó.
Tác vụ này được thực hiện bằng cách dùng các giao thức distance vector hay dùng các cơ
sở dữ liệu liên kết (linkstate). Kết quả của tác vụ này là một hàng trong bảng định tuyến,
chỉ ra cổng outbound hoặc chỉ ra router kế tiếp. Interface đầu ra có thể hiểu như là
interface gần nhất để đi về mạng đích.
Trái lại, chức năng của multicast routing là tìm ra upstream interface, tức là đường đi gần
nhất về source. Bởi vì các multicast routing protocol quan tâm tìm ra đường đi ngắn nhất
về source hơn là đường đi ngắn nhất về đích nên quá trình chuyển gói tin multicast được
gọi là reverse path forwarding.
Cách tốt nhất để một giao thức định tuyến multicast xác định đường đi ngắn nhất về máy
nguồn là tham khảo bảng định tuyến unicast. Tuy nhiên, các gói multicast sẽ được truyền
đi dựa trên thông tin của bảng multicast routing riêng biệt. Lý do cho việc này là router
không chỉ lưu lại cổng upstream mà còn lưu lại cổng downstream của cả nhóm multicast.
Các traffic IP phải được định tuyến giống như bất cứ một gói tin L3 nào. Sự khác nhau là
không gây vòng lặp. Để ngăn ngừa loop, các router không chuyển các gói multicast ra
cùng một cổng mà nó nhận. Các multicast router dùng một phép kiểm tra gọi là reverse-
path-forwarding (RPF) check để ngăn ngừa loop.
Phép kiểm tra này sẽ thêm vào một số bước trong hoạt động của một router.
Xem địa chỉ nguồn IP của gói multicast. Nếu có một tuyến đường đúng bằng vớI địa chỉ
nguồn trên, hãy kiểm tra cổng ra trên bảng định tuyến xem có đúng là cổng mà router
nhận được gói tin. Nếu đúng, gói tin đã vượt qua phép kiểm tra RPF. Nếu cổng nhận gói
tin khác với cổng đi ra trong bảng định tuyến, gói tin sẽ không được nhân bản và không
được truyền.
Trên hình mô tả một ví dụ trong đó R3 dùng phép kiểm tra RPF để kiểm tra hai bản sao
của cùng một gói multicast. Máy S1 gửi một gói multicast, R1 phát tán gói này ra R2 và
R3. R2 nhận được phiên bản này và cũng tiếp tục phát tán. Kết quả R3 nhận được cùng
một gói tin từ hai nguồn R2 trên cổng S0/0 và từ R1 trên cổng S0/1. Nếu không có phép
kiểm tra RPF, R3 sẽ tiếp tục chuyển gói tin mà nó nhận được từ R1 đến R2 và ngược lại.
Quá trình loop bắt đầu. Với cùng thuật toán này, R1 và R2 cũng lặp lại quá trình. Vòng
lặp xảy ra làm lãng phí băng thông và tài nguyên router. Một router sẽ không tiếp tục
chuyển gói tin multicast cho đến khi nào gói tin đã vượt qua phép kiểm tra RPF. Trong
hình dướI đây, R3 sẽ quyết định nó có chấp nhận gói tin multicast đến từ R1 hay R2 hay
không. Các bước kiểm tra RPF như sau:
1. R3 kiểm tra địa chỉ nguồn của từng gói tin muliticast đi vào, địa chỉ này là 10.1.1.10.
Địa chỉ nguồn này sẽ được dùng trong quá trình kiểm tra bước 2.
2. R3 xác định cổng của router dùng để đi về địa chỉ 10.1.1.10. Trong trường hợp này,
đường đi của R3 về mạng 10.1.1.0/24 là tìm thấy trong bảng định tuyến unicast. Cổng
của router để đi ra mạng này là cổng S0/1. Vì vậy cổng S0/1 là cổng RPF cho địa chỉ
10.1.1.10
3. R3 so sánh cổng đã xác định ở bước 2 với cổng mà gói tin multicast nhận được. Nếu
cổng này là trùng nhau, router sẽ chấp nhận gói tin và truyền đi, nếu không trùng, router
sẽ loại bỏ gói tin. Trong trường hợp này, R3 sẽ phát tán gói tin nhận trên cổng S0/1 từ R1
nhưng sẽ bỏ qua những gói tin nhận được trên S0/0 từ R2.
Phép kiểm tra RPF triển khai một chiến lược trong đó router chỉ chấp nhận những gói tin
sẽ trừ giá trị TTL của gói tin đi 1, còn lại 17. Giả sử rằng router được cấu hình với chế độ
dense và cả bốn cổng của router đều kiểm tra RPF thành công. Nói cách khác, router sẽ
muốn truyền một bản sao của gói tin trên từng cổng. Router sẽ xem xét giá trị TTL còn
lại của gói tin, hiện là 17, với giá trị TTL được cấu hình trên từng cổng ra. Nếu giá trị
TTL của gói tin là cao hơn giá trị TTL được cấu hình trên cổng, router sẽ nhân bản gói
tin ra cổng đó. Nếu khác đi, router sẽ không truyền. Trên Cisco router, giá trị TTL mặc
định của tất cả các cổng là 0.
Trên cổng S0 và S2, người quản trị đã cấu hình giá trị TTL bằng 8 và 32. Một phiên bản
của gói tin sẽ được truyền trên cổng S0 và E0 bởi vì giá trị giới hạn TTL là nhỏ hơn 17.
Tuy nhiên, gói tin sẽ không được truyền trên cổng S2 vì giá trị TTL của cổng là 32, lớn
hơn 17. Cơ chế dùng TTL này có vài điểm yếu. Đầu tiên là nó triển khai khó trên một hệ
thống mạng lớn và phức tạp bởi vì việc phỏng đoán giá trị TTL chính xác trên nhiều
router và nhiều cổng là một công việc tốn sức.
Một vấn đề khác với cơ chế giới hạn tầm vực dùng TTL là các giá trị TTL được cấu hình
trên các cổng sẽ áp dụng tới tất cả các gói multicast. Nếu bạn muốn hỗ trợ cho nhiều
phiên multicast khác nhau, bạn phải thao tác trên ứng dụng để thay đổi giá trị TTL khi
gói tin rời khỏi nguồn.
Giới hạn dùng tầm vực quản trị
Trong các chương trước, tầm vực quản trị của các địa chỉ multicast là trong tầm từ
239.0.0.0 đến 239.255.255.255. Dãy địa chỉ này có thể được dùng để giớI hạn việc truyền
dữ liệu multicast ra ngoài một domain. Cơ chế này yêu cầu phảI cấu hình thủ công. Bạn
có thể cấu hình và áp dụng bộ lọc trên một cổng của router sao cho các dữ liệu multicast
và địa chỉ nhóm trong tầm địa chỉ private sẽ không được phép đi vào hay đi ra.
Giao thức PIM
Protocol Independent Multicast (PIM) là một giao thức định tuyến có thể được dùng để
chuyển các multicast traffic. PIM hoạt động độc lập với các giao thức định tuyến unicast
IP vì vậy PIM sử dụng bảng định tuyến IP. Cần chú ý là bảng unicast routing cũng không
phụ thuộc vào các giao thức định tuyến vì nhiều giao thức định tuyến có thể đóng góp
vào cùng một bảng định tuyến. PIM có thể hoạt động ở ba chế độ:
+ PIM Dense Mode
nhất và được xác định.
Hoạt động của giao thức PIM-DM
Giao thức PIM định nghĩa một loạt các giao thức và các luật để qua đó, router có thể giúp
định tuyến hiệu quả gói tin multicast. PIM trước đây nguyên là giao thức của cisco mặc
dù nó đã được xem như là một giao thức thử nghiệm được đặc tả trong các
RFC2326,3446 và 3973. Đặc tả của PIM chỉ ra tất cả các đặc điểm đã mô tả trước đây
như phép kiểm tra RPF, cơ chế PIM dense phát tán các traffic cho đến khi nào router gửi
thông điệp Prune và PIM-SM sẽ không gửi lưu lượng cho đến khi nào router nhận được
thông điệp Join.
PIM có cái tên như vậy là do khả năng của nó dùng bảng định tuyến unicast routing cho
quá trình kiểm tra RPF, độc lập với giao thức định tuyến unicast được dùng để xây dựng
nên bảng định tuyến unicast routing. Thật ra tên PIM cũng gợI ý nhiều về hai giao thức
chạy chế độ dense khác là DVMRP và MOSPF. Hai giao thức kia không dùng bảng định
tuyến unicast cho việc kiểm tra RPF. Thay vào đó, router xây dựng bảng một cách độc
lập. PIM đơn giản dựa trên bảng định tuyến unicast độc lập với bất kỳ một giao thức định
tuyến unicast.
Hình thành các quan hệ láng giếng PIM dùng cơ chế hello
Các router PIM hình thành các quan hệ láng giềng vớI các router chạy PIM khác.
Phiên bản hiện hành của PIM, PIMv2, gửI thông điệp hello mỗI 30 giây trên tất cả các
cổng mà PIM được cấu hình. Bằng cách nhận hello trên cùng một cổng, router sẽ tìm ra
các láng giềng, thiết lập và duy trì quan hệ. Thông điệp hello của PIMv2 dùng gói tin IP,
số giao thức là 103 và dành địa chỉ 224.0.0.13 được gọi là địa chỉ tất cả các router PIM.
Cơ chế hello chứa một giá trị Holdtime, thông thường ba lần thời gian gửi hello của PIM.
Nếu bên router nhận không nhận được thông điệp Hello từ máy gửi trong khoảng thời
gian holdtime, nó sẽ xem rằng router láng giềng đã chết. Giao thức PIMv1 không dùng
hello. Thay vào đó PIMv1 dùng thông điệp truy vấn PIM Query. PIMv1 được đóng gói
trong gói tin IP, số giao thức là 2 và dùng địa chỉ multicast là 224.0.0.2. Một router PIM
chỉ gửi thông điệp PIM ra những cổng mà nó nhận biết có router PIM láng giềng.
Cây phân phối theo nguồn
Giao thức định tuyến dense thì phù hợp cho các sơ đồ mạng trong đó có nhiều nhóm
sẽ thiết lập lại giá trị 3 phút.
- Cờ C chỉ ra rằng R3 có một kết nối trực tiếp cho nhóm 226.1.1.1. Cờ T chỉ ra rằng lưu
lượng (S,G) được truyền trên cây đường đi ngắn nhất.
- Cổng vào cho nhóm 226.1.1.1 là s0/1 và router láng giềng RPF (là địa chỉ kế tiếp đi
theo chiều ngược về nguồn 10.1.1.10) là 10.1.4.1.
- Lưu lượng nhóm được truyền ra cổng F0/0. Cổng này đã trong trạng thái forwarding
trong 12 giây. Thông số thời gian thứ hai là 00:00:00 bởi vì nó không thể hết hạn với
PIM-DM vì cổng này sẽ tiếp tục truyền lưu lượng cho đến khi cổng này bị loại bỏ
(prune).
Theo đặc tả của PIM-DM, bảng định tuyến multicast chỉ cần các hàng (S,G). Tuy nhiên,
đốI vớI từng hàng (S,G), một router sẽ tạo ra một (*,G) như là một hàng cha để tăng tính
hiệu quả thiết kế. Hàng (*,G) không được dùng để chuyển lưu lượng multicast cho một
nhóm dùng PM-DM. Vì vậy để đơn giản và rõ ràng, hàng (*,G) không được hiển thị
trong ví dụ dùng PIM-DM. Nếu bạn xây dựng như cùng một hình vẽ trên và cấu hình
PIM-DM, hàng (*,G) cũng sẽ được liệt kê trong kết quả của lệnh show ip mroute.
Thông điệp Prune
PIM-DM tạo ra một cây đường đi ngắn nhất khi một nguồn gửi một gói tin multicast đầu
tiên đến một địa chỉ nhóm multicast mới. Cấu trúc cây đường đi ngắn nhất bao gồm tất cả
các cổng, ngoại trừ các cổng RPF, bởi vì PIM-DM giả sử rằng tất cả các máy cần phải
nhận một bản sao của từng gói tin multicast. Tuy nhiên một vài phân đoạn mạng có thể
không cần các bản sao của multicast, vì vậy PIM-DM định nghĩa ra một tiến trình trong
đó router có thể xóa các cổng ra khỏi một cây đường đi ngắn nhất bằng cách dùng thông
điệp Prune. Ví dụ, giả sử máy H1 và H2 cần một bản sao của gói multicast gửi về địa chỉ
226.1.1.1. Tuy nhiên, như đã hiển thị, khi R2 nhận lưu lượng multicast từ R1, sau đó R2
sẽ truyền các lưu lượng multicast đến R3. R3 sẽ bỏ các gói tin của lưu lượng từ 10.1.1.1
đến 226.1.1.1, bởi vì các gói tin này không vượt qua phép kiểm tra RPF. Trong trường
hợp này, R3 có thể làm cho R2 xóa cổng S0/1 ra khỏi danh sách cổng ra cho nhóm
(10.1.1.10,226.1.1.1) bằng cách gửi ra một thông điệp Prune đến R2. Kết quả là, R2 sẽ
không truyền lưu lượng multicast đến R3, vì vậy giảm lãng phí băng thông.
Thuật ngữ danh sách cổng ra (outgoing interface list) muốn ám chỉ danh sách các cổng
láng giềng).
PIM-DM: Phản ứng với một kết nối bị sự cố
Khi các kết nối bị hỏng hóc, sự cố, hay bất kỳ một thay đổi nào khác ảnh hưởng bảng
định tuyến unicast, PIM-DM cần phải cập nhật các cổng RPF dựa trên thông tin định
tuyến unicast mới. Bởi vì các cổng RPF có thể thay đổi, (S,G) cũng có thể cần một danh
sách các cổng khác nhau trong danh sách cổng ra.
Trên hình, khi kết nối giữa R1 và R2 bị đứt. Sau khi giao thức định tuyến unicast hội tụ,
R3 cần phải cập nhật các router RPF láng giềng từ 10.1.4.1 (R1) sang thành 10.1.3.2
(R2). Trong trường hợp này, H1 gửi ra một thông điệp Leave. Dưới đây là kết quả bảng
multicast routing trên R3. Lưu ý rằng cổng RPF và các router láng giềng đã thay đổi, chỉ
sang R2.
(10.1.1.10/32, 226.1.1.1), 00:02:16/00:01:36, flags: CT
Incoming interface: Serial0/0, RPF nbr 10.1.3.2
Outgoing interface list:
FastEthernet0/0, Forward/Dense, 00:02:16/00:00:00
R3 nhận thấy cây SPT của nhóm (10.1.1.10, 226.1.1.1) đã thay đổi. Tuy nhiên R2 đã loại
bỏ cổng S0/1 của nó ra khỏi cây SPT. Vì vậy R2 cần phải thay đổi cổng S0/1 của nó trở
lại trạng thái forwarding cho cây SPT (10.1.1.10, 226.1.1.1). Ví dụ kế tiếp hiển thị bảng
định tuyến multicast cho (10.1.1.10, 226.1.1.1) trên R2.
(10.1.1.10/32, 226.1.1.1), 00:03:14/00:02:38, flags: T
Incoming interface: Serial0/0, RPF nbr 10.1.2.1
Outgoing interface list:
Serial0/1, Forward/Dense, 00:02:28/00:00:00
R2 thay đổi cổng S0/1 của nó sang trạng thái forwarding bởi vì thông điệp PIM graft
được gửi bởi R3. Trong ví dụ trên, lưu ý danh sách cổng ra cho R2. R2 bây giờ đã xóa
cổng F0/0 ra khỏi danh sách cổng ra và không truyền lưu lượng qua cổng này bởi vì nó
không nhận được trả lời cho thông điệp IGMP của nhóm 226.1.1.1. Kết quả là, r2 cũng
xóa cờ C (C có nghĩa là connected) ra khỏi bảng định tuyến multicast cho hàng
(10.1.1.10,226,1.1.1). Thêm vào đó, R2 đẩy các lưu lượng của nó trên cổng S0/1 về R3
bởi vì R3 vẫn truyền lưu lượng ra cổng F0/0 và chưa gửi thông điệp Prune về R2.
Bảng định tuyến multicast cho nhóm 226.1.1.1 trên R3
(10.1.1.10/32, 226.1.1.1), 00:03:16/00:01:36, flags: PT
Incoming interface: Serial0/0, RPF nbr 10.1.3.2
Outgoing interface list: Null
Sau khi tất cả các bước đã hoàn tất, R1 cũng không cần gửi gói tin về 226.1.1.1 ra bất kỳ
cổng nào. Sau khi nhận thông điệp Prune từ R2, R1 cũng cập nhật danh sách cổng ra,
trong đó hiển thị rằng chỉ có một cổng ra và cổng đó trong danh sách loại bỏ.
(10.1.1.10/32, 226.1.1.1), 00:08:35/00:02:42, flags: CT
Incoming interface: FastEthernet0/0, RPF nbr 0.0.0.0
Outgoing interface list:
Serial0/0, Prune/Dense, 00:00:12/00:02:48
Trong đoạn kết quả trên, R1 đã gán cờ C nhưng đối với R1, cờ C không chỉ ra rằng R1 có
thành viên kết nối trực tiếp. Trong trường hợp này, một kết hợp của cờ C và một láng
giềng RPF có giá trị 0.0.0.0 chỉ ra rằng thiết bị kết nối trực tiếp là nguồn của nhóm
multicast. Thực tế không có sự phân biệt giữa thông điệp Prune và thông điệp Join, thay
vào đó PIM-DM và PIM-SM dùng một thông điệp đơn duy nhấn gọI là thông điệp
Join/Prune. Một thông điệp Prune là một thông điệp Join/Prune có địa chỉ nhóm được chỉ
ra trong trường Prune. Một thông điệp Join là một thông điệp Join/Prune có địa chỉ nhóm
liệt kê trong trường Join.