BGP

## Хилийн гарцын протокол (BGP) 
**Border Gateway Protocol** (BGP) бол AS-уудын хоорондох замчлалыг хангадаг замчлалын протокол юм. TCP холболтоор илгээгдсэн мэдээллүүдийг гадаад системд замчлаж өөрөөр хэлбэл сүлжээний аль замаар дамжихыг заана. BGP хувилбарууд BGP-1 (RFC1105), BGP-2 (RFC1163) болон BGP-3 (RFC1267) байсан. Одоо хэрэглэж байгаа хувилбар бол BGP-4 RFC4271 стандартаар тодорхойлогдоно. Сүлжээнүүдийг нэгтгэх болон CIDR,VLSM –г дэмжинэ.CIDR нь замчлалын хүснэгтийн хэмжээ ихсэхээс сэргийлнэ. Зөвхөн TCP-179 портыг ашигладаг. TCP холболт үүсгэнэ сайн замыг сонгохдоо метрик ашиглахгүй оронд нь path attribute ашигладаг.

BGP4 болон CIDR нь замчлалын хүснэгтийн хэмжээ ихсэхээс сэргийлнэ.
* CIDR ажиллахгүйгээр BGP хүснэгтэнд 2,000,000 орчим бичлэг байна.
* CIDR ажилласнаар BGP хүснэгтэд 300,000 орчим бичлэг байна.
BGP нь дотроо 2 төрөлтэй.  
* External BGP- хөршөө зарлахдаа AS-ын дугаар өөр байвал
* Internal BGP- Хөршөө зарлахдаа AS дугаар ижил байвал 

## Autonomous System 
AS гэдэг нь ижил замчлалын бодлогон дор ажиллаж байгаа рутеруудын цуглуулга юм.Хэрвээ AS гадаад гарцын протокол ашиглан (жишээлбэл BGP) нийтийн интернет сүлжээтэй холбогдож байгаа бол Internet Assigned Numbers Authority (IANA)-аас **unique AS number**-ыг авсан байх шаардлагатай.  

AS-ын дамжууллын төрлөөс хамаарч 2 хуваагдана. 
* Transit- Өөр өөр AS-уудыг холбож өгнө

* Non-Transit- бусад AS-н мэдээлли йг өөр дээгүүрээ дамжуулахгүй.
**AS-ын дугаар:**

AS-ын дугаар 1-65535 хооронд байна. 64512-65535 дугаарыг хувийн хэрэглээнд ашигладаг. (IP хаягийн private хаягтай ижил).Regional Internet Register (RIR) 1-64512 хоорондох дугаарыг удирддаг. IETF RFC4893 (16 битийн урттай), RFC5398 (32 битийн урттай) стандартуудыг шинэчлэн гаргасан.

## BGP үндсэн ойлголт 
**BGP-н төрөл**   

Хэрвээ 2 BGP рутерууд өөр AS-д ажиллаж байгаа бол бие биетэйгээ шууд холбогдож EBGP peer үүсгэх боломжтой. 2 BGP рутер BGP peer холболт үүсгэх үед TCP 179-р портыг ашиглана. 

BGP-Peers (хөрш)

BGP peer болон BGP хөрш гэсэн нь хөршийн харилцаа үүссэнийг илэрхийлнэ. TCP холболт үүсгэж BGP замчлалын мэдээллээ солилцоно. Үүнийг BGP Peer эсвэл BGP neighbor гэж нэрлэдэг. AS-уудын хооронд хөрш болоход заавал шууд холбоотой байх ёстой. BGP Peer нь заавал BGP neighbor коммандаар тохируулагдана.

**EBGP Хөрш болох шаардлагууд**
* Хөршийг тодорхойлох:  BGP Замчлалын мэдээлэл солилцож эхлэхийн өмнө TCP холболт үүссэн байх

* Шууд холбоотой байх:  EBGP хөршүүд шууд холбоотой байх

* AS дугаар өөр байх:  EBGP хөршүүд заавал өөр AS дугаартай байх

* Ижил AS-д байгаа BGP рутерууд BGP peer холболт үүсгэнэ. Энэ холболтыг IBGP peer холболт гэнэ.

