검수요청.png검수요청.png

경계 경로 프로토콜

해시넷
jingayoun (토론 | 기여)님의 2021년 2월 19일 (금) 15:30 판
이동: 둘러보기, 검색

경계 경로 프로토콜(Broader Gateway Protocol, BGP)는 외부 라우팅 프로토콜(Exterior Gateway Protocol, EGP)로 자율 시스템(관리 도메인)과 자율 시스템 사이에서 사용되는 라우팅 프로토콜이다.[1]

개요

정해진 정책에 의하여 최적 라우팅 경로를 수립하며, 경로 벡터 방식의 라우팅 프로토콜로 다른 내부 라우팅 프로토콜(Interior Gateway Protocol)보다 컨버전스가 느리지만, 대용량의 라우팅 정보를 교환할 수 있는 프로토콜이다. TCP 포트 179번을 통하여 인접 라우터들과 이웃 관계를 성립하며, 이웃 라우터 간에는 유니캐스트, 라우팅 업데이트를 실시한다.[1] 인터넷에서 자율 시스템 중 라우팅 및 도달 가능성 정보를 교환하기 위해 설계된, 표준화된 외부 게이트웨이 프로토콜이다. 초기 연결 시 전체 경로 테이블을 교환하고 , 이후에는 변동 내역이 있을 때만 변동 내역을 교환한다. 패킷 형태에는 마커(Marker), 길이(Length), 타입(Type) 3가지가 있고, 19Bytes 크기의 헤더와 데이터로 구성되어 있으며 오픈(Open), 업데이트(Update), 공고(Notification), 킵얼라이브(Keepalive) 4개의 메시지 타입이 있다.[2]

특징

내부 라우팅 프로토콜과 달리 와이드카드 마스크가 아닌 넷 마스크를 사용한다. 관리자가 임의적으로 범위를 조정할 수 없고, 실제 라우팅 테이블에 등록된 대역을 정확히 입력해야 한다. 장비 사이에 연결된 네트워크 대역은 광고할 필요가 없다. 다만 이웃 명령어를 사용하여 상대방 장비를 정확히 지정해야 한다.[3] TCP 프로토콜을 사용하기 때문에 반드시 출발지 IP 주소와 목적지 IP 주소를 알고 있어야 한다. 목적지 IP 주소를 알지 못할 경우 정상적으로 이웃 관계가 형성되지 않는다. 이웃 관계가 정상적으로 이루어질 경우, 자신이 보유하고 있는 네트워크 정보를 이웃 라우터로 전송하며, 수신한 라우터는 해당 정보를 경계 경로 프로토콜 테이블에 기록한 후 경계 경로 프로토콜 알고리즘을 이용하여 최적의 경로를 선택하여 Loc-RIB에 인스톨하게 된다. 또한 네트워크 정보를 Loc-RIB에 인스톨하기 전에 수신한 정보가 필터링에 적용되는지 또는 이웃 라우터로 정보를 전송할 때 필터링에 적용되는 지 등 비교를 하게 된다.[4]

구성

메세지

오픈

경계 경로 프로토콜의 오픈 메시지에는 경계 경로 프로토콜 버전 정보, 자율 시스템 번호, 홀드 타이머(Hold Timer), 라우터 아이디, 추가 기능 여부(Optional)에 대한 정보가 포함된다. 일반적으로 경계 경로 프로토콜 버전 4를 사용하고 있다. 홀드 타이머는 경계 경로 프로토콜 피어(Peer) 간의 상태가 유효하지 않다는 것을 판단하기까지 기다리는 시간이다. 처음 피어 관계를 맺을 때, 두 경계 경로 프로토콜 라우터가 오픈 메시지를 교환할 때 홀드 타임을 결정한다. 서로의 라우터가 광고하는 홀드 타임 중 더 작은 시간을 사용하고, 시스코 라우터의 디폴트 홀드 타임은 180초이다. 라우터 아이디는 라우터에 설정된 IP 주소 혹은 루프백 인터페이스에 대한 정보를 의미한다. 수동으로 지정해주려면 bgp router-id 명령어를 사용하여 지정해주면 된다. 추가 기능 여부는 장비나 운영 체제 별로 추가 기능이 다르기 때문에 어떤 추가 기능을 지원하는지 피어에게 알리기 위한 것으로, 연결되어 있는 두 경계 경로 프로토콜 피어가 모두 지원하는 기능이라면 그 기능을 사용할 수 있게 한다.

