bgp是一種用於自治系統之間的動態路由協議,主要用於交換as之間的可達路由資訊,構建as域間的傳播路徑,防止路由環路的產生,並在as級別應用一些路由策略.
bgp作為事實上的internet外部路由協議標準,被廣泛應用於isp之間
1,bgp是一種外部閘道器協議,起作用不在於自動發現網路topo,而在於as之間選擇最佳路由和控制路由的傳播。
2,bgp使用tcp作為其傳輸層協議(埠號179),提高了協議的可靠性。
3,bgp的對等體之間必須在邏輯上連通,並進行tcp連線,路由更新時,bgp只傳送更新的路由,大大減少了bgp傳播路由所占用的頻寬。
4,bgp的防環
1)as之間:bgp通過攜帶as路徑資訊來標記途經的as,帶有本地as號的路由將被丟棄,從而避免了域間產生環路。
2)as內部:bgp在as內學到的路由不再通告給as內的bgp鄰居,避免了as內產生環路。
5,bgp包含豐富的路由策略,靈活過濾和選擇
6,bgp包含防止路由震動機制,對於反覆更新路由狀態,進行懲罰
7,bgp易於擴充套件,主要通過tlv進行擴充套件
1,open:協商bgp引數,tcp連線建立後傳送的第乙個訊息,用於建立bgp對等體之間的連線關係。
2,updata:交換路由資訊。一條update訊息可以發布多條屬性相同的可達路由資訊,也可以撤銷多條不可達路由資訊。
3,keeplive:保持鄰居關係
4,notification:當bgp檢測到錯誤狀態時,就向對等體發notification訊息,之後bgp連線會立即中斷。
5,route-refresh:用於在改變路由策略後請求對等體重新傳送路由資訊
bgp報頭
marker(標記):16位元組,固定為1。
length(長度):兩位元組無符號整數。指定了訊息的全長,包括頭部。
type(型別):1 位元組
type-open
version:bgp版本號
my autonomous system:本地as編號
hold time:在建立對等體關係時兩端要協商hold time,並保持一致。
bgp identifier:bgp路由器的router id
opt parm len:可選引數的長度。如果為0則沒有可選引數。
optional parameters:是乙個可選引數用於bgp驗證或多協議擴充套件等功能
type-updata
withdrawn routes length :(2位元組無符號整數)不可達路由長度,表示withdrawn routes欄位的資料長度。
withdrawn routes :(變長)撤銷路由
path attribute length :(2位元組無符號整數)路由屬性長度
network layer reachability information :(變長)網路可達資訊。
type-keepalive
keepalive 報文的組成只包括乙個bgp資料報頭
預設情況下,傳送keepalive 的時間間隔為60 秒,hold time是180秒,如果hold time定時器超時,就認為對等體down掉。
type-notification
errorcode:錯誤碼。每個不同的錯誤都使用唯一的**表示。
每個不同的錯誤都使用唯一的**表示,而每乙個錯誤碼都可以擁有乙個或多個錯誤子碼,但如果某些錯誤碼並不存在錯誤子碼的話,則該錯誤子碼字段以全0表示。
errsubcode:錯誤子碼
idel:bgp初始狀態。bgp拒絕鄰居傳送的連線請求,只有收到本裝置start事件(手動配置)之後才能建立tcp連線。任何狀態中收到notification報文或tcp拆除鏈路通知等error事件後,bgp都會轉至idle狀態。
connect:此階段主動發起tcp連線,如果tcp連線成功,那麼bgp向對等體傳送open報文,並轉至opensent狀態。如果tcp連線失敗,那麼bgp轉至active狀態,如果超時的話停留這一階段
opensent:bgp等待對等體的open報文,並對收到的open報文中的as號、版本號、認證碼等進行檢查。準確無誤傳送keeplive,進入下一狀態,有問題的話,傳送錯誤報文,進入idle
openconfirm:bgp等待keepalive或notification報文,keeplive進入下一狀態,錯誤報文進入idle
establieshed:進入收發狀態。如果收到正確的update或keepalive報文,那麼bgp就認為對端處於正常執行狀態,將保持bgp連線。如果收到錯誤的update或keepalive報文,那麼bgp傳送notification報文通知對端,並轉至idle狀態。
active:此階段等待對方發起tcp連線,連線成功,進入opensent,失敗,停留,超時進入connect
bgp工作原理:ibgp與igp同步,解決了黑洞
概述公認必遵:所有bgp路由器都必須識別,且必須存在於updata包中,如果缺少,路由資訊就會出錯
公認任意:所有bgp路由器都可以識別,但不要求存在於updata包中,沒有不會出錯
可選過度:在bgp對等體之間具有可傳遞性的屬性,可以不支援,但是必須傳遞
可選過度:不支援不傳遞
origin為公認必遵屬性:標記一條路由是怎麼成為bgp路由的。igp標識為i,egp標識為e(現在不用),incomplete為?,egp標識為e(現在不用)
as_path為公認必遵屬性:as_path長度越短越優先。當包含本as則不接受,防環機制
next_hop為公認必遵屬性:next_hop屬性記錄了路由的下一跳資訊,把本地路由給本as或把本地路由給ebgp鄰居時igp時,為本地與對端建立bgp鄰居關係的介面位址;把外as給本地ibgp鄰居時,不修改
local_pref為公認任意屬性:路由器的bgp優先順序,本地有效,預設100越大越優先。
community為可選過渡屬性
med為可選非過渡屬性:用於as間的路由選路,類似ibgp的代價值,得到目的位址相同但下一跳不同的多條路由時,在其它條件相同的情況下,將優先選擇med 值較小者作為最佳路由,僅在相鄰兩個as之間傳遞。compare-different -as-med可修改
originator_id為可選非過渡屬性:反射器的水平分割 只能防止自己的回來
cluster_list為可選非過渡屬性:阻止反射器之間成環 每次過反射器都會將router-id掛在表裡
prefval:華為特有屬性(思科vid),只在本地有效不傳遞,預設值為0,越大越優
聚合屬性:聚合者屬性,是否聚合屬性
團體屬性,想傳遞,開開關
擴充套件屬性
-no_advertise 不傳給ibgp鄰居
-no_export 不傳ebgp鄰居
-no_export_subconfed 不能給聯邦的ebgp鄰居
當到達同一目的地存在多條選路,依照如下策略順序選擇
下一跳位址必須可達
協議首選值(prefval)是華為裝置的特有屬性,該屬性僅在本地有效。
如果路由沒有本地優先順序,bgp選路時將該路由按預設的本地優先順序100來處理。
本地生成的路由
1優選聚合路由(聚合路由優先順序高於非聚合路由)
2通過aggregate命令生成的手動聚合路由的優先順序高於通過summary automatic命令生成的自動聚合路由
3通過network命令引入的路由的優先順序高於通過import-route命令引入的路由。
優選as路徑(as_path)最短的路由
優選med值最低的路由。
當到達同一目的位址存在多條等價路由時,可以通過bgp等價負載分擔實現均衡流量的目的。
形成bgp等價負載分擔的條件是:bgp選路規則中「到下一跳的igp metric」這條規則之前所有需要比較的屬性完全相同。
bgp擴充套件內容 個人見解
擴充套件能力協商 bgp對等體之間傳輸ipv6位址,需要在open message中進行擴充套件能力協商 除了多位址的能力協商以外,還有4個位元組的as號,router refresh支援能力和多標籤能力都需要在一起協商 mp reach nlri 擴充套件屬性 bgp使用此屬性通告ipv6路由 a...
博弈 個人 見解
由於周測 做了好久的博弈題,找了好多關於博弈的相關資料,感覺自己,似乎還是動了那麼一點點。臨睡前,就小小的總結一下,希望以後看到的時候,可以有所感悟吧!接下來是正題。講到博弈,事實上也就是找規律,可是知道一般的博弈型別能夠高速便捷的解決這個問題。博弈的型別大致有下面幾種 巴什博弈,威佐夫博奕,尼姆博...
mysql個人見解
mysql基本原理 僅個人理解 mysql屬於c s架構,即客戶端和服務端互動 1.連線 例php mysqli connect 以客戶端發起請求,mysql服務端進行接收並處理,其中客戶端每發起的一次鏈結mysql均起乙個執行緒來維持乙個socket 套接字 此時會有服務端資源的開銷,因此mysq...