Can you summarize the following document?
        
  BGP是為了取代外部閘道器協議(EGP)協議而建立的,允許執行一個完全分散的路由系統,從ARPANET模型的核心路由系統過渡到包括NSFNET骨幹網及其相關區域網路的分散系統。這使得網際網路成為一個真正的分權制度。自1994年以來,第四版本的BGP在網際網路上使用,所有以前的版本現在已經過時不可用。在第4版主要的增強功能是通過支援無類別域間路由和路由聚合來減少路由表的大小。第4版(BGP-4)是在早期的RFC 1771第4版的基礎上編纂,通過20多個草案修改,最終在2006年1月通過形成RFC 4271。RFC 4271版本糾正了一些錯誤,澄清模糊之處,帶來了更接近工業級應用標準的RFC行業慣例。  IPv6 BGP在1995年定義於RFC 1883,在1998年的RFC 2283中有所改進。它使得BGP-4能夠支援諸如IPv4、IPv6等一系列的地址型別,也被稱為多協議BGP(Multiprotocol BGP,MP-BGP)。

  BGP的鄰居關係(或稱通訊對端/對等實體,英語:peer)是通過人工配置實現的,對等實體之間通過TCP埠179建立會話交換資料。BGP路由器會週期地傳送19位元組的保持存活(keep-alive)訊息來維護連線(預設週期為60秒)。在各種路由協議中,只有BGP使用TCP作為傳輸層協議。  同一個AS自治系統中的兩個或多個對等實體之間執行的BGP被稱為iBGP(Internal/Interior BGP)。歸屬不同的AS的對等實體之間執行的BGP稱為eBGP(External/Exterior BGP)。在AS邊界上與其他AS交換資訊的路由器被稱作邊界路由器(border/edge router),邊界路由器之間互為eBGP對端。在Cisco IOS中,iBGP通告的路由距離為200,優先順序比eBGP和任何內部閘道器協議(IGP)通告的路由都低。其他的路由器實現中,優先順序順序也是eBGP高於IGP,而IGP又高於iBGP。  iBGP和eBGP的區別主要在於轉發路由資訊的行為。例如,從eBGP peer獲得的路由資訊會分發給所有iBGP peer和eBGP peer,但從iBGP peer獲得的路由資訊僅會分發給所有eBGP peer。所有的iBGP peer之間需要全互聯。  BGP也可以執行於VPN之上,使得位置上遠隔的站點能安全地交換路由資訊。

  在peer的握手過程中,通過OPEN訊息來協商所支援的協議擴充套件,例如多協議擴充套件(多協議BGP)、各種故障恢復模式等。

  同一AS內如果有多個路由器參與BGP路由,則它們之間必須配置成全連通的網狀網格結構:任意兩個路由器之間都必須配置成對等實體。這樣做會帶來擴充套件方面的問題,因為所需要的(TCP)連線數是(BGP)路由器數量的平方。為緩減這個問題,BGP支援兩種選項:route reflectors (RFC 4456)和confederations(RFC 5065)。下面討論了在全連通的IBGP網格中的基本更新處理(UPDATE)。

  NLRI(Network Layer Reachability Information網路層可達資訊)。  一個BGP路由器可以從多個鄰居接收NLRI更新資訊,並且將(自己擁有的)NLRI資訊通告給自己的鄰居們(與收到NLRI更新訊息的鄰居可以不一致)。BGP維護自己的主路由表,稱為Loc-RIB(本地路由資訊庫),注意與路由器的主路由表的區別。針對每一個鄰居,當前BGP的程序(可以理解成本地BGP實體)維護一個Adj-RIB-In(鄰接路由資訊庫,入站),記錄從該鄰居收到的NLRI訊息;還要維護一個Adj-RIB-Out(出站),記錄從本地BGP實體傳送給該鄰居的NLRI資訊。  在上一段中提到的Loc-RIB, Adj-RIB-In和Adj-RIB-Out的具體實現(這些RIB的物理儲存和結構)都由不同的廠商在實現BGP時自行決定。雖然本地路由器上往往通過管理指令查詢這些RIB,但BGP路由器並不關心其他BGP路由器是如何實現這些RIB的。具體實現方法可以不同,大家往往把兩個Adj-RIBs和loc-RIB存在同一個資料結構中,依靠每個RIB表項後附加的額外資訊來區分。BGP程序可以從附加資訊中得知很多資訊,例如哪些表項是屬於為某個特定鄰居準備的Adj-RIBs,Loc-RIB表項是否有資格被遞交給本地路由器的路由表管理程序,逐鄰接路由選擇程序收到的Loc-RIB是否符合策略。  如果Loc-RIB表項有資格被提交給本地路由器的路由表管理程序,BGP會把自認為最優的多條路由遞交給主路由表程序。所遞交的BGP路由是否被選用,則是完全由上述程序的具體實現決定的。例如,如果從路由器的本地埠獲知某一字首與本路由器直接相連,則通常會選擇直接轉發的路由。只要直連的埠還在正常工作,去向該目的字首的BGP路由就不會被真正納入路由表(主路由表)。如果直連埠無法正常工作,並且不存在優先順序較高的路由,則Loc-RIB路由表項就會被載入主路由表。之前有一個常見的誤解,認為BGP傳送各種策略。實際上BGP只傳送資訊,基於這些資訊,BGP程序可以做決策。有些資訊顯然是用於決策的,例如communities和multi-exit discriminators (MED).

  在選擇合適的NLRI加入loc-RIB時,BGP標準規定了很多決策準則。評價NLRI的第一個準則就是判斷它的下一跳屬性必須是可達(reachable或resolvable)。下一跳可達還可以做如下解釋:在本路由器的主路由表中,有一條活動可用的路由,指向下一跳地址所在的字首。換句話說,必須有一條活動可用的路由去向下一跳。  其次,針對每個鄰居,本地BGP程序可以採用不同的標準和廠商自定的原則決定哪些路由可以加入該鄰居對應的Adj-RIB-in。鄰居可以把去向某個目的地的多條路由發給你,but the first level of preference is at the neighbor level。對於某個目的地,只有一條路由會被加入所謂的Adj-RIB-In(注:在本地,針對每個鄰居都有一個Adj-RIB-In)。如果鄰居撤銷了任何路由,該BGP程序還要負責從Adj-RIB-In中刪除對應的條目(如果有)。  如果某個Adj-RIB-In發生變化,本地的主BGP程序將判斷對應的鄰居通告的新路由是否比Loc-RIB中現有路由更好。如是,將進行替換。如果某個路由被鄰居撤銷,而且沒有別的路由指向相應的目的地,則需要從Loc-RIB中刪除相應的路由表項,並且BGP不再將該表項遞交給主路由表管理器。如果OSPF或其他非BGP協議也沒能為本路由器找到一條指向該目的地的路由,則相應的路由表項將從主路由表中刪除。

  如果某條路由資訊(NLRI)來自一個本域內的對等實體(IBGP),BGP標準規定的第一條準則就是檢查LOCAL_PREFERENCE(以下簡稱LOCAL_PREF)屬性。如果來自鄰居(同一AS域)的多條IBGP路由指向同一目的字首,則選擇具有最高LOCAL_PREF的那條路由。如果恰巧有多條路由都具有相同的最高LOCAL_PREF,則執行下一條準則。標準中規定LOCAL_PREF為第一準則,一旦確定了NEXT_HOP可達,Cisco和其他幾個廠商首先考慮了本地路由器定義的WEIGHT值(該屬性僅在本地路由器有效,不會通過BGP擴散),即選擇具有最大WEIGHT的路由。  可以通過本地配置或控制軟體能夠操縱LOCAL_PREF、WEIGHT以及其他的準則。標準中並未定義這樣的操縱,但在實際產品中廣泛存在。例如,BGP選擇程序(selection process)並不直接使用COMMUNITY屬性(見下面)。但BGP鄰居程序(neighbor process)可以根據手動配置的規則來設定LOCAL_PREF或別的factor的屬性值。例如,當COMMUNITY屬性值滿足某種模式匹配準則(或者說具有某種模式)時,BGP鄰居程序就可以修改LOCAL_PREF的值。如果某條路由是從相鄰AS的某個對等實體(BGP)獲知的,per-neighbor BGP process會根據本地的策略規則計算該路由的LOCAL_PREF,並且與來自同一鄰居的其他路由的LOCAL_PREF比較大小。  如果不考慮廠商自己對規則的修改,在BGP協議中,per-neighbor level上依次執行下面的準則,直至選出唯一的一條路由:
邊界閘道器協議(,縮寫:BGP)是網際網路上一個核心的去中心化自治路由協議。它通過維護IP路由表或‘字首’表來實現自治系統(AS)之間的可達性,屬於向量路由協議。BGP不使用傳統的內部閘道器協議(IGP)的指標,而使用基於路徑、網路策略或規則集來決定路由。因此,它更適合被稱為向量性協議,而不是路由協議。