You are on page 1of 16

BGP

Ý tưởng và nguyên lý hoạt động của BGP


BGP là một giao thức khá phức tạp được dùng nhiều trên Internet và trong các công ty đa quốc gia. Mục
đích chính của BGP là kết nối các mạng rất lớn hoặc các Autonomous-System. Các công ty lớn có thể
dùng BGP như là một kết nối giữa các mạng ở các quốc gia khác nhau. Mục đích của các giao thức
ngoại như BGP là không chỉ tìm ra một đường đi về một mạng nào đó mà còn cho phép người quản trị
tìm ra các AS của các network. Các giao thức nội như EIGRP, RIP, OSPF và ISIS sẽ tìm ra network mà
người quản trị cần.

BGP là một giao thức định tuyến dạng path-vector nên việc chọn lựa đường đi tốt nhất thông thường
dựa trên một tập hợp các thuộc tính được gọi là ATTRIBUTE. Do sử dụng metric khá phức tạp, BGP
được xem là một giao thức khá phức tạp. Nhiệm vụ của BGP là đảm bảo thông tin liên lạc giữa các AS,
trao đổi thông tin định tuyến giữa các AS, cung cấp thông tin về trạm kế cho mỗi đích đến. BGP sử dụng
giao thức TCP cổng 179. Như các các giao thức nhóm distance vector thường quảng bá thông tin hiện
có đến các router láng giềng, còn path vector chỉ ra chính xác danh sách toàn bộ đường dẫn đến đích.
Ngoài ra các giao thức định tuyến hoạt động dùng path vector giúp việc xác định vòng lặp trên mạng rất
tốt bằng cách xem xét các con đường mà các router khác gửi về xem có chính bản thân AS trong đó hay
không, nếu có sẽ biết được ngay là lặp, và sẽ loại bỏ.

BGP hỗ trợ cho các địa chỉ CIDR (Classless Interdomain Routing). BGP cho phép dùng xác thực và
BGP có các cơ chế keepalive định kỳ nhằm duy trì quan hệ giữa các BGP peers. Trong giai đoạn ban
đầu của của phiên thiết lập quan hệ BGP, toàn bộ các thông tin routing-update sẽ được gửi. Sau đó, BGP
sẽ chuyển sang cơ chế dùng trigger-update. Bất kỳ một thay đổi nào trong hệ thống mạng cũng sẽ là
nguyên nhân gây ra trigger-update.

Một trong các đặc điểm khác biệt nhất của BGP là trong các routing-update của nó. BGP đảm bảo rằng
lớp transport đã truyền các update và các cơ sở dữ liệu về đường đi đã được đồng bộ. Khi dùng BGP để
kết nối các AS khác nhau, BGP được gọi là eBGP. Còn dùng BGP để kết nối trong một AS được gọi là
iBGP.
Trong một AS ta sử dụng giao thức định tuyến nội IGP (ví dụ như RIP, ISIS, EIGRP, OSPF) nhưng khi
ra ngoài một AS thì phải sử dụng một giao thức khác. Vấn đề ở đây chính là mục đích của các IGP và
EGP không giống nhau. Các IGP thực hiện định tuyến gói đi từ nguồn đến đích mà không cần quan tâm
đến chính sách định tuyến (policy). Trong khi ra khỏi phạm vi một AS thì chính sách định tuyến lại là
vấn đề quan trọng.

Cơ chế hoạt động của IBGP


IBGP không thay đổi thuộc tính AS-PATH của một tuyến do đó để chống loop, sử dụng qui luật split-
horizon: một BGP peer sẽ không gửi các tuyến được học từ IBGP đến một BGP peer khác. Như vậy,
để có thể forward dữ liệu cho các AS khác, các router của transit AS phải thực hiện:

