Bài viết chuyên đề
Tiến trình chọn đường BGP - Bài 3
23/12/2021 11:45:46
Bài số 3 – Origin, MED, eBGP route có trước, IGP cost, Router – id và Neighbor IP
Trong bài viết trước, chúng ta đã đi vào phân tích tiến trình chọn đường BGP. Để tiện theo dõi, trước hết, tiến trình này sẽ được nhắc lại tại đầu bài viết này (hình 1):
Hình 1 – Tiến trình chọn đường BGP.
Chúng ta đã phân tích tiến trình này từ bước Pre – check các route cho đến bước thứ 4 của sơ đồ trên (là bước xem xét so sánh chiều dài của thuộc tính AS – Path giữa các đường đi đến cùng một đích đến). Trong bài viết này, chúng ta sẽ xem xét các bước còn lại của tiến trình: từ bước thứ 5 – so sánh Origin code đến bước thứ 10 – so sánh địa chỉ IP của các neighbor.
5. So sánh Origin code:
Nếu tất cả các đường đi đến cùng một đích đến đều có 4 yếu tố trước đó như nhau: Weight bằng nhau, Local – Preference bằng nhau, đều không phải local – route, có chiều dài AS – Path như nhau, giá trị Origin code của các đường đi sẽ được đem ra so sánh. Nhắc lại rằng, mỗi IP prefix khi được router ban đầu quảng bá vào BGP sẽ được đính kèm một mã hiệu gọi là Origin code để cho biết rằng IP prefix này được router đưa vào BGP theo phương thức nào. Có 3 Origin code tất cả:
- “i” – “IGP”: Prefix được router đưa vào BGP bằng câu lệnh “network” hoặc bằng kỹ thuật summary địa chỉ (kỹ thuật summary địa chỉ với BGP sẽ được đề cập trong một bài viết khác).
- “e” – “EGP”: Prefix được router redistribute từ source protocol là giao thức EGP – một giao thức định tuyến ngoài xưa cũ, được sử dụng từ trước khi BGP ra đời.
- “?” – “Incomplete”: Prefix được router redistribute từ source protocol là một hình thức định tuyến trong IGP nào đó (có thể là connected route, static route, hoặc các route RIP/OSPF/IS – IS/EIGRP).
Nguyên tắc so sánh Origin code được đặt ra như sau: “i” tốt hơn “e”, “e” tốt hơn “?”.
Như vậy, trong nhiều đường đi đến cùng một đích đến, đường đi có Origin code là “i” sẽ được ưu tiên lựa chọn so với đường đi có Origin code là “e”, và được lựa chọn sau cùng là những đường đi có Origin code là “?”. Chúng ta cùng quan sát một ví dụ:
R1#show ip bgp
BGP table version is 3, local router ID is 10.0.0.1
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
x best-external, a additional-path, c RIB-compressed,
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found
Network Next Hop Metric LocPrf Weight Path
*> 101.0.0.0/24 0.0.0.0 0 32768 i
* i 108.0.0.0/24 10.0.0.3 0 100 0 105 678 ?
*>i 10.0.0.2 0 100 0 104 678 i
Trong kết quả show của router R1, có hai route để đi đến mạng 108.0.0.0/24, một route thông qua next – hop 10.0.0.2, một route thông qua next – hop 10.0.0.3. Ta có thể thấy rằng, cả hai route này đều có: Weight = 0, Local Preference = 100, đều không phải local – route và đều có chiều dài AS – path bằng 2. Tuy nhiên, route đi qua next – hop 10.0.0.2 có Origin code là “i”, trong khi đó route đi qua next – hop 10.0.0.3 có Origin code là “?”, và vì “i” được xem là tốt hơn “?” nên hướng đi qua 10.0.0.2 được chọn là hướng đi tối ưu để đi đến mạng đích 108.0.0.0/24. Hướng đi này sẽ được router R1 cài vào bảng định tuyến sử dụng chính thức, đồng thời được quảng bá đi cho neighbor tiếp theo.
6. MED nhỏ nhất:
Trong bước thứ 6 tiếp theo, nếu cả 5 bước trước đó chưa chọn được đường tối ưu, giá trị MED của các route sẽ được đem ra so sánh. Trong nhiều đường đi đến cùng một đích đến, đường đi nào có MED nhỏ nhất, đường đi đó được xem là tốt nhất.
Ví dụ:
R1#show ip bgp
BGP table version is 4, local router ID is 10.0.0.1
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
x best-external, a additional-path, c RIB-compressed,
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found
Network Next Hop Metric LocPrf Weight Path
*> 101.0.0.0/24 0.0.0.0 0 32768 i
* i 106.0.0.0/24 10.0.0.2 100 100 0 456 i
*>i 10.0.0.3 0 100 0 456 i
Trong kết quả show ở trên, có hai đường đi để đi đến mạng đích 106.0.0.0/24. Cả hai đường này đều có 5 yếu tố đầu tiên của tiến trình chọn đường là như nhau: Weight đều bằng 0, Local Preference đều bằng 100, đều không phải local route, AS – Path length đều bằng 2 và đều có Origin code là “i”. Với bước thứ 6, R1 đã chọn đường đi thông qua next – hop 10.0.0.3 để đi đến mạng 106.0.0.0/24 vì hướng đi này có giá trị MED (Metric = 0) thấp hơn giá trị MED của hướng đi theo next – hop 10.0.0.2 (MED/Metric = 100).
Nhắc lại rằng, mặc định, router chỉ so sánh MED của các route có cùng neighbor AS trong AS – path (trong ví dụ này, cả hai route đều có cùng neighbor AS là 456).
7. Ưu tiên eBGP route hơn là iBGP route:
Nếu cả 6 bước đầu tiên của tiến trình chọn đường BGP vẫn chưa chọn được route tối ưu, bước thứ 7 sẽ được xem xét:
Trong hai hướng đi đến cùng một đích đến, nếu một hướng là eBGP route (là route do eBGP peer quảng bá) và một hướng là iBGP route (là route do iBGP peer quảng bá), tiến trình chọn đường BGP sẽ chọn eBGP route là đường đi tốt hơn; nghĩa là, ưu tiên eBGP route hơn là iBGP route.
Chúng ta cùng xem xét một ví dụ để làm rõ ý này (hình 2):
Hình 2 – Ưu tiên eBGP route hơn iBGP route.
Trong ví dụ trên hình 2:
- Hai router R3 và R4 thuộc AS 200 nhận được cập nhật định tuyến cho mạng 100.0.0.0/24.
- Sau khi xử lý thông tin, hai router này tiếp tục quảng bá mạng 100.0.0.0/24 cho các eBGP peer của chúng là R1 và R2.
- Router R1 bên AS 100, sau khi nhận được route 100.0.0.0/24 sẽ quảng bá tiếp mạng này cho router R2 vì giữa R1 và R2 có một mối quan hệ láng giềng BGP đã được thiết lập trước đó. Mối quan hệ này là một iBGP peering.
- Như vậy, router R2 nhận được hai route để đi đến cùng một mạng đích là 100.0.0.0/24. Giả thiết rằng, cả hai hướng đi này đều có các yếu tố của 6 bước trên là như nhau thì router R2 sẽ chọn hướng đi với next – hop là router R4 để làm đường đi chính thức đến mạng 100.0.0.0/24 vì với R2, route do R4 quảng bá là một eBGP route, còn hướng do R1 quảng bá là một iBGP route.
Tiếp theo, chúng ta cùng xem xét tình huống là tất cả các route nhận được đều là eBGP route hoặc iBGP route. Đến đây, tiến trình chọn đường BGP bị rẽ thành hai nhánh: một nhánh là tất cả các route đều là eBGP route và một nhánh là tất cả các route đều là iBGP route. Chúng ta xem xét từng nhánh vừa nêu.
8a. Ưu tiên route học được sớm nhất:
Bước 8a tương ứng với phân nhánh “tất cả các route nhận được đều là eBGP route”. Với bước này, router BGP sẽ ưu tiên chọn route nào được học sớm nhất để làm route tối ưu.
Chúng ta cùng xem xét một ví dụ (hình 3):
Hình 3 – Ưu tiên eBGP route nào được nhận trước.
Trong ví dụ trên hình 3, router R1 nhận được cập nhật định tuyến cho mạng 100.0.0.0/24 từ hai eBGP peer là R2 và R3, như vậy, R1 có hai route đi đến 100.0.0.0/24 và cả hai route này đều là eBGP route. Giả thiết rằng, tất cả các thuộc tính có độ ưu tiên cao hơn của các bước trước đó trên hai route này đều như nhau, router R1 sẽ chọn route nào mà nó nhận được trước. Cụ thể, nếu R2 quảng bá mạng 100.0.0.0/24 cho R1 trước thì R1 sẽ chọn đường đi đến 100.0.0.0/24 thông qua next – hop R2, còn nếu R3 quảng bá trước thì R1 sẽ chọn hướng đi thông qua R3.
Thông thường, trong trường hợp như vừa nêu, sẽ có router quảng bá trước và router quảng bá sau, gần như không thể xảy ra hiện tượng quảng bá thông tin cùng lúc để dẫn đến không chọn được đường tối ưu. Do đó, với nhánh thứ nhất là tất cả các route nhận được đều là eBGP route, tiến trình chọn đường BGP đến đây kết thúc, chắc chắn một route tối ưu sẽ được chọn ra để cài vào bảng định tuyến.
8b. IGP metric để đi đến địa chỉ Next – hop là nhỏ nhất:
Bước 8b là bước mở đầu cho nhánh thứ hai: tất cả các route nhận được đều là iBGP route. Tất nhiên, các iBGP route này đều phải có các thuộc tính với độ ưu tiên cao hơn được xem xét trước đó có giá trị như nhau.
Với bước 8b, trong các iBGP route đi đến cùng một đích đến, route nào có IGP metric để đi đến địa chỉ next – hop nhỏ nhất, route đó được xem là tốt nhât.
Chúng ta cùng xem xét một ví dụ để làm rõ ý vừa nêu (hình 4):
Hình 4 – IGP metric đi đến địa chỉ Next – hop là nhỏ nhất.
Trong ví dụ trên hình 4, các router R1 đến R5 đều thuộc AS 100 được cấu hình để chạy BGP với nhau. Trên AS 100, giao thức định tuyến trong OSPF với một vùng 0 được sử dụng để đảm bảo mọi địa chỉ trong AS 100 có thể đi đến nhau được.
Router R1 thiết lập iBGP peering với hai router biên R4 và R5 và các mối quan hệ peering này được xây dựng dựa vào địa chỉ trên các cổng loopback 0 của các router (khi cấu hình khai báo neighbor, ta sử dụng tùy chọn “update-source loopback 0” – các bạn có thể xem lại bài cấu hình cơ bản với BGP tại https://waren.vn/chuyen-de/cau-hinh-co-ban-bgp-voi-cisco-ios.html để nắm lại phương thức này).
Hai router biên R4 và R5 nhận được cập nhật định tuyến về mạng 100.0.0.0/24 và chúng thực hiện quảng bá tiếp mạng này đến router R1. Router R1, vì vậy, nhận được hai route cùng đi đến mạng 100.0.0.0/24 và cả hai route này đều là iBGP route. Giả thiết rằng cả hai route này đều có các thuộc tính có độ ưu tiên cao hơn ở các bước trên là như nhau thì khi đó, R1 sẽ so sánh giá trị OSPF cost tổng cộng để đi đến các địa chỉ next – hop trên hai route này để quyết định xem route nào tốt hơn.
Với sơ đồ ở trên:
- Route theo hướng R4 có địa chỉ next – hop là 10.0.0.4. Căn cứ vào giá trị OSPF cost mặc định trên các cổng của các router, ta tính được rằng tổng cost OSPF tích lũy để từ R1 đi đến được địa chỉ 10.0.0.4 sẽ là tổng cost của cổng E0/0 trên R1 (= 10) cộng với cost của cổng S1/0 trên R2 (= 64) cộng với cost của cổng loopback 0 trên R4 (= 1), tất cả là 75. Như vậy, với route theo next – hop 10.0.0.4 (R4), IGP metric để đi đến địa chỉ next – hop là 75.
- Route theo hướng R5 có địa chỉ next – hop là 10.0.0.5. Tổng cost OSPF tích lũy để từ R1 đi đến được địa chỉ 10.0.0.5 sẽ là tổng cost của cổng E0/1 trên R1 (= 10) cộng với cost của cổng E0/1 trên R3 (= 10) cộng với cost của cổng loopback 0 trên R5 (= 1), tất cả là 21. Như vậy, với route theo next – hop 10.0.0.5 (R5), IGP metric để đi đến địa chỉ next – hop là 21.
Ta thấy route theo hướng R5 có IGP metric để đi đến địa chỉ next – hop nhỏ hơn IGP metric đi đến next – hop theo hướng R4 nên trong bước 8b này, router R1 sẽ chọn route theo hướng next – hop R4 làm route tối ưu để đi đến mạng 100.0.0.0/24.
9. Neighbor với Router – id nhỏ nhất:
Tiếp tục với bước 8b ở trên, nếu các route đều là iBGP route và tất cả các route này đều có IGP metric để đi đến địa chỉ next – hop bằng nhau thì Tiến trình chọn đường BGP sẽ chọn route tốt nhất dựa trên Router – ID của next – hop router. Trong các route này, route nào có next – hop router với Router – id nhỏ nhất, route đó sẽ được chọn là route tối ưu.
Khái niệm Router – id của BGP cũng tương tự như với Router – id của các giao thức định tuyến khác, ví dụ, OSPF. BGP Router – id cũng là một giá trị được sử dụng để định danh duy nhất cho router BGP đang xét trong cộng đồng các router chạy BGP với nhau. Giống như với OSPF, BGP Router – id cũng có định dạng của một địa chỉ IPv4 và mặc định, cũng được thiết lập bằng cách chọn ra địa chỉ IP cao nhất trong các active interface (các interface có trạng thái “up/up”), ưu tiên cổng loopback. Ta cũng có thể cấu hình thiết lập giá trị Router – id manually cho một router BGP bằng lệnh “bgp router-id” trên mode cấu hình của tiến trình BGP của router này:
R(config)#router bgp ASN
R(config-router)#bgp router-id A.B.C.D
Chúng ta cùng xem xét một ví dụ để làm rõ phương thức so sánh trong bước thứ 9 này (hình 5):
Hình 5 – So sánh BGP Router – id của các next – hop router.
Ví dụ trong hình 5 cũng chính là sơ đồ trong hình 4 của bước 8b nhưng lần này đường link nối giữa R2 và R4 được thay bằng link Ethernet. Lúc này, R1 có IGP metric để đi đến hai địa chỉ next – hop đều là 21 và bước 8b không thể chọn được đường đi tối ưu. Khi cả hai iBGP route đểu có IGP metric đi đến next – hop như nhau, router sẽ phải so sánh giá trị BGP router – id của hai next – hop này. Ta thấy, nếu không cấu hình gì thêm, router R4 sẽ có BGP router – id là 10.0.0.4 và router R5 sẽ có BGP router – id là 10.0.0.5. Vì router – id của R4 nhỏ hơn router – id của R5, R1 sẽ chọn hướng đi qua next – hop R4 để làm hướng đi tối ưu đi đến mạng đích 100.0.0.0/24.
10. Neighbor với địa chỉ IP nhỏ nhất:
Trong trường hợp các iBGP route ở bước thứ 9 đều có router – id của các next – hop giống nhau, tiến trình chọn đường sẽ phải xem xét đến địa chỉ IP của các neighbor, tiến hành so sánh các địa chỉ này để tìm ra route tốt nhất. Quy tắc so sánh là: trong tất cả các iBGP route với các next – hop có router – id như nhau, route nào đi qua next – hop với địa chỉ IP nhỏ nhất, route đó được xem là tốt nhất.
Tương tự như các bước trên, chúng ta cùng xem xét một ví dụ để làm rõ bước này (hình 6):
Hình 6 – So sánh địa chỉ IP của các next – hop.
Trong ví dụ ở hình 6, hai router R1 và R2 thuộc AS 100 thực hiện thiết lập hai iBGP peering với nhau bằng các cặp địa chỉ IP 192.168.12.1 – 192.168.12.2 và 192.168.21.1 – 192.168.21.2. Với cách làm này, R1 sẽ thấy R2 thành hai neighbor BGP và như vậy R1 sẽ có hai next – hop nhưng chỉ nằm trên một router R2.
Router R2 nhận được mạng 100.0.0.0/24 từ bên ngoài và tiếp tục quảng bá mạng này vào các iBGP peer bên trong. Vì R2 có hai mối quan hệ BGP với R1 nên R2 sẽ quảng bá hai lần mạng 100.0.0.0/24 cho R1, một update gửi đến neighbor 192.168.12.1 và một update gửi đến neighbor 192.168.21.1. Kết quả là R1 có hai iBGP route cho mạng 100.0.0.0/24: một route với next – hop IP là 192.168.12.2 và một route với next – hop IP là 192.168.21.2. Cả hai route này đều có các thuộc tính BGP khác giống nhau nếu ta không hiệu chỉnh gì thêm, và cả hai route đều có next – hop với router – id như nhau (vì nằm trên cùng một router). Lúc này R1 sẽ chọn đường tối ưu dựa vào địa chỉ IP của next – hop. Vì next – hop 192.168.12.2 có địa chỉ IP nhỏ hơn IP của next – hop 192.168.21.2 nên R1 sẽ chọn đường đi qua next – hop 192.168.12.2 làm đường đi tối ưu chính thức để đi đến mạng 100.0.0.0/24.
Đến đây, chúng ta đã kết thúc Tiến trình chọn đường BGP. Sau 10 bước (nếu rẽ theo nhánh 8b) hoặc sau 8 bước (nếu rẽ theo nhánh 8a), Tiến trình chọn đường BGP sẽ chọn ra được các route tốt nhất trong bảng BGP để đi đến từng đích đến mà router nhận được. Nhắc lại rằng mặc định, tiến trình này chọn ra một và chỉ một route tốt nhất cho mỗi đích đến, nghĩa là nếu không cấu hình gì thêm, BGP không hỗ trợ cân bằng tải.
Tiến trình chọn đường BGP được phân tích trong 3 bài viết gần đây nêu ra những quy tắc cơ bản nhất và chưa xem xét đến yếu tố Route – reflector (RR) trong mạng lưới BGP. Vấn đề RR và ảnh hưởng của nó đến Tiến trình chọn đường BGP sẽ được trình bày trong một bài viết khác tại WAREN.
Cảm ơn các bạn!
Hẹn gặp lại các bạn trong các bài viết tiếp theo!