업데이트

경계 경로 프로토콜의 피어관계를 확립한 후에 보내는 메시지로, 광고할 네트워크 정보를 상호 교환하기 위해 사용한다. 광고할 네트워크에 대한 정보뿐만 아니라, 경계 경로 프로토콜 속성 정보, 새로운 유효 네트워크 정보, 네트워크 다운 등의 이유로 라우팅 테이블에서 제거해야 하는 네트워크 정보 등 다양한 정보를 담고 있다. 새로운 네트워크는 NLTI(Network Layer Reachable Information) 필드에 기록하고, 제거할 네트워크 정보는 철회 경로(Withdrawn Routes) 필드에 기록되고, 업데이트된다. 업데이트 메시지를 수신한 피어는 NLRI 필드의 네트워크 정보를 경계 경로 프로토콜의 테이블에 등록하고, 철회 경로 필드에 기록된 네트워크는 삭제한다. 속성 정보는 NLRI에 기록된 네트워크에 대한 속성이다.

노티피케이션

경계 경로 프로토콜이 동작 중 오류가 발생할 때 경계 경로 프로토콜 피어에 오류의 원인을 통보하는 메시지다. 경계 경로 프로토콜은 오류가 발생하면, 복구하려고 하기 보다는 발생할 수 있는 더 큰 피해를 방지하기 위해 피어의 경계 경로 프로토콜 프로세스를 중단한다. 이로 인해 피어 관계가 일방적으로 단절되는데, 피어 관계 단절 이유를 상대 피어에게 통보하여 시스템 관리자가 인지할 수 있도록 하는 것이 목적이다. 노티피케이션 메시지의 구조는 오류 코드(Error Code)와 세부정보를 나타내는 오류 서브코드(Error Subcod), 그리고 데이터로 구성된다.

킵얼라이브

킵얼라이브 메시지는 두 경계 경로 프로토콜 간에 주기적으로 주고 받는 메시지로, 피어끼리 상호작용을 할 때 자신의 상태가 정상이라는 것을 알려주는 용도로 사용한다. 경계 경로 프로토콜은 네트워크의 변화가 있을 때, 변화된 정보만을 업데이트 하기 때문에, 네트워크의 변화가 없으면 경계 경로 프로토콜 피어는 서로의 상태에 대해 전혀 인지할 수 없다. 따라서 킵얼라이브 메시지를 통해 자신의 상태에 이상이 없다는 것을 주기적으로 통보해 주어야 한다. 단순히 자신의 상태가 정상이라는 사실을 알려주는 용도로만 사용되기 때문에, 아무 의미 없는 경계 경로 프로토콜 메시지의 헤더 정보만을 전달하는 방식으로, 링크 대역폭을 불필요하게 낭비하지 않도록 했다. 킵얼라이브 메시지의 디폴트 주기는 60초이고, 홀드 타임과 마찬가지로 설정을 통해 변경할 수 있다. 일반적으로 킵얼라이브 주기는 홀드 주기의 3분의 1에 해당하는 시간을 사용한다. 이때 주의할 점은 홀드 주기의 3분의 1 이하의 값으로는 얼마든지 설정이 가능하지만, 그 이상의 값들은 사용할 수 없다는 것이다.

루트 리프레시

