1.1 KHÁI NIỆM
1.1.1 Khái niệmBorder Gateway Protocol
Border Gateway Protocol(BGP) là một giao thức định tuyến liên miền được sử dụng để trao đổi thông tin trên Internet. Internet được tạo nên từ vô số AS(Autonomous System). BGP được dùng để truyền thông tin định tuyến giữa các AS khác nhau. Bởi vậy, BGP là một giao thức định tuyến rất mạng và tin cậy, nó giúp cho người quản trị có thể dễ dàng ứng dụng các chính sách định tuyến.
BGP đã được sáng tạo từ 1 khoảng thời gian khá lâu rồi. BGP được tạo ra vào năm 1989 và được biết đến là BGP version 1. BGPv1 là một giao thức định tuyến phân lớp( classful) và không cho phép gộp các route(Sum routes). Để cải thiện những hạn chế của BGPv3, một BGP mới đã được tạo ra và được gọi là BGP version 4.BGPv4 được tạo ra vào năm 1993. Nó giới thiệu sự hữu ích của định tuyến liên miền không phân lớp (Classless Inter-Domain Routing CIDR) và cho phép gộp, tóm tắt các route (Sum routes).
BGP sử dụng một giao thức kiểm soát truyền tin cậy để truyền các gói tin và đó chính là TCP (Transmission Control Protocol). Nó sử dụng port 179 của TCP để các thiết lập kết nối. Bởi vì TCP là giao thức kiểm soát truyền tin cậy tại Layer 4, BGP có thể loại bỏ sự bổ sung fragmentation,retransmission,acknowledgment và sequencing.
Một chú ý nữa về BGP là nó ko quan tâm về việc định tuyến trong AS. Các IGPs (Interior Gateway Protocols) được dùng trong AS sẽ đảm nhiệm việc đó. BGP chỉ chú trọng đến định tuyến liên miền( Inter-AS Routing). Một BGp speaker sẽ chia sẻ thông tin network với các neighbor BGP speaker. Thông tin network đó bao gồm tất cả các AS khác mà nó có. Thông tin này sẽ được BGP speaker sử dụng để tạo một biểu đồ, hoặc cây từ tất cả các AS vừa nhận được. Biểu đồ đó sẽ giúp BGP bỏ sự lặp tuyến (routing loops) và thiết lập các chính sách nhất định cho các AS.
1.1.2 Các khái niệm liên quan
Autonomous system: trước đây được định nghĩa là để chỉ một tập hợp các thiết bị mạng cùng chung một chính sách quản lý sử dụng một IGP cho định tuyến nội và một EGP và định tuyến ngoại. Với những thay đổi lớn qua từng năm, định nghĩa về AS đã được thay đổi. Một AS được xem là một tập các thiết bị cùng chung một chính sách quản lý mà có một hay nhiều IGPs để điều khiển định tuyến nội và một EGP cho định tuyến ngoại(định tuyến liên miền). Mặc dù một AS có rất nhiều IGP hoạt động tại cùng một thời điểm, các AS khác sẽ chỉ thấy AS đó có một sự định tuyến nội duy nhất. Điều này cho phép sự hoạt động của nhiều IGP autonomous systems( ví dụ: EIGRP 100, EIGRP 200), nhưng EGP lại không như vậy.
- BGP speaker: bất kì một thiết bị nào đang chạy BGP được gọi là BGP speaker.
- Peers: khi 2 BGP speaker thiết lập một kết nối TCP, chúng được gọi là peers. Thuật ngữ peers và neighbor là tương tự nhau.
- eBGP: External Border Gateway Protocol là giao thức định tuyến được sử dụng để trao đổi thông tin định tuyến giữa 2 BGP peers nằm ở hai AS khác nhau.
- iBGP: Internal Border Gateway Protocol là giao thức định tuyến được sử dụng để trao đổi thông tin định tuyến giữa 2 BGP peers nằm trong cùng 1 AS.
- Inter-AS Routing: là định tuyến xảy ra giữa 2 AS khác nhau.
- Intra-AS Routing: là định tuyến xảy ra trong cùng 1 AS.
1.1.3 Thuật ngữ trong BGP
BGP được biết đến là giao thức định tuyến của Internet. BGP giúp cho sự trao đổi thông tin định tuyến giữa các AS khác nhau đi khắp toàn cầu.
Chúng sử dụng BGP để chia sẻ thông tin định tuyến.Có 2 loại BGP: Internal BGP(iBGP) và External BGP(eBGP).
Tất cả các BGP speaker trong cùng một AS sử dụng iBGP để liên lạc với những speaker khác.Có một số lưu ý quan trọng về Multiple BGP Speakers trong cùng một AS:
Tất cả các BGP speaker phải là peers của 1 BGP speaker khác.Nghĩa là bạn phải thiết lập một full mesh(các thiết bị đều có kết nối đến tất cả các thiết bị khác nó)để iBGP hoạt động ổn định. Nó không có nghĩa là tất cả các thiết bị đều phải kết nối đến các thiết bị khác- chỉ cần tất cả các BGP Speaker đều phải có Layer 3 hoạt động bình thường. iBGP sẽ sử dụng TCP để tạo peering sessions giữa các iBGP peers.
Một tính chất khác của iBGP peers là chúng sẽ không quảng bá đường định tuyến nhận bằng iBGP cho peers khác. Những đường định tuyến nội này sẽ được quảng bá đi trong AS bằng IGB. BGP không phải là để thay thế IGP nên đừng hiểu nhầm chỉ vì iBGP hoạt động trong 1 AS. Khi iBGP speaker quảng bá một đường định tuyến học từ eBGP đến iBGP peers của nó, đáng lẽ phải là tất cả các speakers trong AS đó nhưng nó không cần làm vậy bởi vì tất cả các iBGP peers đã được thông náo về đường định tuyến đó bởi iBGP peer của nó. Nếu bất kì một iBGP speaker sử dụng eBGP, nó sẽ quảng bá đường định tuyến học từ iBGP cho eBGP peers của nó.
Hình 1.1 Multiple AS.
External BGP(eBGP) được sử dụng giữa các BGP speaker nằm ở các AS khác nhau. Giống như iBGP, eBGP peering sesson yêu cầu các BGP speaker tham gia phải có layer 3 hoạt động bình thường(có thể truyền tin đến peers). TCP được sử dụng bởi eBGP để tạo một peering session.
Sau khi tạo ra các peer, BGP speaker sử dụng thông tin peering để tạo một biểu đồ loop-tree của các AS liên quan.Nó còn được gọi là BGP tree.
Khi BGP speaker đã tạo peers và tạo ra BGP tree, chúng sẽ trao đổi thông tin định tuyến. BGP speaker trước tiên sẽ trao đổi bảng định tuyến BGP. Từ đó trở đi, peers sẽ trao đổi thông tin update của bảng định tuyến BGP của chúng và gói tin KEEPALIVE để giữ kết nối.
Ghi chú:bảng định tuyến BGP không phải là Bảng định tuyến IP.Hơn nữa bảng định tuyến BGP giống như là một topology database, nó chứa entries mà không bao giờ có trong bảng định tuyến IP. Khi dùng câu lệnh “show ip route bgp”sẽ hiển thị đường định tuyến học qua BGP mà được cho vào bảng định tuyến IP.
1.2. HOẠT ĐỘNG CỦA BGP
1.2.1 Định dạng phần đầu thông điệp
Một message có tối thiểu là 19 octets hay tối đa là 4096 octets.
Cấu trúc cơ bản của message trong BGP là:
16-byte Marker.
2-byte Length.
1-byte Type
Marker: trường Marker dài 16 bytes. Nó được sử dụng để phát hiện sự mất đồng bộ hóa giữa các BGP peers và dùng để xác thực các message về sau.Giá trị nằm trong trường Marker tùy thuộc vào loại message. Nếu là một Open message thì sẽ không có thông tin xác thực.
Length: dài 2 bytes, nó chứa chiều dài của message kể cả trường Marker. Giá trị trong trường này nhỏ nhất là 19 và không được lớn hơn 4096.
Type: dài 1 bytes. Chứa mã qui định loại của message. Có 4 loại message:
Loại giá trị |
Loại thông điệp |
1 |
Thông điệp OPEN |
2 |
Thông điệp UPDATE |
3 |
Thông điệp NOTIFICATION |
4 |
Thông điệp KEEPALIVE |
1.2.2 Thông điệp OPEN
OPEN message là loại message được gửi đầu tiên sau khi TCP session được thành lập.Khi OPEN message được chấp nhận, một KEEPALIVE message được gửi trả về để xác thực là OPEN message đã được chấp nhận. Sau khi KEEPALIVE đã được gửi, chúng sẽ gửi tiếp UPDATE message, NOTIFICATION message, cuối cùng KEEPALIVE message sẽ được trao đổi giữa các BGP peers.
Cấu trúc của OPEN message:
Version: dài 1 byte và nó cho biết version của BGP để neighbor sử dụng version cho phù hợp. BGP speakers sẽ chọn version cao nhất mà 2 speaker có thể chạy được. Nếu BGP speaker nhận không thể chạy theo số version trong trường này qui định thì gói tin báo lỗi sẽ được gửi trả về cho người nhận và TCP session sẽ bị hủy. TCP session sẽ được thiết lập lại và số version sẽ thấp hơn số version lúc trước. Điều này sẽ lặp đi lặp lại cho đến khi chúng tìm được một version cả 2 cùng hỗ trợ được.
My Autonomous System: dài 2 bytes và chứa số AS của BGP speaker gửi gói OPEN đi.Trường này sẽ giúp cho BGP speaker nhận gói OPEN biết được AS của neighbor của nó và nó còn được dùng trong tạo BGP tree của BGP speaker.
HoldTime: dài 2 bytes và giúp cho BGP speaker nhận biết được giá trị đề xuất cho holdtime của BGP speaker gửi. BGP speaker nhận sẽ so sánh giá trị nhỏ nhất giữa holdtime của nó và holdtime nhận được. Điều này sẽ quyết định số giây mà BGP speaker sẽ đợi để nhận KEEPALIVE hoặc UPDATE message. Nếu một trong những message đó không được nhận trong khoảng thời gian qui định, neighbor đó sẽ được coi là dead. Mỗi lần nhận message, holdtime sẽ reset về 0. Không giống như tham số BGP version, kết nối sẽ phải reset để tìm được thông số chung, tìm holdtime chung không cần reset kết nối.
BGP speaker có thể set holdtime là 0. Nếu điều đó xảy ra sẽ không có KEEPALIVE message được gửi. Như vậy kết nối luôn luôn đảm bảo. Holdtime bằng 0 cũng gây ra trở ngại khi kết nối của 1 peers có vấn đề. Bởi vì KEEPALIVE message không được trao đổi , peers kia sẽ không biết sự mất kết nối xảy ra. Nếu giá trị của holdtime không bằng 0 thì nó phải lớn hơn hoặc bằng 3.
BGP Identifier: dài 4 bytes và chứa BGP identifier của BGP speaker gửi. BGP identifier tương tự như router ID(RID) trong OSPF. Nó gán chỉ số ID cho từng BGP speaker riêng biệt. Giống như OSPF RID, BGP identifier sẽ là giá trị IP cao nhất của interface Loopback. Nếu router không có Loopback, nó sẽ chọn địa chỉ IP cao nhất của interface vật lý trên router. BGP identifier sẽ được chọn khi BGP khởi động trên router. Nói cách khác, khi BGP identifier đã được chọn, bạn không thể thay đổi được trừ khi bạn cài đặt lại BGP. Tốt nhất là bạn nên set IP cho interface Loopback để chọn BGP identifier mong muốn.
Optional Parameters Length: dài 1 byte và nó qui định kích thước của trường Optional Parameter. Giá trị 0 của trường này biểu thị cho không có Optional parameter nào được chọn.
Optional Parameters: chứa 1 danh sách các optional parameters sẽ được sử dụng trong thỏa hiệp BGP neighbor Mỗi optional parameter có cấu trúc<parameter type, parameter length, parameter value>
Parameter Type: dài 1 byte và dùng để định dạng parameter.
Parameter Length: dài 1 byte và chứa giá trị kích cỡ của Parameter Value.
Parameter Value: có độ dài nhất định, được biểu diễn dựa trên giá trị của Parameter Type.
Hình 1.4…………..
1.2.3. Thông điệpUPDATE
Sau khi BGP speakers đã trở thành peers, chúng sẽ trao đổi UPDATE message. UPDATE message chứa thông tin định tuyến cho BGP, chúng sẽ được dùng để tạo ra môi trường định tuyến Loop-tree. UPDATE message không chỉ chứa các route để sử dụng, nó còn chứa các route không còn hoạt động nữa(Unfeasible Route). Một UPDATE message chỉ chứa 1 route để sử dụng nhưng nó có thể chứa hàng tá các route đã không hoạt động nữa để router xóa khỏi sơ đồ. Những route không còn hoạt động được quảng bá trong UPDATE message nằm trong trường Network Layer Reachability Information (NLRI). Nếu nhưng một route chết ngay lúc UPDATE message vừa lấy thông tin route thì nó sẽ không nằm trong trường NLRI của message đó.
Cấu trúc của UPDATE message:
Ø Trường Unfeasible Route Length: dài 2 bytes và chứa kích thước của trường Withdrawn Routes(những Unfeasible Routes). Giá trị 0 tức là không có trường Withdraw Routes trong UPDATE message.
Ø Trường Withdraw Routes: Chứa một danh sách tiền tố địa chỉ IP đã chết(không còn hoạt động). Những tiền tố này có 2 thuộc tính:
Length:dài 1 byte, chứa chiều dài, đơn vị là bit của IP prefix-list. Nếu nó có giá trị là 0, nghĩa là tất cả các IP prefix-list.
Prefix: chứa IP Prefix-list.
Ø Trường Total Path Attributes Length(TPAL): dài 2 bytes, chứa chiều dài của trường Path Attributes. Giá trị 0 tức là không có thông tin NLRI trong UPDATE message này.
Ø Trường Path Attributes: có kích thước thay đổi và chứa các chuỗi thuộc tính của 1 đường đi. Trường này luôn có trong tất cả các UPDATE message. Nếu nó rỗng thì TPAL là 0. Thông tin của nó dùng để tìm thông tin định tuyến nhất định và dùng cho định tuyến hoặc filter. Cấu trúc của chúng chia làm 3 phần: <attribute type, attribute length, attribute value>.
Trường Attribute Type dài 2 bytes và chứa trong nó các byte Attribute Flags và Attribute Type Code.
Attribute Flag: chứa các trạng thái qui định thuộc tính đường đi:
Well-known mandatory: thuộc tính phải được nhận bởi tất cả các thiết bị chạy BGP và chứa trong UPDATE message. Nếu thuộc tính này không có trong UPDATE message, TCP session sẽ bị hủy ngay lập tức.
Well-known discretionary: thuộc tính phải được nhận ra bởi tất cả thiết bị chạy BGP nhưng không cần thiết phải có trong UPDATE message.
Optional Transitive:cho phép các thuộc tính không bắt buộc và không được nhận ra bởi thiết bị chạy BGP, được chuyển đến BGP speaker’s peers.
Optional non-transitive: Nếu một thuộc tính không bắt buộc, không được nhận ra bởi 1 thiết bị chạy BGP và transitive flag chưa được set, thuộc tính này sẽ không được gửi đến BGP speaker’s peers.
Các thuộc tính đường đi được qui định dựa vào các bit trong Attribute flag như sau:
Bit có trọng số cao đầu tiên(bit 0) là optional bit. Nếu bit là 1 thì thuộc tính đường đi đó là optional. Nếu bit này là 0 thì thuộc tính đường đi sẽ là well-known.
Bit có trọng số cao thứ 2 (bit 1) là transitive bit. Nó định nghĩa thuộc tính optional là transitive hay không. Nếu bit này bằng 1 thì thuộc tính đó là optional transitive, nếu bit này bằng 0 thì thuộc tính đó là optional non-transitive. Nếu thuộc tính là well-known thì bit này luôn bằng 1.
Bit có trọng số cao thứ 3(bit 2) là partial bit. Nó qui định trạng thái của optional transitive là partial hay complete. Thuộc tính optional transitive hoàn chỉnh sẽ có bit này bằng 0, và thuộc tính optional transitive phân đoạn sẽ có bit này bằng 1. Tất cả well-known và optional non-transitive sẽ có bit này bằng 0.
Bit có trọng số cao thứ 4 (bit 3) là biến chiều dài mở rộng. Nó qui định kích thước của thuộc tính là 1 hay 2 bytes. Nếu kích thước là 1 thì bit này bằng 0. Nếu kích thước là 2 thì bit này bằng 1.
Bốn bit trọng số thấp (bit 4-7) không được sử dụng. Chúng bằng 0 hoặc không có.
Trường Attribute Type Code: nó qui định loại của thuộc tính đường đi.
Có một số loại cơ bản sau:
Mã loại |
Tên thuộc tính |
Loại |
1 |
1 ORIGIN |
Well-known mandatory |
2 |
AS_PATH |
Well-known mandatory |
3 |
NEXT_HOP |
Well-known mandatory |
4 |
MULTI_EXIT_DISC |
Optional non-transitive |
5 |
LOCAL_PREF |
Well-known discretionary |
6 |
ATOMIC_AGGREGATE |
Well-known discretionary |
7 |
AGGREGATOR |
Optional transitive |
8 |
COMMUNITY |
Optional transitive |
9 |
ORIGINATOR_ID |
Optional non-transitive |
10 |
CLUSTER_LIST |
Optional non-transitive |
11 |
DPA |
Destination point attribute for BGP |
12 |
Advertiser |
BGP/IDRP route server |
13 |
RCID_PATH/CLUSTER_ID |
BGP/IDRP route server |
14 |
Multiprotocol Reachable NLRI |
Optional non-transitive |
15 |
Multiprotocol Unreachable NLRI |
Optional non-transitive |
16 |
Extended Communities |
N/A |
… |
… |
… |
256 |
Reserved for development |
N/A |
ORIGIN: la một well-known mandatory attribute. AS tổng hợp thông tin định tuyến và tạo ra ORIGIN. Nó có trong tất cả các UPDATE message để quảng bá thông tin định tuyến.
AS-PATH:là một well-known madatory chứa danh sách tất cả các AS mà thông tin định tuyến đã đi qua. AS-PATH là một danh sách các AS path segments. Mỗi AS path segment được biểu diễn bởi <path segment type, path segment length, path segment value>.Khi BGP speaker quảng bá một route học được cho một BGP speaker khác trong AS của nó, BGP speaker sẽ không thay đổi giá trị AS-PATH, còn nếu nó quảng bá cho một speaker khác AS, nó sẽ thay đổi AS-PATH theo cách sau:
Với path segment thứ nhất của AS-SEQUENCE, BGP speaker sẽ thêm số AS của nó vào cuối của chuỗi.
Với path segment thứ nhất của AS-SET, BGP speaker sẽ thêm một path segment mới với AS-SEQUENCE có số AS của nó trong đó.
Khi BGP speaker tạo ra 1 route nó sẽ cho thuộc tính AS-PATH là rỗng khi truyền cho BGP speaker trong cùng AS, đó là iBGP peers. BGP speaker thêm số AS của nó trong AS-PATH khi quảng bá cho một speaker bên ngoài AS của nó, đó là eBGP peers.
NEXT_HOP:là một well-known mandatory,nó chỉ ra địa chỉ IP của router biên cần đi qua để tới đích. Sau đây là những rules của NEXT_HOP:
Trong eBGP, next hop là địa chỉ IP của neighbor ngoài AS đã quảng bá route cho router gửi.
Trong iBGP:
Internal Route(inside AS) sử dụng next hop để ghi địa chỉ IP của neighbor trong cùng AS đã quảng bá route cho router đó. Bởi vì iBGP peers sẽ không quảng bá lại những route đó đến những peers khác, next hop sẽ là iBGP peers quảng bá route trong AS. Bởi vì chúng ta có kết nối full mesh nên tất cả các speaker sẽ đồng thời đổ về next hop đó để lấy route.
External routes sử dụng cùng 1 địa chỉ next hop mà đã được quảng bá vào AS nhờ eBGP.Những địa chỉ next hop đó sẽ không thể thay đổi được trong AS.
Trong một multi-access network, nex hop sẽ là địa chỉ IP của interface quảng bá route cho router gửi, trong cùng multi-access media, giống như IGP vậy.
MULTI_EXIT_DISC:là một thuộc tính optional non-transitive.Nếu có entry hoặc exit point cùng đến 1 đích trong AS, nó sẽ được dùng để quyết định đường nào sẽ được chọn. Entry hoặc exit point có metric nhỏ nhất sẽ được sử dụng.
LOCAL_PREF:là thuộc tính well-known discretionary. Thuộc tính này được sử dụng bởi BGP speaker để thiết lập độ ưu tiên của 1 route, nó là thuộc tính quan trọng quyết định đường nào sẽ được chọn. BGP speaker luôn quảng bá gói tin có thuộc tính này cho iBGP peers của nó.
ATOMIC_AGGREGATE:là thuộc tính well-known discretionary. Khi BGP speaker nhận được một route trùng khớp từ peers của nó, nó sẽ set thuộc tính ATOMIC_AGGREGATE. Thuộc tính đó được set nếu BGP speaker summarized route đó về subnetmask ngắn hơn.
AGGREGATOR:là thuộc tính optional transitive. Khi BGP speaker summarized routes, thuộc tính này sẽ được gán chỉ số AS và BGP identifier.
COMMUNITY:là thuộc tính optional transitive. Thuộc tính này qui định communities mà route thuộc về. Chúng sẽ được nói rõ ở BGP nâng cao.
ORGINATOR_ID:là thuộc tính optional non-transitive. Một BGP speaker làm nhiệm vụ route reflector sẽ tạo ra thuộc tính này. BGP identifier làm nhiệm vụ route reflector sẽ được gán vào thuộc tính này. Thuộc tính này chỉ dùng trong local AS.
CLUSTER_LIST:là thuộc tính optional non-transitive. Thuộc tính này bao gồm một danh sách giá trị CLUSTER_ID. Khi một route reflector reflect một route, nó sẽ gắn giá trị CLUSTER_ID của nó vào CLUSTER_LIST.
Ø Trường Network Layer Reachability:
Khi BGPv4 ra đời, hỗ trợ Classless interdomain routing(CIDR). BGPv4 có thể quảng bá các route không dùng classful. Nó nhờ vào trường này(NLRI).
NLRI có chiều dài thay đổi, nó chứa prefix địa chỉ IP của 1 route.Cấu trúc như sau:
Length: qui định chiều dài của prefix địa chỉ IP. Nó gần như tương tự subnet mask. Nếu giá trị bằng 0, nó chỉ ra tất cả các địa chỉ IP.
Prefix: chiều dài thay đổi, chứa địa chỉ IP.
1.2.4 Thông điệp KEEPALIVE
Nó được sử dụng để đảm bảo kết nối vẫn tồn tại giữa các peers. KEEPALIVE message được gửi khi cần restart giá trị hold timer. Chu kì gửi KEEPALIVE có giá trị bằng 1/3 giá trị holdtime. Vậy nên giá trị holdtime nhỏ nhất phải là 3. KEEPALIVE sẽ không được gửi nếu có 1 UPDATE message đang được gửi đi, còn nếu holtime =0 thì KEEPALIVE không bao giờ được gửi nữa.
1.2.5 Thông điệp NOTIFICATION
Khi có lỗi xảy ra trong BGP session, BGP speaker sẽ tạo ra một NOTIFICATION Message, cùng lúc đó session cũng bị hủy. Message này chứa mã lỗi(error code) và mã phân lỗi (error sub-code) giúp người quản trị dễ dàng troubleshoot.
Định dạng thông điệp NOTIFICATION
Trường Error Code:kích thước 1 byte và có 6 mã lỗi có thể xảy ra.Trường Error Sub-code kích thước 1 byte chứa mã phân lỗi. Chỉ có 3 lỗi có phân lỗi.Bên dưới là các lỗi có thể xảy ra:
Bảng 1.3
CÒN TIẾP....
» Tin mới nhất:
» Các tin khác: