▶ 라우팅 알고리즘: 송신자부터 수신자까지 라우터의 네트워크를 통과하는 최소비용 경로를 찾는 것
▶ Global vs. Decentralized
- Global(link-state 알고리즘): 네트워크 전체에 대한 완전한 정보를 가지고 출발지와 목적지 사이의 최소 비용 경로를 계산한다.
- Decentralized(distance-vector 알고리즘): 최소 비용 경로의 계산이 라우터들에 의해 반복적이고 분산된 방식으로 수행된다.
▶ Static vs. Dynamic
- Static: 경로 계산 cost가 변하지 않는다. --> route 계산을 자주 할 필요가 없다.
- Dynamic: 상황에 따라 경로 계산 cost가 바뀐다. --> route 계산을 자주 해야 한다. (임계치를 넘으면, route 계산을 한다.)
5.2.1 링크 상태(LS) 알고리즘: 다익스트라 알고리즘
- Global: 모든 router가 전체 네트워크 정보를 가진다.
<-- link state broadcast: 각 router는 모든 router의 broadcast를 듣는다. - Dynamic: 각 router 자신으로부터 최단 경로를 매번 계산해서 업데이트한다. --> forwarding table
다익스트라 알고리즘: example


: source node로부터 시작하여, 현재 N'에 속한 노드와 인접하면서 목적지로의 cost가 가장 작은 노드를 N'에 추가한다.
- 목적지로의 cost는 새로운 노드가 N'에 추가될 때마다 업데이트된다.
다익스트라 알고리즘: problem

: 매번 cost가 바뀜에 따라(dynamic), packet이 서로 다른 경로에 의해 전송된다. (out of order delivery)
5.2.2 거리 벡터(DV) 라우팅 알고리즘
- Link-state 알고리즘: 네트워크 전체 정보를 이용하는 알고리즘
- Distance-vector 알고리즘: 직접 연결된 이웃으로부터 정보를 받고, 계산을 수행하며, 계산된 결과를 다시 이웃에게 배포한다. 이웃끼리 더 이상 정보를 교환하지 않을 때까지 프로세스가 지속된다.
▶ 벨만-포드 식: (x~v) + (v~y)의 cost를 가장 낮게 만드는 v를 선택한다.
벨만-포드: example

▷ u --> (v | x | w) --> z
: u --> x --> z의 cost가 가장 낮으므로, 중간 node로 x를 택한다.
- Bellman-Ford 방식: 각각의 이웃(v, x, w)이 목적지(z)로 얼마만에 갈 수 있는지를 알아야 한다. (세상 모든 목적지에 대해!)
Distance vector(DV) 알고리즘

Source = x, Destination = y, 사이의 node = {a, b, c}라고 할 때,
Dx(y) = x로부터 y까지의 최단거리를 알기 위해서는 {a, b, c} 중 어떤 node를 거쳐야 하는지 알아야 한다.
--> 이웃끼리 자신의 distance vector를 때때로 주고받아서, 결국 모든 목적지에 대해 최단의 distance vector를 계산할 수 있어야 한다.
▶ Distance vector가 변하는 경우:
- x --> {a, b, c}까지의 link cost가 변할 때 (change in local link cost)
- {a, b, c} --> y까지의 link cost 변할 때 (mssage from neighbor)
- 각각의 node는 자기 자신의 link cost가 변했는지, 이웃으로부터 link cost가 변했다는 연락이 오는지 기다린다.
- 만약 distance vector가 변했을 수 있는 둘 중의 하나의 상황이 되면, distance vector를 다시 계산한다.
- 계산한 결과 어떤 목적지로의 distance vector가 변하면, 이웃에게 알린다.
--> 계속 계산하다가, distance vector가 더 이상 변하지 않으면, settle된다.
Distance vector(DV) 알고리즘: example
- Direct 이웃에 대한 distance만을 알고 있다.
- 이웃으로부터 distance vector를 듣고, 그에 맞춰 자신의 distance vector도 업데이트한다. 업데이트된 distance vector를 이웃에게 알린다.
- 이웃으로부터 변화된 distance vector를 듣고, 자신의 distance vector를 다시 업데이트하고, 만약 변했다면 그 새로운 distance vector를 이웃에게 알린다.
--> 나의 distance vector가 더이상 변하지 않을 때까지 반복한다.
Distance vector(DV): link cost changes
▷ "Good news travels fast": 인접한 link cost가 줄어들면 distance vector가 변하고, 이러한 변화는 이웃에게 빠르게 전달된다.
- 원래 경로보다 더 좋은 경로가 나타났다! Distance vector를 업데이트한다!
▷ "Bad news travels slowly"
- Count to infinity: 기존 경로가 나빠졌을 때는 바꿔야 할 경로를 알아차리는 데에 시간이 오래걸린다.
--> Count to infinity 문제 해결책:
- Split horizon: A --> B --> C인 상황에서는, A가 C까지의 경로를 B에게는 알리지 않는다. (혼란을 막음)
- Split horizon with poisoned reverse: A --> B --> C인 상황에서, A가 C까지의 경로를 B에게 알리기는 하지만, '무한대'라고 알린다.
--> But, it does not work for routing loops involving 3 or more nodes...
LS(Link-state routing algorithm) vs. DV(Distance vector algorithm)

▶ Router가 cost 정보를 알려주는 대상, 알려주는 cost 정보:
- LS: 세상의 모든 router에게, 자신과 붙어있는 router와의 direct link cost를 broadcast한다. (Dijkstra's algorithm)
- DV: 자신과 인접한 router에게만, 세상 모든 목적지에 대해 내가 알고 있는 경로 길이를 알려준다. (Bellman-Ford algorithm)
▶ Message complexity:
- LS: O(n*E) --> More, smaller messages (더 많은 router들에게, 작은 메시지를 보낸다.)
- DV: O(n-1) --> Fewer, larger messages (자신과 인접한 router들에게만, 큰 메시지를 보낸다.)
▶ Speed of convergence:
- LS: O(n^2)
- DV: count-to-infinity problem때문에, convergence time이 경우에 따라 다르다.
▶ Robustness: What happens if router malfunctions or is compromised?
- LS: 좁은 부분에 대해서는 망가지지만, 다른 부분은 괜찮다.
- DV: Error propagates through network! (네트워크 전체에 문제가 퍼져나간다!)
'네트워크' 카테고리의 다른 글
[네트워크] 5.4 인터넷 서비스 제공업자(ISP) 간의 라우팅: BGP (1) | 2023.12.10 |
---|---|
[네트워크] 5.3 인터넷에서의 AS 내부 라우팅: RIP, OSPF (0) | 2023.12.10 |
[네트워크] 5.1 개요 (0) | 2023.12.10 |
[네트워크] 4.5 미들박스 (1) | 2023.11.26 |
[네트워크] 4.4 일반화된 포워딩 및 소프트웨어 기반 네트워크(SDN) (0) | 2023.11.26 |