루트 리프레시(Route Refresh) 메시지는 새로운 정책이 적용될 경우에도 서비스를 계속해서 유지하도록 마련된 메시지다. 경계 경로 프로토콜은 트리거 업데이트를 사용하기 때문에 피어 간의 라우팅 정보 교환은 피어 관계를 확립한 후 최초 라우팅 업데이트가 이뤄질 때 모든 라우팅 정보를 교환하도록 한다. 수신하는 라우팅 정보는 네트워크 필터링과 속성 변경 등의 정책 적용을 거친 후 라우팅 테이블에 등록되고, 최초 라우팅 업데이트가 이루어진 후에는 네트워크 변화가 발생된 라우팅 정보만을 수신해 정책 적용 후 라우팅 테이블에 등록한다. 따라서 경계 경로 프로토콜 라우터의 테이블에 존재하는 라우팅 정보는 모두 설정된 정책 적용을 마친 라우팅 정보라고 할 수 있다. 네트워크 필터링과 같은 라우팅 정책이 변경될 경우, 경계 경로 프로토콜 라우터는 피어가 전달한 모든 라우팅 정보에 기존 정책을 적용해 이미 로컬 테이블에 등록했기 때문에 변경된 라우팅 정책에 대한 적용이 이루어지지 않는다. 따라서 경계 경로 프로토콜의 라우팅 정책을 변경하려면 경계 경로 프로토콜 세션을 강제로 단절시킨 뒤, 다시 피어 관계를 맺게 함으로써 모든 라우팅 정보를 다시 수신하도록 해야 했다. 이는 정책이 변경될 때마다 서비스가 중단되어야 하는 불편함을 유발했다. 이러한 불편함을 제거하기 위해 경계 경로 프로토콜의 라우터가 피어에 모든 라우팅 정보를 요구하는 메시지를 보내 전체 라우팅 정보를 다시 수신하고, 새로운 정책 적용 시에도 서비스를 유지할 수 있도록 하는 것이 루트 리프레시 메시지다. 루트 리프레시 메시지는 운영 체제 버전에 다라 지원 여부가 결정되기 때문에, 경계 경로 프로토콜의 Capability 코드에 지원 여부를 표시해야 한다. 루트 리프레시 메시지는 선택적인 사항이므로, 경계 경로 프로토콜의 피어링에 영향을 주지는 않는다.[5]

토폴로지