- Giải pháp thứ nhất: phân phối lại các tuyến BGP vào IGP để thỏa mãn qui luật đồng bộ,
nhưng phương pháp này không nên sử dụng trong các mạng core của ISP do số tuyến trên
Internet rất lớn, các IGP được thiết kế không phải để có thể quản lý số tuyến quá lớn như vây,
ngoài ra, nếu dùng phương pháp này thì khi có sự thay đổi về 1 tuyến trên Internet sẽ làm các
IGP phải thực hiện giải thuật tìm đường dẫn đến chiếm nhiều CPU và bộ nhớ gây mất ổn định.
- Giải pháp thứ hai: các BGP peer được full-mesh để đảm bảo các router đều có đủ thông tin định
tuyến để forward packet. Khi này có thể tắt chức năng đồng bộ của IBGP. Nhưng full-mesh dẫn
đến việc khó quản lý, tốn băng thông để cập nhật định tuyến, tốn CPU,mem. Có 2 cách để giải
quyết vần đề này:
o Route Reflector: thay đổi qui luật split-horizon của IBGP. Các RR có thể gửi các tuyến
IBGP đến các BGP peer khác. Để chống lặp vòng, các RR thêm vào các thuộc tính:
cluster-id và originator.
o Confederation: thay đổi cách xử lý AS-PATH của IBGP: Chia một AS thành nhiều
member-AS. BGP giữa các BGP peer thuộc các member-AS khác nhau sẽ là EBGP (tức
là sẽ thêm member-AS vào AS-PATH để chống loop) nhưng các thuộc tính khác như
Local Preference, MED, Next-hop sẽ không thay đổi. Ưu điểm của giải pháp này là các
member-AS có thể được quản lý độc lập, tăng khả năng chính sách định tuyến routing.
Các member-AS có thể sử dụng các IGP khác nhau. Nhưng quản lý một Confederation
thì có thể sẽ rất phức tạp do đó nó chỉ thích hợp cho các ISP cực lớn hoặc các công ty
đa quốc gia cần có sự linh động và độc lập giữa các thành phần của hệ thống.
Để lựa chọn tuyến cho các Incoming traffic, có thể sử dụng các cách sau:
- MED: cách này ít sử dụng do MED là một thuộc tính yếu và non-transitive.
- AS-Prepend: phương pháp này được sử dụng thông dụng hơn do có thể làm việc tốt trong tất cả
các mô hình. Nhưng một điều cần phải nhớ, quyết định tuyến cho Incoming traffic rất khó thực
hiện chính xác do các AS khác có thể thay đổi các attribute.

Báo hiệu BGP


BGP yêu cầu thiết lập kết nối TCP port 179 giữa các peers trước khi có thể trao đổi các bản tin. Các
loại bản tin trong BGP :
- Open : Sử dụng để thiết lập kết nối với peers và xác nhận tham số hoạt động như BGP
version, AS Number, Router-id, tham số tùy chọn như authentication, route refresh…
- Keepalive : Được gửi định kì giữa các peers để duy trì kết nối.
- Update : Chứa tất cả thông tin sử dụng để xây dựng topo không bị loop.
- Notification : Được gửi khi phiên BGP bị đóng kết nối hay có lỗi phát hiện .

Các thuộc tính định tuyến BGP


BGP sẽ gồm có nhiều thuộc tính và các thuôc tính chia vào các kiểu loại chính :
- Well-known mandatory : thuộc tính bắt buộc phải có trong bản tin Update như :
ORIGIN, NEXT_HOP, AS_PATH…
- Well-known discreationary : thuộc tính có thể gửi hoặc không trong bản tin Update
như : LOCAL_PREF, ATOMIC_AGGREGATE…
- Optional transitive : thuộc tính có thể nhận ra hoặc không bởi BGP . Nhưng thuộc tính
đó luôn được chấp nhận và quảng bá như COMMUNITY, AGGREGATOR…
- Optional non-transitive : thuộc tính có thể nhận ra hoặc không bởi BGP . Nhưng thuộc
tính đó không được quảng bá như MED…

Thuộc tính NEXT-HOP


- Thuộc tính chỉ định địa chỉ IP của router quảng bá prefixes.

RTC học được route 128.213.1.0 từ RTZ với next hop là 1.1.1.1 do RTC nhận được route
128.213.1.0 đến từ láng giềng RTZ bởi next hop 1.1.1.1, khi nó cập nhật sang RTA thì next hop
ip address không có thay đổi, do dó RTA có next hop là 1.1.1.1.Như chúng ta có thể thấy đối
với RTA thì next hop là 1.1.1.1 là không thể đến được. Để RTA có thể đến được 128.213.1.0/24
thì ở RTC phải thay đổi next-hop-self tới RTA.

Thuộc tính WEIGHT:


- Thuộc tính chỉ có trên thiết bị của cisco.
- Thuộc tính không trao đổi giữa các thiết bị chạy BGP.
- Chỉ có ý nghĩa local trên một thiết bị.
- Các path có weight cao thì lựa chọn.
- Điều khiển chiều outbound của traffic.
R1(config)#ip as-path access-list 10 permit
_65020$
R1(config)#route-map set-weight permit 10
R1(config-route-map)#match as-path 10
R1(config-route-map)#set weight 150
R1(config)#route-map set-weight permit 20
R1(config-route-map)#set weight 100
R1(config)#router bgp 65040
R1(config-router)#neighbor 2.2.2.2 remote- as
65030
R1(config-router)#neighbor 2.2.2.2 route-map
set-weight in

Như hình R1 sẽ thiết đặt weight cho những prefixes xuất phát từ AS65020 học từ R2 giá trị weight
150 và những prefixes còn lại thì thiết đặt weight 100. Như vậy, từ R1 đến các prefixes AS65020 sẽ đi
qua R2.

Thuộc tính LOCAL PREFERENCE


