BGP, viết tắt của từ tiếng Anh Border Gateway Protocol, một giao thức định tuyến sử dụng ở hạ tầng Internet và các ISPs. Không giống như các giao thức định tuyến khác như: Distance Vector (RIPv1/RIPv2), hay Link State (OSPF, IS-IS), hoặc hybrid như EIGRP, BGP là giao thức định tuyến Path Vector.
BGP không chỉ trao đổi khoảng cách (hop) đến một network mà BGP còn phân tích đường đi đến network đó (path attribute), các router quảng bá network đó trên đường đi nhằm chống loop.
Internet là một tập hợp các ASN (Autonomous System Number) và để trao đổi thông tin định tuyến giữa các ASN, BGP là một lựa chọn thích hợp nhất. ASN là một dãy số có độ dài 16 bit trải dài từ 1 -> 65535. Trong đó dãy 64512 -> 65535 được giữ lại cho internal routing (tương tự như các dãy 10.0.0.0/8 hoặc 172.16.0.0/12 hoặc 192.168.0.0/16). BGP sử dụng TCP port 179 để trao đổi thông tin.
Như đã phân tích, BGP là giao thức định tuyến của Internet giữa các ASN, chúng ta có khoảng 300,000 routes trên Internet cho nên nếu bạn không thực sự có nhu cầu sử dụng BGP thì các bạn không nên dùng nó vì tính chất phức tạp và yêu cầu phần cứng rất cao. Tưởng tượng router phải chứa hơn 300,000 route thì nó trở nên như thế nào? Một ví dụ cho trường hợp khách hàng cá nhân muốn dùng BGP là khi họ có hơn 2 kết nối đến 2 ISP khác nhau. Mặt khác, các BGP speaker có bảng định tuyến riêng dành cho BGP, khác với IGP là chung 1 bảng định tuyến. Theo mình nhận xét thì BGP thực sự dùng để kiểm soát inbound traffic hơn là outbound traffic đứng trên lập trường của khách hàng.
Để trao đổi thông tin định tuyến, việc đầu tiên mà BGP phải làm là thiết lập quan hệ neighbor với các BGP router khác. Quan hệ đó gọi là peer và các router chạy giao thức BGP gọi là BGP speaker. Trong BGP, chúng ta có 2 loại peers. Quan hệ giữa 2 BGP speaker trong cùng 1 AS gọi là iBGP peer (Internal BGP). Trái lại, quan hệ giữa 2 BGP speaker ở khác AS gọi eBGP. Có rất nhiều bạn bị nhầm giữa iBGP và IGP. IGP là Interior Gateway Protocol (RIP,OSPF,IS-IS,EIGRP,IGRP) đối lập hoàn toàn với EGP là Exterior Gateway Protocol (BGP).
Để thiết lập quan hệ neighbor, BGP speaker sẽ trao đổi các message dưới đây: OPEN Message, KEEPALIVE Message, UPDATE message và NOTIFCATION Message (Message này xuất hiện khi quan hệ neighbor bị lỗi như host unreachable)
Các bạn nhìn vào hình vẽ mình thu được bằng Wireshark khi 2 BGP speaker trao đổi các gói tin này trong comment.
Trong lúc trao đổi các messages này, BGP speaker sẽ thay đổi trạng thái của neighbor (BGP State) tương ứng. Quá trình này có tên là BGP Finite-State Machine (FSM). Các bạn xem trạng thái của BGP neighbor trong hình vẽ ở comment.
Khi thiết lập quan hệ neighbor, chúng ta sẽ có 2 trường hợp sau đây:
Trong cùng một AS, các BGP speaker có thể thiết lập quan hệ neighbor mà KHÔNG NHẤT THIẾT phải kết nối trực tiếp với nhau.
Vì lý do này, các bạn hoàn toàn có thể lợi dụng IGP route để các BGP speaker có thể nói chuyện được với nhau trong cùng 1 AS và thiết lập quan hệ neighbor. Đối với các BGP speaker ở các AS khác nhau, khi thiết lập quan hệ neighbor, điều đầu tiên BGP speaker kiểm tra là chúng có kết nối trực tiếp với nhau không? Nếu không thì khi show ip bgp neighbors, các bạn sẽ thấy neighbor có một dòng tên là External BGP neighnor not directly connected. Lúc này các bạn phải dùng đến yếu tố ebgp-multihop.
Bạn định nghĩa ebgp-multihop x với x là số hop để đến được neighbor của mình, nếu các bạn không định nghĩa số này thì BGP speaker sẽ set nó là 255.
Tiếp theo là BGP synchronization. Hồi xưa khi mình còn là helpdesk non nghề, các router lúc đó chưa tắt tính năng này dẫn đến việc là nếu các routers trong một AS nằm giữa 2 AS khác, AS đó còn gọi là transit, mà không có BGP route thì 2 AS ở 2 đầu sẽ không quảng báo BGP route cho nhau được. Ví dụ thế này, AS 100 <---> AS 200 <--> AS 300, AS 200 đóng vai trò là transit. Tất cả router trong AS 200 dù là BGP speaker hay không phải là BGP speaker đều phải học route do ASBR của AS 100 quảng bá cho AS 300. Điều này khiến cho chúng ta phải quảng bá BGP route của AS 100 vào IGP router trong AS 200 để đảm bảo các router trong AS này đều biết sự có mặt của BGP route. Nếu không thì AS 100 sẽ không nói chuyện được với AS 300 và ngược lại. Nếu AS của bạn không phải là transit thì các bạn có thể bật no synchronization hoặc phải đảm bảo là các bạn đã quảng bảo BGP router vào IGP. Thường thì thực tế không gặp nhưng khi làm lab CCIE, các bạn có thể gặp và xử lý nó.
0 Nhận xét