Bài viết chuyên đề

Giới thiệu về giao thức BGP

20/11/2021 09:30:49

Trong chuỗi bài viết này, chúng ta sẽ cùng đề cập đến một số nét cơ bản của giao thức định tuyến ngoài được sử dụng chủ yếu trên mạng Internet toàn cầu ngày nay là giao thức BGP.

Phân loại các phương thức định tuyến:

Như chúng ta đã biết, định tuyến – routing, là quá trình một router cập nhật thông tin về mọi địa chỉ mạng trên topology mạng mà nó tham gia vào trong một bảng dữ liệu gọi là bảng định tuyến – routing table. Với bảng định tuyến, router sẽ thực hiện dẫn đường cho mọi gói tin IP đi ngang qua nó, đảm bảo các gói tin này được vận chuyển theo một lộ trình tối ưu. 

Có hai phương thức định tuyến mà người quản trị mạng có thể sử dụng trên các router của mình: định tuyến tĩnh – static routing và định tuyến động – dynamic routing.

  • Định tuyến tĩnh: Đúng như tên gọi, với phương thức này, router hoàn toàn “tĩnh”, không phải làm gì cả; người quản trị thiết bị sẽ phải tự tay cấu hình điền thông tin của các địa chỉ mạng trên topo vào bảng định tuyến của mỗi router, đồng thời phải tự chỉ ra hướng đi tốt nhất để đi đến các mạng ấy. Router sau đó dẫn đường dữ liệu hoàn toàn theo các quyết định định tuyến đã được thiết lập bởi người quản trị. Phương pháp này đơn giản, dễ cấu hình; tuy nhiên, vì các router không làm gì cả mà chỉ chờ đợi người quản trị thao tác dẫn đường nên router cũng không tự động đáp ứng, cập nhật đường đi khi topo mạng có sự thay đổi, gây khó khăn lớn cho hoạt động dự phòng đường đi trong định tuyến. Mặt khác, vì người quản trị phải tự tay cấu hình từng đường đi (route) cho từng địa chỉ mạng nên phương thức này cũng không thích hợp cho mạng có quy mô lớn (hàng chục, hàng trăm, thậm chí hàng ngàn router với rất nhiều địa chỉ mạng cần cập nhật vào bảng định tuyến của các router này).

  • Định tuyến động: Với phương thức này, người quản trị sẽ không phải làm công việc hướng dẫn router định tuyến như với định tuyến tĩnh mà các router sẽ tự “nói chuyện” với nhau, tự trao đổi thông tin về sơ đồ mạng với nhau, từ đó tự động cập nhật thông tin, tự động tính toán đường đi tối ưu đến mọi đích đến của topo mạng và cài các đường đi này vào bảng định tuyến để dẫn đường dữ liệu. Ngoài ra, vì các router thường xuyên trao đổi thông tin nên nếu có bất kỳ sự thay đổi nào trên topo mạng, chúng sẽ tự động cập nhật điều đó cho nhau và tự thực hiện điều chỉnh bảng định tuyến cho phù hợp với những thay đổi này. Ta thường gọi điều này là “hội tụ với mọi sự thay đổi diễn ra trên mạng”.

 

Với những đặc điểm vừa nêu, rất rõ ràng, định tuyến động phù hợp với những mạng lớn, phức tạp, thường xảy ra biến động.

Mặt khác, ta cũng thấy vì các router phải bắt tay nói chuyện với nhau nên chúng phải được cài đặt các giao thức – protocol để thực hiện công việc này. Các giao thức này được gọi là các giao thức định tuyến – routing protocol.

Các giao thức định tuyến được sử dụng ngày nay rất phong phú và lại được chia thành các nhóm như sau:

 

  • Nhóm giao thức Định tuyến ngoài – EGP (Exterior Gateway Protocol): ngày nay, chỉ còn có một giao thức thuộc nhóm này là giao thức BGP.

  • Nhóm giao thức Định tuyến trong – IGP (Interior Gateway Protocol): gồm nhiều giao thức phổ biến như RIP, OSPF, EIGRP, IS – IS.