- Thuộc tính sẽ được gửi vào tất cả IBGP router trong một AS.
- Thuộc tính không trao đổi ra EBGP khác AS.
- Giá trị mặc định thuộc tính 100.
- Các path có local preference cao thì được chọn.
- Điều khiển chiều outbound của traffic.

Bây giờ cấu hình cho RTC, RTD sử dụng route map để thiết lập
Local Preference chỉ cho những prefixes từ AS34.
RTC(config)#ip as-path access-list 1 permit _34$
RTC(config)#route-map LP permit 10
RTC(config-route-map)#match as-path 1
RTC(config-route-map)#set local-preference 200
RTC(config)#route-map LP permit 20
RTC(config)#router bgp 256
RTC(config-router)#neighbor 1.1.1.1 remote- as
100
RTC(config-router)#neighbor 1.1.1.1 route-map
LP in

RTD(config)#ip as-path access-list 1 permit _34$


RTD(config)#route-map LP permit 10
RTD(config-route-map)#match as-path 1
RTD(config-route-map)#set local-preference 300
RTD(config)#route-map LP permit 20
RTD(config)#router bgp 256
RTD(config-router)#neighbor 3.3.3.4 remote- as
300
RTD(config-router)#neighbor 3.3.3.4 route-map
LP in

Ta thiết đặt tất cả prefixes xuất phát từ AS34 ở RTD với LP : 300 và RTC với LP : 200 . Như vậy
traffic đi từ AS256 đến AS34 đều đi qua AS300.

Thuộc tính AS-PATH


- Thuộc tính chỉ path sẽ đi qua AS nào.
- Thuộc tính sử dụng chống loop.
- Các path có AS-PATH ngắn thì lựa chọn.
- Điều khiển chiều inbound của traffic.

Trong ví dụ này thì ta thấy route 172.16.10.0/24 được khởi tạo từ AS1 và được truyền đi qua AS2, AS3,
AS4 và truyền ngược trở lại AS1. Nhận thấy rằng mỗi AS truyền route này qua external peer thì nó thêm
số AS của nó vào đầu danh sách AS_path. Khi route truyền ngược trở lại AS1, thì BGB border router
sẻ nhận ra rằng route này đã từng qua nó và không chấp nhận route này.

Thuộc tính MED


- Thuộc tính MED được quảng bá theo IBGP.
- Thuộc tính MED được quảng bá ra AS láng giềng nhưng từ AS láng giềng quảng bá
đi các AS tiếp thì bị xóa.
- Các path có MED nhỏ thì lựa chọn.
- Điều khiển chiều inbound của traffic.

Theo ví dụ này thì ta thấy : AS 100 sẽ nhận cập nhật về mạng


180.10.0.0 từ RTB, RTC, và RTD. RTC và RTD xuất phát từ AS
300, và RTB xuất phát từ AS 400. Ta sử dụng route map để cấu hình
MED cho router.
RTB(config)#route-map med permit 10
RTB(config-route-map)#set metric 50
RTB(config)#router bgp 400
RTB(config-router)#neighbor 4.4.4.4 route-map
med out
Mặc định thì BGP sẽ so sánh giá trị của thuộc tính MED của route
đến từ các láng giềng có cùng một external AS. Như AS 300 là một
ví dụ. Điều này có nghĩa là RTA sẽ so sánh giá trị của thuộc tính
MED đến từ RTC có giá trị là 120 chỉ với RTD với giá trị là 200.
Thậm chí dù cập nhật đến từ RTB có giá trị MED thấp hơn thì RTA
cũng sẽ chọn RTC là đường đi tốt nhất đến mạng 180.10.0.0. Để ép
RTA sử dụng luôn cả cập nhật về mạng 180.10.0.0 đến từ RTB trong
bảng so sánh của nó thì ta sử dụng lệnh bgp always-compare-med .

Thuộc tính ORIGIN CODE


- Chỉ định route sẽ được quảng bá vào trong BGP theo kiểu network hay redistribute.
- Thứ tự ưu tiên của ORIGIN CODE : IGP < EGP < IMCOMPLETE.
- Các Path có ưu tiên nhỏ thì lựa chọn.

