오늘은 술한잔 하고 들어왔습니다. 세상이 어렵다 보니 본의든 본의가 아니든 회사를 그만두시는 분들이 많으시네요. 그래도 이 업계에서 한시대를 풍미하시던 분들이 한두분씩 퇴직을 하니 마음이 너무 아프군요. 은퇴하시는 대 선배님들을 모시고 대화를 나눌만한 포럼이 하나쯤은 있어야 하지 않나 하는 생각이 드는 우울한 날이군요.
우울한 기분에 빨리 메일링을 쓰고나서 소주한잔 더 빨고 자야겠습니다. 저를 만든 것이 선배님들이고 제가 도와 드려야 하는 분들이 후배님들 아니겠습니까? 혼자 잘나서 설치는 사람들은 Network 엔지니어 자격이 없다는 생각이 강하게 드는 오늘....... 메일링을 시작합니다.
어려분은 Network에 변화가 발생하면 그 정보를 빠르게 동기화 하는 것이 최상이라고 생각하십니까? 세상에 장점만 되는 것과 단점만 되는 것은 없다고 생각합니다. 장점은 단점이 되기도 하고, 단점은 장점이 되기도 합니다.
BGP라는 Routing Protocol은 오히려 빠르게 동기화 하는 것이 단점이 됩니다. 왜냐구요? BGP는 전세계의 Network 정보를 동기화하는 Routing Protocol입니다. 만일, 특정 Network이 Cable이나 Port 불량으로 UP/DOWN을 반복하여 Network 변화가 자주 발생된다면 엄청난 정보가 전세계에 뿌려지게 되며 불안정해지게 될 것입니다. 그래서 BGP는 update 정보를 batch 형식으로 전달을 합니다. 무슨 말이냐구요?
오늘은 술도 한잔 했겠다, 크게 중요하지 않은 부분이라 제가 강의할 때 구체적으로 설명하지 않는 부분이지만 설명을 해 드리도록 하겠습니다. 내용은 짧고, 이해는 깊게... 화이팅!
한번 LAB을 통하여 확인해 보도록 하겠습니다.
구성도는 다음과 같습니다.
[R1 설정]
interface Loopback0
ip address 1.1.1.1 255.255.255.255
interface Loopback1
ip address 11.11.11.11 255.255.255.255
interface FastEthernet0/0
ip address 10.10.12.1 255.255.255.0
interface FastEthernet1/0
ip address 10.10.13.1 255.255.255.0
router ospf 1
log-adjacency-changes
network 1.1.1.1 0.0.0.0 area 0
network 10.10.12.1 0.0.0.0 area 0
network 10.10.13.1 0.0.0.0 area 0
router bgp 1
no synchronization
bgp log-neighbor-changes
network 11.11.11.11 mask 255.255.255.255
neighbor 2.2.2.2 remote-as 1
neighbor 2.2.2.2 update-source Loopback0
neighbor 3.3.3.3 remote-as 1
neighbor 3.3.3.3 update-source Loopback0
no auto-summary
[R2 설정]
interface Loopback0
ip address 3.3.3.3 255.255.255.255
interface Loopback1
ip address 33.33.33.33 255.255.255.255
interface FastEthernet0/0
ip address 10.10.23.3 255.255.255.0
interface FastEthernet1/0
ip address 10.10.13.3 255.255.255.0
router ospf 1
log-adjacency-changes
network 3.3.3.3 0.0.0.0 area 0
network 10.10.13.3 0.0.0.0 area 0
network 10.10.23.3 0.0.0.0 area 0
router bgp 1
no synchronization
bgp log-neighbor-changes
network 33.33.33.33 mask 255.255.255.255
neighbor 1.1.1.1 remote-as 1
neighbor 1.1.1.1 update-source Loopback0
neighbor 2.2.2.2 remote-as 1
neighbor 2.2.2.2 update-source Loopback0
no auto-summary
[R3 설정]
interface Loopback0
ip address 2.2.2.2 255.255.255.255
interface Loopback1
ip address 22.22.22.22 255.255.255.255
interface FastEthernet0/0
ip address 10.10.12.2 255.255.255.0
interface FastEthernet1/0
ip address 10.10.23.2 255.255.255.0
interface FastEthernet2/0
ip address 10.10.24.2 255.255.255.0
router ospf 1
log-adjacency-changes
network 2.2.2.2 0.0.0.0 area 0
network 10.10.12.2 0.0.0.0 area 0
network 10.10.23.2 0.0.0.0 area 0
router bgp 1
no synchronization
bgp log-neighbor-changes
network 22.22.22.22 mask 255.255.255.255
neighbor 1.1.1.1 remote-as 1
neighbor 1.1.1.1 update-source Loopback0
neighbor 1.1.1.1 next-hop-self
neighbor 3.3.3.3 remote-as 1
neighbor 3.3.3.3 update-source Loopback0
neighbor 3.3.3.3 next-hop-self
neighbor 10.10.24.4 remote-as 2
no auto-summary
[R4 설정]
interface Loopback1
ip address 44.44.44.44 255.255.255.255
interface FastEthernet0/0
ip address 10.10.24.4 255.255.255.0
router bgp 2
no synchronization
bgp log-neighbor-changes
network 44.44.44.44 mask 255.255.255.255
neighbor 10.10.24.2 remote-as 1
no auto-summary
자... EBGP와 IBGP로 나누어서 짤막하게 진행해 보도록 하겠습니다.
※ Update 정보를 확인하기 위하여 모든 Router에 'debug ip bgp updates'를 실행해 놓았습니다.
1. EBGP Neighbor의 경우
■ 첫번째 Network 변화 (Shutdown)
R1(config)# interface loopback 1
R1(config-if)# shutdown
Apr
2 00:02:37.635: BGP(0): route 11.11.11.11/32 down :
다운되었군요!
Apr
2 00:02:37.635: BGP(0): no valid path for 11.11.11.11/32
Apr
2 00:02:37.639: BGP(0): 2.2.2.2 send UPDATE 11.11.11.11/32 -- unreachable :
바로 전달하는군요!
R2#
Apr
2 00:02:38.267: BGP(0): 1.1.1.1 rcv UPDATE about 11.11.11.11/32 -- :
IBGP로 정보를 받았군요!
Apr
2 00:02:38.275: BGP(0): 10.10.24.4 send unreachable 11.11.11.11/32 :
EBGP로 바로 전달하는군요!
Interface를 shutdown 하자 마자 IBGP Neighbor에게 바로 전달을 하고, 그 정보를 받은 Neighbor는 EBGP에게도 바로 전달을 하는군요. 즉, Triggered update가 바로바로 전달되는 것을 확인할 수 있습니다. 그럼, 뭐 OSPF나 EIGRP와 같은 IGP Routing Protocol하고 똑같네요! 그런가요?
예. BGP도 처음 Network 정보가 변경된 경우에는 Triggered Update를 통하여 바로 Network 변경정보를 전달합니다. 바로바로 전달해서 Network 정보를 동기화하는 것이 중요하니까요!
이번에는 한번 Interface를 한번 살려볼까요?
R1(config)# interface loopback 1
R1(config-if)# shutdown
Apr
2 00:02:46.231: BGP(0): route 11.11.11.11/32 up :
Down된지 9초 후에 UP이 되었군요!
Apr
2 00:02:46.235: BGP(0): 2.2.2.2 send UPDATE (format) 11.11.11.11/32, next 1.1.1.1, metric 0, path :
IBGP로 바로 전달하는군요!
R2#
Apr
2 00:02:47.147: BGP(0): 1.1.1.1 rcvd 11.11.11.11/32 :
IBGP로 정보를 받았군요!
Apr
2 00:03:09.199: BGP(0): 10.10.24.4 send UPDATE (format) 11.11.11.11/32, next 10.10.24.2, metric 0, path :
EBGP로 22초 후에 정보를 전달하는군요! (22초 + 9초 = 약 30초군요)
R1은 자신의 Interface에 변화가 있을 때, 바로 Triggered Update를 실시하지만, R2는 EBGP로 정보를 보낼 때 22초나 있다가 전달을 하는군요. 왜 그럴까요? BGP는 Update 정보를 받은 후에 동일한 Network에 대하여 변경된 정보를 30초 이내에 받으면, EBGP로는 첫번째 정보를 받은 후 30초가 지나기 전까지 Update를 하지 않습니다.
보통 쉽게 설명하기 위하여 IBGP로 받은 정보를 EBGP로 넘길 경우 30초의 시간을 대기한다고 하지만, 정확한 설명은 첫번째 Network 변경은 바로 Update를 실시하고, 30초 이내에 동일한 Network에 대해여 변경된 정보를 인지하는 경우에는 30초가 지나기 전에는 Update하지 않는다가 정확한 설명입니다.
중요한 것은 Network의 변화에 바로바로 대응하는 것이 아니라 EBGP는 30초단위로 Network 변화를 Check해서 Update를 함으로써 BGP는 안정성을 우선으로 고려한 Routing Protocol이라는 점입니다.
2. IBGP Neighbor의 경우
R1(config)# interface loopback 1
R1(config-if)# shutdown
Apr
2 00:00:13.755: BGP(0): route 11.11.11.11/32 down :
다운되었군요!
Apr
2 00:00:13.759: BGP(0): 3.3.3.3 send UPDATE 11.11.11.11/32 -- unreachable :
바로 전달하는군요!
R3#
Apr
2 00:00:13.323: BGP(0): 1.1.1.1 rcv UPDATE about 11.11.11.11/32 -- :
IBGP로 정보를 받았군요!
역시 EBGP와 마찬가지로 바로 Triggered Update를 실시하는군요.
다시, 살려볼까요?
R1(config)# interface loopback 1
R1(config-if)# no shutdown
Apr
2 00:00:15.831: BGP(0): route 11.11.11.11/32 up :
Down된지 2초 후에 UP이 되었군요!
Apr
2 00:00:19.835: BGP(0): 3.3.3.3 send UPDATE (format) 11.11.11.11/32, next 1.1.1.1, metric 0, path
:
4초후에 Update 정보를 전달하는 군요! (2초 + 4초 = 6초군요)
R3#
Apr
2 00:00:19.235: BGP(0): 1.1.1.1 rcvd UPDATE w/ attr: nexthop 1.1.1.1, origin i, localpref 100, metric 0
첫번째 Network 변화가 발생한 경우에는 바로 Triggered Update를 실시하지만, EBGP와 마찬가지로 Network 변화가 자주 일어나니까 첫번째 변화가 있었던 시점에서 부터 일정한 시간이 지나야 Network이 변경되었다는 정보를 전달한다는 사실을 아실 수 있습니다. 그 시간이 5초랍니다.
왜 6초가 되었냐구요? 저에게 BGP 배우신 분은 아시죠... ^^
오늘의 숙제입니다. IBGP도 그렇고 EBGP도 그렇고 30초, 5초로 알고 있는데 왜 1초 정도가 더 추가되었을 까요?
보통 강의할 때는 'BGP는 매번 Triggered Update를 하지 않으며 이유는 안정성 때문이다.' 라는 수준에서 강의를 하는데.. 술이 웬수입니다. 오늘은 KT와 같은 Service Provider에서 강의할 때 설명하는 수준의 깊이였던거 같습니다. 너무 어려워 하지는 마시고요... 궁금하신게 있으면 언제든지 물어보세요.