* IBGP Peer холболтын зөвхөн физик интерфейс дээр биш логик холболтонд ч үүсгэх боломжтой.
**IBGP Хөрш болох шаардлагууд**
* Хөршийг тодорхойлох:  BGP Замчлалын мэдээлэл солилцож эхлэхийн өмнө TCP холболт үүссэн байх

* Шууд холбоотой байх:  IBGP хөршүүд IGP ашиглан холбогдсон байна. IBGP хөршийг Loopback хаягаар тодорхойлох

* AS дугаар ижил байх:   IBGP хөршүүд заавал ижил AS дугаартай байх

### BGP Patch Vector Characteristic 
Дотоод гарцын протоколууд сүлжээнүүдийн жагсаалт, сүлжээ бүрт хүрэх метриктэй байдаг. BGP рутерууд шууд холбоотой байгаа сүлжээний мэдээллүүдийг солилцохдоо path attribute-ыг цуглуулдаг.

Path vector-ын мэдээлэл нь дотроо:
* AS дугаар (Тухайн сүлжээрүү очихдоо дамжих AS-ын тоог тодохойлно.)

* Next-hop attribute (Тухайн AS-руу хүрэхдээ ямар IP хаягтай төхөөрөмжрүү гарахыг тодорхойлно.)
* Origin-Code attribute (Тухайн замчлалын мэдээний үүсгүүрийг заана) 3 төрөлтэй:
# I – internal (BGP network коммандаар орсон сүлжээ)
# E – external (EGP) ашиглагдахгүй
# ? – incomplete (Бусад эх үүсвэрээс ирсэн сүлжээ)
BGP Synchronization

AS дотор замчлалаа хийсний дараа өөр AS-тай холбогдож замчлалын мэдээллээ солилцоно. Default утга нь идэвхигүй байдаг. Cisco IOS 12.2-с дээш хувилбар дэмжинэ.

**BGP холболтын төлвүүд**
* Idle (Хөршөө зарлах үед)

* Connect (Хөрштэй TCP холболт үүсэх үед)

* Open sent (Хөрштэйгөө TCP холболт үүссэний дараа, хөрш илрүүлэх үед)

* Open confirm (BGP хөрш болсон үед)
* Established (Update замын мэдээллээ солилцоно)
**BGP мессежийн төрөл**
* Mессеж нь 19-4096 байтын урттай

* BGP мессежүүдийн ижил 3 талбар
*# Marker талбар (16 байт) - BGP мессежийг баталгаажуулах, 2 BGP peer-ын хооронд синхрончлолын алдагдлыг илрүүлэх
*# Length талбар (2 байт) – Header-т агуулагдаж байгаа BGP мессежийн нийт урт
*# Type талбар (1 байт) – BGP мессежийн төрлийг тодорхойлно. (Open, Update, Notification, Keepalive)

* Open Message

* Update Message

* Notification Message

* Keepalive Message 
**Open мессеж**

* TCP холболт үүссэний дараа, Full BGP adjacency болохоос өмнө илгээгдэнэ. Тохиргооны параметрүүдийг агуулдаг.

* BGP Peer хоёулаа харилцан зөвшөөрвөл BGP Update мессежээр замчлалын мэдээллээ солилцож эхлэхэд бэлэн болно.

**Update мессеж**    
* Update мессеж нь BGP-ын бүх мэдээллийг агуулна.

* BGP Update мессеж нь зөвхөн нэг замын мэдээлэлтэй байна, хэд хэдэн замын хувьд хэд хэдэн update мессеж шаардлагатай.

* Update мессеж нь дараах мэдээг агуулна:

* Unreachable routes information (Талбарын хэмжээ хувьсах урттай)

* Замчлалын шинэчилсэн мэдээний жагсаалтад байгаа үүнийг BGP замчлалын хүснэгтээс устгах шаардлагатай.

* Path attribute information (Талбарын хэмжээ хувьсах урттай)

* AS-path, origin, local preference, next-hop

* Network-layer reachability information (NRLI, Талбарын хэмжээ хувьсах урттай)

* NRLI (10.1.1.0 255.255.255.0 à 24, 10.1.1.0 гэж илэрхийлэгдэнэ.)

**Notification мессеж**   
* BGP notification мессеж нь алдаа илэрсэн үед илгээгдэнэ.

* BGP холболт хязгаарлагдмал бол үед нэн даруй энэ мессежийг илгээнэ.