BGP dựa trên giá trị của các thuộc tính để quyết định chọn tuyến.
Khi gặp nhiều route đến cùng một đích, thì BGP sẽ chọn route tốt
nhất để truyền tải đến đích. Quá trình chọn route như sau:
- Next Hop không đến được thì route sẽ bị loại bỏ.
- BGP router sẽ chọn path nào có weight lớn nhất.
- Nếu các route có weight đều giống nhau thì BGP router sẽ
chọn route có Local Preference lớn nhất.
- Nếu Local Preference có giá trị như nhau thì BGP router sẽ
chọn route có AS_path ngắn nhất.
- Nếu AS_path có chiều dài bằng nhau, thì router BGP sẽ
chọn route có loại origin thấp nhất.
- Nếu loại origin giống nhau, BGP router sẽ chọn route có
MED nhỏ nhất.
- Nếu MED có giá trị giống nhau thì BGP sẽ chọn route theo
cách sau. External(EBGP) sẽ được ưu tiên hơn
confederation external, nó lại được ưu tiên hơn so với
IBGP.
- Nếu tất cả những thuộc tính đã xét đến đều giống nhau, thì
BGP sẽ chọn route mà có thể đến được theo đường của IGP
láng giềng gần nhất. Xét đến path để đến đích theo path
ngắn nhất đến next hop.
- Nếu tất cả cũng đều giống nhau thì BGP sẽ chọn route đến
từ router có ID nhỏ nhất. Router ID thường là địa chỉ IP cao
nhất của router hay là địa chỉ của cổng loopback.

BGP Communities
Thuộc tính communites là thuộc tính transitive optional . Giá trị của nó có 32 bit .
Có 4 kiểu loại communities phổ biến :
INTERNET : quảng bá prefix tới tất cả BGP neighbors.
NO-ADVERTISE : không quảng bá prefix tới BGP neighbors.
NO-EXPORT : không quảng bá prefix tới EBGP neighbors.
LOCAL-AS : không quảng bá prefix ra ngoài khỏi Sub-AS BGP Confederations.
Ta có thể sử dụng route map để thiết lập các thuộc tính community.
Lệnh route-map có cú pháp như sau:

Router(config)#route-map communitymap
Router(config-route-map)#match ip address 1
Router(config-route-map)#set community no-advertise
Router(config-router)# neighbor 10.1.12.2 route-map communitymap out
or
Router(config)#route−map setcommunity
Router(config-route-map)#match as-path 1
Router(config-route-map)#set community 200 additive
Router(config-router)# neighbor 10.1.12.2 route-map setcommunity out

Nếu không thêm lệnh additive đi sau, giá trị 200 sẽ thay thế các giá trị community khác đang tồn
tại; nếu ta sử dụng additive thì 200 sẽ được thêm vào community. Ngay cả khi chúng ta thiết
lập thuộc tính community, thuộc tính này không được gửi đến các láng giềng theo mặc định. Để gửi
thuộc tính này ta sử dụng lệnh sau:

Router(config-router)#neighbor {ip-address|peer-group-name} send-community


[both|extended|standard]

BGP Filtering

Lọc tuyến cho BGP có thể được vì nhiều lý do khác nhau. Nó có thể được sử dụng để thao tác thuộc
tính của một tuyến BGP. Lọc tuyến cũng có thể được sử dụng để cho phép hay từ chối những tuyến
được quảng bá bởi BGP speaker khác.

Lọc tuyến có thể là lọc tuyến vào (Ingress filtering) hay lọc tuyến ra (Egress filtering).

Lọc tuyến vào: Có thể xảy ra khi một tuyến được nhận bởi BGP speaker và đưa tới chính sách đầu vào.
Tại điểm này, quản trị hệ thống có thể tạo một cách thức mà nó sẽ đồng ý hay từ chối những tuyến nào
đó. Quản trị hệ thống cũng có thể thiết lập các cách thức nào đó, mà nó sẽ thao tác thuộc tính của tuyến
BGP.
Lọc tuyến ra: Xảy ra khi một tuyến được đưa tới chính sách đầu ra. Chức năng của lọc ra tương tự như
lọc vào. Chỉ có sự khác biệt là BGP-speaker đưa ra quyết định những tuyến sẽ được quảng bá tới láng
giềng của nó và thao tác những thuộc tính của những tuyến đó.
Các BGP update có thể được kiểm soát. Nhìn chung, trong các giao thức định tuyến, kiểm soát các cập
nhật là một việc tốt. Việc kiểm soát các cập nhật giúp cho đơn giản hoá hệ thống mạng và dể dàng bảo
trì. Việc thiết kế các thông tin định tuyến được chuyển đi như thế nào cũng được xem là một tác vụ cơ
bản của bảo mật mạng và điều này giúp cho giảm nguy cơ bị routing-loop.
Access-list cho AS_PATH
Được dùng để lọc các AS. Một ACL được dùng trong BGP sẽ lọc các update được gửi từ một router
peer trên AS path.
R1(config)#ip as-path access-list 4 deny _300_
R1(config)#ip as-path access-list 4 permit .*
R1(config)#router bgp 100
R1(config-router)#neighbor 10.1.12.2 filter-list 4 in
Định nghĩa ra as-path từ chối tất cả tuyến đi qua AS 300. Các tuyến còn lại sẽ được cho phép. Như vậy,
R1 sẽ sử dụng as-path access-list để lọc các tuyến học R2.
Prefix list
Được dùng để lọc các prefix, đặc biệt trong quá trình redistribution. Cơ chế dùng prefix-list dựa trên
prefix của một địa chỉ.
R1(config)#ip prefix-list list1 seq 5 deny 3.0.0.0/8
R1(config)#ip prefix-list list1 seq 10 permit 0.0.0.0/0 le 32
R1(config)#router bgp 100
R1(config-router)#neighbor 10.1.12.2 prefix-list list1 in
Định nghĩa ra prefix-list với tên list1, prefix-list này thực hiện từ chối prefix 3.0.0.0/8 được quảng bá
bởi R3. Còn lại tất cả các prefix sẽ được chấp nhận. R1 sẽ sử dụng prefix-list để lọc các prefix được
quảng bá sang bởi R2.

