eBGP 與 iBGP(external/internal BGP)
/ ee-B-G-P and eye-B-G-P /
BGP 用在兩個看似相同、角色卻不同的地方。eBGP(外部 BGP)跑在不同自治系統的路由器之間——它是各網路互相告知「我能抵達什麼」的方式。iBGP(內部 BGP)跑在同一個自治系統內部的路由器之間——它的任務是把從外界學到的路由,在單一網路內部傳遞開來,好讓每台邊界路由器對「該如何出去」取得共識。同一個協定,兩種任務:在邊界學路由,再在內部分發它們。
為什麼需要 iBGP?想像一家全國性 ISP,在紐約和洛杉磯都有邊界路由器。紐約那台透過 eBGP 學到如何抵達某個歐洲前綴;洛杉磯那台透過 eBGP 學到如何抵達某個亞洲前綴。一個從洛杉磯進來、卻要送往歐洲的封包,必須設法穿過這家 ISP 的內部、送到紐約的出口。這家 ISP 的內部路由協定(譬如 OSPF)知道怎麼從洛杉磯走到紐約,但它並不知道外部的網際網路前綴。iBGP 填補了這個缺口:它把從外部學到的 BGP 路由洪泛給 AS 內部的每台 BGP 路由器,於是洛杉磯那台就知道正確的出口在紐約。
由此衍生出兩條實務規則。第一,eBGP 通常跑在直接相連的路由器之間,而 iBGP 會話常跑在相隔好幾個內部跳數的路由器之間(仰賴 IGP 在它們之間搬運封包)。第二,為了防止內部迴圈,經典規則是:透過 iBGP 學到的路由不會再宣告給另一個 iBGP 對等者——這樣天真地做下去會強迫建立 iBGP 會話的全網狀(full mesh),也正是大型網路改用路由反射器(route reflector)或聯盟(confederation)來縮減規模的原因。
一個 AS 有三台邊界路由器 R1、R2、R3。R1 透過 eBGP 從一個外部鄰居學到通往前綴 P 的路由。為了確保 R2 與 R3 也知道 P 可經由 R1 抵達,這個 AS 跑了 iBGP 會話 R1–R2 與 R1–R3(以及 R2–R3),讓路由在內部傳播。現在三台中的任何一台都能把往 P 的流量轉送到 R1 的出口。
eBGP 從鄰居學路由;iBGP 把那些路由分發給同一個 AS 內的每一台邊界路由器。
eBGP 與 iBGP 是同一個協定、套用不同政策,而非兩個協定——而且 iBGP 不取代內部路由協定(OSPF/IS-IS);它跑在其上,用來承載外部前綴。