邊界網關協議(英語:Border Gateway Protocol,縮寫:BGP)是互聯網上一個核心的去中心化自治路由協議。 它經過維護IP路由表或'前綴'表來實現自治系統(AS)之間的可達性,屬於矢量路由協議。 |
1、瞭解BGP協議html
BGP 是一種路徑矢量路由協議,用於傳輸自治系統間的路由信息,BGP 在啓動的時候傳播整張路由表,之後只傳播網絡變化的部分觸發更新它採用 TCP 鏈接傳送信息,端口號爲 179 在 Internet 上,BGP 須要通告的路由數目極大,因爲 TCP 提供了可靠的傳送機制,同時 TCP 使用滑動窗口機制,使得 BGP 能夠不斷地發送分組,而無需像 OSPF 或 EIGRP 那樣中止發送並等待確認。linux
1. 使用 BGP 通常有以下狀況:網絡
一個 AS 容許包穿越它,到達其餘的 AS
一個 AS 鏈接多個 AS
必須對數據流進入和離開 AS 進行控制oop
2. 不使用 BGP 通常有以下狀況:性能
AS 只有一個出口
AS 的全部出口均爲 1 個 ASP
路由性能不高,內存較小,CPU 較慢,帶寬不大orm
3. 認識BGP AS-Pathrouter
BGP 是路徑矢量協議,它使用一個 AS 號列表,數據包必須經過這些 AS 才能到達目的,同時對產生的 AS-path 作必定的策略。AS-Path 對於路由環路很是容易檢測到,若是路由器接受到一條含有本地 AS 號的 AS-path,說明出現環路。BGP 沒有給出每一個 AS 域內的拓撲結構,所以 BGP 只能看到 AS 樹,而 IGP 只能看到 AS 域內拓撲結構.
當某個特殊目的網絡有並列的,等開銷的路徑時,Cisco 缺省執行 EBGP 只選擇一條路徑,但能夠使用 maximum-paths改變並行路徑缺省的最大數目,但僅對 EBGP 有效htm
2、BGP消息類型blog
1. Open接口
TCP 對話創建之後,兩個鄰居都要發送一個 Open 消息,每一個鄰居都用該消息來標示本身,並規定本身的 BGP 運行參數。
BGP version:它明確了發起者正在運行的 BGP 版本號(2,3,4),能夠經過 neighbor version 修改,缺省版本號爲 4。若是版本號不相同,路由器將自動下降版本號重發 Open 消息,直到版本一致
AS number:發起會話路由器的 AS 號,用於確認 EBGP 或者 IBGP 會話
Hold time:路由器必須收到一個 keepalive 或者更新消息以前容許通過的最大秒數。Holdtime 必須是 0(在這種狀況下,必須是沒有發送 Keepalive)或者至少 3s Cisco 默認的 holdtime 爲 180s,若是兩個鄰居間 holdtime 不一致,選較短的那個作爲二者可接受的時間
BGP router-ID:選取方式和 OSPF 相同,使用數值最大的 loopback 口地址,沒有 loopback 則使用物理接口上數值最大的地址
Optional parameters:用於一些可選功能的支持.例如鑑別,多協議支持及路由刷新等
2. Keepalive
若是路由器接受了他在鄰居的 Open 消息中的參數,它就會發送一個應答的 Keepalive 消息。
默認狀況 Keepalive 間隔 60s,或者是達成一致的保持時間的 1/3
3. Update
Update message 用來公佈可用的路由,撤銷的路由或者二者兼顧Network Layer Reachability Information (NLRI)用來公佈 IP 地址前綴和前綴長度的字節組,例如<19,198.24.160.0>Path Attributes該屬性爲 BGP 提供了選擇最短路徑,檢查到路由環路以及決定路由策略的信息Withdrawn Routes用來描述已經變成不可達並正從業務中撤銷的目的地址字節組(長度和前綴)雖然 NLRI 字段能夠包含多個前綴,但每個更新消息只描述一條 BGP 路由(由於路徑屬性只描述一條路徑,但該路徑可能會到達多個目的地)
4. Notification
當檢測到差錯的時候就會發送 Notification 消息,一般會致使 BGP 鏈接終止。