Distribute list
Distribute-list được dùng để lọc các cập nhật. Mặc dù distribute-list thường được dùng trong
redistribution, công cụ này không chỉ dành riêng cho quá trình redistribution. Cả prefix-list và distribute-
list đều lọc dựa trên địa chỉ mạng chứ không như dùng AS_PATH.
R1(config)#access-list 10 deny 3.0.0.0 0.255.255.255
R1(config)#access-list 10 permit any
R1(config)#router bgp 100
R1(config-router)#neighbor 10.1.12.2 distribute-list 10 in

Thực hiện tạo ACL 10 để từ chối mạng 3.0.0.0/24 và cho phép tất cả mạng còn lại. R1 áp dụng distribute-
list với số 10 là acl-number để lọc tất cả mạng được quảng bá sang bởi R2.

Route map
Route map được dùng để định nghĩa chính sách định tuyến. Một route-map là một công cụ phức tạp qua
đó router hoạt động khi một match được nhận dạng. Route map được dùng trong BGP để thiết lập các
thuộc tính của BGP để chọn ra đường đi tốt nhất và đồng thời nó cũng dùng để lọc tuyến.
R1(config)#ip as-path access-list 1 deny _300$
R1(config)#ip as-path access-list 1 permit .*
R1(config)#route-map Route_Filter permit 10
R1(config-route-map)#match as-path 1
R1(config)#router bgp 100
R1(config-router)#neighbor 10.1.12.2 route-map Route_Filter in
Sử dụng as-path acl chỉ từ chối mạng được quảng bá bởi AS 300 và cho phép các mạng còn lại. Route-
map sẽ kết hợp với as-path acl và mệnh đề trong route-map là permit nên tất cả các mạng thỏa mãn yêu
cầu as-path sẽ được học bởi R1.
BGP Advance

Xây dựng mạng dùng iBGP

Mặc dù BGP là một giao thức ngoại vùng, nó có hai kiểu : iBGP và eBGP. Sự khác nhau phụ thuộc vào
chức năng của giao thức định tuyến. Router sẽ xác định khi nào thì một BGP sẽ là eBGP hoặc là một
iBGP bằng cách kiểm tra giá trị AS được gửi trong thông điệp open-message. eBGP sẽ tương thích với
các yêu cầu chung của một giao thức ngoại vùng. eBGP sẽ gửi các thông tin định tuyến giữa các AS
khác nhau. Vì vậy, router ở biên giới các AS là eBGP router. iBGP được dùng trong một AS. IBGP
chuyển các thông tin đến tất cả các BGP router bên trong domain và đảm bảo rằng tất cả các router có
chung một hiểu biết về các mạng hiện có. IBGP được dùng giữa các router trong cùng một AS.
Để thiết kế và triển khai BGP chính xác, có một vài đặc điểm của BGP cần phải được hiểu. iBGP không
nhất thiết phải kết nối trực tiếp về mặt vật lý. Không giống như RIP hoặc OSPF hoặc IPv6, các router
chạy iBGP không cần phải kết nối trực tiếp trên cùng một hạ tầng mạng. Một số giao thức khác, chẳng
hạn như OSPF sẽ định tuyến các gói BGP giữa các iBGP router.
Thông qua các kết nối logic, TCP sẽ route các gói đi qua các router bởi các bảng định tuyến được duy
trì bởi OSPF. Để BGP có thể truyền các thông tin định tuyến vào bên trong AS, nó có thể dùng
redistribute từ BGP vào IGP. Quá trình redistribute này có thể rất phức tạp.
Một route được truyền bởi router bằng một trong những phương thức sau:
- Thông qua lệnh network
- Được redistribute từ một IGP
- Được redistribute từ tuyến đường tĩnh

Aggregate Address

Khi bạn cấu hình aggregate-address mà không dùng thêm một tùy chọn nào, route được sinh ra sẽ không
kế thừa bất cứ một attribute nào của từng specific route như AS_PATH hoặc community. Có thể sử
dụng thêm các option :

