BGP Path Navigation
[Placeholder for technical implementation]
Article
M
Me
hyunyoun's Blog
network-communicationnetworkcommunicationiproutingglobal-interconnectbgp-path-navigationnetwork-layer11 min read
1. Overview
BGP 경로 탐색(BGP Path Navigation)은 "우리 통신사를 거쳐서 가면 넷플릭스까지 3홉 만에 갈 수 있다"고 끊임없이 험담과 소문을 퍼뜨리며 전 세계 7만 개가 넘는 통신사(AS)를 거미줄처럼 엮어 인터넷의 숨통을 유지하는, 유일무이한 EGP(외부 게이트웨이 프로토콜) BGP를 해부합니다.
학습자는 OSPF처럼 대역폭(비용)을 계산하는 수학적 정교함을 버리는 대신, 오직 '누구를 거쳐야 하는지' 징검다리 목록(AS-Path)만 교환하여 전 세계 라우터의 뇌(메모리) 폭발을 막아낸 Path-Vector 알고리즘의 타협점을 뜯어봅니다. 나아가 돈을 지불한 피어링(Peering) 회선으로만 트래픽을 밀어내기 위해 Local Preference나 MED 같은 속성(Attributes)을 조작하여 라우팅 경로를 마음대로 비틀어버리는 BGP의 극악무도한 '비즈니스 튜닝' 역량을 장악합니다. 마지막으로, iBGP와 eBGP의 차이 및 수백 대의 iBGP 세션을 줄여주는 **Route Reflector(라우트 리플렉터)**의 인프라 스케일링 기법을 확보합니다.
2. Scope & Boundaries
In-Scope
- EGP & Path-Vector: AS(자율 시스템) 간의 라우팅, AS-Path 속성을 통한 루프(Loop) 방지 메커니즘.
- BGP Attributes: BGP 경로 선택의 척도인 Local Preference (내부 통제), AS-Path Prepending, MED (외부 통제).
- iBGP vs eBGP: 같은 AS 내부에서의 BGP(iBGP)와 다른 AS 간의 BGP(eBGP) 차이점.
- BGP Scaling: Route Reflector(RR)를 통한 iBGP Full-Mesh 제약 탈피.
Out-of-Scope
- 통신사 정산 모델 (Peering vs Transit): Tier 1/2 ISP 간의 무료 피어링과 유료 트랜짓 계약의 비즈니스 구조 통신 정책 및 비즈니스 영역으로 위임.
- MP-BGP (Multiprotocol BGP) 및 MPLS VPN: L3 VPN 통신을 위한 BGP 확장 기능 통신사(ISP) 특화망 엔지니어링 영역.
Boundaries
- OSPF (수학적 최적) vs BGP (비즈니스적 최적): OSPF는 100Mbps보다 1Gbps 선로가 '객관적으로' 빠르기 때문에 무조건 1Gbps 선로를 선택하는 '공대생'입니다. 반면 BGP는 1Gbps 선로가 10Mbps 선로보다 빠르더라도, 10Mbps 선로가 무료(Peering)고 1Gbps 선로가 종량제 유료(Transit)라면 트래픽을 10Mbps 선로로 강제로 쑤셔 넣는 '경영학도'입니다. BGP는 네트워크 속도가 아니라 **'정책(Policy)과 돈'**에 의해 경로가 결정되는 유일한 라우팅 프로토콜임을 명확히 경계 짓습니다.
3. Counterexample
- BGP 속성 튜닝의 참사 (Asymmetric Routing): 글로벌 기업 망에서 KT 회선(Primary)과 SKT 회선(Backup)을 씁니다. 관리자가 트래픽을 KT로만 보내려고 내보낼 때
Local Preference를 튜닝했습니다. 하지만 밖에서 들어올 때(Inbound)의 경로를 제어하는AS-Path Prepending을 까먹었습니다. 결국 내 서버에서 나갈 때는 KT로 나가는데, 들어올 때는 SKT로 들어오는 '비대칭 라우팅(Asymmetric Routing)'이 발생합니다. 방화벽은 나간 적이 없는 패킷이 SKT 쪽에서 들어오니 모조리 차단(Drop)해 버리는 BGP 정책 튜닝 실패의 전형적인 참사입니다. - iBGP Full-Mesh 폭주: 회사 안에 100대의 BGP 라우터가 있습니다. iBGP는 루프 방지 규칙 때문에 'iBGP로 배운 정보는 다른 iBGP 이웃에게 전달하지 않는다'는 철칙이 있습니다. 이를 해결하겠다고 관리자가 100대의 라우터를 전부 1<1로>1로> 직접 연결(Full-Mesh)했습니다. 공식에 의해 개의 BGP 세션이 맺어지며 라우터들의 CPU가 비명을 지르고 터져버립니다. Route Reflector를 도입하지 않아 아키텍처 확장성이 박살 난 안티 패턴입니다.
4. Prerequisites
- AS와 OSPF (Basic): 내부 라우팅과 외부 라우팅의 분리. (08-03-03 OSPF)
- TCP 포트와 3-Way Handshake (Basic): BGP는 177 포트를 쓰는 TCP 기반 통신. (08-01-03 Transport Layer)
5. Learning Map
6. Learning Topics
Basic
Core Topic 01: 징검다리 꼬리표, 패스 벡터 (The Path-Vector Algorithm)
- Why to Learn: OSPF의 다익스트라 수학을 전 세계 스케일로 돌리면 인터넷이 멈춘다는 것을 깨닫고, 철저히 'AS 징검다리 개수'만 세어 무한 루프를 막아내는 글로벌 생존 공식을 쥐기 위함입니다.
- What to Learn:
- Concepts: BGP (Border Gateway Protocol), Path-Vector, AS Number (ASN), AS-Path Attribute, Loop Prevention.
- Skills: 라우팅 테이블에 찍힌
AS-Path배열 꼬리표를 읽고, 내 AS 번호가 들어있으면 즉시 폐기(Loop 차단)하는 방어 회로 이해.
- How to Learn:
- 1단계: OSPF의 글로벌 한계: OSPF는 전 세계 라우터 100만 대의 지도를 다 가져야 최단 거리를 짤 수 있습니다. 메모리가 버티지 못합니다. BGP는 지도를 포기합니다. 대신 "난 넷플릭스로 가는 길을 안다. 근데 구체적인 지도는 모르겠고, 아무튼 내 뒤에 AS(통신사) 3개만 거치면 됨"이라고 소문(Vector)만 냅니다.
- 2단계: AS-Path 꼬리표 (무한 루프 방지): 통신사 KT(AS 100)가 SKT(AS 200)에게 경로를 주면 꼬리표에
[100]이 붙습니다. SKT가 그걸 LGU+(AS 300)에게 넘기면[200, 100]이 붙습니다. LGU+가 그걸 다시 바보같이 KT(AS 100)에게 넘기려 합니다. KT는 패킷 꼬리표를 보고 "어? 꼬리표에100이 이미 있네? 빙글빙글 돈(Loop) 정보잖아!" 하고 가차 없이 쓰레기통에 버려 무한 루프를 원천 차단하는 마법을 뜯어봅니다.
- Implement: BGP Loop Prevention 파이썬 모사. 내 ASN은
100. 주변 라우터들로부터 3개의 라우팅 광고를 수신함. 1:Route A (AS-Path: [200, 300, 400])2:Route B (AS-Path: [500, 100, 200])3:Route C (AS-Path: [600]). 로직이Route B의 AS-Path 배열 안에 내 번호(100)가 있음을 탐지하고[DROP] Routing Loop Detected로그를 띄우며, 가장 Path가 짧은Route C를 Best Path로 선정하는 콘솔 렌더링.
Recommended
Core Topic 02: 돈과 정책의 라우팅, BGP 속성 (BGP Attributes & Policy)
- Why to Learn: 인터넷 세계에서 '가장 빠른 길'이라는 물리적 진리를 묵살하고, 트래픽을 내가 계약한 '가장 싼 통신사' 쪽으로 억지로 꺾어버리는 BGP 트래픽 엔지니어링의 정수를 장악하기 위함입니다.
- What to Learn:
- Concepts: BGP Path Selection Criteria, Local Preference (아웃바운드 제어), AS-Path Prepending (인바운드 제어), MED (Multi-Exit Discriminator), Asymmetric Routing.
- Skills: 나가는 트래픽(Outbound)을 A 통신사로 몰아주고, 들어오는 트래픽(Inbound)을 B 통신사로 오게 유도하는 BGP 속성 조작 스크립트 설계.
- How to Learn:
- 1단계: 나가는 문 통제 (Local Preference): 우리 회사 라우터가 구글로 가는 2개의 문(ISP_A, ISP_B)을 뚫어놨습니다. ISP_B는 초고속이지만 쓴 만큼 돈을 내야 합니다(Transit). ISP_A는 약간 느리지만 공짜(Peering)입니다. BGP의
Local Preference값을 ISP_A 쪽에 왕창 높게(예: 200) 박아버립니다. 라우터는 AS-Path가 ISP_B 쪽이 훨씬 짧고 빠르더라도, 그 딴 거 무시하고 무조건 공짜인 ISP_A로 우리 회사 트래픽을 밀어내는(Outbound) 비즈니스 라우팅을 해부합니다. - 2단계: 들어오는 문 속이기 (AS-Path Prepending): 반대로 밖에서 구글 트래픽이 우리 회사로 들어올 때(Inbound), 빠른 ISP_B로 들어오길 원합니다. 그럼 우리가 공짜인 ISP_A 쪽으로 소문을 퍼뜨릴 때 일부러 우리 AS 번호를 5번 연속으로 중복해서 적어 줍니다 (
AS-Path: [내AS, 내AS, 내AS, 내AS, 내AS]). 구글 라우터는 이 소문을 듣고 "뭐야 ISP_A 쪽으로 가면 징검다리를 5개나 건너야 하네? ISP_B로 가야지!" 하고 속아 넘어가 ISP_B로 쏴주는 천재적인 꼼수를 뜯어봅니다.
- 1단계: 나가는 문 통제 (Local Preference): 우리 회사 라우터가 구글로 가는 2개의 문(ISP_A, ISP_B)을 뚫어놨습니다. ISP_B는 초고속이지만 쓴 만큼 돈을 내야 합니다(Transit). ISP_A는 약간 느리지만 공짜(Peering)입니다. BGP의
- Implement: BGP 베스트 패스 선택 알고리즘 시뮬레이션.
경로 1(무료, 느림):
Local-Pref=200, AS-Path 길이=4. 경로 2(유료, 빠름):Local-Pref=100, AS-Path 길이=1. BGP 로직은 가장 먼저Local-Pref(높을수록 우선)를 비교하므로, AS-Path가 4개로 훨씬 먼 경로 1을[BEST PATH]로 선정하는 자본주의 라우팅 데모.
Practical
Core Topic 03: 내부의 속사정, iBGP와 eBGP (iBGP vs eBGP Mechanics)
- Why to Learn: 남의 통신사와 연결하는 eBGP와, 우리 회사 내부 라우터끼리 소문을 공유하는 iBGP의 룰이 미묘하게 다름을 깨닫고 "내부망에서는 왜 BGP 정보가 안 돌지?"라는 딥한 딜레마를 쥐기 위함입니다.
- What to Learn:
- Concepts: eBGP (External), iBGP (Internal), Split Horizon Rule (루프 방지), Next-Hop-Self.
- Skills: eBGP로 외부 통신사에게 배워온 구글 경로를 내부 라우터(iBGP)들에게 퍼뜨릴 때 겪는
Next-Hop꼬임 현상 해결(Next-Hop-Self 설정).
- How to Learn:
- 1단계: iBGP 루프 방지의 저주 (Split Horizon): eBGP에서는 꼬리표(
AS-Path)로 무한 루프를 막습니다. 하지만 우리 회사 안(iBGP)에서는 모두 같은 AS 번호를 쓰기 때문에 이 꼬리표 작전이 안 통합니다. 그래서 iBGP는 무식한 규칙을 하나 만듭니다. "내부(iBGP) 친구에게 들은 소문은, 절대 다른 내부(iBGP) 친구에게 전하지 않는다." - 2단계: Next-Hop 딜레마: 가장 바깥쪽 라우터가 eBGP로 구글 가는 길(Next-Hop: KT라우터IP)을 배웠습니다. 이걸 내부 iBGP 친구들에게 쫙 뿌립니다. 내부 라우터들은 "오 구글 가는 길 알았다! 다음 목적지는 KT라우터IP구나!"라고 좋아하지만, 정작 내부 라우터들은 KT라우터IP가 어딘지 도달할 수 없어(OSPF에 없음) 길이 끊깁니다. 바깥 라우터가 내부로 정보를 뿌릴 때 "KT라우터IP 찾지 말고 나한테 보내(Next-Hop-Self)!"라고 덮어씌워 줘야만 비로소 내부망 BGP가 굴러가는 역학을 뜯어봅니다.
- 1단계: iBGP 루프 방지의 저주 (Split Horizon): eBGP에서는 꼬리표(
- Implement: Next-Hop-Self 장애 시뮬레이션.
외부(eBGP
8.8.8.8) 경계 라우터(R1,10.0.0.1) 내부 라우터(R2,10.0.0.2). R1이 R2에게 구글 경로를 넘김. Next-Hop이8.8.8.8로 그대로 넘어감. R2는8.8.8.8로 가는 IGP(OSPF) 경로가 없어 라우팅 보류(Inaccessible). R1에Next-Hop-Self설정을 On(켜짐)으로 바꾸면, R2에게 Next-Hop을10.0.0.1(R1 자신)로 바꿔 넘겨주어 R2가 비로소 라우팅을 성공(Active)하는 터미널 트러블슈팅 렌더링.
Advanced
Core Topic 04: 메아리의 방, 라우트 리플렉터 (BGP Route Reflectors)
- Why to Learn: "내부 친구에게 들은 소문을 다른 친구에게 전하지 않는다"는 iBGP 룰 때문에, 회사 내 100대의 라우터를 모조리 1<1로>1로> 랜선을 꽂아줘야(Full-Mesh) 하는 끔찍한 한계를 우회하는 아키텍처를 장악하기 위함입니다.
- What to Learn:
- Concepts: Route Reflector (RR), Route Reflector Client, Full-Mesh Requirement, BGP Scalability.
- Skills: 대규모 데이터센터에서 100대의 BGP 세션을 4,950개에서 100개로 획기적으로 줄여 CPU를 최적화하는 중앙 집중형 BGP 설계.
- How to Learn:
- 1단계: Full-Mesh의 압박: iBGP 규칙("친구에게 들은 건 전하지 않는다")을 지키려면, 모든 라우터가 소문을 한 번에 직접 들어야 합니다. 라우터가 100대면 자기들끼리 직접 BGP 세션을 맺어야 하는데 그 개수가 4,950번이 됩니다. 라우터 CPU가 BGP 유지 핑(Keepalive)만 보내다가 터져버립니다.
- 2단계: 중앙 확성기 (Route Reflector): 규칙을 살짝 깨는 '예외 라우터(Route Reflector, RR)' 하나를 중앙에 둡니다. 이 RR은 "난 친구(Client)한테 들은 소문을 다른 친구(Client)한테 반사해서 퍼뜨릴(Reflect) 수 있어!"라는 권한을 받습니다. 이제 100대의 라우터는 자기들끼리 BGP를 맺지 않고, 오직 중앙의 확성기(RR) 1대와만 BGP 세션을 맺으면 됩니다(세션 100개로 축소). 완벽한 허브 앤 스포크(Hub-and-Spoke) 구조로 백본의 아키텍처 복잡도를 박살 내는 마법을 해부합니다.
- Implement: BGP Full-Mesh vs RR 연산량 차이 스크립트. Node 갯수
N = 100.Full-Mesh_Session_Count = N * (N-1) / 2 = 4950개 세션.Route_Reflector_Session_Count = N개 세션 (RR 1대와만 연결). 라우터 100대를 도입할 때 발생하는 BGP 제어 평면(Control Plane)의 49배 메모리 부하 차이를 시각적 막대그래프로 렌더링.
7. Terminology
8. References
Primary
- [P1] CS2023 - Networking and Communication (NC) - Routing and Forwarding (BGP mechanics)
- [P5] SFIA - Network Design (NTDS) - Internet Routing and Peering
Secondary
- [Computer Networking: A Top-Down Approach] Kurose & Ross - Inter-AS Routing: BGP
- [Internet Routing Architectures] Sam Halabi - BGP Attributes and Path Selection Process
Industry
- [Cisco Technical Documentation] - BGP Best Path Selection Algorithm
- [IETF RFC 4271] - A Border Gateway Protocol 4 (BGP-4)
- [Cloudflare Learning Center] - What is BGP? / BGP Routing Policies
9. Final Checklist
Primary
- 대역폭(Bandwidth)을 계산하여 수학적으로 가장 빠른 길을 찾는 OSPF(Link-State)와 달리, 철저히 통신사 징검다리 개수(AS-Path)만 따지는 BGP(Path-Vector)의 글로벌 라우팅 한계와 타협점을 설명할 수 있는가?
- BGP 라우터가 외부에서 경로 정보를 수신했을 때, AS-Path 속성(배열) 안에 자신의 AS Number가 들어있는 것을 탐지하면 즉시 해당 경로를 폐기하여 글로벌 네트워크 무한 루프(Routing Loop)를 방어하는 기제를 증명할 수 있는가?
Secondary
- 우리 회사 망에서 구글로 나갈 때(Outbound), 빠르지만 유료(Transit)인 통신사 A보다 느리지만 무료(Peering)인 통신사 B 쪽으로 트래픽을 강제하기 위해
Local Preference속성값을 튜닝하는 비즈니스 라우팅을 해부할 수 있는가? - 반대로 구글에서 우리 회사로 트래픽이 들어올 때(Inbound), 우리가 특정 통신사를 선호한다는 사실을 구글 라우터가 믿게 만들기 위해, BGP 광고 시 일부러 자신의 AS 번호를 덧붙이는
AS-Path Prepending꼼수를 논증할 수 있는가?
Industry
- 외부(eBGP)에서 학습한 경로를 내부 라우터(iBGP)에 전파할 때, 패킷의 다음 징검다리(Next-Hop) 주소가 내부 OSPF 지도에 도달 불가능(Inaccessible)으로 떠서 BGP 통신이 끊기는 장애를
Next-Hop-Self설정으로 복구할 수 있는가? - 단일 AS 내에 BGP 라우터가 100대 존재할 때, iBGP의 스플릿 호라이즌(루프 방지) 규칙으로 인해 개의 직접 세션(Full-Mesh)을 맺어야 하는 끔찍한 병목을 중앙 집중형 Route Reflector(RR) 하나로 완벽히 스케일링하는 아키텍처를 세울 수 있는가?