4장에서는 Data Plane, 즉 각각의 라우터에서 어떻게 포워딩 되는지를 다루었다.
5장에서는 Control Plane의 라우팅 알고리즘과 SDN 방식에 대해 알아볼 예정이다.
본격적으로 들어가기 전에 이전 내용을 복습해 보자.
각 라우터에서 자신의 포워딩 테이블을 결정한다.
(이웃 라우터와 주고 받은 정보를 바탕으로 테이블 생성)
per-router control이라고도 하며, 각 라우터가 자신의 정보를 교황하여 포워딩 테이블을 만들게 된다.

외부의 중앙 서버가(컨트롤러) 각 라우터로 부터 정보를 수집하여 flow 테이블을 생성하여 라우터에 전달한다. (중앙 서버에서 직접 구현할수 있더 좀 더 유연하다)

여기서 CA는 다음의 역할 을 한다.
1. 각 라우터에서 받은 정보를 컨트롤러에 전달. (UP)
2. 컨트롤러가 만든 테이블을 각 라우터에 전달. (DOWN)
라우팅 프로토콜의 목표는 좋은 path를 결정하여 포워딩 테이블을 구성하는 것이다.
이 목차에서 다룰 라우팅 프로토콜은 전통적인 방식의 프로토콜이다.
여기서 "좋은"이라는 기준은 여러가지가 될 수 있다.
1. 가장 낮은 cost
2. 가장 빠른
3. 패킷이 몰리지 않고 고루 보내지는 것 (least congested)
이 기준은 어느것이 좋고 나쁜것은 없고,
네트워크의 오퍼레이터가 무엇을 중점으로 두느냐에 따라 정해진다.
라우팅 프로토콜은 다음의 기준에 따라 분류될 수 있다.

각 라우터가 링크의 정보를 알고 있는 범위에 따라 분류한다.
Global
각 라우터는 전체 링크의 cost 정보를 알고 있다.
➡️ Link State 알고리즘
Decentralized
각 라우터는 전체 링크의 cost 정보를 알지 못하고 인접한 링크의 정보를 알고 있다,
하지만 이웃 라우터와 정보를 교환한 링크 cost 정보를 통해 반복적으로 경로를 계산한다.
➡️ Distance Vector 알고리즘
시간에 따라 cost, 즉 path가 달라지는 것에 따라 분류한다.
Static
각 링크의 cost가 시간에 따라 천천히 바뀐다.
때문에 알고리즘이 생성한 path 또한 바꾸지 않아도 된다.
Dynamic
각 링크의 cost가 시간에 따라 자주 바뀐다.
(혼잡상황에 따라 cost가 바뀐다.)
때문에 알고리즘이 생성한 path 또한 더욱 자주 바꿔야 한다.
모든 라우터가 전체 링크의 cost정보를 알고 있는 것이다.
Centralized
모든 링크의 정보를 알고 있는 것을 Centralized 라고 한다.
링크의 상태는 각 라우터가 자기 주변의 링크 cost 정보를 모든 라우터에 알려주어(Broadcast) 라우터가 모든 링크의 상태를 알게 된다.
➡️ 결국 모든 노드(라우터)는 같은 정보를 갖는다.
테이블의 생성
한 노드에서 출발하여 모든 노드마다 가장 낮은 cost path를 계산하여 포워딩 테이블을 만든다. (다익스트라 알고리즘)
반복적인 계산을 통해 path를 결정한다.
<노테이션>
1. Cx,y : x,y가 서로 이웃일 때 cost. (이웃이 아니라면 값은 무한대이다.)
2. D(v) : v까지 가는데 드는 최소 cost의 합
3. P(v) : v까지 가는 path에서 v노드 바로이전 노드 까지 드는 최소 cost의 합
4. N' : 최소 cost의 '노드' 집합
탐욕적 방법(Greedy Approach)을 사용해 각 단계에서 최적의 선택을 하며, 결과적으로 전체 최단 경로를 구하는 알고리즘이다.
<Initialization:>
2 N' = {u} /* N'은 이미 처리된 노드 집합으로 초기에는 시작 노드 u만 포함 */
3 for all nodes v
4 if v adjacent to u /* v가 u와 직접 연결된 노드인지 확인 */
5 then D(v) = cu,v /* u에서 v로 가는 직접 경로 비용으로 설정 */
6 else D(v) = ∞ /* 그렇지 않으면, u에서 v로 가는 비용을 무한대로 설정 */
7
8 Loop
9 find w not in N' such that D(w) is a minimum
10 add w to N'
11 update D(v) for all v adjacent to w and not in N' :
12 D(v) = min ( D(v), D(w) + cw,v )
13 /* 새로운 최단 경로 비용은 기존 비용과 w를 거치는 경로 중 더 작은 값 */
14 until all nodes in N'
<전체 흐름 요약>
1.시작 노드에서 다른 노드로 가는 경로를 초기화.
2. 아직 처리되지 않은 노드 중 최소 비용 노드를 선택.
3. 해당 노드와 연결된 이웃 노드들의 경로 비용을 갱신.
4. 모든 노드가 처리될 때까지 반복.

