Bài viết chuyên đề

Tiến trình chọn đường BGP - Bài 2

13/12/2021 10:16:39

Trong bài viết trước, chúng ta đã cùng điểm qua một số thuộc tính đường đi thường được sử dụng khi phân tích và can thiệp vào Tiến trình chọn đường của BGP. Trong bài viết này, chúng ta sẽ đi vào từng bước của Tiến trình chọn đường đã đề cập này.

 

Bài số 2 – Weight, Local Preference, Local route và AS – Path length

Trong bài viết trước, chúng ta đã cùng điểm qua một số thuộc tính đường đi thường được sử dụng khi phân tích và can thiệp vào Tiến trình chọn đường của BGP. Trong bài viết này, chúng ta sẽ đi vào từng bước của Tiến trình chọn đường đã đề cập này.

Trước hết, nhắc lại rằng khi một router peering thành công với nhiều router khác, nó sẽ được các router neighbor này quảng bá cho nó các route tốt nhất mà chúng đã tính được. Router đang xét sẽ tập trung các route nhận được vào bảng BGP rồi chạy Tiến trình chọn đường BGP trên các route này. Tiến trình chọn đường BGP sẽ lọc ra từ nhiều route đi đến cùng một đích đến một route tốt nhất sau đó đưa route tốt nhất này vào bảng định tuyến sử dụng chính thức, đồng thời quảng bá route ấy đến router neighbor kế tiếp. Mặc định, Tiến trình chọn đường BGP không hỗ trợ đa đường mà chỉ chọn ra một và chỉ một đường đi tối ưu cho từng mạng đích. Điều này có 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.

Pre – check thông tin định tuyến

Trước khi một route được đưa vào xem xét trong Tiến trình chọn đường BGP, route phải được kiểm tra trước (pre – check) xem có thỏa mãn hai điều kiện sau đây hay không, nếu một trong hai điều kiện không được thỏa mãn, route sẽ không được xem xét trong tiến trình chọn đường:

  1. Next – hop phải đi đến được:

Mỗi route trong bảng BGP sẽ được kiểm tra xem là địa chỉ next – hop của route có thể đi đến được không. Nếu next – hop IP không thể đi đến được, route này sẽ bị loại ra khỏi hoạt động xem xét đánh giá của Tiến trình chọn đường BGP.

Như trong các bài viết trước đã trình bày, vấn đề next – hop không đi đến được (next – hop is unreachable) thường xảy ra khi router biên quảng bá eBGP route vào các iBGP peer bên trong và chúng ta cần phải sử dụng tùy chọn “” trên các router biên khi khai báo neighbor đến các iBGP peer để khắc phục vấn đề này. Các bạn có thể xem lại kỹ thuật này trong bài viết về cấu hình cơ bản với BGP tại đường link https://waren.vn/chuyen-de/cau-hinh-co-ban-bgp-voi-cisco-ios.html .

  1. Thỏa mãn điều kiện chống loop:

Khi router BGP nhận được routing update cho một IP prefix, nó sẽ kiểm tra thuộc tính AS – Path của prefix này. Nếu trong AS – Path của prefix có chứa AS Number của router đang xét, router sẽ bỏ qua không cập nhật route này vào bảng BGP, và vì vậy route sẽ không có cơ hội để tham gia vào Tiến trình chọn đường BGP. Đây là điều kiện chống loop nổi tiếng của giao thức BGP.

Để nắm được ý vừa nêu, chúng ta cùng xem xét một ví dụ (hình 1):

 

Hình 1 – Ví dụ về điều kiện chống loop của BGP.

Trên hình 1, router R thuộc AS 100 nhận được cập nhật định tuyến cho mạng 100.0.0.0/24. Khi kiểm tra thuộc tính AS – Path của prefix này, router R nhận thấy AS – Path của route có chứa ASN 100 chính là số AS của nó, khi đó, router R sẽ loại bỏ không cập nhật prefix này vào bảng BGP. 

Như đã đề cập trong bài viết trước, thuộc tính AS – Path ghi lại số hiệu của các AS mà prefix đã lan truyền qua để có thể đến được router đang xét. Khi router đang xét thấy xuất hiện số AS của nó trong AS – Path của prefix nhận được, điều đó chứng tỏ prefix đã từng đi qua AS của nó rồi sau đó vòng trở lại; như vậy, loop đã xảy ra cho prefix này, router cần từ chối nhận prefix để tránh gây ra loop cho định tuyến dữ liệu.

Tiến trình chọn đường BGP

Tất cả các route đi đến các mạng đích sau khi trải qua hai thao tác kiểm tra ở trên và vượt qua, sẽ được tham gia Tiến trình chọn đường BGP để chọn ra từ những route này các route tốt nhất đi đến từng mạng đích. Tiến trình chọn đường BGP được mô tả như trên hình 2:

 

