이 게시물은 후니의 쉽게 쓴 CISCO 네트워킹 4판을 공부한 내용을 바탕으로 작성됨.
Distance Vector 라우팅의 문제점과 해결책
이전에 Distance vector 라우팅을 배울 때 이 알고리즘의 가장 큰 문제점은 테이블 업데이트에 시간이 오래 걸린다는 것이었다. 어떤 라우터의 라우팅 테이블이 업데이트 되면 그 정보를 옆 라우터로 한 칸 한 칸 이동하며 전달하기 때문에 시간이 굉장히 오래걸린다. 업데이트가 모든 라우터에 전달되는 시간을 Convergence time이라고 하는데, Link state 라우터에 비하여 convergence time이 오래걸리는 것.
RIP의 경우에는 라우팅 테이블이 디폴트 30초마다 업데이트가 이루어진다. 따라서 어떤 라우터에 업데이트가 발생하면 30초 기다렸다가 다음 라우터가 업데이트 되고, 또 30초 기다렸다가 그 다음 라우터가 업데이트 된다.
이때문에 Routing looping이 발생할 수 있는데, 예시를 통해 살펴보도록 하자.
위 같이 A, B, C 세 개의 라우터가 있고, 1 2 3 4 네 개의 network가 있는 상황을 가정해보자. 라우터 A, B, C는 서로 라우팅 테이블을 교환하여 자신으로부터 네트워크 1 2 3 4에 도달하는 경로와 hop count를 기록하였다.
이때 만약 network 4가 갑자기 죽었다고 해보자. 이 정보는 network 4에 연결되어 있는 라우터 C가 알게된다. 라우터 C는 자신의 테이블에서 network 4가 죽었음을 기록한다. 하지만 RIP처럼 업데이트 속도가 느린 경우 라우터 A, B는 이 정보를 받기 전까지 network 4가 정상 작동하는 것으로 생각한다.
C의 업데이트 정보가 먼저 B에게 전달되면 B도 network 4가 죽었다는 것을 확인하고 업데이트 할 것이다. 하지만 C가 B에게 이 정보를 전달하는 것 보다 B가 C에게 업데이트를 전달하는 게 더 빨랐다? C는 B의 테이블을 보고 network 4가 살아있다고 생각한다.
이에 더해서 C는 network 4가 B에서 hop 1만큼 떨어져 있으므로, 자신으로 부터 hop 2만큼 떨어져 있을 것이라고 생각한다. 따라서 자신의 테이블에 network 4를 hop 2로 저장한다.
그 후 C가 B에게 라우팅 테이블을 다시 전송한다면 B에서도 같은 오류가 발생하여 network 4를 hop 3으로 수정할 것이다.
이런 식으로 라우팅 테이블에 looping이 발생하면 죽어있는 네트워크가 살아있다고 착각하여 해당 네트워크로 전송되는 데이터는 목적지에 도착하지 못하게 되며 그에 따라 엄청난 양의 트래픽이 발생한다.
Maximum Hop Count
이 문제를 방지하기 위한 대책으로 Maximum Hop Count를 설정하는 방법이 있다. RIP에서는 최대 홉 카운트를 15로 설정하고 이를 초과하는 경로에 대해서 unreachable로 간주한다. 그리고 flush time이 지나면 이를 라우팅 테이블에서 아예 삭제한다. 따라서 looping에 의해 hop 수가 증가하여 15를 넘겨버리면 결국 테이블에서 삭제되는 것이다. 하지만 정상적인 경로더라도 hop이 15개를 넘어서는 경우 도달할 수 없기 때문에 대규모 네트워크 사용이 불가능하다는 단점이 존재한다.
Hold Down Timer
다음으로 Hold Down Timer를 이용하여 루핑을 방지할 수도 있다.
위 같은 네트워크가 있다고 가정해보자. 라우터 E에 연결되어 있는 network A가 죽었다고 생각해본다. 이때 Router E는 Router A에게 network A가 죽었음을 전달한다. 그러면 Router A는 Hold Down Timer를 시작한다.
이때 Router B ➜ A 방향으로 network A가 n(n>1) 홉이라는 업데이트를 전달하면 A는 이 정보를 무시한다. Hold down timer가 동작하는 동안 외부에서 어떤 network에 대한 정보가 들어올 때 원래 가지고 있던 hop count보다 더 큰 값이 들어오면 이를 무시한다. timer 동안에는 원래 가지고있던 hop count과 같거나 더 작은 hop을 제시하는 경우에만 업데이트를 받아들인다.
Router A가 network A에 대하여 가지고있던 hop은 1이었기 때문에, Router B ➜ A로 network A가 n(n>1) 홉이라는 업데이트를 전달하면 hop이 1보다 크기 때문에 이를 무시하는 것이다. (단, Hold down timer가 작동중인 경우)
이제 Router A는 자신과 연결되어있는 Router B, D에게 업데이트를 전달하는데, 그에 따라 router B, D도 network A에 대해 Hold down timer를 작동시킨다. 이때 Router C ➜ B, D에게 network A를 3홉으로 갈 수 있다고 업데이트하면 B, D는 이를 무시한다. B, D는 network A에 2홉으로 도달하기 때문에 이보다 더 안좋은 경로는 업데이트로 받아들이지 않는다.
Split Horizon
아주 중요한 개념이다. 꼭 알아두도록 하자.
Split Horizon은 라우팅 update가 들어온 곳으로는 역방향으로 정보를 보낼 수 없는 개념이다. 예를 들어서 Router E➜A 방향으로 network A가 죽었다는 update를 전달한다. 그러면 Router A➜E로는 network A에 대한 update를 전달할 수 없다.
애초에 Router E➜A로 network A에 대한 update가 전달되었다는 것은 Router E가 network A에 더 가깝다는 것이므로 Router A는 E에게 network A에 대한 정보를 전달할 필요가 없다. (network A에 대한 것을 제외하고는 A➜E로 전달할 수 있다.)
Split Horizon은 두 라우터 간의 루핑을 막기 위한 용도라 전체 네트워크의 루핑을 막기는 어렵다.
Route Poisoning
이름에서 유추할 수 있듯이 Route Poisoning은 라우팅 테이블에 극약을 처방한다.
예를들어 위 상황에서 Network A가 down되었다면 Router E는 network A에 대한 hop을 16으로 바꾼다. RIP의 특성상 hop이 15개를 초과하면 Unreachable로 판단한다는 것을 기억하자. hop count만 안드로메다로 보내놓고 라우팅 테이블에서 지우지는 않는다. 만약 Router A➜E로 Network A에 대한 update를 전달해도 E는 이것을 무시한다. Router E➜A로는 update가 가능하다. 따라서 결국 모든 라우터가 Network A가 down되었다는 것을 알게 된다.
Poison Reverse
Poison Reverse는 Split horizon을 약간 변형한 방법이다. 그래서 Poison reverse update를 이용한 Split horizon이라고도 부른다. Split horizon은 정보가 온 쪽으로는 역방향으로 정보를 보내지 않는 방식이었다. Poison Reverse는 라우팅 정보를 되돌려 보내기는 하지만 hop을 무한대로 설정하여 보낸다.
Down된 network에 대한 정보를 아예 없애는 것보다 hop count를 무한대로 설정하여 업데이트하면 다른 라우터들이 실수로 잘못된 경로 정보를 사용하는 경우를 줄일 수 있다. 즉 Router E➜A 방향으로 Network A가 down되었다는 정보를 전달하면 Router A➜E 방향으로 network A의 hop이 16이라고 전달한다.
여러가지 방법에 대해서 알아보았는데, 가장 중요하고 요긴하게 쓰이는 방식은 Split horizon이다. 꼭 알아두도록 하자.
결론 👉 라우팅 프로토콜의 분류 중 Distance vector algorithm들은 방법론 자체가 쉽고 간편하며 라우팅 테이블을 적게 사용한다는 장점이 있지만 looping이 쉽게 발생한다는 단점을 가진다.
이를 해결하기 위해 몇가지 looping 방지 알고리즘들을 사용하는데, 그 중에는 Hop count를 15로 제한하는 Maximum Hop Count, 지정된 시간동안 정보를 선별해서 받는 Hold Down Timer, 정보가 들어온 쪽으로는 다시 정보를 내보내지 않는 Split Horizon, down된 네트워크의 홉을 16으로 보내버리는 Route Poisoning, 그리고 역방향으로 홉 16을 보내버리는 Poison Reverse가 있었다.
'네트워크' 카테고리의 다른 글
[네트워크] 20. OSPF(Open Shortest Path First) (0) | 2024.01.01 |
---|---|
[네트워크] 19. VLSM, IGRP (0) | 2023.12.30 |
[네트워크] 17. RIP 실습 (1) | 2023.12.30 |
[네트워크] 16. 패킷트레이서 기초 실습 (0) | 2023.12.29 |
[네트워크] 15. CDP, Telnet, 핑과 트레이스 (1) | 2023.12.29 |