- Authors

- Name
- Youngju Kim
- @fjvbn20031
라우팅 알고리즘: Link-State와 Distance-Vector
라우팅 알고리즘은 송신 호스트에서 수신 호스트까지의 최적 경로를 결정합니다. 네트워크를 그래프로 모델링하고, 노드 간 최소 비용 경로를 계산하는 것이 핵심입니다.
이 글에서는 두 가지 대표적인 라우팅 알고리즘인 Link-State(LS) 알고리즘과 Distance-Vector(DV) 알고리즘을 다루며, 각각의 장단점과 문제점을 분석합니다.
1. 네트워크의 그래프 모델
네트워크는 노드(라우터)와 에지(링크)로 구성된 가중치 그래프로 모델링됩니다.
네트워크 그래프 예시
=====================
2
(u) -------> (v)
| \ |
1| \5 |3
| \ |
v v v
(x)---(w)---->(y)---->(z)
3 1 2
c(u,v) = 2, c(u,x) = 1, c(u,w) = 5
c(v,y) = 3, c(x,w) = 3, c(w,y) = 1
c(y,z) = 2
목표: 출발 노드에서 모든 다른 노드까지의 최소 비용 경로를 찾는 것
2. 라우팅 알고리즘 분류
라우팅 알고리즘 분류
======================
1. 정보 범위에 따라:
- 전역적 (Global): 모든 노드의 정보를 알고 계산 --> Link-State
- 분산적 (Decentralized): 이웃 정보만으로 반복 계산 --> Distance-Vector
2. 동작 방식에 따라:
- 정적 (Static): 경로가 거의 변하지 않음
- 동적 (Dynamic): 네트워크 변화에 따라 주기적으로 재계산
3. 부하 민감도에 따라:
- 부하 민감 (Load-Sensitive): 링크 혼잡도를 비용에 반영
- 부하 비민감 (Load-Insensitive): 현재 인터넷 라우팅 방식
3. Link-State 알고리즘 (다익스트라 알고리즘)
3.1 기본 원리
Link-State 알고리즘은 네트워크의 전체 토폴로지 정보를 기반으로 동작합니다. 각 노드가 자신의 링크 상태 정보를 네트워크 전체에 브로드캐스트하고, 모든 노드가 동일한 정보를 갖게 되면 다익스트라 알고리즘으로 최단 경로를 계산합니다.
3.2 알고리즘 동작
다익스트라 알고리즘 (Dijkstra's Algorithm)
===========================================
초기화:
N' = 출발 노드 u
D(v) = c(u,v) (직접 연결된 이웃의 비용)
무한대 (직접 연결되지 않은 노드)
반복:
1. N'에 포함되지 않은 노드 중 D(w)가 최소인 노드 w를 선택
2. w를 N'에 추가
3. w의 이웃 v에 대해:
D(v) = min(D(v), D(w) + c(w,v))
4. 모든 노드가 N'에 포함될 때까지 반복
3.3 실행 예시
위의 그래프에서 노드 u를 출발점으로 다익스트라 알고리즘을 실행합니다.
다익스트라 실행 과정 (출발: u)
===============================
단계 | N' | D(v) | D(w) | D(x) | D(y) | D(z)
-----+-----------+------+------+------+------+------
0 | u | 2 | 5 | 1 | inf | inf
1 | u,x | 2 | 4 | 1 | inf | inf
2 | u,x,v | 2 | 4 | 1 | 5 | inf
3 | u,x,v,w | 2 | 4 | 1 | 5 | inf
4 | u,x,v,w,y | 2 | 4 | 1 | 5 | 7
5 | 모든 노드 | 2 | 4 | 1 | 5 | 7
최단 경로 트리:
u -> v: 비용 2 (직접)
u -> x: 비용 1 (직접)
u -> w: 비용 4 (u -> x -> w)
u -> y: 비용 5 (u -> v -> y 또는 u -> x -> w -> y)
u -> z: 비용 7 (u -> ... -> y -> z)
3.4 시간 복잡도
기본 구현의 시간 복잡도는 O(n^2)이며, 우선순위 큐(힙)를 사용하면 O(n log n)으로 개선할 수 있습니다.
3.5 진동 문제 (Oscillation)
링크 비용이 트래픽 부하에 따라 변하면, 라우팅이 진동(oscillation)할 수 있습니다.
LS 진동 문제 예시
==================
시점 1: A -> B 경로로 대부분의 트래픽이 흐름
--> A -> B 링크 비용 증가
시점 2: 모든 노드가 A -> C -> D -> B 경로로 전환
--> A -> C 링크 비용 증가
시점 3: 다시 A -> B 경로로 전환 (진동 반복)
해결책: 라우팅 업데이트 시점을 랜덤화
4. Distance-Vector 알고리즘 (벨만-포드)
4.1 기본 원리
Distance-Vector 알고리즘은 분산적으로 동작합니다. 각 노드는 이웃에게만 자신의 거리 벡터(모든 목적지까지의 추정 비용)를 전달하고, 이웃의 정보를 기반으로 자신의 거리 벡터를 갱신합니다.
4.2 벨만-포드 방정식
노드 x에서 목적지 y까지의 최소 비용 d(x,y)는 다음과 같이 계산됩니다.
벨만-포드 방정식
=================
d(x, y) = min { c(x, v) + d(v, y) }
v
여기서 v는 x의 모든 이웃 노드
의미: x에서 y까지의 최소 비용은
= x에서 이웃 v까지의 비용 + v에서 y까지의 최소 비용
이 값이 최소인 이웃 v를 통해 이동
4.3 알고리즘 동작 과정
DV 알고리즘 동작
==================
각 노드 x는 다음을 유지:
- c(x,v): 이웃 v까지의 링크 비용
- Dx: x의 거리 벡터 (모든 목적지까지의 추정 비용)
- Dv: 각 이웃 v의 거리 벡터
동작:
1. 초기화: 직접 연결된 이웃은 링크 비용, 나머지는 무한대
2. 이웃으로부터 거리 벡터를 수신하면:
Dx(y) = min { c(x,v) + Dv(y) } (모든 이웃 v에 대해)
3. 자신의 거리 벡터가 변경되면 모든 이웃에게 전송
4. 변화가 없을 때까지 반복
4.4 실행 예시
DV 알고리즘 실행 (3노드 예시)
===============================
토폴로지:
x ---7--- y
| / |
1 / 1
| 2 |
z --------+
초기 거리 벡터:
Dx = [0, 7, 1] (x->x, x->y, x->z)
Dy = [7, 0, 1] (y->x, y->y, y->z)
Dz = [1, 1, 0] (z->x, z->y, z->z)
1단계: 각 노드가 이웃의 DV를 수신하고 갱신
노드 x 갱신:
Dx(y) = min(c(x,y)+Dy(y), c(x,z)+Dz(y))
= min(7+0, 1+1) = 2
Dx(z) = min(c(x,y)+Dy(z), c(x,z)+Dz(z))
= min(7+1, 1+0) = 1
갱신 후 Dx = [0, 2, 1] (x->y가 7에서 2로 변경)
2단계: 변경된 DV를 이웃에게 전파, 더 이상 변화 없으면 종료
5. Count-to-Infinity 문제
5.1 문제 발생 시나리오
DV 알고리즘의 가장 큰 문제는 bad news travels slowly, 즉 링크 비용이 증가할 때 수렴이 매우 느리다는 것입니다.
Count-to-Infinity 예시
========================
토폴로지: x ---4--- y ---1--- z
초기 거리 벡터:
Dy(x) = 4, Dz(x) = 5 (z -> y -> x)
링크 변경: c(x,y) = 4 --> 60
y 갱신: Dy(x) = min(60, 1+Dz(x)) = min(60, 1+5) = 6
(z를 경유하면 6이라고 생각, 하지만 z도 y를 경유!)
z 갱신: Dz(x) = min(1+Dy(x)) = 1+6 = 7
y 갱신: Dy(x) = min(60, 1+7) = 8
z 갱신: Dz(x) = 1+8 = 9
... 계속 1씩 증가하면서 44번 반복 후에야 수렴!
5.2 해결책: Poisoned Reverse
Poisoned Reverse는 라우팅 루프를 방지하는 기법입니다. z가 y를 경유하여 x에 도달한다면, z는 y에게 x까지의 거리를 무한대로 알려줍니다.
Poisoned Reverse 동작
======================
z는 y를 통해 x에 도달 (z -> y -> x)
z가 y에게 알리는 정보:
Dz(x) = 무한대 (실제로는 5이지만 y에게는 무한대로 알림)
이유: z가 y를 경유하므로, y가 z를 경유하는 루프 방지
링크 변경 c(x,y) = 60 발생 시:
y 갱신: Dy(x) = min(60, 1+무한대) = 60
y가 z에게 Dy(x)=60 전달
z 갱신: Dz(x) = min(1+60) = 61
--> 즉시 올바른 값으로 수렴!
5.3 Poisoned Reverse의 한계
Poisoned Reverse는 두 노드 사이의 루프만 방지할 수 있습니다. 3개 이상의 노드가 관여하는 루프에는 효과가 없습니다.
6. LS와 DV 알고리즘 비교
Link-State vs Distance-Vector
================================
항목 | Link-State (LS) | Distance-Vector (DV)
------------------+----------------------+----------------------
정보 범위 | 전체 네트워크 토폴로지 | 이웃의 거리 벡터만
메시지 복잡도 | O(N x E) 메시지 | 수렴까지 가변적
수렴 속도 | O(N^2) 빠름 | 느림 (루프 가능)
견고성 | 각 노드 독립 계산 | 오류가 전파될 수 있음
| (오류 영향 제한적) | (잘못된 DV 전파)
메모리 요구 | 전체 토폴로지 저장 | 이웃 DV만 저장
실제 사용 | OSPF, IS-IS | RIP, BGP (경로 벡터)
6.1 메시지 복잡도
- LS: 각 노드가 링크 상태를 모든 노드에 브로드캐스트. N개 노드, E개 링크에서 O(N x E) 메시지
- DV: 이웃 간에만 교환하지만, 수렴까지의 메시지 수가 불확실
6.2 수렴 속도
- LS: O(N^2) 또는 O(N log N)에 수렴
- DV: 수렴 속도가 불확실하고, count-to-infinity 문제 발생 가능
6.3 견고성 (Robustness)
- LS: 한 노드가 잘못된 링크 비용을 알려도, 다른 노드들은 자체적으로 최단 경로를 계산하므로 영향이 제한적
- DV: 한 노드의 잘못된 거리 벡터가 네트워크 전체로 전파될 수 있음
7. 라우팅 알고리즘의 실제 적용
실제 프로토콜과 알고리즘
==========================
라우팅 프로토콜 | 기반 알고리즘 | 사용 범위
-----------------+--------------+------------------
RIP | DV | 소규모 AS 내부
OSPF | LS | 대규모 AS 내부
IS-IS | LS | ISP 네트워크
BGP | 경로 벡터 | AS 간 (인터넷 전체)
EIGRP | DV 개선 | Cisco 네트워크
8. 핵심 정리
| 개념 | 핵심 내용 |
|---|---|
| Link-State | 전체 토폴로지 기반, 다익스트라 알고리즘 사용 |
| Distance-Vector | 이웃 정보만 사용, 벨만-포드 방정식 기반 |
| 벨만-포드 방정식 | d(x,y) = min over v of c(x,v) + d(v,y) |
| Count-to-infinity | DV에서 링크 비용 증가 시 수렴 지연 문제 |
| Poisoned Reverse | 경유 노드에 무한대 비용을 알려 루프 방지 |
| LS 진동 | 부하 민감 비용 시 경로 진동, 랜덤화로 해결 |
다음 글에서는 이러한 라우팅 알고리즘이 실제 인터넷에서 어떻게 적용되는지, OSPF와 BGP 프로토콜을 통해 알아보겠습니다.
참고 자료
- James F. Kurose, Keith W. Ross, "Computer Networking: A Top-Down Approach", 6th Edition, Chapter 4
- E. W. Dijkstra, "A Note on Two Problems in Connexion with Graphs", 1959
- R. Bellman, "On a Routing Problem", 1958