- Summary-only : chỉ quảng bá aggregate route và ngưng không quảng bá các route con.
- Suppress-map : kết hợp với route-map để ngưng không quảng bá các route con.
- AS-Set : aggregate route sẽ được kế thừa từ AS-PATH từ các route con.
R3(config)#router bgp 34
R3(config-router)#aggregate-address 200.0.0.0 255.255.252.0
Router R2 quảng bá mạng 200.0.2.0/24. Router R1 quảng bá mạng 200.0.1.0/24 . Trên router R3 thực
hiện việc summary những mạng của R1, R2 thành mạng 200.0.0.0/22.

Fully Meshed IBGP

Luật BGP split horizon nói rằng mặc dù các router không cần kết nối trực tiếp, nó cần phải fully-mesh.
Điều kiện này nhằm đảm bảo các mạng phải thấy nhau. Để tránh routing-loop, giao thức BGP phải tuân
theo luật split horizon rằng không có update nào học từ một peer có thể gửi đến một peer khác. Điều
này có nghĩa rằng, một network khi được nhận sẽ không phân phối đến các router iBGP khác. Các mạng
này chỉ được truyền đến các router BGP trong các AS khác, còn gọi là eBGP peer.
BGP duy trì các thông tin cập nhật bằng cách gửi các update trên các kết nối TCP. Các kết nối TCP này
là một cách để đảm bảo tính chính xác của thông tin, nhưng nhược điểm của nó là tốn nhiều tài nguyên
hệ thống. Số kết nối càng lớn, tài nguyên yêu cầu càng nhiều. Một công thức đơn giản như sau:
Sẽ cần n (n – 1) / 2 kết nối TCP trên một mạng gồm n router BGP.
Như vậy một mạng gồm 10 router sẽ yêu cầu 10 (10 – 1) / 2 = 10 * 9 / 2 = 45 phiên làm việc. Công
thức này chấp nhận được trong môi trường có một vài kết nối, tuy nhiên nếu hệ thống mạng là một ISP
thì thiết kế trên không phù hợp.
Cũng có những chi phí quản lý trong việc duy trì các mạng kết nối fully-mesh. Ví dụ, mỗi lần có một
router BGP mới thêm vào, số kết nối phải thiết lập cũng sẽ tăng lên nhiều lần tương ứng. Đối với TCP,
không chỉ phải duy trì các kết nối rất tốn tài nguyên mà còn là các updates phải đi trên các kết nối này.
Nếu tất cả các router kết nối với tất cả các router khác, một số lượng lớn thông tin sẽ được gửi đi trùng
lắp.
Thiết kế và cấu hình một mạng iBGP

Vấn đề hạn chế khả năng mở rộng trong một mạng fully meshed iBGP có thể được giải quyết bằng các
giải pháp thiết kế. Các giải pháp về cấu hình sẽ cho phép ta bỏ qua các iBGP phải được full mesh. Các
lệnh mới này cho phép ta phát triển một mạng hub-and-spoke để đơn giản hóa các kết nối TCP. Giải
pháp được trong phần này là giải pháp dùng route reflector.
Route Reflectors
Một route reflector là một router được cấu hình để chuyển những routing update đến các router láng
giềng hoặc các router chạy BGP bên trong một AS. Các router iBGP cần phải được chỉ ra như là client
trong khi cấu hình. Khi một client gửi một update đến route reflector, nó sẽ chuyển update đó đến các
router client khác. Route reflector và client sẽ đòi hỏi một quan hệ peer đầy đủ bởi vì route reflector sẽ
gửi các cập nhật từ các client khác nhưng việc thiết lập peer giữa các client là không cần thiết.
Một route reflector sẽ kết nối đến các peers mà nó không đẩy route đến. Từ quan điểm của route reflector,
các neighbor này được gọi là non clients. Các router nonclients phải được kết nối fully-meshed với các
route reflector và với các non client khác. Khi một router đã cấu hình như một route reflector, nó sẽ đẩy
những đường đi được học từ các iBGP khác chỉ đến các route reflector clients và tới các iBGP/eBGP
neighbors. Điều này có nghĩa là một thiết kế hub-and-spoke có thể được triển khai trong một AS giữa
các iBGP peers, như vậy giảm thiểu số session giữa các routers. Cả route reflector và các client của nó
hình thành nên một đơn vị để chia sẽ thông tin. Đơn vị này gọi là cluster.
Một Autonomous System có thể được chia ra thành các cluster, trong các các cluster sẽ có các route
reflector được chỉ định và cấu hình. Phải có ít nhất một route reflector trong mỗi cluster. Nếu một route
reflector kết nối đến các route reflector khác, route reflector phải được fully-meshed. Điều này nhằm
đảm bảo các bảng iBGP routing là đầy đủ. Khi một route reflector chuyển đi một update, thuộc tính
Originator_ID sẽ được thiết lập. Đây là BGP routerID của router đã tạo ra đường đi. Nếu router này
nhận lại bản update đó, router sẽ thấy ID của chính nó và sẽ bỏ qua packet. Điều này nhằm ngăn ngừa
khả năng routing loop. Nếu có nhiều route reflector trong cluster, các router sẽ phân biệt với nhau bằng
clusterID. Thông số này phục vụ cùng một mục đích như thuộc tính Originator_ID để ngăn ngừa routing
loops.
Với cách dùng route reflector, router đóng vai trò route reflector sẽ tốn nhiều tài nguyên hơn. Nếu cấu
hình route reflector không chính xác, nó có thể gây ra routing-loop. Có nhiều mức route reflector có thể
được cấu hình bằng cách tạo ra các thiết kế theo thứ bậc. Các router không là thành phần của route
reflector sẽ không bị ảnh hưởng trong những thay đổi về thiết kế và những thay đổi về quá trình truyền
các cập nhật. Thay vào đó, các router này sẽ không nhận biết được bất cứ thay đổi nào vì nó vẫn nhận
được các update mà nó cần. Bản thân các routing update cũng không bị thay đổi bởi vì không có sự thay
đổi nào trong giá trị các thuộc tính được mang trong các routing update.
Chính vì các đặc điểm trên, quá trình chuyển đổi thiết kế một hệ thống mạng nào đó sang dạng dùng
route reflector thì rất dễ dàng. Một thiết kế quan trọng là bản thân các route reflector trong một AS cũng
phải fully-meshed. Ngoài ra, một route reflector này có thể là client cho một route reflector khác. Thiết
kế như vậy khá phức tạp và yêu cầu xem xét cẩn thận bởi vì khi các route reflector được cấu hình và
split horizon bị disable, không còn một cơ chế nào để bảo vệ routing loop.