경계 경로 프로토콜은 매우 유연하면서도 복잡한 라우팅 프로토콜이기 때문에, 경계 경로 프로토콜의 라우터는 인터넷 코어 라우터, 중간 ISP 라우터, ISP CPE(Customer Premiss Equipment) 또는 소규모 개인 경계 경로 프로토콜 네트워크의 라우터 등 다양한 토폴로지 설정으로 배치될 수 있다. 서로 다른 토폴로지에 필요한 경계 경로 프로토콜 경로 수는 0개부터 300,000개 이상까지 다양하다. ISP 고객은 ISP로부터 받는 경로의 수와 상관없이 에지 라우터(CPE)에서 ISP로 경계 경로 프로토콜을 실행해야 하는 경우가 종종 있다. 경계 경로 프로토콜의 기본적인 네트워크에는 단일 공급자와 단일 홈, 단일 공급자와 멀티 홈, 다중 공급자와 멀티 홈 세 가지가 있다. 단일 공급자와 단일 홈 네트워크는 네트워크가 단일 ISP로부터 단일 경로를 받는 것이다. ISP 고객이 해당 ISP로부터 받는 경로의 수는 자율 시스템의 특성에 따라 다르다. 인터넷 공급자로 하나의 ISP만 사용하고, 해당 공급자(단일 공급자 및 단일 홈)에 대한 단일 연결이 있는 ISP 고객의 경우 자율 시스템 외부로 대상이 지정된 모든 트래픽이 ISP로 이동하므로 어떤 경로든 받을 필요가 없다. 이러한 고객은 여전히 내부 네트워크 일부 또는 전부를 ISP로 보급할 수 있다. 경계 경로 프로토콜 네트워크의 강력한 후보는 아니지만, 네트워크를 ISP에 보급하는 데 사용할 수 있고, RIR의 공용 자율 시스템으로는 적합하지 않다. 단일 공급자와 멀티 홈 네트워크는 네트워크가 단일 ISP로부터 여러 경로를 받는 것으로, 단일 ISP를 사용하지만, ISP에 대한 연결이 여러 개인 ISP 고객은 각 ISP 게이트웨이에서 기본 경로만을 받는다. ISP 연결이 끊어지면 연결된 CPE 라우터에서 내부 라우터로 전송되어 보급된 기본 경로는 철회되고, 인터넷 트래픽은 ISP 연결이 설정된 CPE 라우터로 이동한다. 고객의 내부 네트워크도 각 CPE 라우터 게이트웨이의 ISP로 보급되므로, 고객에 대한 특정 연결이 끊어진 경우 ISP는 대체 경로를 사용할 수 있다. 일반적으로 RGC 2270의 제안에 따라 단일 개인 자율 시스템을사용하여 경계 경로 프로토콜의 이점을 얻을 수 있고, 공용 자율 시스템 번호를 유지할 수 있다. 다중 공급자와 멀티 홈 네트워크는 ISP 여러 개를 사용하는 ISP 고객이 각 ISP에 대해 하나 이상의 개별 게이트웨이 라우터를 갖는다. 이 경우 고객의 자율 시스템은 공용 자율 시스템이며 전송 또는 비전송 자율 시스템일 수 있다. 전송 자율 시스템은 다른 ISP를 통해 연결할 수 있는 네트워크로 대상이 지정된 하나의 ISP에서 트래픽을 받아 전달한다. 비전송 자율 시스템은 해당 자율 시스템으로 대상이 지정된 트래픽만 받고, 기타 다른 모든 트래픽은 차단된다. 전송 자율 시스템의 경계 경로 라우터는 대개 각 ISP의 전체 경계 경로 프로토콜 테이블 중 상당 부분을 받는다. 중복성이 탁월하며 일반적으로 각 ISP에 대한 전용 라우터에 사용된다. 공용 자율 시스템 번호가 필요하다.[6]

동작

단계

  1. 유후(Idle): 경계 경로 프로토콜을 연결하기 위한 초기 상태다. 경계 경로 프로토콜을 처음 설정할 때, 이웃과 정상적으로 연결을 형성하고자 기다리기 위한 상태로, 이웃 관계에 있는 라우터로부터 일정시간 동안 응답이 오지 않을 경우, “Idle” 타이머 상태로 동작하게 된다.
  2. 연결(Connect): 경계 경로 프로토콜의 라우팅 프로토콜은 TCP 포트번호 179번을 이용하여 이웃 관계를 형성한다. “Connect”는 TCP 포트 번호를 사용하여 다른 라우터와의 연결하기 위해 기다리는 상태로, 정상적으로 세션이 이루어질 경우, Active 상태를 거치지 않고 바로 Open sent 상태로 동작하게 된다. 만약 TCP 세션이 정상적으로 이루어지지 않을 경우, Connect 상태에서 Active 상태로 전환하게 되며, 이웃 관계를 다시 형성하기 위해 기다려야 한다.
  3. 활성(Active): TCP 세션을 재형성하기 위한 상태이며, Active 상태에서 정상적으로 TCP 세션이 이루어질 경우 “Open sent” 상태로 전환하지만, 만약 Active 상태에서 TCP 세션이 계속해서 이루어지지 않을 경우, 1단계인 Idle 상태로 전환되고, 처음부터 다시 연결을 시도한다.
  4. Open Sent: 이웃 라우터로부터 오픈 메시지를 수신하기 위해 기다리고 있는 상태를 의미하며, 정상적인 상태라면 “Keepalive” 메시지를 전송하게 된다. iBGP인지 eBGP인지 확인한 후, 잘못된 경계 경로 프로토콜 정보가 있을 경우 노티피케이션(Notification) 메시지를 전송하고, 1단계인 “Idle” 상태로 돌아가 다시 처음부터 연결을 시도하게 된다.
  5. Open Confirm: 정상적으로 이웃 관계가 이루어졌는지 확인하기 위한 단계이며, Keepalive 메시지를 수신할 경우, Established 상태가 된다. 만약 Open confirm에서 어떤 문제로 인하여 노티피케이션 메시지를 수신한다면 Open sent 단계에서 언급한 것처럼, 다시 1단계로 돌아가야 한다.
  6. Established: Established 단계에 도달했다는 것은, 정상적으로 이웃 관계가 형성되었다는 것을 의미하며, 이때부터 자신이 보유하고 있는 경계 경로 프로토콜 정보를 인접한 라우터로 전송하게 된다.[4]

