1. BGP (Border Gateway Protocol) 란?
글로벌 네트워크는 최종적으로 AS 라는 집단 (예> 하나의 인터넷 회선 사업자가 가지고 있는 모든 라우터들의 그룹) 끼리 상호 통신을 하게 됨으로써 구성된다고 볼 수 있습니다. 이 AS 들 끼리 서로 라우팅 경로를 주고 받으며 통신을 가능하게 하는 라우팅 프로토콜 (Inter-Domain Routing Protocol) 이 바로 BGP 라고 할 수 있습니다.
하나의 도메인 안에서 사용되는 OSPF 와 같은 IGP 와는 다르게 BGP 는 상이한 도메인 (예> 다른 ISP 사업자 끼리) 간에 라우팅 정보를 교환하는 것이 주 목적입니다. 따라서 EGP (Exterior Gateway Protocol) 에 소속되는 프로토콜로써 대규모 네트워크의 통신을 위한 다양하고 강력한 라우팅 기능을 제공하기 위해 만들어 졌습니다.
BGP 의 주요 특징들은 다음과 같습니다.
– BGP 에서는 ‘인터넷’ 을 다양한 AS 간 연결 경로 (Path) 로 이루어진 방향성 그래프의 집단으로 구분합니다. (AS 간에 Mesh Type 구성)
– 발전된 형태의 거리 벡터 라우팅 프로토콜 (Distance Vector Routing Protocol : 전체 네트워크 토폴로지는 모르지만 이웃 라우터와 주기적인 갱신을 통해 확인된 정보를 기반으로 목적지 네트워크에 대한 라우팅 경로 결정) 혹은 경로 벡터 라우팅 프로토콜 (Path Vector Routing Protocol : 목적지에 도달하기 위해 지나야하는 AS 들의 순차적 목록에 기반한 라우팅 경로 결정) 이라고 구분할 수 있습니다. 즉, BGP 는 목적지 네트워크 (다른 AS) 까지 거쳐야하는 경로를 파악하는데 최적/최단의 경로를 찾는 라우팅 정보라기 보다 도달 가능성 (Network Reachability) 을 확인하고 알리는 프로토콜입니다.
– BGP 에서는 하나의 AS 를 하나의 홉 (Hop) 으로 계산합니다. (AS 내부에 얼마나 많은 라우터들이 존재하는지는 고려하지 않음)
– 무한 루프에 빠지지 않는 라우팅을 보장합니다. 즉, 순환을 피할 수 있도록 목적지까지 가는 경로 정보를 제공합니다. (Looping-free)
– 신뢰성 있는 TCP 기반의 연결을 통해 라우팅 정보를 교환합니다. (BGP 라우터 끼리 포트번호 179번으로 전달)
– AS 간 피어 (Peer) 관계를 맺는 것과 네트워크 정보를 생성하고 전달하는 작업이 분리되어 수행됩니다.
– 라우팅 정보의 점진적 부분 갱신 (Incremental, Partial, Triggered Update) 을 수행합니다. 즉, BGP 는 변화가 있을때 만 이웃 라우터에게 갱신 정보를 Advertising 합니다. (처음 BGP 세션을 맺을때만 전체 라우팅 정보가 필요) 또한 변화가 있을 때, 순간적으로 연결이 단절되는 증상 (Flapping) 을 방지 하기 위해 일정 시간 동안은 대기를 한 후 라우팅 업데이트를 수행 합니다. (AS 내부 통신을 하는 iBGP : 5초, AS 외부에서 AS 끼리 통신을 하는 eBGP : 30초) 만일, 네트워크의 변화가 전혀 없으면 주고 받는 정보가 없게 되므로 자신이 살아있음을 알리는 BGP Keep-Alive 메세지를 60초 마다 교환합니다.
– 최상의 경로 선택을 위해 다양하고 풍부한 라우팅의 메트릭, 즉 여러가지의 경로 속성 (Path Attribute) 정보를 사용합니다. 특히 우선 순위가 있는 각 메트릭을 차례대로 참조하여 최상의 경로를 선택하는 작업을 수행합니다.
– 클래스 없는 주소체계를 지원합니다. 즉, CIDR (Classless InterDomain Routing) 을 지원합니다. (BGP Version 4 에서 도입) 따라서 BGP 는 각 네트워크 정보에 Prefix 의 길이도 함께 전달할 수 있습니다. (NLRI (Network Layer Reachability Information) 지원)
– 정책 기반의 라우팅 프로토콜 (Policy-based Routing) 을 지원합니다. 즉, BGP 는 상대 영역의 라우팅 정책을 침범하지 않으면서도 관리자가 필요한 라우팅 정책을 구현할 수 있습니다. 예를 들어, 서로 경쟁적인 AS 간에 (예> 경쟁 관계의 인터넷 회선 사업자들) 자신의 피해 예방을 위하여 최소한의 정보 공유를 하거나 정치적, 보안 이슈 등의 목적으로 특정 경로를 무시하거나, 또는 가중치 부여를 할 수 있습니다.
– BGP 는 직접 이웃하지 않은 라우터들과도 이웃 관계를 맺을 수 있습니다. OSPF 처럼 인터페이스에서 ‘hello’ 메시지를 직접 접속된 라우터만 주고받는 방식이 아니라, 관리자가 설정한 정책에 따라 IP 주소를 기반으로 TCP 세션을 사용하여 이웃 관계를 맺을 수 있기 때문입니다.
2. BGP 경로 속성 (Path Attribute)
BGP 경로 속성이란, 도착 가능한 목적지가 있는 AS 까지의 경로에 관련된 정보들을 나타내는 일종의 매개 변수들을 의미합니다. 특히, BGP 경로 속성은 최적의 경로를 선정하는데 사용되는 라우팅 메트릭 (Routing Metric) 입니다. 이 경로 속성 값들은 BGP Update 메세지에 포함되어 전달됩니다.
– AS-Path (AS 경로)
해당 목적지의 AS 까지 경유되는 AS 번호들을 의미합니다. 이 번호들의 갯수가 작을 경우 (홉이 적을 경우) 짧은 경로로 판단합니다. 한편, 이 번호들 중 자신의 AS 번호가 있을 경우 해당 정보는 무시합니다. (AS-Path 에서 Routing Loop 발생 방지)
– Next-Hop
목적지까지 가는 경로에서 반드시 자신을 거쳐야만 한다고 알리는 특정 라우터의 주소를 의미합니다.
– Local Preference
목적지까지 여러 경로가 있을 때, 외부로 나가는 통로들에 대한 선호도를 주는 속성을 의미합니다. 따라서 AS 내부, 즉 iBGP 에서만 유효한 속성 입니다. 수치가 큰 값이 더 높은 선호도를 가지며, 디폴트 값은 통상 100 입니다.
– MED (Multi-Exit-Discriminator)
외부 AS 의 라우터들에게 내부 AS 로 들어오는 Path (경로) 중에서 특정 경로를 선호하도록 유도하는데 사용하는 식별자입니다. 예를 들어, AS 내부로 들어올 수 있는 경로가 여러 개 있을 경우, 각 경로에 별도의 선호도를 부여하는 속성입니다. 디폴트 값은 통상 0 입니다.
– Origin
BGP 정보가 어디에서 생성 되었는지를 알려주는 정보입니다. (내부 라우팅 프로토콜 (IGP) 또는 외부 라우팅 프로토콜 (EGP)) 설정되는 값의 정보는 다음과 같습니다.
> IGP : 0
> EGP : 1
> IGP 및 EGP 도 아닌 경우, Incomplete : 2
– Community
Tagging 을 하여 특정 그룹으로 묶어 내는 것과 같이 공통의 속성으로 특정 라우팅 정책을 일괄 적용할 수 있도록 하는 속성 값입니다. 따라서 대규모의 BGP 네트워크에서 환경에서 사용할 경우 효율적일 수 있습니다. 예를 들어, 특정 Community 에 일괄적으로 Local Preference 값을 설정 변경하는 등을 수행할 수 있습니다. 아울러 Community 는 AS 내부, 외부에서 모두 사용 가능합니다.
– Atomic Aggregate
네트워크의 주소가 요약된 것이라는 것을 구분하는 속성입니다. 주소가 요약 되면서 이전의 AS 번호가 사라지기 때문에 확인을 요한다는 의미도 내포하고 있습니다. 별도의 옵션 (as-set) 을 통해 해당 정보가 사라지지 않게 설정할 수도 있습니다.
3. BGP 경로 속성 (Path Attribute) 의 주요 구분
BGP 경로 속성은 다음과 같이 별도로 구분할 수 있습니다.
– Well-known Mandatory : AS-Path, Next-hop, Origin
모든 BGP 라우터 들이 인식하고 구현하여야 하는 필수 속성들을 의미합니다. 따라서 Update 메세지에 반드시 포함되야 하는 필수 속성이기도 합니다.
– Well-known Discretionary : Local Preference, Atomic Aggregate
반드시 구현할 필요는 없지만, 모든 라우터들이 이해하고 해석할 수 있어야 하는 속성을 의미합니다. (Update 메세지에 포함될 수도 (예> Local Preference), 안 될 수도 (예> Atomic Aggregate) 있는 속성들을 의미)
– Optional Transitive : Aggregator, Community
옵션 속성으로 어떤 라우터들은 인식은 하지 않지만, 이웃 라우터에게는 전파되어야 하는 속성들을 의미합니다.
– Optional Nontransitive : MED (Multi-Exit-Discriminator)
옵션 속성으로 이를 인식/구현하지 못하는 라우터는 이 속성을 폐기 처분하고, 이웃 라우터에게도 전파하지 않는 속성을 의미합니다.
4. BGP 메세지 포멧
(1) BGP 헤더 영역 (공통 영역)
– Marker : 들어오는 메세지의 인증과 상대 BGP Peer 와의 동기 (Sync) 를 위해 사용됩니다. BGP Open 메세지이거나, 인증이 아닐 경우 모두 1 로 채워집니다.
– Length : 공통 헤더를 포함한 각 BGP 메세지의 길이를 표시합니다. (19~4096 Bytes)
– Type : 다음 유형과 같은 BGP 데이터 영역을 표시합니다.
> 1 : Open 메세지를 의미합니다. TCP 포트번호 179번을 이용한 회선 연결 시도를 위한 오픈 메세지입니다. 라우터간에 BGP 이웃 관계 설정을 위해 사용합니다.
> 2 : Update 메세지를 의미합니다. 라우팅 정보 갱신을 위해 비정기적으로 사용됩니다. BGP 정보를 교환하고 도달 가능성 (Reachability) 정보를 전송합니다.
> 3 : Notification 메세지입니다. 문제가 발생했거나 이웃 관계의 단절을 알릴 때 사용됩니다.
> 4 : Keepalive 메세지입니다. 양 라우터 간 상대방이 아직 살아있나 서로 확인을 하는데 사용됩니다. (OSPF Hello 메세지와 유사함)
> 5 : Route-Refresh 메세지 입니다. 정보를 재확인 하는데 사용됩니다.
(2) BGP 데이터 영역
– BGP Open Message
TCP 연결이 된 BGP Peer 간에 최초로 주고받는 메세지 입니다. 주로, 자신의 정보를 알리기 위한 메세지 입니다. (BGP 이웃 관계를 맺기 위한 자신의 AS 번호, BGP 라우터 ID, Hold Time 등)
> Version : BGP 버전 정보를 포함합니다. 현재는 주로 BGPv4 인 4 를 표기합니다.
> AS : 자신이 속한 AS 번호를 표기합니다.
> Hold Time : 성공적인 Keepalive 또는 Update 메세지의 수신 이후에 다음 메세지를 수신할 때까지 허용되는 최대 대기 시간을 의미합니다. 두 라우터 간에 설정된 값을 비교하여 그 중 작은 값으로 유지하며 초 단위의 값으로 설정됩니다. Keepalive 또는 Update 메세지의 수신시 이 값을 0 로 리셋합니다. 해당 시간초과 이 후에도 메세지를 보내지 않으면 라우터가 다운된 것으로 처리합니다.
> BGP ID (Router ID) : 이 Open 메세지를 송신하는 라우터의 IP 주소를 표기합니다. 라우터가 가지는 IP 주소 중 가장 큰 값 또는 Loopback 주소 중 가장 큰 IP 주소로 기록합니다.
> Optional Length : 옵션 영역의 길이를 표기합니다. (0 이면 아무 옵션도 없음을 의미)
> Optional (추가적인 옵션 영역) : BGP 이웃들 간 이웃 관계를 협상 하기위한 각종 매개변수들이 1 Byte 크기의 ‘매개변수 타입, 매개변수 길이, 매개변수 값’ 형태 로 들어있습니다.
** BGP Keepalive Message : BGP Open Message 에 대한 응답으로써, 상대 (Peer 라우터) 에게 자신이 살아있음을 알리는 주기적으로 보내는 19 Bytes 크기의 BGP 메세지를 의미합니다. 메세지는 BGP 헤더 이외에 다른 내용은 없습니다.
– BGP Update Message
BGP 프로토콜에서 가장 중심적인 메세지로, 이미 이웃 관계를 확립한 Peer 라우터 상호간에 새롭게 나타난 경로 정보에 대한 Advertisement 또는 이전에 알려졌던 경로를 취소하는데 사용 되는 BGP 메세지 입니다. 만약 여러 경로 정보가 있을 경우에는 그 수 만큼 Update 메세지를 교환해야 합니다.
> Unfeasible route length
> Withdrawn routes (취소, 철회 경로) : 이전 Advertise 된 경로 목록 중 삭제 되어야 하는 모든 경로를 나열합니다. (표현 형태 : < length,prefix >)
> Path Attribute length : Path Attributes 영역에 대한 길이를 표기합니다.
> Path Attribute : 도달가능한 네트워크에 대한 Path 정보를 표기합니다. (형태 : < attribute Type, attribute Length, attribute Value >, Attribute Type : 1 -> Origin, 2 -> AS-Path, 3 -> Next-Hop, 4-> MED, 5 -> Local Preference, 6 -> Atomic Aggregate 등)
아울러 Path Attribute Flag 영역의 상세 정보는 다음과 같습니다.
>> O (Optional/Well-known) : 1 -> Optional, 0 -> Well-known
>> T (Transitive/Non-transitive) : O=1(Optional) 이면 반드시 T=1(Transitive)
>> P (Partial/Complete) : 1 -> Partial, 0 -> Complete – E (Extended length)
> NLRI (Network Layer Reachability Information) 영역 : 도달 가능한 망들에 대한 주소들, 즉 새로운 네트워크 정보를 표기합니다. (표현 형태 : < length,prefix >)
– BGP Notification Message
어떤 에러가 발생했을 때 혹은 연결을 닫고자 할 때, 이를 알리고자 보내는 BGP 메세지 입니다. 공통적으로 Notification Message 가 보내진 후 연결 세션은 끊어짐 . (내용은 에러의 원인)
> Error Code
>> 1 : Message Header error (BGP 메세지 헤더에 에러 발생)
>> 2 : Open message error (BGP 오픈 메세지에 문제 있음)
>> 3 : Update message error (BGP Update Message 에 문제 있음)
>> 4 : Hold timer expired (홀드 타임 초과)
>> 5 : Finite State Machine error
>> 6 : Session Cease (세션 다운)
> Error Sub-Code
>> 1 : Connection not synchronized
>> 2 : Bad message length
>> 3 : Bad message type
5. 목적지까지의 여러 경로 중 최적경로 선택 우선순위
BGP 에서는 다양한 속성 값들을 테이블에 기록한 후 다음과 같은 알고리즘을 바탕으로 최적의 경로를 선택합니다. 특히 우선 순위를 고려하여 한 번 경로가 결정되면 그 이후에는 비교하지 않습니다. 경로가 산정이 되면, 라우팅 테이블에 추가하고 동시에 BGP Peer 에게 전달합니다.
(1) Next-Hop 의 IP 주소에 도달 가능한가 (목적지 방향을 선택)
(2) 가장 높은 Local Preference 가 우선
(3) 자신이 생성한 경로 우선
(4) AS-Path 가 가장 짧은 경로 우선
(5) Origin Type 중 가장 작은 값 우선 (IGP -> EGP -> Incomplete 순서)
(6) 가장 낮은 MED 값 우선
(7) eBGP 에서 파악된 경로 우선 (iBGP 보다도 우선)
(8) Next-Hop 에 대해 최소 메트릭을 갖는 경로 우선
(9) eBGP 만 있을 경우, 가장 먼저 파악된 경로 우선
(10) 최소 값의 라우터 ID 가 보낸 경로 우선
– 출처
RFC 1771 (A Border Gateway Protocol 4 (BGP-4)) : https://www.rfc-editor.org/rfc/rfc1771.txt
RFC 1772 (Application of the Border Gateway Protocol in the Internet) : https://tools.ietf.org/html/rfc1772
RFC 1773 (Experience with BGP-4 protocol) : https://tools.ietf.org/html/rfc1773
RFC 1774 (BGP-4 Protocol Analysis) : https://tools.ietf.org/html/rfc1774
RFC 1997 (BGP Communities Attribute) : https://tools.ietf.org/html/rfc1997
#Steven