Các lợi ích của route-reflector bao gồm :


- Khả năng mở rộng mạng.
- Thiết kế mang tính cấu trúc cao.
- Giảm traffic trên mạng.
- Giảm bộ nhớ và CPU cần thiết để duy trì các phiên TCP session trên các iBGP peers.
- Hội tụ nhanh hơn và mạng trở nên đơn giản hơn.
Hoạt động của RR:
Một RR đơn giản giống như một tấm gương để phản hồi các update từ các client đến các client khác mà
không yêu cầu một mạng phải fully-meshed.
Khi một RR nhận được một update:
- Một update từ client được nhận từ RR và update sẽ được chuyển đến các RR clients cũng như
nonclients.
- Nếu có nhiều đường đi nhận được từ RR, đường đi tốt nhất sẽ được chọn thông qua RR.
- Một nonclient router sẽ chuyển các cập nhật tới các láng giềng của nó, có thể là một RR.
- Một RR nhận một update từ một router nonclient và update chỉ được chuyển đến clients.
BGP Convergence
BGP Timer
Thời gian timer thực hiện mặc định bởi Cisco:
Keepalive timer : 60s
Hold timer : 180s
Cơ chế tăng tốc hội tụ BGP
Điều chỉnh BGP Transport
TCP sử dụng cho BGP từ quá trình thiết lặp phiên cho đến quá trình trao đổi bản tin update và duy trì
phiên. Việc tối ưu trực tiếp hiệu năng của TCP sẽ cải thiện tốc độ hội tụ của BGP. Điều chỉnh TCP bao
gồm :
- Bật TCP Path MTU discovery trên thiết bị bgp để cho phép TCP chọn được kích thước MSS.
Yêu cầu không được chặn bản tin ICMP unreachable message trong quá trình discovery.
- Điều chỉnh kích thước hàng đợi queue để cho phép nhận số lượng lớn bản tin TCP ACK.

BGP Fast Peering


Mặc định cơ chế phát hiện link lỗi là dựa trên Keepalive timer và nó sẽ là 60s/180s . Cũng có thể điều
chỉnh Keepalive timer xuống thấp hơn nhưng có thể xảy hiện tượng nháy phiên nếu không sử dụng
dampening trong quá trình thiết lập phiên BGP. Sử dụng BFD là tùy chọn cho cải thiện thời gian hội tụ
của BGP.
Router(config)#bfd map ipv4 10.0.0.2/32 10.0.0.1/32 MH_BGP
Router(config)#bfd-template single-hop SH_BGP
Router(config-bfd)#interval min-tx 10 min-rx 10 multiplier 3
Router(config)#bfd-template multi-hop MH_BGP
Router(config-bfd)#interval min-tx 500 min-rx 500 multiplier 3
Router(config)#router bgp 100
Router(config-router)#neighbor 10.0.0.2 fall-over bfd
Có thể sử dụng bfd single-hop hoặc bfd multi-hop. Với bfd multi-hop ta sử dụng thêm bfd map để chỉ
định địa chỉ nguồn và đích, trong vd trên thì ip đích : 10.0.0.2/32 và ip nguồn 10.0.0.1/32. Mỗi một
template chỉ định thời gian sẽ truyền bản tin bfd trong min-tx và tối đa thời gian phải nhận trước khi
phiên bfd down là min-rx * multiplier. Trong đó phần cấu hình BGP sử dụng BFD cho fallover.