* Notification мессеж нь error code, error subcode, өгөгдөлтэй холбоотой алдаа зэргийг агуулдаг.

**Keepalive мессеж**  

* Peer-уудын хооронд default-аар 60 сек тутамд илгээгддэг.

* Message header нь 19 байтын урттай.

### Path Attribute 
BGP Path attribute-уудаар сайн замаа тодорхойлдог. Зарим атрибутууд заавал эсвэл автоматаар update мессежэнд байдаг бол зарим нь гараар тохируулагддаг. BGP атрибутууд замчлалын бодлого хэрэгжүүлэх боломжтой. 

**3 талбартай  (2 байтын урттай)**
* Attribute type

* Attribute length

* Attribute value

**Attribute-н 4 төрөлтэй**
# Well-Known Mandatory
#* AS PATH- Хүлээн авах сүлжээ хүртлэх AS дарааллын дугаар байна. Замчлалын мэдээллийг үүсгэж байгаа рутер нь өөрийн AS дугаарыг оруулан дамжуулах ба өөр AS-аар дамжих бүрд уг талбар тухайн дамжиж байгаа AS-ийн дугаараар нэмэгдэн дамжуулагдана.
#* NEXT HOP-Ерөнхийдөө IGP-ын Next-Hop гэсэн ойлголттой ижил.
#* eBGP- ийн хувьд энэ нь хүлээн авах сүлжээг зарлаж байгаа хөрш рутерийн мэдээнд ирэх ба хөрш өөрийн хаягийг илгээнэ.
#* iBGP-ийн хувьд eBGP-ийн мэдээний Next hop хадгалагдаж дараагийн рутерт дамжуулагдах бөгөөд хүлээн авах сүлжээ нь нэг AS-д байгаа рутерт холбоотой байгаа бол тухайн сүлжээний тухай мэдээллийг зарлаж байгаа рутерийн хаяг нь байна. Ашиглах комманд: neighbor {ip-address| peer-group-name} next-hop-self
#* ORIGIN- Замчлалын мэдээллийн үүслийг тодорхойлоход ашиглагдана. 3 төрөл байна.
#*# IGP: Энэ тэргүүн зэрэглэлийн замчлалын мэдээлэл болохыг заана. Замчлал нь BGP замчлалын хүснэгтэд network командын тусламжтайгаар орсон.
#*# EGP: Энэ нь хоёрдугаар зэрэглэлийн замчлалын мэдээлэл. Гадаад замчлалын мэдээллүүд байна.
#*# incomplete: энэ нь хамгийн бага зэрэглэлтэй замчлал. Redistribute-ээр орж ирсэн замчлалын мэдээлэл хамаарагдана.
# Well-Known Discretionary
#* LOCAL Preference - Дотоод AS-уудын мэдээллийг гаргах сайн замыг тодорхоOг сонгох процесс боловсруулна.Хэрвээ олон замуудын хувьд originator эсвэл router-id ижил байвал бага cluster-list замыг сонгоно.йлно. Энэ нь дефаултаараа 100 байна. (IBGP-д хамааралтай)
#* Atomic aggregate - Замуудыг нэгтгэн дамжуулахад ашигладаг.
# Optional Transitive
#* AGGREGATOR - Aggregator attribute агуулганд бүх замын мэдээлэл байна. Энэ attribute нь тухайн рөүтэрийн BGP id болон AS дугаар зэргийг агуулж atomic, aggregator хамт бүх замыг үүсгэнэ.
#* Community - Замчлалын бодлого ашиглах тохиолдолд ашиглана.Нууц үг өгдөг.
# Optional Nontransitive
#* MED - Зөвхөн тухайн AS-руу орж ирж байгаа замуудаас аль нь сайн зам бэ гэдгийг тодорхойлно.
#* Originator id - Рөүтэр id (хамгийн их ip хаягтай нь рөүтэр id)-тай адаил замыг сонгох процесс боловсруулна. Хэрвээ олон замуудын хувьд originator эсвэл router-id ижил байвал бага cluster-list замыг сонгоно. 
#* Cluster list- Нэг AS дотор байгаа рөүтерүүдийг cluster болгож cluster дотроо сервер болон клинт гэсэн рөүтерүүд байна.Дараа нь сервер дээрээ хөршөө бүртгээд аль аль хөрш нь клинт болохыг зааж өгнө. Ашиглах комманд: neighbor {ip-address} cluster-id *cluster-id*