Hình 2 – Tiến trình chọn đường BGP.

Như trình bày trên hình, tiến trình này gồm nhiều bước khác nhau xem xét so sánh các thuộc tính khác nhau giữa các route đi đến cùng một đích đến để tìm ra route tối ưu cho đích đến ấy. Nguyên tắc của việc so sánh này là khi tại một bước nào đó mà đã xác định được route tốt nhất, các bước còn lại sau đó sẽ bị bỏ qua không xem xét tiếp nữa; bước sau chỉ được xem xét nếu như bước trước đó vẫn không “phân định thắng bại” được giữa các route. Một nguyên tắc khác nữa của tiến trình chọn đường BGP là tiến trình này mặc định không hỗ trợ cân bằng tải: chỉ một route tối ưu cho mỗi đích đến được lựa chọn, tiến trình sẽ tiến hành so sánh cho đến khi tìm được một và chỉ một route tối ưu cho mỗi đích đến mà thôi.

Tiếp theo, chúng ta cùng đi vào phân tích từng bước của Tiến trình chọn đường ở trên.

1. Weight cao nhất

Thuộc tính đầu tiên được router xem xét để chọn đường tốt nhất là thuộc tính Weight. Trong nhiều đường đi đến cùng một đích đến, đường đi nào có Weight cao nhất, đường đi đó sẽ được chọn làm đường đi tối ưu, được cài vào bảng định tuyến sử dụng chính thức, đồng thời quảng bá đi các router láng giềng kế tiếp.

Ví dụ:

R1#show ip bgp

BGP table version is 4, local router ID is 192.168.13.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 109.0.0.0/24     192.168.12.2             0    100    100 104 106 789 i

 * i                  192.168.13.3             0    100      0 105 789 i

Chúng ta xem xét các đường đi đến mạng 109.0.0.0/24 trong bảng BGP của router R1. Ta thấy rằng hiện R1 học được hai đường đi để đi đến mạng này, một đường thông qua next – hop 192.168.12.2 và một đường thông qua next – hop 192.168.13.3. Khi so sánh các thuộc tính, BGP trên R1 đã chọn đường đi qua next – hop 192.168.12.2 vì đường đi này có Weight cao hơn đường còn lại (100 so với 0).

(Trong kết quả hiển thị bảng BGP với Cisco IOS, hướng đi tốt nhất là hướng đi được đánh dấu “>” ở đầu dòng thông tin)

Khi làm việc với các thiết bị của Cisco, thuộc tính Weight là thuộc tính có độ ưu tiên cao nhất trong Tiến trình chọn đường BGP. Mặc định, một router BGP sẽ gán giá trị Weight = 32768 cho các local route (là các route do router tự quảng bá vào BGP) và gán trị Weight = 0 cho các route mà router nhận được từ các BGP neighbor khác. 

2. Local Preference cao nhất

Khi các route được đem đi so sánh đều có giá trị Weight bằng nhau, bước thứ nhất của tiến trình không chọn ra được route tốt nhất, Local Preference là thông số tiếp theo sẽ được đưa ra so sánh. Trong nhiều đường đi đến cùng một đích đến, đường đi nào có Local Preference lớn nhất, đường đi đó được xem là tốt nhất.

Ví dụ:

R9#show ip bgp

BGP table version is 5, local router ID is 119.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

 *>i 101.0.0.0/24     192.168.89.8             0    200      0 106 104 123 i

 * i                  192.168.79.7             0    100      0 105 123 i

 *>  109.0.0.0/24     0.0.0.0                  0         32768 i

 *>  119.0.0.0/24     0.0.0.0                  0         32768 i

Trong kết quả show của router R9 ở trên, R9 nhận được hai đường đi để đi đến mạng 101.0.0.0/24: một đường thông qua next – hop 192.168.89.8 và một đường thông qua next – hop 192.168.79.7. Ta thấy rằng cả hai đường đi này đều có Weight bằng nhau và bằng 0 nên Local Preference được đưa ra để so sánh. Kết quả là vì đường đi thông qua next – hop 192.168.89.8 có giá trị Local Preference cao hơn nên đường đi này được chọn là đường đi tối ưu và được sử dụng chính thức làm đường đi đến mạng 101.0.0.0/24.

Nhắc lại rằng thuộc tính Local Preference chỉ lan truyền giữa các iBGP peer với nhau và thường được cấu hình hiệu chỉnh trên các router biên để định hướng cách thức các router BGP bên trong một AS lái dữ liệu ra khỏi AS ấy để đi ra bên ngoài. Mặc định, giá trị Local Preference được thiết lập là 100 cho các IP prefix trong các bản tin định tuyến BGP.

3. Ưu tiên local route