Sự tương tác BGP và IGP


Các tuyến trong BGP luôn sử dụng việc phân giải next-hop theo kiểu đệ qui. Next-hop liên kết với các
tuyến có thể không kết nối trực tiếp vì vậy nó sử dụng IGP để phân giải next-hop. Sự tương tác giữa
BGP và IGP bởi thực hiện tiến trình BGP Scanner. Tiến trình này sẽ chạy định kì và sẽ xác nhận giá trị
next-hop cho các tuyến trong BGP. Mặc định BGP Scanner chạy định kì 60s và giá trị này có thể thay
đổi được với câu lệnh bgp scan-time. Lưu ý nếu thiết lặp giá trị thấp thì có thể dẫn đến tiêu tốn nhiều
CPU của thiết bị.
Sử dụng BGP Scanner thời gian hội tụ vẫn chậm như vậy rất cần cách để BGP biết được sự thay đổi .
Tính năng BGP next-hop tracking với ý tưởng đăng kí giá trị next-hop vào tiến trình watcher để theo
dõi sự kiện thay đổi của giá trị next-hop. Thông thường có 2 kiểu loại sự kiện : giá trị next-hop không
đến được và giá trị metric của next-hop thay đổi. IGP sẽ trễ khoảng thời gian 5s mặc định báo hiệu về
một sự kiện đó. Thời gian trễ thay đổi với câu lệnh bgp next-hop trigger delay. Thời gian trễ là rất cần
thiết đối với BGP để xác định tất cả các node IGP báo hiệu về sự kiện và IGP đã hội tụ. Sự tương tác
với việc thay đổi IGP next-hop dẫn đến tiến trình BGP sẽ phải tính toán lại đường đi tốt nhất cho các
tuyến. Thời gian hội tụ của BGP phụ thuộc vào số lượng các tuyến ảnh hưởng.
Cấu trúc của bảng FIB cũng ảnh hưởng thời gian hội tụ của BGP . Cụ thể cấu trúc theo kiểu phân cấp
thì bất kì thay đổi trong IGP vd : output interface thay đổi sẽ không ảnh hưởng tới các tuyến BGP. Vì
do đó cấu hình phân cấp giảm thiểu độ trễ khi mà thông tin trong IGP thay đổi.

BGP PIC và MULTIPATH


PIC là phương thức tăng tốc độ hội tụ của BGP, hầu hết trong tình huống thì nó có thể giảm thiểu thời
gian hội tụ xuống dưới 100msec. Theo cách truyền thống khi BGP phát hiện ra lỗi thì nó tính toán lại
để tìm ra tuyến đường tốt nhất cho một tuyến. Khi bảng định tuyến với hàng nghìn tuyến thì lấy một số
lượng thời gian lớn để hoàn thành. Thêm vào đó thì BGP router phải quảng bá tuyến đường tốt nhất tới
mỗi láng giềng của nó và thông báo topology đã thay đổi. Trong quá trình tính toán lại các tuyến thì việc
luồng traffic có thể drop.
PIC cung cấp cơ chế hội tụ nhanh khi mà nexthop tuyến chính lỗi xảy ra thì chuyển tới tuyến dự phòng
trong khoảng sub-seconds và không phụ thuộc vào số lượng tuyến. Để làm như vậy thì PIC sẽ cài đặt
tuyến dự phòng. Tương ứng với mỗi prefix sẽ có một tuyến tốt nhất và tuyến dự phòng.
Một BGP speaker có nhiều hơn một tuyến đến cùng một đích. Nhưng BGP speaker chỉ gửi tuyến tốt
nhất tới láng giềng của nó. BGP Add-Path là một tính năng cho phép quảng bá nhiều hơn một tuyến tốt
nhất tới đích.

bgp additional-paths [send | receive]


cho phép BGP gửi và nhận nhiều tuyến tốt nhất.

bgp additional-paths select [ all | best | group-best]


chọn tập hợp các tuyến có sẵn để gửi đến láng giềng với các tùy chọn :
all : tất cả các tuyến được quảng bá.
best n : n tuyến sẽ quảng bá.
group-best : chọn tuyến tốt nhất từ một group.

neighbor x.x.x.x advertise additional-paths [all | best | group-best]


tương tự như trên thì một láng giềng cũng có thể điều khiển việc quảng bá.

bgp additional-paths install


câu lệnh để cài đặt các tuyến chỉ định ra bởi cấu lệnh bgp additional-paths select . Nếu sử dụng BGP
PIC thì câu lệnh sẽ trigger việc tính toán và cài một tuyến dự phòng.

You might also like