❗ 제어 평면(control-plane)이란 네트워크 전체를 아우르는 구성요소로서, 데이터그램이 송신 호스트에서 목직지 호스트까지 경로상의 라우터들 간에 어떻게 전달되어야 하는지뿐만 아니라 네트워크 계층 구성요소들과 서비스들을 어떻게 설정하고 관리할지도 제어합니다.
앞서 우리는 라우터의 플로우 테이블의 갱신이 어떻게 이루어 지는지 2가지의 형태로 알아보았습니다.
컨트롤러는 잘 정의된 프로토콜을 통해 각 라우터의 제어 에이전트(CA)와 상호작용하여 라우터의 플로우 테이블을 구성 및 관리합니다.
CA의 경우 서로 직접 상호 작용하지 않으며 포워딩 테이블을 계산하는 데에도 적극적인 참여를 하지 않습니다. 단지, 컨트롤러와 통신하고 컨트롤러의 명령을 수행하는 최소한의 기능만 수행합니다.
❗ 라우팅 알고리즘의 목적은 "좋은" 경로를 찾아내는 것이고 "좋은" 경로란 최소 비용 경로를 말합니다.
라우팅 알고리즘은 세가지 분류 방식으로 나눠집니다.
먼저, 첫번째 방법은 알고리즘이 중앙 집중형인지 분산형인지 입니다.
전체 상태 정보를 가지는 알고리즘을 링크 상태(link-state,LS) 알고리즘이라고 합니다.
이러한 분산 라우팅 알고리즘을 거리 벡터(distance-vector, DV)라고 부릅니다.
두번째 방법은 정적 알고리즘과 동적 알고리즘으로 분류하는 방법입니다.
세번째 방법은 부하에 민감한지, 아닌지에 따릅니다.
링크 상태 알고리즘에서는 네트워크 토폴로지와 모든 링크 비용이 알려져 있어서 링크 상태 알고리즘의 입력값으로 사용될 수 있다는 특징이 있습니다.
각 노드가 연결된 노드로 링크 상태 패킷을 네트워크상의 모든 다른 노드로 브로드 캐스팅 하게 함으로써 가능하게 만들어 줍니다.
링크 상태 브로드캐스트 알고리즘에 의해 수행됩니다.
이 알고리즘은 다익스트라 알고리즘(Dijkstra's algorithm)이라고 부릅니다.
다익스트라 알고리즘의 경우 동작 방식이나 구현 방법에 대해서는 아래에 정리해둔 것이 있으니 참고해주시기 바랍니다.
링크 상태 알고리즘을 사용할 때 발생할 수 있는 문제점에 대해서 생각해 봅시다.
해당 그림은 단순한 네트워크 토폴로지로서 링크 비용은 링크상에 전송 중인 부하와 같고, 이는 패킷이 겪을 수 있는 지연시간을 반영합니다. 이 예에서 링크 비용은 대칭적이지 않습니다.
(a)에서 보이는 것은 초기 트래픽 과정을 보여줍니다. 현재, x
, z
는 1단위의 트래픽을 생성하고, y
는 e단위의 트래픽을 생성합니다.
링크 상태 알고리즘이 다시 수행되면, 노드 y
는 w
로 가는 시계 방향의 경로 비용이 1
이지만, 반시계 방향으로의 경로비용은 1 + e
임을 알게 됩니다. 따라서, w
로 가는 y
의 최소비용 경로는 시계방향입니다.
마찬가지로 x
도 w
로 가는 시계방향 경로를 새로운 최소 비용 경로로 결정합니다. 링크 상태 알고리즘이 다시 한번 수행되면 노드 x
, y
, z
모두 w
로 가는 반시계 방향의 경로 비용이 0
임을 알게 되어 모든 트래픽을 반시계방향 경로로 보냅니다. 또 다음 링크 상태 알고리즘 수행 시에는 모두 시계방향으로 트래픽을 전송합니다.
위 상황을 보면 매번 더 나은 상황을 위해 움직이다보니, 트래픽 상황 비용을 갱신할 때마다 시계방향과 반시계방향의 경로를 계속하여 진동하듯이 방황하게 됩니다.
사실 이 부분에 대해서 설명을 써놨지만 본인은 이해가 잘 안되서 고생을 했습니다.. 일단 모든 계산이 각 라우터에서 일어난다는 것을 명시하고 가야합니다. 각 라우터가 자신의 라우팅 테이블을 기반으로 다른 라우터와의 최적 경로를 하기 때문에 라우터들의 계산이 동시에 이루어지지 않는다면 문제가 발생하는 것입니다. 최적 경로를 계산한 결과가 다를 수 있기 때문입니다.
한가지 해결책은 링크 비용이 해당 링크가 전달하는 트래픽의 양에 의존하지 않도록 하는 방법이 있습니다.
하지만 라우팅의 한 가지 목적이 매우 혼잡한(즉, 높은 지연을 발생시키는) 링크를 회피하는 것이므로 받아들이기 어려운 해결책 입니다.
다른 해결책으로, 모든 라우터가 동시에 링크 상태 알고리즘을 실행 하지 못하도록 하면 됩니다.
하지만, 이 방식 또한 인터넷 라우터들이 스스로 자기들끼리 동기를 맞춘다는 사실을 알아버리게 됨으로써 문제가 발생했지만, 이러한 자기 동기화는 각 노드가 링크 상태 정보를 송신하는 시각을 랜덤하게 결정함으로써 회피할 수 있습니다.
링크 상태 알고리즘이 네트워크 전체 정보를 이용하는 알고리즘인 반면에, 거리 벡터(distance-vector, DV) 알고리즘은 반복적이고, 비동기적이고, 분산적입니다.
각 노드는 하나나 그 이상의 직접 연결된 이웃으로부터 정보를 받고, 계산을 수행하며, 계산된 결과를 다시 그 이웃들에게 배포한다는 점에서 분산적(distributed)입니다.
이웃끼리 더 이상 정보를 교환하지 않을 때까지 프로세스가 지속된다는 점에서 반복적(iterative)입니다.
또, 톱니바퀴 돌듯이 모든 노드가 서로 정확히 맞물려 동작할 필요가 없다는 점에서 비동기적(asynchronous)이라고 할 수 있습니다.
DV 알고리즘에서 최소 비용은 벨만 포드(Bellman-Ford)를 사용해서 구할 수 있습니다.
벨만 포드 알고리즘에 관련해서 아래 링크를 달아둔 페이지를 참고해주시길 바랍니다.
먼저 해당 그림에 대해서 정리하도록 하겠습니다. 먼저, 링크 비용이 4에서 1로 감소하는 경우에 대해서 정리해 보도록 하겠습니다.
거리 벡터 알고리즘은 정지 상태가 될 때까지 두 번만 반복하면 됩니다.
다음은 링크 비용이 증가할 때 어떤 일이 생기는지 알아봅시다.
물론, 우리는 네트워크 전체를 보기 때문에 이 새로운 비용이 잘못되었다는 것을 알 수 있습니다. 그러나 노드 y가 가지고 있는 유일한 정보는 x까지 직접 가는 경로 비용이 60이고, z가 가장 최근에 y에게 x에 도착하려면 5의 비용이 필요하다고 말했다는 사실뿐입니다.
따라서 y는 z가 비용 5로 x에 도달할 수 있으리라 예상(가장 큰 문제점)하고 z를 통해 x에 도달하는 경로를 정합니다. 따라서 시각 에, x로 가기 위해 y는 z로 경로를 설정 하고, z는 y로 경로 설정을 하는 라우팅 루프가 발생합니다.
노드 y는 x까지의 새로운 최소 비용을 계산했으므로 시각에 z에게 새로운 거리 벡터를 알립니다.
시각의 얼마 이후 z는 y의 새로운 거리 벡터를 받고, y에서 x로의 최소 비용이 6이라는 것을 알게 됩니다. z는 y에 도달하기 위해 비용이 1필요하다는 것을 알고있으므로 새로운 최소 비용 7을 계산할 것입니다. 이러한 과정이 계속해서 반복됩니다.
이 루프의 경우 44번 반복을 한 후, z는 마침내 x와의 직접 연결을 x로의 최소 비용 경로로 결정합니다.
이러한 문제를 우리는 무한 계수 문제(count-to-infinity problem)이라고 합니다.
방금 설명한 특정한 루핑 시나리오는 포이즌 리버스(poisoned reverse)라는 방법을 사용해 회피할 수 있습니다.
먼저 사전 작업은 다음과 같습니다.
만약 z가 y를 통해서 목적지 x로 가는 경로 설정을 했다면, z는 y에게 x까지의 거리가 무한대라고 알립니다.
즉, z는 y에게 라고(비록 실제로는 z가 임을 알더라도) 말합니다.
z는 y를 통과해 x로 가는 동안은 이러한 선의의 거짓말을 계속합니다. y는 z에게 x로 가는 경로가 없다고 믿으므로, z가 계속해서 (그에 대한 거짓말을 하면서) y를 통해 x로 가는 경로를 사용하는 동안은 y는 z를 통해 x로 가는 경로를 시도하지 않을 것입니다.
이제 이 방식이 어떻게 문제를 해결해주는지 정리하겠습니다.
이 방식도 세 개 이상의 노드를 포함한 루프는 포이즌 리버스로 감지하지 못한다고 합니다.
현재까지 라우팅 알고리즘에 대해서 살펴보았는데, 모든 라우터가 동일한 라우팅 알고리즘을 수행합니다.
실제로 이 네트워크 모델은 동일한 라우팅 알고리즘을 수행하는 동종의 라우터 집합으로 간주하는 관점은 다음의 두 가지 이유 때문에 단순하다고 할 수 있습니다.
이 두가지 문제는 라우터들을 자율 시스템(autonomous system, AS)으로 조직화하여 해결할 수 있습니다.
한 ISP의 라우터와 그들을 연결하는 링크가 종종 하나의 AS를 이룹니다.
어떤 ISP들은 그들의 네트워크를 여러 개의 AS로 나누기도 합니다.
같은 AS 안에 있는 라우터들은 동일한 라우팅 알고리즘을 사용하고 상대방에 대한 정보를 가지고 있습니다.
자율 시스템 내부에서 동작하는 라우팅 알고리즘을 AS 내부 라우팅 프로토콜(intra-autonomous system routing protocol)이라고 합니다.
기본적으로 OSPF는 AS 내부 라우팅 프로토콜입니다.
OSPF는 링크 상태 정보를 플러딩(flooding)하고, 다익스트라 최소 비용 경로 알고리즘을 사용하는 링크 상태 알고리즘입니다.
OSPF를 이용하여 각 라우터는 전체 AS에 대한 완벽한 토폴로지 지도(그래프)를 얻고, 최단 경로 트리를 결정하기 위해 혼자 다익스트라의 최단 경로 알고리즘을 수행합니다.
개별 링크들의 비용은 네트워크 관리자가 구성합니다. 관리자는 모든 링크 비용을 1로 설정함으로써 최소 홉 라우팅이 이루어지게 하거나, 적은 대역폭을 가진 링크 사용을 억제하기 위해 링크 용량에 반비례하게 링크 가중치를 설정할 수 있습니다.
OSPF를 사용하는 라우터는 인접한 라우터만이 아니라 자율 시스템 내의 다른 모든 라우터에게 라우팅 정보를 정보 변경시 혹은 정기적으로 브로드캐스트 합니다.
OSPF에 구현된 몇 가지 개선 사항들은 다음과 같습니다.
원래 라우터 간의 OSPF 패킷은 인증을 하지 않으므로 위조될 수 있습니다.
BGP(Border Gateway Protocol)는 자율 시스템 간 라우팅 프로토콜(inter-autonomous system routing protocol)으로 AS 간 라우팅 프로토콜을 의미합니다.
BGP는 인터넷에 있는 수천 개의 ISP들을 연결하는 프로토콜이므로, 인터넷 프로토콜 중에 가장 중요하다고 말할 수 있스빈다.
BGP는 거리 벡터 라우팅과 같은 줄기에서 나왔다고 볼 수 있는 분산형 비동기식 프로토콜입니다.
BGP에서는 패킷이 특정한 목적지 주소를 향해서가 아니라 CIDR(Classless Inter Domain Routing) 형식으로 표현된, 주소의 앞쪽 접두부(prefix)를 향해 포워딩합니다.
따라서 라우터의 포워딩 테이블은 같은 형식의 엔트리들을 갖게 되는데, 여기서 는 주소 접두부이고, 는 라우터 인터페이스의 인터페이스 번호입니다.
AS 간 라우팅 프로토콜로서 BGP는 각 라우터에게 다음과 같은 수단을 제공합니다.
먼저, BGP가 경로 정보를 어떻게 알리는지 정리해 보도록 하겠습니다.
여기서 경계에 있는 라우터가 게이트웨이 라우터이고, 나머지 라우터들을 내부 라우터라고 합니다.
접두부 x에 대한 정보들을 AS1과 AS2에게 알리기 위해서 메시지를 전달하는데 이때 "AS3 x"라고 표기한다고 생각해봅시다. 이 메시지를 AS2에게 전달하고 AS2는 AS1에게 전달할 때 "AS2 AS3 x"의 형태로 전달할 수 있을 것입니다.
BGP에서 라우터의 쌍들은 반영구적인 TCP 연결을 통해 라우팅 정보를 교환합니다.
이 TCP 연결을 통해 모든 BGP 메시지가 전송되는데 이 연결을 BGP 연결(BGP connection)이라고 부릅니다. 나아가 두 개의 AS에 걸친 BGP 연결은 외부 BGP 연결(BGP connection)이라고 부르고, 같은 AS 내의 라우터 간 BGP 연결은 내부 BGP(internal BGP, iBGP) 연결 이라고 합니다.
다음은 최고의 경로 설정을 위해서 어떻나 동작을 하는지 알아봅시다.
일단 이 문제를 해결하기 위해서 몇가지 용어에 대해서 정리하겠습니다.
라우터가 BGP 연결을 통해 주소 접두부를 알릴 때 몇몇 BGP 속성(attributes)을 함께 포함합니다. BGP 용어로서의 경로(route)는 주소 접두부와 그 속성을 함께 말합니다.
중요한 속성 두 가지는 AS-PATH
와 NEXT-HOP
입니다.
AS-PATH
: 알림 메시지가 통과하는 AS들의 리스트를 담습니다. 이것은 루프를 감지하고 방지하는 역할도 수행합니다.NEXT-HOP
: AS-PATH
를 시작하는 라우터 인터페이스의 IP주소입니다. 예를 들어, AS1에서 AS2를 통과하여 x로 가는 "AS2 AS3 x"경로의 NEXT-HOP
속성은 라우터 2a의 왼쪽 인터페이스의 IP 주소입니다.이제 BGP 라우팅 알고리즘에 대해서 정리해 봅시다.
그림에서 네트워크 라우터 1b를 봐봅시다. 이 라우터는 주소가 x로 시작하는 서브넷으로 가는 두 개의 BGP 경로를 알고 있습니다.
뜨거운 감자 라우팅에서는 (가능한 모든 경로중에서) 경로 각각의 시작점인 NEXT-HOP
라우터까지의 경로 비용이 최소가 되는 경로가 선택됩니다.
이 예에서는 라우터 1b는 NEXT-HOP
라우터 2a와 3d 각각에 대해 최소 비용을 가진 AS 내부 경로를 찾기 위해 AS 내부 라우팅 정보를 조사한 후, 이들 최소 비용 경로 중에서도 가장 적은 비용을 가진 경로를 선택합니다.
여기서 링크의 수를 cost로 생각하면, 라우터 2a가 선택되는 것입니다.
뜨거운감자 라우팅 방법은 포워딩 테이블에 AS 외부의 목적지를 추가할 때 AS간 라우팅 프로토콜(BGP)과 AS 내부 라우팅 프로토콜(예를 들면 OSPF) 둘 다가 사용됩니다.
뜨거운감자 라우팅에 깔려있는 기본 아이디어는 자신의 AS 바깥에 있는 부분에 대한 비용은 신경쓰지 않고 최대한 신속하게(가능한 최소 비용) 패킷을 자신의 AS 밖으로 내보내는 것입니다.
실제로 BGP는 뜨거운감자 라우팅보다 더 복잡한 알고리즘을 사용하지만, 여전히 뜨거운감자 라우팅을 포함하고 있습니다. 경로가 두 개 이상 존재한다면, BGP는 하나의 경로가 남을 때까지 다음의 제거 규칙을 수행합니다.
AS-PATH
를 가진 경로가 선택BGP는 인터넷 AS 간 라우팅 외에도 종종 DNS에서 흔히 사용되는 IP 애니캐스트 서비스를 구현하는 데도 활용됩니다.
상황을 좀 유도해보자면, 같은 컨텐츠를 지리적으로 분산된 많은 다른 서버에 복제하고, 각 사용자를 가장 가까운 서버의 컨텐츠로 접근하게 하려고 하는 경우를 생각해 봅시다.
예를 들어 CDN은 비디오나 다른 자료들을 서로 다른 나라의 서버들에 복제해 둡니다.
이런 경우 어떤 사용자가 이 복제된 컨텐츠에 접근을 원할 때 사용자에게 복제된 컨텐츠를 가진 "가장 가까운" 서버를 알려주는 것이 바람직합니다. 그리고 해당 서버들은 동일한 IP를 공유하고 있습니다.
이러한 방식으로 사용자가 어디에 위치에 있든 상관없이 지리적으로 분산되어 있는 서버들이 공통적으로 사용하는 IP 주소를 사용자에게 돌려줍니다.
사실 이 방식에는 오점이 존재하는데, BGP 라우팅이 변경되면 하나의 TCP 연결에 속한 패킷들이 웹서버의 서로 다른 복제본으로 도착할 수 있기 때문에 문제가 발생할 수 있습니다.
앞서 라우팅 정책에 관련해서 언급해놨습니다.
경로 선택 알고리즘에서도 맨 먼저 지역 선호도 속성에 따라 경로가 선택되는데, 이 속성의 값이 각 AS의 정책에 의해 결정됩니다.
이 방식의 경우 사용자 액세스 ISP와 백본 제공자 네트워크사이에서 경로 정보 교환의 과정을 설명할 수 있게 해줍니다.
간단하게만 정리하자면 다음과 같습니다.
SDN 구조의 네 가지 특성은 다음과 같이 정리됩니다.
컨트롤러의 기능
- 정확한 상태 정보 유지
- 이 정보를 제어 평면에서 동작하고 있는 네트워크 제어 응용들에 제공
- 응용들이 하부 네트워크 장치들을 모니터하고 프로그램하고 제어까지 할 수 있도록 수단 제공
SDN이 네트워크 기능들의 획기적인 "분리"를 의미함을 알 수 있습니다.
컨트롤러의 기능에 대해서 자세히 살펴봅시다.
오픈플로우 프로토콜은 SDN 컨트롤러와 SDN으로 제어되는 스위치 또는 오픈플로우 API를 구현하는 다른 장치와의 사이에서 동작합니다.
컨트롤러에서 제어되는 스위치로 전달되는 중요한 메시지들은 다음과 같습니다.(컨트롤러 -> 스위치)
SDN으로 제어되는 스위치에서 컨트롤러로 전달되는 중요한 메시지들은 다음과 같습니다.(스위치 -> 컨트롤러)
먼저 다음 그림을 봐봅시다.
그림의 예에서 스위치 s1과 s2사이의 링크가 단절되었다고 가정해봅시다. 최단 경로 알고리즘이 사용되고 있으며 따라서 s1, s3, s4로 들어오고 나가는 플로우 포워딩 규칙은 변경이 되었으나 s2의 동작은 바뀌지 않았다고 생각합니다.
인터넷 제어 메시지 프로토콜(Internet Control Message Protocol, ICMP)은 호스트와 라우터가 서로 간에 네트워크 계층 정보를 주고 받기 위해 사용됩니다.
가장 전형적인 사용 형태는 오류 보고입니다.
ICMP 메시지도 IP 페이로드로 전송이 되고 수신자가 받으면 역다중화 작업도 이루어 집니다.
사실, ICMP 메시지는 출발지 억제 메시지 역할도 하는데, 이것는 혼잡제어르 수행하기 위한 것입니다. 하지만 TCP에서 혼잡제어 기능이 존재하기 때문에 이 기능은 잘 사용되지 않습니다.
실제로 라우터에서는 이 ICMP 메시지를 이용해서 송신자 측과 정보를 교환합니다.
송신자측에서 보낸 데이터그램의 TTL이 어느 한 라우터에서 만료가 되었을 때 해당 라우터에서는 ICMP 메시지를 보내서 사이에 존재하는 라우터의 수와 정체, 그리고 왕복 시간을 알게 해줍니다.
네트워크 관리는 무엇일까?
네트워크 관리는 다음과 같은 정의가 있습니다.
네트워크 관리는 적정한 비용으로 실시간, 운용성능, 서비스 품질 등의 요구사항을 만족시키기 위하여 네트워크 구성요소 자원들을 감시, 테스트, 폴링, 설정, 분석, 평가, 제어하는 하드웨어, 소프트웨어, 인간요소 들을 배치하고, 통합, 조정하는 것입니다.
네트워크 관리 핵심 요소에는 다음과 같은 것들이 있습니다.
SNMP(Simple Network Management Protocol)는 관리 서버와 그 관리 서버를 대표하여 실행되고 있는 에이전트 사이에서 네트워크 관리 제어 및 정보 메시지를 전달하기 위해 사용됩니다.
SNMP의 가장 흔한 형태는 요청-응답 모드(request-response mode)인데, 여기서 SNMP 관리 서버는 에이전트에게 요청을 송신하고 이를 받은 SNMP 에이전트는 이를 수행한 후 요청에 대한 응답을 보냅니다.
SNMP의 두 번째로 일반적인 사용은 에이전트가 요구받지 않았더라도 트랩 메시지(trap message)라는 이름의 메시지를 관리 서버에게 전송하는 것입니다. 이 메시지들은 관리 서버들에게 MIB 객체 값들을 변화시킨 예외 상황의 발생을 통지하기 위해 이용됩니다.
Reference