참고한 것들
#draft 내용이 정리가 안돼있슴다
Border Gateway Protocol, BGP
- 우선 Internet 생태계의 구조를 간단하게 살펴보자.
- Internet 은 AS 들이 독립적으로 내부 네트워킹을 구축 관리하고, 이 AS 들 간의 통신을 가능하게 해 전체적인 네트워킹이 이루어지도록 되어 있다.
- 따라서 internet 은 Network of Networks 라고도 표현한다.
- 이때 하나의 AS 내에서 라우터들 간의 경로를 정하는 프로토콜이 IGP 이고 그중 OSPF 가 대표적이라면
- AS 간의 경로를 정하는 프로토콜을 EGP 라 하고 그 중 BGP 가 대표적이다.
- 대표적이긴 한데 사실 EGP 에는 BGP 하나밖에 없다.
- BGP 에서 BG 는 Border Gateway 의 약자로 AS 외부와 통신할 수 있는 라우터를 의미한다.
- 그렇기 때문에 BGP 는 BG 들 간의 경로 탐색 프로토콜이고 따라서 AS 간의 통신에만 관여하는 것이 아니고, AS 내부에서의 BG 간 통신도 BGP 의 일부이다.
- 179/TCP 위에서 작동한다고 한다.. FYI
eBGP, iBGP
그림 출처: Cisco
- eBGP: External BGP - AS 외부의 BG 간의 통신
- eBGP 로 통신하는 구간은 DMZ 라고 한다
- eBGP 의 경우에는 (1) peer 와 직접적으로 연결되어 있어야 하며 - 즉, 다른 router 를 거처가는 것이 아닌 (2) 당연히 모든 BG 와 연결할 필요 없이 peer 하려는 BG 와만 연결되어 있으면 된다
- iBGP: Internal BGP - AS 내부의 BG 간의 통신
- iBGP 의 경우에는 (1) peer 와 직접적으로 연결될 필요는 없다 - 패킷 전달은 IGP 가 대신 해줄테니 (2) 모든 iBGP peer 와 연결되어 있어야 한다 (full mesh)
- 설정할 때 Local ASN 에는 자신의 ASN 을 적고, Remote ASN 에다가 peering 을 할 ASN 을 적으면 되는데
- 만일 Local ASN 과 Remote ASN 을 동일하게 적으면 iBGP 로 설정된다.
BGP 작동 원리
용어들
- Neighbor (Peer): 인접한 BG 를 의미한다.
- eBGP peer (external peer) 는 AS 간의 BGP peer 를 말하는거고
- iBGP peer (internal peer) 는 같은 AS 내의 peer 를 말한다.
- 얘도 마찬가지로 라우팅 정보를 공유한다.
- NLRI (Prefix): AS 에 할당된 IP prefix 로, ASN 와 IP prefix 의 조합이다.
- Route (Path): neighbor 에 announce 한 NLRI 를 의미한다.
- 이 메세지를 Update message 라고 한다.
- Router ID: 라우터에 설정된 여러 IP 들 중 highest IP 를 일컫는다.
- Router 의 primary IP 라고 생각하면 될듯
- Highest IP 가 정확이 뭔지는 잘 모르겠음.
간단 요약
- AS 각각은 NLRI 을 갖고 있고
- 이 NLRI 를 neighbor 간에 공유한다.
- 공유된 정보에 따라 최적의 경로를 정해 router 의 route table 에 저장하고 그에 따라 routing 한다.
- 추가적으로, 일부 패킷은 AS 내부의 사정에 따라 route policy 를 static 하게 정해 routing 할 수도 있다.
AS-path, Next Hop
- AS-path 는 어떤 AS 에 도달하기까지 거쳐가야 할 AS 들을 의미한다.
- 즉, 역으로는 이 NLRI 가 어떤 AS 에서 출발해서 자신에게까지 오기까지 거쳐온 AS 들인 것.
- 위의 예시를 보면 AS 300 에 도착한 메세지에는
160.10.0.0/16
(AS 100) 에 대해 AS-path 가200 100
으로 되어 있고, 이것은 AS 300 에서 AS 100 으로 가기 위해서는 AS 200 -> AS 100 의 경로를 타야 한다는 것을 의미한다. - 이 AS-path 값은 어떤 BGP update msg 를 전파할 때 모든 NLRI 의 AS-path 에 자신의 ASN 을 넣어주는 것으로 설정하게 된다.
- Next-hop 은 어떤 NLRI 의 AS 에 보내기 위해 “지금 당장에” 패킷을 보내야 할 BGP peer IP 을 의미한다.
- 위의 예시에서는
160.10.0.0/16
(AS 100) 으로 패킷을 보내기 위해서는 AS 300 입장에서는 AS 200 의 라우터 C (192.10.1.1
) 로 패킷을 보내야 한 다는 것을 보여주고 있다. - 따라서 BGP peer 에게 update msg 를 전파할 때에는, 이 값을 BGP update msg 가 빠져나가는 본인 AS 의 Router IP 로 적으면 되는 것.
- 다만, 이 Next-hop 은 iBGP 통신에서는 바뀌지 않는다.
- 위의 예시에서는
Unfeasible (Withdrawn) route
- 한 AS 의 NLRI 에 해당하는 네트워크 대역이 다운되어, 여기로 패킷을 보내지 마라는 것을 전파하는 것은 Unfeasible (Withdrawn) route field 를 활용한다.
- BGP update msg 에는 이 field 가 있어 주변으로 전파되며 이 NLRI 를 무효화 시킨다.
Routing Information Base (RIB)
- BGP update msg 로 외부에서 오거나 IGP/iBGP 로 내부에서 온 route 정보는 Routing Information Base (RIB) 에 정리된다.
- RIB 에는 대강 아래와 같은 형식으로 정리된다:
- 일단 맨 처음에 있는 것은 BGP Status Code 이다.
- 몇가지만 보면
*
: Valid - 유효한 path 이다.>
: Best - best path 로서, routing table 에 추가되었다.r
: RIB failure - BGP 로 받은 path 지만, 더 좋은 path 가 있어 routing table 에 넣지는 않았다.i
: Internal - iBGP 로부터 받은 path 이다.
- Network 는 IP prefix 이고 Next-hop 항목은 위에서 설명했으니까 넘어가고
- Path 는 AS-path 를 의미하는데, 그냥 ASN 이 적혀있으면 위에서 설명한 것처럼 해당 AS 로부터 왔다는 의미이고, 추가적으로
i
: IGP 로 전달된 것, 즉 본인 AS 내부의 라우터가 보내온 것이라는 의미다.?
: IGP 를 iBGP 로 전달된 것, 즉 본인 AS 내부의 라우터가 보내온 메세지 (IGP) 를 다른 BG 가 다시 보내온 것 (iBGP) 라는 의미다.
- 이 RIB 에서 Best path 를 선택하고, 그 중에서도 (1) prefix/length 가 unique 하고 (2) AD 가 가장 짧은 것을 Routing table 에 추가하게 된다.
In/Out
- AS 200 이 AS 100 으로부터 BGP update msg 를 받아 주변으로 뿌리는 상황을 생각해 보자.
In-process
- 우선 BGP update msg 가 접수되면 이것을 RIB 에 넣고 여러 Status 값들을 설정해 준다.
- 따라서 IGP 로부터 받은 route 두개 (
160.10.1.0/24
,160.10.3.0/24
) 에 추가적으로173.21.0.0/16
이 등록된다.
Out-process
- BGP update msg 를 뿌릴 때에는 RIB 에 있는 route 들을 뿌리는데
- Best path 만 전파하는건지 아니면 Routing table 에 추가한 것까지 전파하는 건지는 모르겠는데 아마 best path 를 전파할 것 같음.
- Path 에 본인의 ASN (AS 200) 을 추가하여 뿌리게 되는 것.
- IGP route (
i
) 의 경우에는 당연히 본인에게 속한 것이기 때문에 본인의 ASN (AS 200) 로 바뀐다.
- IGP route (
Administrative Distance (AD)
- Administrative Distance (AD) 혹은 Protocol Distance 는 같은 AS 로 향하는 여러 route 들 중에 하나를 결정해야 할 때 “프로토콜 적인 측면” 에서 점수를 매기는 방법이다.
- 즉, 이 route 가 어떤 방법으로 라우터에 제공되었냐에 따라 다르게 점수를 메기고, route 선택에 사용하는 것.
- 각 protocol 에 대한 점수는 위 그림과 같고, 점수가 낮을수록 좋은거디.
Multi-Exit Discriminator (MED)
- 한 AS 에 대해 BGP peer 로 가는 방법이 여러개일 때, 그 중에서 어떤 방법을 선호할 것인지를 명시하는 것.
- 점수가 낮을수록 좋다.
Local Preference
- 뭐 비즈니스적인 이유와 같은 정책으로 인해 route preference 를 조정해야 할 때 사용된다.
- 즉, Static preference 이며 우선순위도 제일 높다.
- 이 점수는 높을수록 좋다.
Origin
- Route 가 어떤 방법으로 라우터에게 제공되었는지? AD 랑 뭐가 다르노
Community
- Desctination 을 group 으로 관리하는 tag (마치 k8s 의 label 과 같은) 이다.
BGP Synchronization
- 만일 AS 209 의 NLRI 35/8 이 AS 1880 의 라우터 B 로 전파되었다고 해보자.
- 이때 AS 1880 의 라우터 A, B 는 iBGP peer 관계에 있다면 A 로 전달될 것이고, A 는 이것을 AS 690 의 D 한테도 알려줄 것이다.
- 다만 A 와 B 는 직접적으로 연결되어 있지는 않고, 라우터 C 에 의해 간접적으로 연결되어 있다.
- 그럼 AS 690 에서 35/8 로 보내고자 한다면, D 에서 A 로 보내게 될 것이고, 그럼 A 는 C 로 보내게 될 것이다.
- 근데 문제는 C 는 이 35/8 에 대한 경로는 모른다는 것이다
Best path
- BGP 에서 Best path 를 결정하는 것은 다음과 같은 순서대로 이루어진다
- Local preference 가 높은 것
- AS-path 가 짧은 것
- Origin type 이 작은 것
- MED 가 작은 것
- Next hop 으로 가기 위한 IGP 의 비용이 작은 것
- Next hop 의 router id 가 작은 것