Trong chuỗi bài viết này, chúng ta sẽ cùng đề cập đến một số nét cơ bản của giao thức định tuyến ngoài được sử dụng chủ yếu trên mạng Internet toàn cầu ngày nay là giao thức BGP.

 

Autonomous System (AS):

Trước hết, để phân biệt thế nào là “ngoài” và thế nào là “trong” theo cách phân loại các giao thức định tuyến như đã nêu ở trên, chúng ta cùng tìm hiểu về khái niệm AS – Autonomous System (có thể tạm dịch là “hệ tự trị” hay “hệ tự quản”).

Theo định nghĩa của các tổ chức quản lý mạng Internet trên thế giới, một AS là một nhóm của một hoặc nhiều IP prefix (địa chỉ mạng) được quản lý theo một chính sách định tuyến được định nghĩa rõ ràng, thống nhất. (Chúng ta có thể tham khảo định nghĩa này trên trang web của một tổ chức quản lý Internet cấp vùng bất kỳ, ví dụ, ARIN – quản lý Internet của khu vực Bắc Mỹ: https://www.arin.net/resources/guide/asn/)

Hiểu một cách đơn giản, một AS là một mạng doanh nghiệp kết nối vào Internet toàn cầu, trao đổi thông tin định tuyến với các mạng doanh nghiệp khác trên Internet, từ đó có thể định tuyến cho dữ liệu di chuyển trên Internet. Mạng Internet của thế giới là một mạng khổng lồ của vô số các AS kết nối với nhau. 

Ví dụ tiêu biểu cho các AS chính là các ISP. Viettel, VNPT, FPT Telecom,.v.v… chính là các AS góp một phần tạo thành Internet toàn cầu. Một mạng doanh nghiệp thông thường cũng có thể trở thành một AS trong một số trường hợp đặc biệt (chúng ta sẽ trao đổi trong một bài viết khác về những trường hợp này); tuy nhiên, trong đa số các trường hợp, một mạng doanh nghiệp, một mạng gia đình không cần thiết phải trở thành một AS để có thể kết nối Internet mà các mạng này chỉ cần đăng ký là thuê bao của một ISP nào đó để có thể truy nhập Internet. Khi đó, mạng doanh nghiệp/gia đình ấy trở thành một phần của AS tương ứng với ISP mà nó là thuê bao (ví dụ: khi ta là thuê bao Internet của Viettel, ta được cấp phát IP Public của Viettel và trở thành một phần của AS Viettel trên Internet).

Một AS cần được định danh duy nhất bằng một giá trị gọi là Autonomous System Number (ASN). Dải giá trị này được quản lý bởi tổ chức quốc tế IANA (Internet Assigned Numbers Autority), được phân bổ xuống các cơ quản quản lý Internet cấp vùng rồi đến các cơ quan quản lý Internet cấp quốc gia, từ đó cấp phát cho các doanh nghiệp muốn trở thành một AS để kết nối vào Internet toàn cầu. Tại Việt Nam, cơ quan VNNIC (Trung tâm Internet Việt Nam) là cơ quan cấp phát các giá trị ASN cho các doanh nghiệp trên phạm vi lãnh thổ của Việt Nam. 

ASN có hai định dạng: 2 – byte hoặc 4 – byte. Với dải 2 – byte, các ASN nằm trong phạm vi từ 0 đến 65535; với dải 4 – byte, các ASN nằm trong phạm vi từ 0 đến 232 – 1. 

Ví dụ: Nhà mạng Viettel sở hữu hai giá trị ASN là 7552 và 24086. Tất cả các IP public của Viettel trên Internet đều thuộc về hai AS này.

Trở lại với vấn đề định tuyến: trên Internet toàn cầu, giữa các AS với nhau, để chạy định tuyến nhằm trao đổi thông tin về các địa chỉ IP, người ta sử dụng giao thức định tuyến ngoài là BGP; ngược lại, trong nội bộ mỗi AS, người ta lại sử dụng các giao thức định tuyến trong (RIP, OSPF, EIGRP, IS – IS) (hình 1).

 

Hình 1 – Định tuyến trong và định tuyến ngoài.

 

eBGP và iBGP:

Dù BGP được thiết kế để chạy định tuyến giữa các AS nhưng để chạy giao thức này, ta vẫn cần phải cấu hình trên từng router cụ thể. Trong một AS, một số router thích hợp sẽ được chọn để chạy BGP. Các router này sẽ bắt tay với nhau và bắt tay với các router thuộc các AS khác để xây dựng nên mạng lưới các router chạy định tuyến BGP. Thông tin định tuyến sẽ được các router BGP quảng bá vào và lan truyền đi trên mạng lưới này.

Thao tác bắt tay nhau giữa các router chạy BGP được gọi là BGP peering. Trong thao tác này, hai router chạy BGP với nhau sẽ gửi cho nhau các gói tin BGP để xây dựng một mối quan hệ neighbor; khi quan hệ neighbor được xây dựng thành công, hai router này có thể bắt đầu trao đổi thông tin định tuyến với nhau. 

Giao thức định tuyến BGP sử dụng phương thức truyền tải là TCP. Các gói tin BGP sẽ được đóng vào các TCP segment để trao đổi giữa hai router. Do đó, để xây dựng một BGP peering giữa hai router, trước hết, một kết nối TCP phải được thiết lập giữa hai router này. Router khởi tạo kết nối TCP sẽ sử dụng một port ngẫu nhiên lớn hơn hoặc bằng 1024 và router đón nhận kết nối phải mở port 179 cho TCP. Ta nói BGP chạy trên nền TCP, sử dụng port 179. Người quản trị cần nắm được điều này để cấu hình chính sách cho phù hợp trên các thiết bị kiểm soát các luồng dữ liệu (ví dụ: Firewall), các thiết bị kiểm soát cần phải cho qua các luồng TCP với port 179.

Một điểm đáng chú ý khác khi BGP sử dụng TCP để truyền tải là TCP không hỗ trợ gửi dữ liệu theo nhóm nên việc thiết lập quan hệ neighbor giữa hai router BGP hoàn toàn sử dụng phương thức unicast. Điều đó có nghĩa là, người quản trị bắt buộc phải khai báo tường minh địa chỉ IP của từng neighbor mà router đang xét muốn thiết lập peering. Các neighbor trong BGP về nguyên tắc phải được khai báo bằng tay (manually). BGP không hỗ trợ thiết lập neighbor một cách tự động bằng phương thức multicast như với các giao thức định tuyến trong.

Quan hệ láng giềng BGP (hay BGP peering) có thể được thiết lập giữa các router thuộc cùng một AS hoặc giữa các router nằm trên hai AS khác nhau. Trường hợp đầu được gọi là iBGP peering (internal BGP) và trường hợp sau được gọi là eBGP peering (external BGP) (hình 2 và hình 3). 

 

Hình 2 – iBGP peering.

 

Hình 3 – eBGP peering.

Vì BGP chạy trên nền TCP nên hai router BGP peer với nhau không nhất thiết phải kết nối trực tiếp với nhau như với các giao thức định tuyến trong. Hai router muốn peering với nhau chỉ cần đảm bảo hai địa chỉ IP của chúng có thể đi đến nhau được để có thể thiết lập được kết nối TCP từ đó xây dựng BGP peeing. Tuy nhiên, mặc định, điều này chỉ áp dụng cho iBGP peering; với eBGP peering, hai router vẫn phải sử dụng các IP kết nối trực tiếp để thiết lập peering với nhau. Chúng ta có thể cấu hình trên các router để thay đổi quy định mặc định này, cho phép hai router có thể xây dựng eBGP peering bằng các địa chỉ IP không kết nối trực tiếp với nhau (điều này sẽ được giới thiệu trong một bài viết khác của chuỗi bài này). 

Giao thức Path – vector:

Bên cạnh việc phân chia các giao thức định tuyến thành định tuyến trong và định tuyến ngoài như đã trình bày ở trên, còn có một cách phân chia rất phổ biến khác là chia các giao thức thành hai nhóm: Distance – vector và Link – state

 

  • Với Distance – vector, các router quảng bá thông tin định tuyến là các IP prefix trong bảng định tuyến cùng với giá trị metric tối ưu để đi đến được các IP prefix này (chúng ta gọi là quảng bá các route trong bảng định tuyến). Mỗi router chạy giao thức distance – vector không có hiểu biết về topology mạng mà chỉ nhìn thấy không xa hơn các router neighbor kết nối trực tiếp với nó. Mọi quyết định định tuyến mà một router đưa ra hoàn toàn dựa vào thông tin định tuyến được cung cấp bởi neighbor và router sẽ chọn hướng đi theo neighbor nào cung cấp thông tin với giá trị metric tốt nhất. Để tránh lỗi có thể xảy ra vì một router không thấy được topo mạng mà chỉ dựa hoàn toàn vào neighbor trong định tuyến, các giao thức Distance – vector đều phải tích hợp các cơ chế chống loop để tránh mọi trường hợp đưa ra quyết định định tuyến có thể gây ra loop trong vận chuyển dữ liệu.

  • Với Link – state, các router không quảng bá các IP prefix trong bảng định tuyến, mà chúng trao đổi với nhau thông tin về các đường link trên sơ đồ. Mỗi router sẽ phát đi thông tin trạng thái đường link cho tất cả các cổng của nó đến mọi router khác đồng thời nhận về thông tin trạng thái đường link của tất cả các router này. Từ thông tin nhận được, router sẽ tổng hợp và xây dựng được “hình ảnh” về topology mạng mà nó đứng trong đó. Với link – state protocol, mỗi router đều có hiểu biết về sơ đồ mạng mà nó tham gia, từ đó chạy một giải thuật quét toàn bộ sơ đồ mạng này và tính ra được đường đi tối ưu đến mọi địa chỉ trên sơ đồ mạng. Điểm khác biệt cơ bản giữa link – state và distance – vector là router chạy link – state có “view” về topology mà nó tham gia còn router distance – vector thì chỉ nhìn thấy các router neighbor mà thôi.

 

Các giao thức định tuyến trong RIP và EIGRP là các giao thức thuộc về nhóm Distance – vector, còn các giao thức OSPF và IS – IS là thuộc về nhóm Link – state.

Giao thức định tuyến BGP được thiết kế theo phương thức hoạt động của Distance – vector với đầy đủ những đặc trưng như đã nêu ở trên. Tuy nhiên, để đo đạc mức độ tối ưu của tuyến đường, BGP không chỉ sử dụng đơn thuần một giá trị metric như với các giao thức Distance – vector mà nó sử dụng một bộ thông số rất phong phú gọi là Path – Attribute (thuộc tính đường đi). Vì điều này, BGP được gọi là giao thức Path – vector. Khi làm việc với BGP, chúng ta có thể sử dụng những đặc trưng của Distance vector để tìm hiểu, thao tác và xử lý sự cố; chỉ có một điểm khác biệt là chúng ta cần phải nắm vững từng loại thuộc tính đường đi của BGP để xác định được các hướng đi tối ưu mà giao thức này sẽ chỉ ra.

Các Path – atrribute và phương pháp chọn đường tốt nhất dựa trên các giá trị này sẽ được đề cập cụ thể trong một bài viết khác về Tiến trình chọn đường của BGP.

Các bảng dữ liệu của BGP:

Router chạy BGP sử dụng 3 bảng dữ liệu cơ bản sau đây:

 

  • Bảng neighbor: Bảng này bao gồm thông tin về tất cả các router mà đã thiết lập BGP peering với router đang xét. Thông tin sẽ liệt kê ra địa chỉ IP của router neighbor, trạng thái của quan hệ peering với neighbor này và nhiều vấn đề liên quan khác.

  • Bảng BGP: Các router neighbor đã thiết lập peering thành công với router đang xét sẽ gửi tất cả các IP prefix cùng với bộ thông số tốt nhất mà chúng tính được cho router này. Router đang xét sẽ đưa toàn bộ thông tin nhận được vào một “kho chứa” là bảng BGP. Là một giao thức được xây dựng theo phương thức distance – vector, một router BGP chỉ quảng bá cho láng giềng những “route” tốt nhất mà nó có. Do vậy, bảng BGP của một router là kho chứa những thông tin định tuyến tốt nhất mà các láng giềng gửi tặng.

  • Bảng định tuyến: Router BGP sẽ sử dụng một tiến trình có tên gọi là Tiến trình chọn đường BGP (BGP path selection process) quét qua toàn bộ bảng BGP vừa nêu. Tiến trình này sẽ chọn ra những route tốt nhất trong các route được lưu trong bảng BGP để đưa vào bảng định tuyến sử dụng làm đường đi chính thức đến các địa chỉ mạng đích, đồng thời router BGP sẽ tiếp tục quảng bá những route tốt nhất vừa chọn này đến các neighbor kế tiếp. Như đã nêu ở trên, bảng BGP vốn đã chứa trong nó các route tốt nhất do các neighbor quảng bá cho router đang xét, vậy thì, bảng định tuyến của BGP là nơi chưa những route “tốt nhất được lấy ra từ những cái tốt nhất” bởi tiến trình chọn đường BGP.

 

Nếu đã tìm hiểu về giao thức định tuyến EIGRP của Cisco, chúng ta sẽ thấy cấu trúc 3 bảng này rất giống với 3 bảng mà giao thức EIGRP sử dụng: bảng neighbor, bảng topology và bảng định tuyến. Trong đó bảng Topology của giao thức EIGRP có chức năng tương tự như với bảng BGP của giao thức BGP. Nhắc lại rằng EIGRP là một giao thức định tuyến điển hình của trường phái Distance – vector. 

Các loại thông điệp của BGP:

Tuy là một giao thức phức tạp và có quy mô rất lớn nhưng BGP lại chỉ quy định rất ít các loại thông điệp mà nó sử dụng trong trao đổi thông tin. Các loại thông điệp do BGP sử dụng chỉ gồm có 4 loại:

 

  • Open: Đây là loại thông điệp được sử dụng để thiết lập BGP peering.

  • Keepalive: Sau khi BGP peering giữa hai router được thiết lập thành công, các router thường xuyên trao đổi với nhau loại thông điệp này để giám sát sự tồn tại của nhau nhằm có phản ứng thích hợp khi xảy ra sự cố. 

Ta có thể thấy, hai loại thông điệp Open và Keepalive đảm nhận nhiệm vụ của các gói tin Hello của các giao thức định tuyến trong như EIGRP, OSPF.

  • Update: Đây là loại thông điệp chuyển tải thông tin về các địa chỉ mạng (IP prefixes) và các thuộc tính đường đi đính kèm theo các địa chỉ mạng ấy. Loại thông điệp này tương đương với các loại gói tin routing update của các giao thức Distance – vector.

  • Notification: Đây là loại thông điệp chuyên dùng để cảnh báo lỗi trong BGP peering. Khi xảy ra lỗi trong peering, các router sẽ gửi cho nhau các thông điệp loại này với mã lỗi thích hợp. Người quản trị có thể căn cứ vào các mã lỗi nhận được để từ đó có cách xử lý phù hợp.

 

Trên đây là một vài điểm khái quát và cơ bản nhất về giao thức định tuyến BGP. Trong các bài viết tới, chúng ta sẽ tiếp tục đi vào các chi tiết cụ thể hơn về giao thức này, bao gồm cả phần cấu hình trên thiết bị của Cisco.

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!