## BGP Communities 
###### BGP Communities Explained 
BGP Community бол нэгээс олон мэдээллийг BGP-н хөршүүдэд нэмж  зарлаж өгдөг нэмэлт мэдээллийн хэсэг юм. Энэ нь IP хаягийн багц болгосон IGP дах таг гэж үзэж болно. BGP замчлагч протоколын нэмэлт attribute юм. Community strings нь ихэвчлэн замчлалыг удирдахад BGP attribute-н IP хаягийн багцыг хэрэглэдэг. Community-c IP хаягийг prefix-list эсвэл access-list-ээр зарлаж өгнө. Community attribute зарласан бол энэ нь рөүтер дээр route-map функцээр өөрчлөж болно. Дефаултаараа community string нь аравтын тооллоор байдаг.

Дөрвөн төрлийн  Well known BGP community байдаг.
# Internet:   Бүх BGP хөрш руу prefix зарлах
# No-Advertise:   Аль ч BGP хөрш руу prefix зарлахгүй байх
# No-export:  Аль ч eBGP хөрш руу prefix зарлахгүй байх.
# Local-AS:    sub-AS-ын гадаад prefix-д зарлахгүй байх (BGP холбоо тогтооход ашиглана.)
**BGP Community No Advertise**

Энэ нь 4 well known community-н нэг юм.No advertise community-аас prefix нэмэх үед хүлээн авах BGP рөүтерийг ашиглах мөн BGP хүснэгтэнд prefix-н утга хадгалагдах боловч бусад хөршүүдэд зарлаж чадахгүй. Утга нь 0xFFFFFF01.

**BGP Community No Export**

BGP хөршүүдийн prefix-ийг зөвхөн iBGP хөршид л зарлаж өгнө. Утга нь 0xFFFFFF01. 

**BGP Community Local AS**

Local AS community бол well known BGP community мөн BGP-д хамаарахад ашиглаж болно. Энэ нь no export community-тай адил боловч 1 sub-AS дотор хамаарч ажиллана.Утга нь 0xFFFFFF03.

**Advanced BGP Features**

Full-mesh топологитой сүлжээнд  олон iBGP peer үүсэх бөгөөд энэ үед peer хооронд loop үүсэх боломжтой. Үүнээс сэргийлэхийн тулд peer –ийг багасгах шаардлага гардаг. 2 төрлийн техникийг ашиглаж iBGP peer багасгадаг. 
# **BGP route reflector (RR)** 
# **BGP Confederation**                                 
**1. BGP route reflector (RR)** 

Route reflector нэг AS дотор байгаа бүх iBGP холболтууд нь хоорондоо мэдээллээ солилцдог. Энэ мэдээнд loop үүсэх боломжтой сүлжээний талаарх мэдээлэл байна. Мөн тухайн сүлжээнд хэдэн peer үүсэх боломжтой тодорхойлж болно. Дараах томьёогоор олох боломжтой.  N*(N-1)/2   N=> тухайн AS –д ажиллаж байгаа төхөөрөмжийн тоо.  

Route reflector –ын ажиллагаа нь тухайн сүлжээнд байгаа төхөөрөмжөөс нэгийг нь RR сонгоно. RR сонгогдсон төхөөрөмж бусад төхөөрөмжүүдтэй  peer холболт үүсгэж холбогдоно.  

Route reflector 3 төрлийн peer байх боломжтой. 
* EBGP neighbor 
* IBGP client neighbor 
* IBGP non-client neighbor 
Route reflector тохируулагдсан үед бусад IBGP рөүтэрүүд нь client эсвэл non-client эсэхийг рөүтэрт мэдэгдэнэ. Client нь IBGP рөүтэр дээр route reflector бол “reflect” зам , non-client нь зөвхөн байнгын IBGP хөрш байна. 

Route reflector замчлал хийгдэж байх үед, дараах хэдэн дүрэмтэй:
* EBGP хөршөөс замчлалаа суралцаж бусад EBGP хөршүүд , client болон non-client рүү дамжуулалт хийгдэнэ. 

* Client –ээс замчлалаа суралцаж бусад  EBGP хөрш, client болон non-client руу дамжуулалт хийгдэнэ. 

