BGP là giao thức path-vector chạy trên TCP/179, trao đổi prefix giữa các AS (eBGP) và phân phối prefix trong một AS (iBGP). BGP không tự tìm đường. Next-hop của mỗi path phải resolve được qua IGP, static route hoặc route có label (inet.3 trên Junos).
eBGP và iBGP
| Đặc điểm | eBGP | iBGP |
|---|---|---|
| AS của peer | Khác AS | Cùng AS |
| TTL mặc định | 1 (cần ebgp-multihop / multihop khi peer qua loopback) |
255 |
| Next-hop khi quảng bá | Đổi thành địa chỉ của mình | Giữ nguyên (cần next-hop-self ở biên) |
| Chống loop | AS_PATH chứa AS của mình thì bỏ | Không quảng bá lại route học từ iBGP (split horizon) → full-mesh hoặc RR |
| Administrative distance / preference | XR: 20 · Junos: 170 | XR: 200 · Junos: 170 |
| Policy mặc định | XR: không nhận, không gửi nếu thiếu route-policy (RFC 8212) · Junos: không chặn |
Nhận và gửi toàn bộ |
Attribute hay gặp
| Attribute | Loại | Ý nghĩa | Phạm vi |
|---|---|---|---|
| Weight | Cisco local | Cao hơn được ưu tiên, không quảng bá. Junos không có | Chỉ router cục bộ |
| LOCAL_PREF | Well-known discretionary | Cao hơn ưu tiên, mặc định 100. Điều khiển outbound | Trong AS |
| AS_PATH | Well-known mandatory | Danh sách AS đã đi qua. Prepend để điều khiển inbound | Toàn cục |
| ORIGIN | Well-known mandatory | IGP (i) < EGP (e) < incomplete (?) | Toàn cục |
| MED (MULTI_EXIT_DISC) | Optional non-transitive | Thấp hơn ưu tiên, gợi ý cửa vào cho AS láng giềng | Sang AS kế bên |
| NEXT_HOP | Well-known mandatory | Địa chỉ chuyển tiếp | — |
| COMMUNITY / LARGE_COMMUNITY | Optional transitive | Tag để áp policy (64500:100, 64500:1:100) |
Theo policy |
| ORIGINATOR_ID, CLUSTER_LIST | Optional non-transitive | Chống loop khi dùng route reflector | Trong AS |
Best path selection (thứ tự Cisco)
Chỉ xét path có next-hop reachable và hợp lệ (không bị policy loại, không loop AS_PATH).
| Bước | Tiêu chí (Cisco IOS XR) | Ghi chú Junos |
|---|---|---|
| 1 | Weight cao nhất | Không có weight. Junos so route preference trước (BGP mặc định 170, thấp hơn thắng) |
| 2 | LOCAL_PREF cao nhất | Như nhau |
| 3 | Route do chính router sinh ra (network, aggregate-address, redistribute) |
Không có bước riêng. Route static/aggregate trong bảng đã thắng route BGP nhờ preference thấp hơn |
| 4 | AIGP thấp nhất (nếu bật) | Có, khi bật aigp |
| 5 | AS_PATH ngắn nhất | Như nhau (as-path-ignore để bỏ qua) |
| 6 | ORIGIN thấp nhất: IGP < EGP < incomplete | Như nhau |
| 7 | MED thấp nhất (mặc định chỉ so giữa path từ cùng AS láng giềng) | Như nhau. Junos mặc định nhóm theo AS láng giềng như deterministic MED. path-selection always-compare-med để so mọi path |
| 8 | eBGP hơn iBGP | Như nhau |
| 9 | IGP metric tới next-hop thấp nhất | Như nhau |
| 10 | Xác định multipath (nếu bật maximum-paths) |
multipath |
| 11 | Hai path eBGP: giữ path cũ nhất (ổn định) | Junos giữ path đang active. Tắt bằng path-selection external-router-id |
| 12 | Router ID thấp nhất (ORIGINATOR_ID nếu qua RR) | Như nhau |
| 13 | CLUSTER_LIST ngắn nhất | Như nhau |
| 14 | Địa chỉ neighbor thấp nhất | Như nhau |
Trên IOS XR, show bgp ipv4 unicast 203.0.113.0/24 bestpath-compare in lý do từng path thua. Trên Junos, show route 203.0.113.0/24 detail có dòng Inactive reason: cho các path không active.
Route reflector
Thay vì full-mesh iBGP (n(n-1)/2 session), client chỉ peer với RR. RR phản xạ route giữa các client và non-client, đồng thời gắn ORIGINATOR_ID và CLUSTER_LIST để chống loop.
flowchart TD RR1["RR1 192.0.2.1"] --- RR2["RR2 192.0.2.2"] RR1 --> PE1["PE1 client"] RR1 --> PE2["PE2 client"] RR2 --> PE1 RR2 --> PE2 PE1 ---|eBGP| ISP["ISP AS64510"] PE2 ---|eBGP| CE["CE AS65001"]
| Hãng | Cấu hình RR client |
|---|---|
| IOS XR | neighbor 192.0.2.11 → address-family ipv4 unicast → route-reflector-client |
| Junos | set protocols bgp group RR-CLIENTS cluster 192.0.2.1 (mọi neighbor trong group là client) |
RR chỉ quảng bá một best path cho mỗi prefix. Muốn PE thấy nhiều path để làm multipath hoặc fast convergence thì cần BGP ADD-PATH, hoặc mỗi PE dùng RD riêng (với VPN).
Khi nào dùng
- eBGP: peering với upstream/IX/khách hàng, hoặc làm underlay cho DC (mỗi leaf một AS private 65000+).
- iBGP + RR: mang full table và VPN route trong backbone ISP. IGP (IS-IS/OSPF) chỉ mang loopback và link.
- Lệnh tra cứu: BGP CLI cheatsheet. Khi session hoặc route có vấn đề: BGP troubleshooting.