網站首頁 編程語言 正文
BGP ---邊界網關協議
IGP:內部網關協議
EGP:外部網關協議(不僅僅有BGP)
BGP:
AS ---自治系統---由單一機構或組織管理的一些列IP網絡及其設備的集合。
1,網絡范圍太大,協議跑不過來,需要進行劃分;
2,自治管理
為了方便區分和標定不同的AS,我們給每個自治系統設計了一個編號:
AS號---16位二進制構成---0 -65535;其中0和65535為保留值,不用,所以,AS號真正的取值范圍為1 -65534;我們將64512 - 65534AS號稱為私有AS號。
因為傳統的AS號存在不夠用的問題,所以目前也存在拓展版的AS號---32位構成---目前絕大多數設備已經支持拓展版的AS號
EGP協議在之前還存在一款協議---EGP,但是由于其功能有限,后來在其基礎上進行優化和改進,生成了現在的BGP協議。目前AS之間使用最廣泛的協議就是BGP協議。
在目前IPV4環境下,使用最廣泛發BGP版本是BGPV4。目前市場上已經存在BGPV4+。BGPV4+又可以稱為MP-BGP ---可以支持多種地址族的應用。
在沒有BGP協議的情況下,僅使用重發布技術,也可以實現AS之間的路由信息的共享。但是,之所以不采用這種方案,其原因如下:
- 重發布技術本省存在缺陷
---在多點重發布中,因為種子度量值問題,必然造成選路不佳
2,ASBR設備的歸屬問題
BGP之間傳遞路由信息的方式一定是和RIP類似,通過傳遞路由條目信息來實現。(只需要學習本地IGP和BGP)
之所以不使用拓撲信息,主要因為:
- 拓撲信息資源占用量太大,而BGP需要傳遞的數量是巨大的。
- 傳遞拓撲信息將暴露本AS內部的拓撲連接情況。
BGP ---無類別的路徑矢量型協議
距離矢量---在距離矢量型協議中,距離是開銷的體現,將跳數作為開銷值的評判標準。將一個路由器看作是一個單位計算距離。
距離矢量是算法的概念,因為IGP協議本身需要通過算法來計算出未知網段的路由信息。
路徑矢量---是將一個AS看作一個整體路徑矢量不牽扯算法,因為BGP僅僅是將IGP計算出來的路由信息發送到其他AS之中,相當于僅將現成的路由進行傳遞而不需要計算。
IGP?---選路佳,收斂快,占用資源少
BGP協議的關注點:
1,可控性---AS之間需要傳遞大量的路由信息,所謂可控,就是可以更方便的干涉選路,更容易做路由策略。
為了保證可控型,BGP舍棄了開銷值。取而代之的是BGP給每條路由信息附加了很多路徑屬性。之后,可以通過這些屬性來進行選路。因為多種屬性的存在,將導致我們的選路變的更加的靈活和方便。使得BGP協議具有強大的可操控型。
因為BGP協議需要傳遞大量的路由信息,所以,其本身不可能存
在周期更新機制。BGP僅存在觸發更新。
2,可靠性---需要保證數據傳輸的可靠。BGP為了保證傳輸的
可靠性,其傳輸層協議直接選擇使用TCP協議。使用TCP的179
號端口進行工作。
IGP協議不選擇使用TCP的原因:
1,TCP傳輸效率較低?
2,TCP傳輸占用資源較大
3,TCP協議只能實現單播,所以,無法通過組播或者廣播的形式發送,則將導致IGP協議無法自動發現鄰居關系,只能手工指定。
因為BGP選擇使用的是TCP協議,所以,BGP需要手工建立鄰居關系。
BGP因為傳輸層使用的是TCP協議,所以,只要在TCP協議可以正常建立會話的基礎上就可以完成BGP的建鄰工作。
BGP支持非直連建鄰(網絡可達)---BGP的非直連建鄰建立在IGP(靜態)之上在BGP中,我們將鄰居關系稱為對等體關系。
EBGP對等體關系---如果建立對等體的兩臺路由器位于不同的AS中,則他們的關系被稱為EBGP對等體關系。
IBGP對等體關系---如果建立對等體的兩臺路由器位于同一個的AS中,則他們的關系被稱為IBGP對等體關系。
因為,EBGP對等體之間一般使用直連建鄰,所以,EBGP對等體之間發送的數據包中的TTL值我們將其設置為1。如果遇到EBGP對等體之間需要進行非直連建鄰,則需要手工修改TTL?值。IBGP對等體關系在AS內部一般都是非直連建鄰,所以TTL值設置為255。
- AS-BY-AS---在BGP當中,我們將一個AS看作一個整體。
BGP協議是不支持負載均衡的。----在BGP當中,如果到達同一個目標網段存在多條路徑可以走時,BGP將會根據其中的路徑屬性來選擇一條最優的加載到路由表中,而不會進行負載均衡。
- BGP的數據包
BGP協議所有數據包的傳輸的可靠性均由TCP協議來保證。所有BGP數據包均基于TCP建立的會話通道發送。
OSPF的Hello ---可以周期性的發現,建立和保活鄰居關系。
在BGP中,發現鄰居關系的過程變為由人手工指定。主要因為TCP協議需要建立會話通道,之后才會基于通道發送數據包。
open包---建立BGP對等體關系。----鄰居關系的建立無非就是參數協商的過程。BGP建立鄰居關系需要通過OPEN包來攜帶參數,進行比對協商。
AS號---在創建鄰居關系時需要指定鄰居所在的AS號,這個參數將被攜帶在OPEN報文中發送給對方,對方將比對這個AS號和本地所在的AS號是否一致,如果一致,則可以正常建立鄰居關系。
認證---BGP建鄰也可以做認證,做認證后將攜帶認證口令,認證口令雙方需要比對,一致則可以正常建立鄰居關系。
ROUTE-ID----區分和標定路由器的。也是由32位二進制構成,按照IP地址的格式來表示。----1,手工配置;2,自動獲取(先看設備是否存在環回接口,如果存在則將選擇環回接口中IP地址最大的地址作為RID,如果沒有環回接口,則將在物理接口中選擇IP地址最大的作為RID)這個RID將在OPEN包中攜帶,發送到對端之后,對端將檢測這個RID,如果和本地的RID不同,則將可以正常的建立鄰居關系。
手工建立鄰居關系時所指定的建鄰的IP地址必須和收到的open?包中的源IP地址相同才能正常建立鄰居關系。否則,鄰居關系將建立失敗。
Holdtime---?;顣r間---默認時間為180S,在?;顣r間內,如果沒有收到對方發送的keeplive包或者update包,則將斷開BGP鄰居關系。這個參數在open報文中將被攜帶,但是,雙方不一致不會影響鄰居關系的建立,但是在執行時,這個時間必須是一致的,則將采用雙方中較小的保活時間來使用。路由器是否支持刷新功能也將成為OPEN報文中所攜帶的一個協商參數。
keeplive包---周期保活---周期發送時間等于?;顣r間的1/3。默認?;顣r間180S,則默認的周期發送時間為60S。
除了保活之外,keeplive包還將在open報文協商參數時臨時充當確認包的作用。
TCP協議進行確認的目的是為了保證數據傳輸的可靠性,而 keeplive報文確認的目的是為了確認認可對方發送的open報文中的參數。
update包---更新包---攜帶需要傳遞的路由信息的數據包。表示一
條路由條目信息,需要攜帶的參數主要就是目標網絡號和子網掩碼信
息,以及路徑屬性。
在更新包中,存在一個撤銷路由條目字段,在這個字段下的路由條目將需要對端刪除,而不再需要通過帶毒傳輸的方式來表達。
notification包---BGP中設計的一個告警機制。
Route-refresh包---用于改變路由策略變更后請求對等體重新發送路由
信息。(前提條件是雙方均支持路由刷新功能才行。)
- BGP的狀態機
BGP的狀態機描述的是BGP對等體建立過程中狀態的變化。因為BGP這個協議可以將鄰居建立過程和路由收發過程分開進行。
BGP的狀態機---6種
?
IDLE ---空閑狀態---路由器啟動BGP進程之后,將先處于idle狀態。當你手工指定鄰居關系后,BGP將進入到一個檢查環節,檢查指定的IP地址在本地路由表中是否可達。如果可達,則將進入到下一個狀態---connect。
Connect---連接狀態,該狀態完成TCP會話的建立。
如果TCP會話建立成功,則將進入到opensent狀態,發送open報文。
如果TCP會話建立失敗,則將進入ACTIVE狀態,嘗試重新建立TCP?會話。
在建立TCP會話過程中,因為雙方都會主動發起建立會話的過程,而最終建立的都是一個雙向的會話。所以,最終只需要保持一個會話通道即可。選擇方式是通過后續open報文中的RID進行比較,選擇保留RID大的設備發起的TCP會話。
Opensent---發出本地的open報文。收到對端發送的open報文,查看里面的參數,之后,如果確認參數無誤。則將回復keeplive報文作為確認。
Openconfirm---open報文確認狀態---對端也收到本地發送的open報文,之后根據里面的參數進行確認。如果確認無誤則將發送keeplive報文。本段收到對方發送的keeplive報文之后將進入下一個狀態。
Established---建立狀態---標志著BGP對等體關系的建立。
?
?
- BGP的工作過程
1,基于IGP協議實現IP可達?
2,指定鄰居關系,通過三次握手,建立TCP的會話通道。之后所有BGP的數據報都將基于TCP會話通道來進行傳遞。
3,使用open報文和keeolive報文進行鄰居關系的建立。之后將鄰居關
系收集到一張表中---鄰居表。
4,通過update報文傳遞路由信息。傳遞的路由條目信息中主要包含目標網絡號,掩碼信息,以及各種路徑屬性。之后,設備會將所有自己發出的以及收到的路由信息記錄在一張表中---BGP表。
5,之后將BGP表中的最優路徑加載到路由表中。 (依靠屬性選擇出最優路徑)
6,收斂完成后,BGP將周期使用keeplive報文進行保活。?;顣r間默認為180S,周期發送時間默認為保活時間的1/3,即60S。?
7,若出現錯誤信息,將使用notification報文進行告警。?
8,若發生結構突變,則將使用update報文進行觸發更新。
4,BGP的路由黑洞
?
由于BGP協議支持非直連建鄰,故可能出現BGP協議跨越未運行BGP協
議的路由器。導致BGP路由傳遞后,控制層面可達,但是數據層面,在經
過未運行BGP協議的路由器時無法通過。形成路由黑洞。
- 在R3上將BGP協議的路由信息重發布到IGP當中。
2,直接在R4上運行BGP協議
3,MPLS
為了避免路由黑洞的情況產生,BGP提出了同步機制---即當一臺路由器從自己的IBGP對等體學習到一條BGP路由時,他將不能把他通告給自己的EBGP對等體,除非他又從IGP協議當中學習到這條路由。
5,BGP的防環
BGP使用的防環機制---水平分割機制
EBGP的水平分割---一種專門應用EBGP對等體之間,用來解決EBGP對等體之間可能出現的環路問題。
BGP協議將在路由條目中記錄所經過的AS編號----AS_PATH ---記錄AS路徑的一個屬性。(這個屬性除了可以完成EBGP的水平分割外,還可以作為選路的依據。)---接收到的BGP路由條目中,其中的AS_PATH屬性中,若存在本地的AS號,則將拒絕接受。
IBGP的水平分割---一種專門應用在IBGP對等體之間,用來解決IBGP對等體之間可能出現的環路問題。
?
IBGP水平分割---當一個路由器從一個IBGP對等體處學習到某條BGP路由時,他將不能在將這條路由信息通告給其他的IBGP對等體關系。
?
因為IBGP水平分割的限制,導致IBGP對等體之間的路由信息只能傳遞
一跳,在這情況下,可能會造成通信障礙。
解決方案:
-
構建全連的IBGP對等體關系---這樣的方法弊端在于
- 全連建鄰會導致資源消耗增加;
- 可能會導致網絡的可拓展性降低。
2,路由反射器
3,聯邦
6,BGP的基本配置
原文鏈接:https://blog.csdn.net/Newcomer_L/article/details/125898346
相關推薦
- 2022-05-25 @Service未注入、 @Autowired未自動注入
- 2023-04-11 Python中字符串類型代碼的執行函數——eval()、exec()和compile()詳解_pyt
- 2022-09-22 Apriori算法的實現
- 2022-04-26 Jquery實現多選下拉列表左右移動_jquery
- 2022-03-25 Mybatis聯合查詢的實現方法(多表聯合查詢)
- 2022-04-10 SQL?server中提示對象名無效的解決方法_MsSql
- 2022-05-06 利用python繪制笛卡爾直角坐標系_python
- 2022-01-20 出現SLF4J: Failed to load class “org.slf4j.impl.Stat
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支