<0단계 (초기화)>
- N': 이미 처리된 노드 집합으로, 시작 노드인 u만 포함합니다.
- D(v): 각 노드 v에 대해 u에서의 최소 비용을 초기화합니다.
- D(x) = 1 (u와 x 간의 직접 경로 비용)
- D(y) = 2 (u와 y 간의 직접 경로 비용)
- D(w), D(v), D(z) = ∞ (직접 연결되지 않음)
- p(v): 최소 비용 경로의 이전 노드를 저장합니다. 초기에는 p(x) = u, p(y) = u.
<1단계>
- N': {u, x}
x는 D(x) = 1로, u에서 최소 비용인 노드이므로 선택.
- x의 인접 노드인 v와 w에 대해 D(v)와 D(w)를 업데이트:
- D(v) = min(∞, D(x) + c(x,v)) = 2 (1 + 2)
- D(w) = min(∞, D(x) + c(x,w)) = 4 (1 + 3)
- p(v) = x, p(w) = x로 경로 갱신.
<2단계>
- N': {u, x, y}
- y는 D(y) = 2로, 가장 작은 비용을 가진 노드이므로 선택.
- y의 인접 노드인 w와 z에 대해 D(w)와 D(z)를 업데이트:
- D(w) = min(4, D(y) + c(y,w)) = 3 (2 + 1)
- D(z) = min(∞, D(y) + c(y,z)) = 4 (2 + 2)
- p(w) = y, p(z) = y로 경로 갱신.
<3단계>
- N': {u, x, y, v}
- v는 D(v) = 2로, 가장 작은 비용을 가진 노드이므로 선택.
- v의 인접 노드인 w에 대해 업데이트:
- D(w) = min(3, D(v) + c(v,w)) = 3 (이미 최소값이므로 갱신 없음)
<4단계>
- N': {u, x, y, v, w}
- w는 D(w) = 3으로 선택.
- w의 인접 노드인 z에 대해 업데이트:
- D(z) = min(4, D(w) + c(w,z)) = 4 (3 + 1)
- p(z) = y 유지 (갱신 없음).
<5단계 (완료)>
- N': {u, x, y, v, w, z}
-모든 노드가 포함되었으므로 알고리즘 종료.
<결과>
최단 경로 비용 (D):
D(x) = 1, D(y) = 2, D(v) = 2, D(w) = 3, D(z) = 4
경로 (p):
x는 u를 통해, y는 u를 통해, v는 x를 통해, w는 y를 통해, z는 y를 통해 연결됩니다.
이렇게 구한 최단경로 그래프를 통해 포워딩 테이블을 생성한다.