Bước thứ 3 được xem xét sau bước thứ 2 so sánh về Local Preference là ưu tiên Local route hơn các loại route khác. Nếu tồn tại nhiều đường đi đến cùng một đích đến có các giá trị Weight và Local Preference đều bằng nhau, router sẽ ưu tiên chọn đường đi do chính nó quảng bá vào BGP hơn so với các đường đi nhận được từ các router neighbor khác.

Chúng ta cùng xem xét một ví dụ để làm rõ ý vừa nêu (hình 3):

 

Hình 3 – Ví dụ về ưu tiên Local route.

Trong ví dụ trên hình 3, cả hai router R1 và R2 đều nhận được route cho đích đến 100.0.0.0/24 từ R3 thông qua OSPF. Vì route 100.0.0.0/24 đã xuất hiện trong bảng định tuyến của hai router nên cả hai router này đều có thể quảng bá mạng này vào BGP. Vì R1 và R2 cũng thực hiện peering BGP với nhau nên chúng cũng sẽ quảng bá tiếp mạng 100.0.0.0/24 đến nhau.

Xét router R1, router này hiện có hai hướng đi để đi đến mạng 100.0.0.0/24 trong bảng BGP của nó: một hướng thông qua chính nó vì R1 là router quảng bá 100.0.0.0/24 vào BGP (ta gọi là local route), một hướng khác thông qua R2 vì R2 cũng thực hiện quáng bá mạng 100.0.0.0/24 qua cho R1. Như đã nêu ở trên, R1 sẽ ưu tiên hướng đi đến mạng 100.0.0.0/24 thông qua chính nó và coi hướng này là hướng tốt hơn hướng phải đi thông qua láng giềng R2. Ta gọi điều này là ưu tiên local route.

Quyết định chọn đường trên R2 để đi đến mạng 100.0.0.0/24 cũng diễn ra tương tự.

Với Cisco router, bước thứ 3 này có thể hiếm khi được xem xét. Thật vậy, như đã trình bày trong bước thứ nhất về so sánh Weight ở trên: mặc định các local route được gán Weight = 32768 và các route khác được gán Weight = 0. Do đó, ngay từ bước đầu tiên, các local route đã được ưu tiên hơn rồi, bước thứ 3 sẽ không được xem xét đến nữa. Tuy nhiên, nếu chúng ta làm việc với các sản phẩm non – Cisco, bước thứ 3 là một bước quan trọng mà chúng ta phải lưu ý.

4. AS – Path length ngắn nhất

Nếu tất cả các route đều không phải local route để có thể được xem xét bởi bước thứ 3 ở trên, Tiến trình chọn đường BGP sẽ xem xét đến thuộc tính AS – Path của các route nhằm xác định ra route tốt nhất. Trong nhiều đường đi đến cùng một đích đến, đường đi nào có thuộc tính AS – Path có chiều dài ngắn nhất, đường đi đó được xem là đường đi tối ưu cho đích đến này. Điều này có nghĩa là đường đi nào phải đi qua ít AS nhất để đến được đích đến, đường đó là tối ưu. Tất nhiên, các thông số Weight, Local Preference cần phải được xem xét trước đó và các giá trị này đều bằng nhau giữa các route khiến cho BGP chưa chọn được đường tốt nhất.

Một ví dụ về việc chọn đường dựa trên AS – Path length:

R1#show ip bgp

(…)

     Network          Next Hop            Metric LocPrf Weight Path

 *>  101.0.0.0/24     0.0.0.0                  0         32768 i

 * i 109.0.0.0/24     192.168.12.2             0    100      0 104 106 789 i

 *>i                  192.168.13.3             0    100      0 105 789 i

Trong kết quả show ở trên, router R1 có hai đường đi để đi đến mạng 109.0.0.0/24: một đường thông qua next – hop 192.168.12.2 và một đường thông qua next – hop 192.168.13.3. Cả hai đường này đều có các giá trị Weight, Local Preference bằng nhau và đều không phải là local route nên ba bước đầu tiên của Tiến trình chọn đường BGP chưa “phân định được thắng bại” giữa hai route này. Khi sử dụng bước thứ 4 là so sánh chiều dài AS – Path để chọn đường tối ưu, router R1 đã chọn đường đi qua next – hop 192.168.13.3 để đi đến mạng 109.0.0.0/24 vì đường đi này có AS – Path với chiều dài ngắn hơn (chỉ đi qua 2 AS là 105 và 789, so với đường còn lại phải đi qua 3 AS là 104, 106 và 789).

Trên đây, chúng ta đã cùng xem xét 4 bước đầu tiên của tiến trình chọn đường BGP. Trong bài viết tới, chúng ta sẽ cùng xem xét tiếp các bước còn lại. 

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!