라우트 하이재킹

라우트 하이재킹(Route Hijacking)이란 다른 라우터가 사용하고 있는 정보를 마치 자신이 소유하고 있는 것처럼 가짜 IP 주소를 생성하여 인접한 라우터로 전송하고, 패킷을 가로채 정상적으로 통신이 이루어지지 않도록 하는 방법이다. 경계 경로 프로토콜을 이용하여 이웃 라우터로 잘못 설정된 정보를 전송하게 되면, 수신한 라우터는 다른 이웃 라우터로 이 정보를 다시 전송하는데, 경계 경로 프로토콜은 거리 벡터 라우팅 프로토콜이기 때문에, 인접한 라우터가 전송해 준 정보를 그대로 믿게 되고, 해당 네트워크 정보가 실제로 존재하고 있는 것으로 인식하여 라우트 하이재킹이 이루어지게 된다.[2]

트래픽

경계 경로 프로토콜의 트래픽에는 지역 트래픽과 횡단 트래픽 두 종류가 있다. 지역 트래픽(Local Traffic)은 같은 자율 시스템에서 발생하거나, 자율 시스템으로 전송되어야 할 트래픽이고, 횡단 트래픽(Transmit Traffic)은 자율 시스템 밖에서 생성되어, 다른 자율 시스템으로 전달되어야할 트래픽이다. 스텁 자율 시스템은 하나의 자율 시스템과 연결된 자율 시스템으로, 길 끝이 막힌 도로와 비슷하다. 해당 자율 시스템에서 출발하거나 그 지역으로 돌아오는 트래픽이 대부분이다. 다중 인터페이스 자율 시스템은 두 개 이상의 자율 시스템에 연결된 자율시스템으로, 큰 고속도로라고 볼 수 있다. 경계 경로 프로토콜에서 다중 인터페이스 자율 시스템 관리자는 횡단 트래픽을 처리하는 조건을 명시하는 라우팅 정책을 정할 수 있다.

결정 과정

스피커

경계 경로 프로토콜의 스피커는 경계 경로 프로토콜 인터네트워크를 만들기 위해 각 자율 시스템에서 경계 경로 프로토콜을 실행할 라우터를 선택하고, 메시지 교환 시스템을 이용해 경로를 공유하도록 한다. 같은 자율 시스템 내에 있는 라우터에만 접속할 경우, 내부 라우터 스피커, 다른 자율 시스템에 있는 라우터에도 접속할 경우 외부 라우터 스피커를 사용한다. 또한 같은 자율 시스템에 있는 주변 경계 경로 프로토콜의 스피커는 내부 피어 스피커, 다른 자율 시스템에 있는 주변 경계 경로 프로토콜 스피커를 외부 피어 스피커로 부른다.

라우팅 정보 베이스