첫번째 반복에서는 n개의 노드 전체의 비용을 검사한다.
두번째 반복에서는 n-1 , 세번째 반복에선 n-3... 이렇게 줄어드는 형태
따라서 찾아야 하는 노드의 총 수(검사해야 하는) = n(n+1)/2 이며,
O(n²)의 시간 복잡도를 갖는다.
자료구조에 따라(힙.. 등등) O(NlogN)까지 개선할 수 있다.
각 라우터는 자신의 링크의 상태정보를 n개의 라우터에 broadcast해야 한다.
효율적인 브로드캐스트 알고리즘은 한 소스에서 브로드캐스트 메시지를 전파하기 위해 O(n) 개의 링크를 거친다.
(가장 효율적일때 n개의 노드만을 거쳐 상태정보를 다 전달할 수 있음)
각 라우터의 메시지가 O(n) 개의 링크를 통과하므로, 전체 메시지 복잡도는 O(n²)
링크 비용이 트래픽 양에 따라 변동될 경우(다이나믹)
라우팅 경로가 지속적으로 변화하면서 진동 현상이 발생한다.
우리가 위에서 여지껏 살펴본 예제는 링크의 비용이 고정적일 때를 가정하였다.
하지만 트래픽에 따라 링크의 비용이 변화할 경우 라우팅 경로가 진동하는
(시시각각 변화하는) 문제가 발생한다.
[전제 조건]
1. 목적지 a로의 라우팅을 고려.
2. 트래픽은 d, c, e에서 각각 1, e(<1), 1의 양으로 들어옴.
3. 링크 비용은 방향성이 있고, 트래픽의 양(volume)에 의존.

link state와 달리 각 라우터는 자기 주변 라우터의 정보만 가지며,
각 라우터끼리 정보를 주고 받으며 라우팅 경로를 결정하는 알고리즘
Distance Vector 알고리즘은 반복적이고 비동기적이며 분산적이다.
분산적(distributed) : 각 노드는 하나 이상의 직접 연결된 이웃으로부터 정보를 받고, 자체적으로 계산을 수행하며, 계산된 결과를 다시 이웃들에게 배포한다.반복적(iterative) : 이웃끼리 더 이상 정보를 교환하지 않을 때까지 프로세스가 지속된다.비동기적(asynchronous) : 모든 노드가 서로 정확히 맞물려 동작할 필요가 없다. ()한 노드에서 다른 모든 노드로의 최단 경로를 찾는 알고리즘

X -> Y의 최단 경로의 계산은, X의 모든 이웃 노드 V에 대해
1. X->V로 가는 cost
2. V->Y로 가는 최소 cost (DV)
1+2 의 합을 계산하여 그 중 최소값을 갖는 경로를 최단 경로로 결정한다.
x에서의 DV란?
➡️ x 에서 네트워크 상의 모든 다른 노드까지의 최소 비용을 예측한 값들의 집합

주기적인 Distance Vector 전송
Distance Vector 업데이트
업데이트: 벨만포드 알고리즘
수렴(Convergence)
<수렴과정>
1. 초기 상태:
• 각 노드는 직접 연결된 이웃 노드에 대한 비용만 알고 있으며, 다른 노드들에 대한 비용은 **무한대 ( \infty )**로 시작합니다.
2. 업데이트 반복:
• 각 노드는 주기적으로 이웃 노드들로부터 받은 D_v(y) 값을 기반으로 자신의 D_x(y) 를 갱신합니다.
• D_x(y) \gets \min_{v} \{ c_{x,v} + D_v(y) \} 방정식을 사용하여 비용이 더 낮은 경로를 찾습니다.
3. 정보 전파:
• 네트워크의 모든 노드가 자신의 Distance Vector를 이웃 노드들과 교환하면서 점차 정확한 비용을 계산합니다.
4. 수렴 상태:
• 반복이 진행되면서 모든 노드의 D_x(y) 값이 더 이상 변하지 않게 됩니다.
• 이 상태에서는 D_x(y) 값이 실제 최소 비용 d_x(y) 와 같아집니다.

각 라우터가 자신의 변경사항을 전달하고 또 다시 계산하고 전달하고...
를 반복하며 비동기적으로 경로를 탐색한다.
반복적(iterative) : 이웃끼리 더 이상 정보를 교환하지 않을 때까지 프로세스가 지속된다.비동기적(asynchronous) : 모든 노드가 서로 정확히 맞물려 동작할 필요가 없다. 각각의 로컬 반복은 다음의 이유에서 발생한다.
1. 로컬링크의 비용 변화
2. 이웃 노드의 DV 변화 메세지를 수신
분산적(distributed) : 각 노드는 하나 이상의 직접 연결된 이웃으로부터 정보를 받고, 계산을 수행하며, 계산된 결과를 다시 이웃들에게 배포한다.self-stopping : 반복하다 어느순간 자기 경로가 업데이트 되지 않으면이렇게 수렴이 되면(update X)이 때가 최단 경로 이고 결정된 경로로 테이블을 만든다.