* Non-client –ээс замчлалаа суралцаж бусад EBGP хөрш болон client рүү дамжуулал хийгдэнэ гэхдээ non-client рүү хийгдэхгүй. 
Дээрх 3 дүрэм нь энгийн IBGP split horizon  шинж чанараас сэргийлэх ач холбогдолтой.  

**2. BGP Confederation**

BGP confederation нь AS хувааж sub-AS-ууд үүсгэн iBGP peer –д шаардагдах холболтыг багасгана. Sub-AS нь full-mesh IBGP шаардагдах боловч sub-AS хооронд заримдаа EBGP ашиглаж болно. Гэхдээ IBGP ( confederation BGP ) шинж чанарыг агуулсан байна. 

Доорх зурагт харуулснаар full-mesh үед 15 IBGP peer үүсэж байсан бол 2 sub-AS болгон хувааснаар 8 IBGP peer үүсгэж peer –ийг багасгасан. 

### BGP хүснэгт 
* BGP table: - Бүх сүлжээний тухай мэдээлэл. Зам бүрийн шинж чанарууд болон хүлээн авах сүлжээ хүрэх олон замуудыг харуулна.

* Routing table: Хамгийн сайн боломжит замуудыг харуулна. 

* Neighbor table: Хөршийн жагсаалтыг харуулна. 
**Хэрхэн BGP хүснэгт унших талаар**                                                                                                               **show ip bgp** командын гаралтыг харахад: 
*  *  - Энэ утга бол BGP-д байгаа зам
*  > - Сайн замаар сонгогдсонг тэмдэглэнэ.

**Origin codes**: Замчлалын мэдээний үүсвэрийг  дараах 3 төрлөөр заана. 
* I => IGP- Энэ тэргүүн зэрэглэлийн замчлалын мэдээлэл болохыг заана.Замчлал нь BGP замчлалын хүснэгтэнд network командын тусламжтайгаар орсон.
* E => EGP- Энэ нь хоёрдугаар зэрэглэлийн замчлалын мэдээлэл.Гадаад замчлалын мэдээллүүд байна.
* ? => incomplete- Энэ нь хамгийн бага зэрэглэлтэй замчлал.Redistribute-ээр орж ирсэн замчлалын мэдээлэл хамаарагдана.                                                                                                                                                                     
**Status code**: Энд харж байгаа бусад зүйлсээс BGP хүснэгтийн хувилбар нь хамгийн сайн зам.  
* Suppressed:Энэ нь BGP-н сүлжээг мэддэг ч түүнийг зарлахгүй, энэ нь сүлжээг орж ирэхэд  хэсэг хэсгээр нь нэгтгэж чаддаг. 

* Damped:Энэ нь BGP-н сүлжээг зарлаж чадахгүй.

* History:BGP сүлжээг мэдэж байсан ч одоо хүчинтэй зөв замаараа чиглүүлэгдэнэ.
* RIB-failure:BGP энэ сүлжээг мэдсэн замчлалын хүснэгтэндээ боловсруулж чадаагүй.Бусад замчлалын протоколын хувьд AD бага үед мэднэ.
* Stale: Энэ нь non-stop forwarding хэрэглэдэг.Хол байгаа BGP хөршийн мэдээлэл ирсэн үед шинэчлэгддэг байх ёстой.
* * valid:зөв зам
* > best :Хамгийн сайн зам
* i - internal: Дотоод зам

## Дотоод гарцын протоколууд болон BGP харьцуулалт 
## Топологи 
BGP протоколыг VPN MPLS -тэй хамт хэрэгжүүлсэн. 

##### Төхөөрөмжүүдийн тохиргооны хэсэг 
Төхөөрөмжүүдийн суурь тохиргоог оруулаагүй бөгөөд та хийж чадна. 

###### **R1 тохиргоо** 
###### R2 тохиргоо 
R3 тохиргоо

R4 тохиргоо

R5 тохиргоо

R6 тохиргоо

R7 тохиргоо

## Ашигласан материал 
# https://networklessons.com/bgp/introduction-to-bgp/
# http://www.cisco.com/c/en/us/support/docs/ip/border-gateway-protocol-bgp/13753-25.html
# https://web.archive.org/web/20160329095836/http://netcerts.net/category/bgp/

Ангилал:Интернэт хэрэглээний протокол
Ангилал:Routing протокол