[ 라우팅과 포워딩 ]
traditional → per-router 가 라우팅 테이블을 만들었지만
SDN(software defined network) → 중앙 집중형으로 라우팅 테이블을 만든다.
[ Per-router Control Plane ]
그림 5.1은 라우팅 알고리즘들이 모든 라우터 각각에서 동작하는 경우이다.
[ Logically Centralized Control Plane
]
distnct controller interact with local control agent(CA)
즉, remote controller가 모든 router의 정보를 수집(OpenFlow)하고 해당 정보를 바탕으로 포워딩 테이블을 만든다.
이후, 만들어진 포워딩 테이블을 각 라우터에 전달(OpenFlow)하면 각 라우터는 해당 포워딩 테이블을 기반으로 포워딩을 한다.
[ Per-router Control Plane vs Logically Centralized Control Plane ]
Logically Centralized Control Plane 에서
controller
는 protocol(OpenFlow protocol)을 통해 각 라우터의 CA와 상호작용하여 라우터의 플로우 테이블을 구성 및 관리한다.
이때 각 라우터
는 controller와 통신(OpenFlow protocol)하고 controller의 명령을 수행하는 기능만 가진다.
또한 per-router control plane과 달리 CA
끼리 상호작용 하지 않으며 포워딩 테이블을 계산하는 데에 관여하지 않는다.
라우팅 알고리즘의 목표? source ~ destination까지 좋은 경로를 결정하는 것!
일반적으로 좋은 경로는 최소 비용 경로를 뜻함
이러한 경로를 계산하기 위해서 라우팅 알고리즘
이 존재함
[ Routing Algorithm Classification ]
중앙 집중형 라우팅 알고리즘(Global) | 분산 라우팅 알고리즘(Decentralized) |
---|---|
all routers have complete topology and all link cost information | 어떤 노드도 모든 링크의 비용에 대한 완전한 정보를 가지고 있지 않다. |
대신 각 노드는 자신에 직접 연결된 링크에 대한 비용 정보만 가지고 있다.
이후 이웃 노드와 정보 교환을 통해 노드는 목적지까지의 최소 비용 경로를 계산한다. |
| link state algorithm
⇒ 전체 상태 정보를 가지는 알고리즘 | distance vector algorithm |
| OSPF(AS 내 라우터끼리 통신) | RIP
BGP(다른 AS에서 BG router끼리 통신) |
static
routing algorithm routes are changed by administratordynamic
routing algorithm routes are changed quickly[ Link- State Routing Algorithm ]
네트워크 topology와 모든 링크 비용이 알려져 있기 때문에 다익스트라 알고리즘
을 이용해 최적의 경로를 알아낸다.
이를 통해 한 source에서 다른 모든 노드까지의 최적 경로를 계산해 routing table에 저장한다.
아래는 다익스트라 알고리즘이다.
[ Oscillation Problem ]
추후 추가
[ Distance Vector 라우팅 알고리즘 ]
Link-State 알고리즘이 네트워크 전체 정보를 이용하는 알고리즘인 반면
Distance Vector 알고리즘은 직접 연결된 라우터로부터 정보를 받고, 계산을 수행하며 계산된 결과(라우팅 테이블)를 다시 이웃들에게 배포하는 형식이다.
if link cost changes:
[Good News Travels Fasts ]
거리 벡터 알고리즘을 수행하는 노드가 자신과 이웃 사이 링크의 비용이 변경된 것을 감지하면
자신의 거리벡터를 갱신하고, 이웃에게 새로운 거리 벡터를 보낸다.
그림에서는 y에서 x로의 링크 비용이 4 에서 1로 변화한 상황이다.
t0 : y가 링크 비용이 변화( 4→ 1)함을 감지하고, 자신의 거리 벡터를 업데이트 한 후 이 변경값을 이웃들에게 알린다.
t1 : z는 y로부터 업데이트 정보를 받고 자신의 테이블을 갱신한다.
즉, z는 x까지의 거리 비용을 갱신( 5→2)하고 이웃에게 자신의 새로운 거리 벡터를 전송한다.
t2: y는 z로부터 업데이트 정보를 받고 자신의 테이블을 갱신한다.
하지만 y의 최소비용은 변화가 없으므로 y는 z에게 아무런 메시지를 보내지 않는다.
이로써 알고리즘은 종료된다.
(z가 x까지의 거리 비용이 2로 갱신이 되었지만, y → z → x == 1 + 2이므로 최소 비용이 갱신되지는 않는다.)
이렇게 비용이 감소한다는 소식은 네트워크 전역에 신속히 퍼져 나간다.
그럼 링크 비용이 증가할 때는 어떤일이 발생할까?
그림에서는 y에서 x로의 링크 비용이 4 에서 60으로 변화한 상황이다.
t0: y가 링크 비용 변화를 감지하였다.(링크 비용이 4 → 60으로 변함)
하지만, 최근에 z가 자신이 x까지 5의 비용으로 보낼 수 있다고 말했던 것을 기억하고
x까지의 최소 비용 경로를 갱신한다.( 1 + 5 → z로 보내는 데 비용 + z →x로 보내는 비용)
그리고 이 변경값을 이웃들에게 알린다.
t1: z는 y로부터 업데이트 정보를 받고, x까지의 최소 비용 경로를 갱신한다.( 1 + 6)
또한 이 변경값을 이웃들에게 알린다.
t2 : y는 x로부터 업데이트 정보를 받고, 마찬가지로 x까지의 최소 비용 경로를 업데이트 한다.( 1 + 7)
바로 z가 y를 거쳐서 x로 보내는 비용 값이 50을 넘어갈 때까지 이러한 프로세스가 지속된다.
이후 z는 x와의 직접 연결을 x로의 최소 비용 경로로 설정한다.(50)
이러한 업데이트를 전달받은 y는 z를 거쳐서 x로 전달하는 경로를 설정한다.
이렇게 링크 비용 증가라는 나쁜 소식은 정말 천천히 알려진다.
이런 문제를 무한 계수 문제라고 한다.
(count-to-inifinity problem)
[ 포이즌 리버스 Poisoned reverse ]
count-to-inifinity problem
은 포이즌 리버스
를 통해서 회피할 수 있다.
z노드에서 y를 통해 x로 가는게 최적 경로라면, z노드가 y노드에게 자신은 x노드로 가는 비용이 무한대
로 전하는 방식이다.(Poisoned Reverse)
⇒ 그러면 y는 z에서 x로 가는 경로가 없다고 믿으므로, y는 z를 통해서 x로 가는 경로를 고려하지 않는다.
이렇게 하면 count-to-inifinity problem이 발생하더라도 2번의 iteration이면 최적 경로를 제대로 갱신할 수 있다.
방금과 같이 링크(x,y)의 비용이 4에서 60으로 증가한 상황을 다시 보자
포이즌 리버스
를 이용하면
t0: y는 이전에 z가 x를 거쳐서 가는 길이 없다고 했으므로(무한대를 보냈음)
따라서 x까지의 최소 비용 경로를 60으로 갱신하고 이 변경을 이웃 노드에게 전송한다.
t1: z는 x로의 경로를 x로의 직접 연결인 50으로 변경한다.
그리고 더 이상 y를 거치지 않으므로 이러한 변경사항을 이웃 노드에게 전송한다.
t2: z에게서 업데이트 메시지를 받은 뒤에 y는 최소 비용 경로를 51(1 +50)으로 갱신한다.
t3: 이제 y는 z를 거쳐서 x로 가므로 y에서 x까지로 가는 비용을 무한대로 바꾼다.
(포이즌 리버스)
하지만, 포이즌 리버스도 모든 무한 계수 문제를 해결할 수는 없다.
세 개 이상의 노드를 포함한 루프는 포이즌 리버스로는 감지할 수 없다.
[ Link - State Routing Algorithm vs Distance Vector Routing Algorithm]
LS 알고리즘
다익스트라 알고리즘을 수행하기 전에 각 노드가 네트워크에 대한 전체 topology를 알아야 하지만
DV 알고리즘
전체 정보를 사용하지 않고 하나의 노드가 가지는 정보는 단지 자신에게 직접적으로 연결된 이웃 router의 링크 비용과 그 이웃들로부터 수신하는 정보(라우팅 테이블) 뿐이다.
Link - State Routing Algorithm | Distance Vector Routing Algorithm |
---|---|
링크 비용이 변할 때마다 새로운 링크 비용이 모든 노드에게 전달된다. | 링크 비용이 변하고, 이 새로운 링크 비용이 이 링크에 연결된 어떤 노드의 최소 경로에 변화를 준 경우에만 DV 알고리즘은 수정된 링크 비용을 전파한다. |
Router know the entire nbetwork topology | Router don’t know the entire nbetwork topology |
| Fast Convergence
(수렴 속도가 빠르다.) | Slow Convergence
(수렴 속도가 느리다.) |
| No routing loops | Count - to - infinity problem |
| OSPF(Open Shortest Path First) | RIP(Routing Information Protocol) |
if all routers are identical ⇒ can’t store all destination in routing tables
and each network admin wanto to control routin in its own network
AS(Autonomous Systems)
같은 AS안에 있는 라우터들은 동일한 라우팅 알고리즘을 사용하고 상대방에 대한 정보를 가지고 있다.
이런 AS 내부에서 동작하는 라우팅 알고리즘을 AS 내부 라우팅 프로토콜 이라고 한다.
[ Intra -AS routing vs Inter-AS routing]
Intra -AS routing
Inter-AS routing
포워딩 테이블은 intra-and inter-AS routing algorithm 으로 구성된다.
OSPF는 AS 내부 라우팅 프로토콜이다.
OSPF는 다익스트라 알고리즘을 이용해서 최단 경로를 찾는다.
OSPF는 같은 area의 라우터들에게만 링크 상태를 알린다.
또한 각 area의 border router가 외부 router로의 패킷 라우팅을 책임진다.
border router
Backbone router
what is benefit hierachical OSPF in large domains?
[ OSPF 와 BGP의 차이점 ]
OSPF : AS 내부 라우팅 프로토콜
따라서 동일한 AS내에 있는 출발지와 목적지 사이에서 패킷을 라우팅 할 때 사용
그러나 여러 AS를 통과하도록 라우팅 할 때는 BGP(Border Gateway Protocol)이 필요하다.
[ eBGP, iBGP ]
AS의 가장자리에 위치한 BG(Border Gateway)들 간의 프로토콜을 BGP라고 한다.
[ BGP 의 역할 → 정보를 소문내라!!]
주변의 여러 라우터들에게 어떤 라우터가 어느 AS에 속해있는지에 대한 정보를 소문내는 것
예시) x에 대한 도달 가능 정보를 AS1과 AS2의 모든 라우터에게 알리는 경우
이로써 AS1, AS2의 각 라우터들은 x의 존재와 x로 향하는 AS 경로를 알게 된다.
[ BGP route selection ]
[ Hot Potato Routing ]
Gateway router may learn about multiple paths to destinations
→ 라우터 1c는 2개의 path가 있다는 것을 안다.
Hot Potato Routing에서는 Next-Hop이 짧은 Link를 선택한다.
즉, 여기까지 내용을 정리하면
전체 경로 중에서 자기 AS 외부에서 얼마의 비용이 드는지는 신경쓰지 않고 오로지 자신의 AS 내부의 비용만 줄이려는 이기적인 알고리즘이다.
따라서 한 AS 내 2개의 라우터가 동일한 목적지 주소에 대해 서로 다른 AS경로를 선택할 수도 있다.
ex) 라우터 1b는 본인에게서 가장 적은 비용이 드는 1c BG를 통해서 데이터를 내보낸다.
라우터 1d는 본인에게서 가장 적은 비용이 드는 1d BG를 통해서 데이터를 내보낸다.
[ 경로 선택 알고리즘 ]
지역 선호도( 즉 policy)가 경로에 할당된다.
이러한 지역 선호도는 네트워크 관리자에 의해 정책적인 결정이다.
가장 높은 지역 선호도 값을 가
지역 선호도
(==policy)가 경로에 할당된다.
이때 지역 선호도 값은 AS 네트워크 고나리자에 의한 정책적인 결정이다,.
가장 높은 지역 선호도를 가진 경로가 여러 개 있다면 이들 중에서 최단AS-PATH
를 가진 경로가 선택된다.
이때, BGP는 최단 경로 결정을 위해 DV 알고리즘을 사용한다.
같은 지역 선호도 값과 같은 AS-PATH 길이를 가진 남은 경로들에 대해 Hot Potato Routing
을 수행한다. 즉, NEXT-HOP
라우터 까지의 거리가 가장 가까운 경로가 선택된다.
[ IP anycast ]
개별적인 router에 routing algorithm이 존재
router간에 데이터 교환을 하면서 각각 router가 전체 topology를 알아냄
distance vector 알고리즘을 이용해 최소 비용 cost를 알아냄
즉 router안에 router algorithm 이 존재해서 admin이 변형시키는 것이 불가능
[ A distinct controller ]
interacts with local control agents(CA) to compute forwarding tables
SDN controller
와 네트워크 제어 응용
으로 구분된다.[Data plane switching]
[ data plane ]
[ forwarding ]
[ SDN Controller]
data plane에 있는 CA들의 정보를 모아 플로우 테이블을 만든다.
via southbound API
[ network control applications]
router 관리자가 결정할 수 있도록 쉽게 조작할 수 있는 API제공
OpenFlow는 SDN controller와 SDN으로 제어되는 스위치 사이에서 동작한다.
[ Controller - to - switch ]
[ Switch-to-Controller]
controller는 해당 정보를 받아서 flow table을 재구성한다.
위 그림의 예에서 스위치 s1, s2 사이의 링크가 단절되었다.
ICMP(Internet Control Message Protocol)
ICMP는 TCP/IP 에서 IP 패킷을 처리할 때 발생되는 문제를 알려주는 프로토콜이다.
IP에는 패킷을 목적지에 도달시키기 위한 내용들로만 구성되어 있다.
따라서 중간에 패킷을 잃어버려도 source입장에서는 해당 내용을 모른다.
이러한 문제점을 해결하고자 host & router to communicate network-level-information(==error reporting)을 위해 만들어졌다.
ICMP는 에러 상황이 발생할 경우 IP헤더에 기록되어 있는 source host로 에러에 대한 정보를 보내준다.
이러한 에러 정보를 받게 된 source에서는 destiniation 에 대한 상태를 알고, 이후에 다른 형식으로 데이터를 보낼 수 있다.
ICMP message : type, code → IP datagram causing error
ICMPv6 : new version of ICMP