--- tags: 通訊協議, BGP GA: UA-79596126-4 title: BGP --- ###### 作者: 大叔 ###### 撰寫日期:2020/06/30 {%hackmd BJrTq20hE %} # 什麼是BGP BGP 全名為 Border Gateway Protocol,是網際網路上一個核心的去中心化自治路由協定,最新版 BPG-4 定義於 ```RFC 4271```,先來看看幾個重要術語: * AS (Autonomous System):自治系統,是指在網際網路中,一個(有時是多個)實體管轄下的所有IP網路和路由器的組合,它們對網際網路執行共同的路由策略。定義於 ```RFC 1930```。 * IGP (Interior Gateway Protocol):內部閘道協定,主要是在 AS 內部所使用的一種路由協定,代表協議有 RIP 與 OSPF。 * EGP (Exterior Gateway Protocol):外部閘道協定,用於 AS 與 AS 之間的路由協定,現已被 BGP 取代。 BGP 除了可以使用在 AS 外部外,還可以用於 AS 內部,故 BGP 又可以分為 EBGP (Exterior BGP) 與 IBGP (Interior BGP)。EBPG 為取代 EGP 的通訊協議,那 IBPG 呢? IGP 本身是針對同一個 AS 網路所設計的,一般 AS 網路的規模並不大,故當時設計的時候就沒有考慮到大規模的 AS 網路。隨著時間推進出現了大型的 AS 網路, IGP 像是 OSPF 會出現效能瓶頸,而解決辦法就是使用 BPG。總而言之,路由通訊協議可以分成:小規模私有網域 IGP、大規模私有網域 IBGP、公用網域 EBGP。 # BGP 封包 BGP 可以說是最複雜的通訊協議,其為應用層協議,傳輸層使用 TCP,預設埠為 179。與大部分的通訊協議一樣,BGP 封包是由 Header 及 Data 所組成,Header 有 19 bytes (如下圖),所有的 BGP 封包的 Header 格式都是一樣的。 ![](https://i.imgur.com/BFxsMVO.png) Maker 有 16 bytes,儲存同步訊息與加密訊息。Length 為 2 bytes,包含 Header 在內的長度。Type 為 1 bytes,表示BGP封包的類型,可分為四類: * Type 1 (Open):TCP 連線建立後,BGP 所發送的第一個封包 * Type 2 (Update):用於更新路由表 * Type 3 (Notification):出錯時會發送的訊息,一旦發送則 BGP 連線會被中斷。 * Type 4 (Keepalive):沒有 Data 只有 Header。用來確保 BGP 連線,通常是 1/3 的 BGP session hold time,預設是 60 秒。 # 為何需要 BGP 就舉一個簡單的例子,假如小明想要建置一個雲端環境並提供虛擬機的服務,於是開發小明雲 1.0。但此時的小明雲只有一個雲端環境而己並不能上網,於是向 ISP 業者申請的公用 IP,虛擬機可以透過路由器的 NAT 功能將自己的私有 IP 轉成公用 IP,並在路由器上將預設路由指向 ISP 路由器的地址,這樣小明雲內的虛擬機都可以連上網了。 ![](https://i.imgur.com/asV3QEU.png) 小明雲的使用者覺得只能在私有網域上才能連進虛擬機實在是太不方便了,於是向小明反映,於是小明使用 Port Foward 方式將虛擬機的埠與公用 IP 的埠進行映射,例如將虛擬機的 Port 22 映射到公用 IP 的 Port 1122,這樣使用者可以透過 ssh IP:1122 連線到虛擬機,此時小明雲 2.0 上線。 由於小明雲的使用者越來越多,小明發現的幾個問題,每個虛擬機每開放一個 Port 就要映射一次,而且公用 IP 的 Port是有限的,所以小明向 ISP 申請了一些公用 IP,並直接將這些 IP 分配給雲中的虛擬機,這樣就出現了小明雲 3.0。 ![](https://i.imgur.com/JLo9lSW.png) 隨著使用人數增加,單一 ISP 業者 IP 有限,而且一斷線所有服務都不能用了,所以小明決定開發小明雲 4.0 。首先先向 IANA (Internet Assigned Numbers Authority) 申請了自己的公用 IP 池,並同時申請小明雲的 AS 編號。接著小明分別向兩家 ISP 業者購買的線路,這樣其中一家斷線也不會造成服務中斷。這時小明雲就需要使用到 BGP 協議讓雲中的路由資訊推送至兩家 ISP 業者的路由器上,這樣 ISP 業者就知道如何連線到小明雲內公用 IP 的虛擬機上。 ![](https://i.imgur.com/zDH1HKy.png) 從上述例子可以發現 BGP 協議主要適用於網路規模夠大時才會需要的路由協定,就像前面所說的 BGP 是一個複雜的通訊協議,有很多的通訊協議也是基於 BGP 發展出來的 (ex:EVPN)。