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

"경계 경로 프로토콜"의 두 판 사이의 차이

위키원
이동: 둘러보기, 검색
1번째 줄: 1번째 줄:
경계 경로 프로토콜(Border Gateway Protocol, BGP)는 외부 라우팅 프로토콜(Exterior Gateway Protocol, EGP)로 자율 시스템(관리 도메인)과 자율 시스템 사이에서 사용되는 라우팅 프로토콜이다.<ref name=“무미닝”>무미닝, 〈[https://m.blog.naver.com/PostView.nhn?blogId=seungj1031&logNo=221012340470&proxyReferer=https:%2F%2Fwww.google.com%2F (네트워크) 라우팅 프로토콜 (RIP, OSPF, BGP)]〉, 《네이버 블로그》, 2017-05-23</ref>
+
'''경계 경로 프로토콜'''(Broader Gateway Protocol, BGP)는 외부 라우팅 프로토콜(Exterior Gateway Protocol, EGP)로 자율 시스템(관리 도메인)과 자율 시스템 사이에서 사용되는 라우팅 프로토콜이다.<ref name=“무미닝”>무미닝, 〈[https://m.blog.naver.com/PostView.nhn?blogId=seungj1031&logNo=221012340470&proxyReferer=https:%2F%2Fwww.google.com%2F (네트워크) 라우팅 프로토콜 (RIP, OSPF, BGP)]〉, 《네이버 블로그》, 2017-05-23</ref>
  
 
==개요==
 
==개요==
5번째 줄: 5번째 줄:
  
 
==특징==
 
==특징==
내부 라우팅 프로토콜과 달리 와이드카드 마스크가 아닌 넷 마스크를 사용한다. 관리자가 임의적으로 범위를 조정할 수 없고, 실제 라우팅 테이블에 등록된 대역을 정확히 입력해야 한다. 장비 사이에 연결된 네트워크 대역은 광고할 필요가 없다. 다만 이웃 명령어를 사용하여 상대방 장비를 정확히 지정해야 한다.<ref>피망IT, 〈[https://peemangit.tistory.com/135 (Router) BGP (Border Gateway rotocol) 개념 및 설정 (1/2))]〉, 《티스토리》</ref>
+
내부 라우팅 프로토콜과 달리 와이드카드 마스크가 아닌 넷 마스크를 사용한다. 관리자가 임의적으로 범위를 조정할 수 없고, 실제 라우팅 테이블에 등록된 대역을 정확히 입력해야 한다. 장비 사이에 연결된 네트워크 대역은 광고할 필요가 없다. 다만 이웃 명령어를 사용하여 상대방 장비를 정확히 지정해야 한다.<ref>피망IT, 〈[https://peemangit.tistory.com/135 (Router) BGP (Border Gateway rotocol) 개념 및 설정 (1/2)]〉, 《티스토리》</ref> TCP 프로토콜을 사용하기 때문에 반드시 출발지 IP 주소와 목적지 IP 주소를 알고 있어야 한다. 목적지 IP 주소를 알지 못할 경우 정상적으로 이웃 관계가 형성되지 않는다. 이웃 관계가 정상적으로 이루어질 경우, 자신이 보유하고 있는 네트워크 정보를 이웃 라우터로 전송하며, 수신한 라우터는 해당 정보를 경계 경로 프로토콜 테이블에 기록한 후 경계 경로 프로토콜 알고리즘을 이용하여 최적의 경로를 선택하여 Loc-RIB에 인스톨하게 된다. 또한 네트워크 정보를 Loc-RIB에 인스톨하기 전에 수신한 정보가 필터링에 적용되는지 또는 이웃 라우터로 정보를 전송할 때 필터링에 적용되는 지 등 비교를 하게 된다.<ref name=“전성복”>전성복, 〈[http://163.239.1.207:8088/dl_image/IMG/04//000000019142/SERVICE/000000019142_01.PDF BGP 라우팅 프로토콜의 취약성 분석 및 개선 방안]〉, 《서강대학교 정보통신대학원》</ref>
  
==동작 원리==
+
==구성==
#Idle
+
===메세지===
#Connect
+
====오픈====
#Active
+
경계 경로 프로토콜의 오픈 메시지에는 경계 경로 프로토콜 버전 정보, 자율 시스템 번호, 홀드 타이머(Hold Timer), 라우터 아이디, 추가 기능 여부(Optional)에 대한 정보가 포함된다. 일반적으로 경계 경로 프로토콜 버전 4를 사용하고 있다. 홀드 타이머는 경계 경로 프로토콜 피어(Peer) 간의 상태가 유효하지 않다는 것을 판단하기까지 기다리는 시간이다. 처음 피어 관계를 맺을 때, 두 경계 경로 프로토콜 라우터가 오픈 메시지를 교환할 때 홀드 타임을 결정한다. 서로의 라우터가 광고하는 홀드 타임 중 더 작은 시간을 사용하고, 시스코 라우터의 디폴트 홀드 타임은 180초이다. 라우터 아이디는 라우터에 설정된 IP 주소 혹은 루프백 인터페이스에 대한 정보를 의미한다. 수동으로 지정해주려면 bgp router-id 명령어를 사용하여 지정해주면 된다. 추가 기능 여부는 장비나 운영 체제 별로 추가 기능이 다르기 때문에 어떤 추가 기능을 지원하는지 피어에게 알리기 위한 것으로, 연결되어 있는 두 경계 경로 프로토콜 피어가 모두 지원하는 기능이라면 그 기능을 사용할 수 있게 한다.
#Open Sent
 
#Open Confirm
 
#Established<ref name=“짬밥”></ref>
 
  
==토폴로지==
+
====업데이트====
 +
경계 경로 프로토콜의 피어관계를 확립한 후에 보내는 메시지로, 광고할 네트워크 정보를 상호 교환하기 위해 사용한다. 광고할 네트워크에 대한 정보뿐만 아니라, 경계 경로 프로토콜 속성 정보, 새로운 유효 네트워크 정보, 네트워크 다운 등의 이유로 라우팅 테이블에서 제거해야 하는 네트워크 정보 등 다양한 정보를 담고 있다. 새로운 네트워크는 NLTI(Network Layer Reachable Information) 필드에 기록하고, 제거할 네트워크 정보는 철회 경로(Withdrawn Routes) 필드에 기록되고, 업데이트된다. 업데이트 메시지를 수신한 피어는 NLRI 필드의 네트워크 정보를 경계 경로 프로토콜의 테이블에 등록하고, 철회 경로 필드에 기록된 네트워크는 삭제한다. 속성 정보는 NLRI에 기록된 네트워크에 대한 속성이다.
 +
 
 +
====노티피케이션====
 +
경계 경로 프로토콜이 동작 중 오류가 발생할 때 경계 경로 프로토콜 피어에 오류의 원인을 통보하는 메시지다. 경계 경로 프로토콜은 오류가 발생하면, 복구하려고 하기 보다는 발생할 수 있는 더 큰 피해를 방지하기 위해 피어의 경계 경로 프로토콜 프로세스를 중단한다. 이로 인해 피어 관계가 일방적으로 단절되는데, 피어 관계 단절 이유를 상대 피어에게 통보하여 시스템 관리자가 인지할 수 있도록 하는 것이 목적이다. 노티피케이션 메시지의 구조는 오류 코드(Error Code)와 세부정보를 나타내는 오류 서브코드(Error Subcod), 그리고 데이터로 구성된다.
 +
 
 +
====킵얼라이브====
 +
킵얼라이브 메시지는 두 경계 경로 프로토콜 간에 주기적으로 주고 받는 메시지로, 피어끼리 상호작용을 할 때 자신의 상태가 정상이라는 것을 알려주는 용도로 사용한다. 경계 경로 프로토콜은 네트워크의 변화가 있을 때, 변화된 정보만을 업데이트 하기 때문에, 네트워크의 변화가 없으면 경계 경로 프로토콜 피어는 서로의 상태에 대해 전혀 인지할 수 없다. 따라서 킵얼라이브 메시지를 통해 자신의 상태에 이상이 없다는 것을 주기적으로 통보해 주어야 한다. 단순히 자신의 상태가 정상이라는 사실을 알려주는 용도로만 사용되기 때문에, 아무 의미 없는 경계 경로 프로토콜 메시지의 헤더 정보만을 전달하는 방식으로, 링크 대역폭을 불필요하게 낭비하지 않도록 했다. 킵얼라이브 메시지의 디폴트 주기는 60초이고, 홀드 타임과 마찬가지로 설정을 통해 변경할 수 있다. 일반적으로 킵얼라이브 주기는 홀드 주기의 3분의 1에 해당하는 시간을 사용한다. 이때 주의할 점은 홀드 주기의 3분의 1 이하의 값으로는 얼마든지 설정이 가능하지만, 그 이상의 값들은 사용할 수 없다는 것이다.
 +
 
 +
====루트 리프레시====
 +
루트 리프레시(Route Refresh) 메시지는 새로운 정책이 적용될 경우에도 서비스를 계속해서 유지하도록 마련된 메시지다. 경계 경로 프로토콜은 트리거 업데이트를 사용하기 때문에 피어 간의 라우팅 정보 교환은 피어 관계를 확립한 후 최초 라우팅 업데이트가 이뤄질 때 모든 라우팅 정보를 교환하도록 한다. 수신하는 라우팅 정보는 네트워크 필터링과 속성 변경 등의 정책 적용을 거친 후 라우팅 테이블에 등록되고, 최초 라우팅 업데이트가 이루어진 후에는 네트워크 변화가 발생된 라우팅 정보만을 수신해 정책 적용 후 라우팅 테이블에 등록한다. 따라서 경계 경로 프로토콜 라우터의 테이블에 존재하는 라우팅 정보는 모두 설정된 정책 적용을 마친 라우팅 정보라고 할 수 있다. 네트워크 필터링과 같은 라우팅 정책이 변경될 경우, 경계 경로 프로토콜 라우터는 피어가 전달한 모든 라우팅 정보에 기존 정책을 적용해 이미 로컬 테이블에 등록했기 때문에 변경된 라우팅 정ㅇ책에 대한 적용이 이루어지지 않는다. 따라서 경계 경로 프로토콜의 라우팅 정책을 변경하려면 경계 경로 프로토콜 세션을 강제로 단절시킨 뒤, 다시 피어 관계를 맺게 함으로써 모든 라우팅 정보를 다시 수신하도록 해야 했다. 이는 정책이 변경될 때마다 서비스가 중단되어야 하는 불편함을 유발했다. 이러한 불편함을 제거하기 위해 경계 경로 프로토콜의 라우터가 피어에 모든 라우팅 정보를 요구하는 메시지를 보내 전체 라우팅 정보를 다시 수신하고, 새로운 정책 적용 시에도 서비스를 유지할 수 있도록 하는 것이 루트 리프레시 메시지다. 루트 리프레시 메시지는 운영 체제 버전에 다라 지원 여부가 결정되기 때문에, 경계 경로 프로토콜의 Capability 코드에 지원 여부를 표시해야 한다. 루트 리프레시 메시지는 선택적인 사항이므로, 경계 경로 프로토콜의 피어링에 영향을 주지는 않는다.<ref>스니카, 〈[https://m.blog.naver.com/PostView.nhn?blogId=musalyh&logNo=221505030804&proxyReferer=https:%2F%2Fwww.google.com%2F BGP section 1]〉, 《네이버 블로그》, 2019-04-04</ref>
 +
 
 +
===토폴로지===
 
<ref>〈[http://help.sonicwall.com/help/sw/kor/7310/25/9/0/content/Appendix_B_BGP/BGP_Advanced_Routing.htm 부록 B: BGP 고급 라우팅]〉, 《sonicwall》</ref>
 
<ref>〈[http://help.sonicwall.com/help/sw/kor/7310/25/9/0/content/Appendix_B_BGP/BGP_Advanced_Routing.htm 부록 B: BGP 고급 라우팅]〉, 《sonicwall》</ref>
 +
 +
==동작==
 +
===단계===
 +
#Idle: 경계 경로 프로토콜을 연결하기 위한 초기 상태다. 경계 경로 프로토콜을 처음 설정할 때, 이웃과 정상적으로 연결을 형성하고자 기다리기 위한 상태로, 이웃 관계에 있는 라우터로부터 일정시간 동안 응답이 오지 않을 경우, “Idle” 타이머 상태로 동작하게 된다.
 +
#Connect: 경계 경로 프로토콜의 라우팅 프로토콜은 TCP 포트번호 179번을 이용하여 이웃 관계를 형성한다. “Connect”는 TCP 포트 번호를 사용하여 다른 라우터와의 연결하기 위해 기다리는 상태로, 정상적으로 세션이 이루어질 경우, Active 상태를 거치지 않고 바로 Open sent 상태로 동작하게 된다. 만약 TCP 세션이 정상적으로 이루어지지 않을 경우, Connect 상태에서 Active 상태로 전환하게 되며, 이웃 관계를 다시 형성하기 위해 기다려야 한다.
 +
#Active: TCP 세션을 재형성하기 위한 상태이며, Active 상태에서 정상적으로 TCP 세션이 이루어질 경우 “Open sent” 상태로 전환하지만, 만약 Active 상태에서 TCP 세션이 계속해서 이루어지지 않을 경우, 1단계인 Idle 상태로 전환되고, 처음부터 다시 연결을 시도한다.
 +
#Open Sent: 이웃 라우터로부터 오픈 메시지를 수신하기 위해 기다리고 있는 상태를 의미하며, 정상적인 상태라면 “Keepalive” 메시지를 전송하게 된다. iBGP인지 eBGP인지 확인한 후, 잘못된 경계 경로 프로토콜 정보가 있을 경우 노티피케이션(Notification) 메시지를 전송하고, 1단계인 “Idle” 상태로 돌아가 다시 처음부터 연결을 시도하게 된다.
 +
#Open Confirm: 정상적으로 이웃 관계가 이루어졌는지 확인하기 위한 단계이며, Keepalive 메시지를 수신할 경우, Established 상태가 된다. 만약 Open confirm에서 어떤 문제로 인하여 노티피케이션 메시지를 수신한다면 Open sent 단계에서 언급한 것처럼, 다시 1단계로 돌아가야 한다.
 +
#Established: Established 단계에 도달했다는 것은, 정상적으로 이웃 관계가 형성되었다는 것을 의미하며, 이때부터 자신이 보유하고 있는 경계 경로 프로토콜 정보를 인접한 라우터로 전송하게 된다.<ref name=“전성복”></ref>
 +
 +
===라우트 하이재킹===
 +
라우트 하이재킹(Route Hijacking)이란 다른 라우터가 사용하고 있는 정보를 마치 자신이 소유하고 있는 것처럼 가짜 IP 주소를 생성하여 인접한 라우터로 전송하고, 패킷을 가로채 정상적으로 통신이 이루어지지 않도록 하는 방법이다. 경계 경로 프로토콜을 이용하여 이웃 라우터로 잘못 설정된 정보를 전송하게 되면, 수신한 라우터는 다른 이웃 라우터로 이 정보를 다시 전송하는데, 경계 경로 프로토콜은 거리 벡터 라우팅 프로토콜이기 때문에, 인접한 라우터가 전송해 준 정보를 그대로 믿게 되고, 해당 네트워크 정보가 실제로 존재하고 있는 것으로 인식하여 라우트 하이재킹이 이루어지게 된다.<ref name=“짬밥”></ref>
  
 
==트래픽==
 
==트래픽==
37번째 줄: 58번째 줄:
 
*무미닝, 〈[https://m.blog.naver.com/PostView.nhn?blogId=seungj1031&logNo=221012340470&proxyReferer=https:%2F%2Fwww.google.com%2F (네트워크) 라우팅 프로토콜 (RIP, OSPF, BGP)]〉, 《네이버 블로그》, 2017-05-23
 
*무미닝, 〈[https://m.blog.naver.com/PostView.nhn?blogId=seungj1031&logNo=221012340470&proxyReferer=https:%2F%2Fwww.google.com%2F (네트워크) 라우팅 프로토콜 (RIP, OSPF, BGP)]〉, 《네이버 블로그》, 2017-05-23
 
*짬밥, 〈[https://zzambab98.tistory.com/31 BGP (Broader Gateway Protocol 경계 경로 프로토콜)]〉, 《티스토리》, 2017-05-23
 
*짬밥, 〈[https://zzambab98.tistory.com/31 BGP (Broader Gateway Protocol 경계 경로 프로토콜)]〉, 《티스토리》, 2017-05-23
*피망IT, 〈[https://peemangit.tistory.com/135 (Router) BGP (Border Gateway rotocol) 개념 및 설정 (1/2))]〉, 《티스토리》
+
*피망IT, 〈[https://peemangit.tistory.com/135 (Router) BGP (Border Gateway rotocol) 개념 및 설정 (1/2)]〉, 《티스토리》
 +
*전성복, 〈[http://163.239.1.207:8088/dl_image/IMG/04//000000019142/SERVICE/000000019142_01.PDF BGP 라우팅 프로토콜의 취약성 분석 및 개선 방안]〉, 《서강대학교 정보통신대학원》
 +
* 주지는 않는다.<ref>스니카, 〈[https://m.blog.naver.com/PostView.nhn?blogId=musalyh&logNo=221505030804&proxyReferer=https:%2F%2Fwww.google.com%2F BGP section 1]〉, 《네이버 블로그》, 2019-04-04
 
*〈[http://help.sonicwall.com/help/sw/kor/7310/25/9/0/content/Appendix_B_BGP/BGP_Advanced_Routing.htm 부록 B: BGP 고급 라우팅]〉, 《sonicwall》
 
*〈[http://help.sonicwall.com/help/sw/kor/7310/25/9/0/content/Appendix_B_BGP/BGP_Advanced_Routing.htm 부록 B: BGP 고급 라우팅]〉, 《sonicwall》
 
*SectionR0, 〈[https://sectionr0.tistory.com/39 Network (18) BGP (경계 경로 프로토콜)]〉, 《티스토리》, 2020-01-25
 
*SectionR0, 〈[https://sectionr0.tistory.com/39 Network (18) BGP (경계 경로 프로토콜)]〉, 《티스토리》, 2020-01-25
 
*고미, 〈[https://m.blog.naver.com/PostView.nhn?blogId=roser111&logNo=221126295567&proxyReferer=https:%2F%2Fwww.google.com%2F BGP - Aggregation]〉, 《네이버 블로그》, 2017-10-27
 
*고미, 〈[https://m.blog.naver.com/PostView.nhn?blogId=roser111&logNo=221126295567&proxyReferer=https:%2F%2Fwww.google.com%2F BGP - Aggregation]〉, 《네이버 블로그》, 2017-10-27
 
*jh0110love, 〈[https://m.blog.naver.com/PostView.nhn?blogId=jh0110love&logNo=130081625451&proxyReferer=https:%2F%2Fwww.google.com%2F BGP]〉, 《네이버 블로그》, 2010-03-02
 
*jh0110love, 〈[https://m.blog.naver.com/PostView.nhn?blogId=jh0110love&logNo=130081625451&proxyReferer=https:%2F%2Fwww.google.com%2F BGP]〉, 《네이버 블로그》, 2010-03-02
*피망IT, 〈[https://peemangit.tistory.com/136 (Router) BGP (Border Gateway rotocol) 개념 및 설정 (2/2))]〉, 《티스토리》
+
*피망IT, 〈[https://peemangit.tistory.com/136 (Router) BGP (Border Gateway rotocol) 개념 및 설정 (2/2)]〉, 《티스토리》
 
*서신석, 홍성철, 홍원기, 〈[http://dpnm.postech.ac.kr/papers/KICS/08/KICS03.pdf BGP 보안 위협 요소와 대처방안]〉, 《포항공과대학교 컴퓨터공학과》
 
*서신석, 홍성철, 홍원기, 〈[http://dpnm.postech.ac.kr/papers/KICS/08/KICS03.pdf BGP 보안 위협 요소와 대처방안]〉, 《포항공과대학교 컴퓨터공학과》
  
51번째 줄: 74번째 줄:
 
* [[패킷]]
 
* [[패킷]]
  
{{인터넷|토막글}}
+
{{인터넷|검토 필요}}

2021년 2월 19일 (금) 10:58 판

경계 경로 프로토콜(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]

토폴로지

[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]

트래픽

[7]

축약

[8]

종류

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

문제

[10]

BGP 유출

[11]

각주

  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 - Aggregation〉, 《네이버 블로그》, 2017-10-27
  9. jh0110love, 〈BGP〉, 《네이버 블로그》, 2010-03-02
  10. 피망IT, 〈(Router) BGP (Border Gateway rotocol) 개념 및 설정 (2/2)〉, 《티스토리》
  11. 서신석, 홍성철, 홍원기, 〈BGP 보안 위협 요소와 대처방안〉, 《포항공과대학교 컴퓨터공학과》

참고자료

같이 보기


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