Distance Vector Algorithm은 반복적 통신(iterative communication)을 통해 정보를 교환하는데, 이 때 상태 정보가 주변 노드로 점진적으로 확신이 된다.
Iterative Communication:

DV는 자신과 다이렉트하게 연결된 노드랑만 정보교환을 하지만,
시간이 지남에 따라 점점 확산된 정보를 얻어 전체 cost를 알 수 있다.
링크의 cost가 변화하게 되면...
때문에 모든 노드들이 연쇄적으로 값의 변화가 없을 때 까지 자신의 DV를 다시 계산하게 된다.
x-y사이의 링크 코스트가 1로 바뀐 상황이다.


x-y사이의 링크 코스트가 60로 바뀐 상황이다.


시각 t0에서 노드Y는 링크 코스트의 변화를 감지한다.
따라서 노드Y는 Dy(x)를 다시 계산한 결과 4에서 6로 변화하였다.
이에 따라 변화내용을 Z노드에 전달한다.
Z노드는 자신의 DV를 다시 계산한 후 바뀐 Dz(x)값 7를 다시 Y에게 전달한다.
따라서 노드Y는 Dy(x)를 다시 계산하여 Z에 전달
...... 반복
Dz(x)값이 50 이상이 되어 값이 바뀌지 않을 때 까지 위의 과정을 반복할 것이다.
➡️ Count To Infinity 문제 발생
네트워크 전체에서 교환되는 메시지의 수
링크 상태 알고리즘 (LS) - O(n²)
거리 벡터 알고리즘 (DV) - 수렴 시간에 따라 메시지 수 비례
링크 상태 알고리즘 (LS) - O(n²)
거리 벡터 알고리즘 (DV) - 상황에 따라 다름(다소 느리다)
Q. 라우팅 루프란?
네트워크에서 특정 목적지로 가는 패킷이
두 개 이상의 라우터 간에 무한히 반복 전송되는 문제를 의미합니다.
이로 인해 데이터가 목적지에 도달하지 못하고 네트워크의 대역폭이 소모되며,
성능에 심각한 영향을 줄 수 있습니다.
어느 한 링크의 고장 혹은 잘못된 cost가 전달될 시 받는 영향
링크 상태 알고리즘 (LS)
거리 벡터 알고리즘 (DV)
Black-holing(데이터 손실) 문제를 유발| 특징 | Link State (LS) | Distance Vector (DV) |
|---|---|---|
| 메시지 복잡도 | ( O(n^2) ): 모든 라우터가 네트워크 전체로 정보를 전파 | 이웃 간 정보 교환에 따라 메시지 수가 달라짐 |
| 수렴 속도 | 빠름: 네트워크 전체 정보를 사용하여 계산 | 느릴 수 있음: 루프나 count-to-infinity 문제 발생 가능 |
| 라우팅 루프 발생 가능성 | 낮음: 전체 네트워크 상태를 고려해 계산하므로 루프 거의 없음 | 높음: 잘못된 정보가 네트워크에 전파되면서 루프 발생 가능 |
| 견고성 | 잘못된 링크 비용 정보는 국소적 영향을 미침 | 잘못된 경로 정보는 전체 네트워크에 전파될 수 있음 |
| 계산 방식 | 다익스트라 알고리즘을 사용해 최단 경로 계산 | 이웃 노드로부터 받은 경로 비용 정보를 사용 |
| 정보 교환 대상 | 모든 라우터 (네트워크 전체에 홍수 방식으로 전송) | 직접 연결된 이웃 라우터와 정보 교환 |
| 장점 | 수렴 속도가 빠르고 네트워크 전체 정보를 알 수 있음 | 메시지 전송 오버헤드가 적고 계산이 간단함 |
| 단점 | 메시지 복잡도와 계산량이 크며, 네트워크 크기에 민감함 | 수렴 속도가 느리고 루프 문제로 인해 네트워크 혼잡 발생 가능 |
| 주요 문제 | 링크 상태의 변화에 따라 진동(oscillation) 가능 | count-to-infinity, 라우팅 루프 등 |
| 사용 예시 | OSPF(Open Shortest Path First), IS-IS | RIP(Routing Information Protocol), BGP |