라우팅 정보 베이스(Routing Information Base, RIB)는 경계 경로 프로토콜 스피커가 제대로 동작하기 위해 라우팅 정보의 저장, 갱신, 선택, 광고에 사용하는 중앙 데이터 구조다. 라우팅 정보 베이스는 Adj-RIBs-In, Local-RIB, Adj-RIBs-Out 세 부분으로 나뉜다.[7] Adj-RIBs-In은 경계 경로 프로토콜 피어로부터 수신한 경계 경로 프로토콜 라우팅 정보다. 이는 피어의 라우팅 정보가 로컬 라우터의 라우팅 정책이 적용되기 전의 정보로, 경계 경로 프로토콜 피어가 전달한 정보 그대로 보관한다. Adj-RIBs-In은 각 경계 경로 프로토콜 피어별로 할당되고, Adj-RIBs-In에 위치하는 라우팅 정보는 로컬 라우터의 수신 라우팅 정책을 적용한 후 로컬 라우터의 경계 경로 프로토콜 테이블인 Local-RIB로 보내진다. Local-RIB는 우리가 일반적으로 사용하는 용어인 경계 경로 프로토콜의 테이블을 의미한다. 이는 로컬 라우터의 라우팅 테이블에 등록될 수 있는 경계 경로 프로토콜의 최적 경로 정보를 의미한다. 모든 경계 경계 경로 프로토콜 업데이트는 Local-RIB를 기반으로 하여 경계 경로 프로토콜 피어로 전달된다. Local_RIB는 Adj-RIBs-In 정보에 수신 라우팅 정책을 적용한 후 등록된다. 또한 라우팅 정보를 전달할 때 Local_RIB 정보를 송신 라우팅 정책에 적용한 후 경계 경로 프로토콜 피어로 전달된다. 경계 경로 프로토콜 라우터는 단 하나의 Local-RIB만을 가지며, 모든 Adj-RIBs-In 정보 중 최적 경로 정보가 Local-RIB에 보관된다. Adj-RIBs-Out은 경계 경로 프로토콜 라우터가 경계 경로 프로토콜 피어로 라우팅 정보를 전달할 대 라우팅 정책을 적용한 후 전달하는 기능을 제공한다. Adj-RIBs-Out은 경계 경로 프로토콜 피어로 전달할 라우팅 정보를 보관하는 곳인데, Local_RIB로부터 송신 라우팅 정책을 적용한 후 경계 경로 프로토콜로 전달할 라우팅 정보를 보관한다.[8]

속성

[9]

종류

경계 경로 프로토콜에는 iBGP와 eBGP 두 가지가 있다.[10]

문제

[11]

BGP 유출

[12]

각주

  1. 1.0 1.1 무미닝, 〈(네트워크) 라우팅 프로토콜 (RIP, OSPF, BGP)〉, 《네이버 블로그》, 2017-05-23
  2. 2.0 2.1 짬밥, 〈BGP (Broader Gateway Protocol 경계 경로 프로토콜)〉, 《티스토리》, 2017-05-23
  3. 피망IT, 〈(Router) BGP (Border Gateway rotocol) 개념 및 설정 (1/2)〉, 《티스토리》
  4. 4.0 4.1 전성복, 〈BGP 라우팅 프로토콜의 취약성 분석 및 개선 방안〉, 《서강대학교 정보통신대학원》
  5. 스니카, 〈BGP section 1〉, 《네이버 블로그》, 2019-04-04
  6. 부록 B: BGP 고급 라우팅〉, 《sonicwall》
  7. SectionR0, 〈Network (18) BGP (경계 경로 프로토콜)〉, 《티스토리》, 2020-01-25
  8. 스니카, 〈BGP section 2〉, 《네이버 블로그》, 2019-04-05
  9. 고미, 〈BGP - Aggregation〉, 《네이버 블로그》, 2017-10-27
  10. jh0110love, 〈BGP〉, 《네이버 블로그》, 2010-03-02
  11. 피망IT, 〈(Router) BGP (Border Gateway rotocol) 개념 및 설정 (2/2)〉, 《티스토리》
  12. 서신석, 홍성철, 홍원기, 〈BGP 보안 위협 요소와 대처방안〉, 《포항공과대학교 컴퓨터공학과》

참고자료

같이 보기


  검수요청.png검수요청.png 이 경계 경로 프로토콜 문서는 인터넷에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.