[Network] 네트워크 계층: 제어 평면

서정범·2023년 4월 23일
0

네트워크

목록 보기
17/26

제어 평면(control-plane)이란 네트워크 전체를 아우르는 구성요소로서, 데이터그램이 송신 호스트에서 목직지 호스트까지 경로상의 라우터들 간에 어떻게 전달되어야 하는지뿐만 아니라 네트워크 계층 구성요소들과 서비스들을 어떻게 설정하고 관리할지도 제어합니다.

앞서 우리는 라우터의 플로우 테이블의 갱신이 어떻게 이루어 지는지 2가지의 형태로 알아보았습니다.

  1. 라우터별 제어: 포워딩과 라우터 기능이 모두 개별 라우터에 포함되어 있습니다. 각 라우터는 다른 라우터의 구성요소와 통신하여 자신의 포워딩 테이블 값을 계산하는 라우팅 구성요소를 가지고 있습니다. 앞으로 공부할 OSPFBGP 프로토콜이 이 라우터별 제어 방식을 기반으로 합니다.
  2. 논리적으로 중앙 집중된 제어(SDN): 논리적으로 집중된 컨트롤러포워딩 테이블을 작성하고 이를 모든 개별 라우터가 사용할 수 있도록 배포하는 경우를 나타냅니다. 일반화된 일치와 행동(match-plus-action) 추상화를 통해 라우터는 기존에는 별도의 장치로 구현되었던 다양한 기능들(부하 분산, 방화벽 및 NAT)뿐만 아니라 전통적인 IP 포워딩을 수행할 수 있습니다.

컨트롤러는 잘 정의된 프로토콜을 통해 각 라우터의 제어 에이전트(CA)와 상호작용하여 라우터의 플로우 테이블을 구성 및 관리합니다.

CA의 경우 서로 직접 상호 작용하지 않으며 포워딩 테이블을 계산하는 데에도 적극적인 참여를 하지 않습니다. 단지, 컨트롤러와 통신하고 컨트롤러의 명령을 수행하는 최소한의 기능만 수행합니다.

라우팅 알고리즘

라우팅 알고리즘의 목적은 "좋은" 경로를 찾아내는 것이고 "좋은" 경로란 최소 비용 경로를 말합니다.

라우팅 알고리즘은 세가지 분류 방식으로 나눠집니다.

먼저, 첫번째 방법은 알고리즘이 중앙 집중형인지 분산형인지 입니다.

  • 중앙 집중형 라우팅 알고리즘: 네트워크 전체에 대한 완전한 정보를 가지고 출발지와 목적지 사이의 최소 비용 경로를 계산합니다. 계산 자체는 한 장소에서 수행하거나 모든 라우터 각각의 라우팅 모듈로 복사될 수 있습니다. 핵심적인 특성은 연결과 링크 비용에 대한 완전한 정보를 가진다는 점입니다.

    전체 상태 정보를 가지는 알고리즘을 링크 상태(link-state,LS) 알고리즘이라고 합니다.

  • 분산 라우팅 알고리즘: 최소 비용 경로의 계산이 라우터들에 의해 반복적이고 분산된 방식으로 수행됩니다. 각 노드는 자신에게 직접 연결된 링크에 대한 비용 정보만 가지고 시작하고, 이후 반복된 계산과 이웃 노드와의 정보 교환을 통해 노드는 점차적으로 목적지 또는 목적지 집합까지의 최소 비용 경로를 계산합니다.

    이러한 분산 라우팅 알고리즘을 거리 벡터(distance-vector, DV)라고 부릅니다.

두번째 방법은 정적 알고리즘동적 알고리즘으로 분류하는 방법입니다.

  • 정적 알고리즘(static routing algorithms): 경로는 아주 느리게 변하는데, 종종 사람이 개입한 결과로 그렇게 됩니다.
  • 동적 알고리즘(dynamic routing algorithms): 네트워크 트래픽 부화(load)나 토폴로지 변화에 따라 라우팅 경로를 바꿉니다. 동적 알고리즘은 네트워크 변화에 더 빠르게 대응할 수 있지만, 경로의 루프(loop)경로 진동(oscillation)과 같은 문제에 더 취약합니다.

세번째 방법은 부하에 민감한지, 아닌지에 따릅니다.

  • 부하에 민감한 알고리즘(load-sensitive algorithms): 링크 비용은 해당 링크의 현재 혼잡 수준을 나타내기 위해 동적으로 변합니다. 현재 혼잡한 링크에 높은 비용을 부과한다면, 라우팅 알고리즘은 혼잡한 링크를 우회하는 경로를 택하는 경향을 보일 것입니다.
  • 부하에 민감하지 않은 알고리즘(load-insensitive algorithms): 오늘날 라우팅 알고리즘(RIP, OSPF, BGP 등)은 링크 비용이 현재(또는 가장 최근)의 혼잡을 반영하지 않습니다.

링크 상태(LS) 라우팅 알고리즘

링크 상태 알고리즘에서는 네트워크 토폴로지와 모든 링크 비용이 알려져 있어서 링크 상태 알고리즘의 입력값으로 사용될 수 있다는 특징이 있습니다.

각 노드가 연결된 노드로 링크 상태 패킷을 네트워크상의 모든 다른 노드로 브로드 캐스팅 하게 함으로써 가능하게 만들어 줍니다.

링크 상태 브로드캐스트 알고리즘에 의해 수행됩니다.

이 알고리즘은 다익스트라 알고리즘(Dijkstra's algorithm)이라고 부릅니다.

다익스트라 알고리즘의 경우 동작 방식이나 구현 방법에 대해서는 아래에 정리해둔 것이 있으니 참고해주시기 바랍니다.

경로 진동(oscillation)

링크 상태 알고리즘을 사용할 때 발생할 수 있는 문제점에 대해서 생각해 봅시다.

해당 그림은 단순한 네트워크 토폴로지로서 링크 비용은 링크상에 전송 중인 부하와 같고, 이는 패킷이 겪을 수 있는 지연시간을 반영합니다. 이 예에서 링크 비용대칭적이지 않습니다.

(a)에서 보이는 것은 초기 트래픽 과정을 보여줍니다. 현재, x, z는 1단위의 트래픽을 생성하고, y는 e단위의 트래픽을 생성합니다.

링크 상태 알고리즘이 다시 수행되면, 노드 yw로 가는 시계 방향의 경로 비용이 1이지만, 반시계 방향으로의 경로비용은 1 + e임을 알게 됩니다. 따라서, w로 가는 y의 최소비용 경로는 시계방향입니다.

마찬가지로 xw로 가는 시계방향 경로를 새로운 최소 비용 경로로 결정합니다. 링크 상태 알고리즘이 다시 한번 수행되면 노드 x, y, z 모두 w로 가는 반시계 방향의 경로 비용이 0임을 알게 되어 모든 트래픽을 반시계방향 경로로 보냅니다. 또 다음 링크 상태 알고리즘 수행 시에는 모두 시계방향으로 트래픽을 전송합니다.

위 상황을 보면 매번 더 나은 상황을 위해 움직이다보니, 트래픽 상황 비용을 갱신할 때마다 시계방향과 반시계방향의 경로를 계속하여 진동하듯이 방황하게 됩니다.

사실 이 부분에 대해서 설명을 써놨지만 본인은 이해가 잘 안되서 고생을 했습니다.. 일단 모든 계산이 각 라우터에서 일어난다는 것을 명시하고 가야합니다. 각 라우터가 자신의 라우팅 테이블을 기반으로 다른 라우터와의 최적 경로를 하기 때문에 라우터들의 계산이 동시에 이루어지지 않는다면 문제가 발생하는 것입니다. 최적 경로를 계산한 결과가 다를 수 있기 때문입니다.

한가지 해결책은 링크 비용이 해당 링크가 전달하는 트래픽의 양에 의존하지 않도록 하는 방법이 있습니다.
하지만 라우팅의 한 가지 목적이 매우 혼잡한(즉, 높은 지연을 발생시키는) 링크를 회피하는 것이므로 받아들이기 어려운 해결책 입니다.

다른 해결책으로, 모든 라우터가 동시에 링크 상태 알고리즘을 실행 하지 못하도록 하면 됩니다.
하지만, 이 방식 또한 인터넷 라우터들이 스스로 자기들끼리 동기를 맞춘다는 사실을 알아버리게 됨으로써 문제가 발생했지만, 이러한 자기 동기화는 각 노드가 링크 상태 정보를 송신하는 시각랜덤하게 결정함으로써 회피할 수 있습니다.

거리 벡터(DV) 라우팅 알고리즘

링크 상태 알고리즘이 네트워크 전체 정보를 이용하는 알고리즘인 반면에, 거리 벡터(distance-vector, DV) 알고리즘반복적이고, 비동기적이고, 분산적입니다.

각 노드는 하나나 그 이상의 직접 연결된 이웃으로부터 정보를 받고, 계산을 수행하며, 계산된 결과를 다시 그 이웃들에게 배포한다는 점에서 분산적(distributed)입니다.

이웃끼리 더 이상 정보를 교환하지 않을 때까지 프로세스가 지속된다는 점에서 반복적(iterative)입니다.

또, 톱니바퀴 돌듯이 모든 노드가 서로 정확히 맞물려 동작할 필요가 없다는 점에서 비동기적(asynchronous)이라고 할 수 있습니다.

DV 알고리즘에서 최소 비용은 벨만 포드(Bellman-Ford)를 사용해서 구할 수 있습니다.

벨만 포드 알고리즘에 관련해서 아래 링크를 달아둔 페이지를 참고해주시길 바랍니다.

경로의 루프(loop)

먼저 해당 그림에 대해서 정리하도록 하겠습니다. 먼저, 링크 비용이 4에서 1로 감소하는 경우에 대해서 정리해 보도록 하겠습니다.

  • 시각 t0t_{0}에 y가 링크 비용의 변화(비용이 4에서 1로 변함)를 감지하고, 자신의 거리 벡터를 업데이트한 후 이 변경값을 이웃에게 알립니다.
  • 시각 t1t_{1}에 z는 y로부터 업데이트 정보를 받고 자신의 테이블을 갱신합니다. 다시 말해 z는 x까지의 새로운 최소 비용을 계산하고(5 -> 2), 이웃에게 자신의 새로운 거리 벡터를 전송합니다.
  • 시각 t2t_{2}에 y는 z로부터 업데이트 정보를 받고 자신의 테이블을 갱신합니다. y의 최소 비용은 변화가 없으므로 y는 z에게 아무런 메시지를 보내지 않습니다. 알고리즘은 정지 상태가 됩니다.

거리 벡터 알고리즘은 정지 상태가 될 때까지 두 번만 반복하면 됩니다.

다음은 링크 비용이 증가할 때 어떤 일이 생기는지 알아봅시다.

Dy(x)=minx(y,x)+Dx(x),c(y,z)+Dz(x)=min(60+0,1+5)=6D_{y}(x) = min_{x}(y,x) + D_{x}(x), c(y, z) + D_{z}(x) = min (60 + 0, 1 + 5) = 6

물론, 우리는 네트워크 전체를 보기 때문에 이 새로운 비용이 잘못되었다는 것을 알 수 있습니다. 그러나 노드 y가 가지고 있는 유일한 정보는 x까지 직접 가는 경로 비용이 60이고, z가 가장 최근에 y에게 x에 도착하려면 5의 비용이 필요하다고 말했다는 사실뿐입니다.

따라서 y는 z가 비용 5로 x에 도달할 수 있으리라 예상(가장 큰 문제점)하고 z를 통해 x에 도달하는 경로를 정합니다. 따라서 시각 t1t_{1}에, x로 가기 위해 y는 z로 경로를 설정 하고, z는 y로 경로 설정을 하는 라우팅 루프가 발생합니다.

노드 y는 x까지의 새로운 최소 비용을 계산했으므로 t1t_{1} 시각에 z에게 새로운 거리 벡터를 알립니다.

t1t_{1} 시각의 얼마 이후 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에게 Dz(x)=D_{z}(x) = ∞라고(비록 실제로는 z가 Dz(x)=5D_{z}(x) = 5임을 알더라도) 말합니다.

z는 y를 통과해 x로 가는 동안은 이러한 선의의 거짓말을 계속합니다. y는 z에게 x로 가는 경로가 없다고 믿으므로, z가 계속해서 (그에 대한 거짓말을 하면서) y를 통해 x로 가는 경로를 사용하는 동안은 y는 z를 통해 x로 가는 경로를 시도하지 않을 것입니다.

이제 이 방식이 어떻게 문제를 해결해주는지 정리하겠습니다.

  • t0t_{0}: 포이즌 리버스의 결과로 y의 거리테이블은 Dz(x)=D_{z}(x) = ∞라고 알리고 t0t_{0} 시각에 링크 (x, y)의 비용이 4에서 60으로 변하면, y는 테이블을 갱신하고 비록 60이라는 높은 비용에도 x로 직접 라우팅하며 z에게 x의 새로운 비용 $D_{y}(x) = 60을 알립니다.
  • t1:t_{1}: 업데이트 정보를 받은 뒤에 z는 즉시 x로의 경로를 비용 50인 직접 연결 (z, x)로 바꿉니다. 이 경로는 x로의 새로운 최소 비용이고 **더이상 y를 통과하지 않습니다.
  • t2t_{2}: z는 t2t_{2} 시각에 Dz(x)=50D_{z}(x) = 50을 y에게 알립니다. z에게서 업데이트 메시지를 받은 뒤에, y는 거리 테이블을 Dy(x)=51D_{y}(x) = 51로 갱신합니다.
  • t3t_{3}: z는 이제 y에게 x로의 최소 비용 경로상에 있으므로, y는 t3t_{3} 시각에 Dy(x)=D_{y}(x) = ∞라고 (비록 실제로는 y가 Dy(x)=51D_{y}(x) = 51임을 알더라도) z에게 알림으로써 z에게 x로의 역경로를 차단합니다.

이 방식도 세 개 이상의 노드를 포함한 루프는 포이즌 리버스로 감지하지 못한다고 합니다.

LS 알고리즘과 DV 알고리즘 비고

  • 메시지 복잡성:
    • 링크 상태 알고리즘: 각 노드는 네트워크 내 각 링크 비용을 알아야 합니다. 또한 링크 비용이 변할 때 마다 새로운 링크 비용이 모든 노드에게 전달되어야 합니다.
    • 거리 벡터 알고리즘: 매번 반복마다 직접 연결된 이웃끼리 메시지를 교환합니다.
  • 수렴 속도:
    • 링크 상태 알고리즘: O(NE)O(|N||E|)개의 메시지를 필요로 하는 O(N2)O(|N|^{2}) 알고리즘입니다.
    • 거리 벡터 알고리즘: 천천히 수렴하고 알고리즘이 수렴하는 동안 라우팅 루프가 발생할 수 있습니다. 또한 무한 계수 문제가 일어날 수 있습니다. 시간 복잡도는 O(NE)O(|N||E|)입니다.
  • 견고성:
    • 링크 상태 알고리즘: 라우터는 연결된 링크에 대해서 잘못된 정보를 브로드캐스트 할 수 있습니다. 그리고 노드는 전송된 링크 상태 브로드캐스트 부분을 변질시키거나 폐기할수 있습니다. 그러나 각 링크 상태 노드는 자신의 포워딩 테이블만 계산하고, 다른 노드들도 유사한 계산을 수행합니다. 이는 경로 계산이 어느 정도 분산되어 수행됨을 의미하고, 따라서 어느 정도 견고성을 제공합니다.
    • 거리 벡터 알고리즘: 노드는 잘못된 최소 비용 경로를 어떤 혹은 모든 목적지에 알릴 수 있습니다. 보다 일반적으로, 각 반복마다 한 노드의 거리 벡터 계산이 이웃에게 전달되고 다음 반복에서 이웃의 이웃에게 간접적으로 전달됩니다. 이런 측면에서 거리 벡터 알고리즘을 사용하는 네트워크에서 한 노드의 잘못된 계산은 전체로 확산할 수 있습니다.

인터넷에서의 AS 내부 라우팅: OSPF

현재까지 라우팅 알고리즘에 대해서 살펴보았는데, 모든 라우터가 동일한 라우팅 알고리즘을 수행합니다.

실제로 이 네트워크 모델은 동일한 라우팅 알고리즘을 수행하는 동종의 라우터 집합으로 간주하는 관점은 다음의 두 가지 이유 때문에 단순하다고 할 수 있습니다.

  • 확장: 라우터의 수가 증가함에 따라 라우팅 정보의 통신, 계산, 저장에 필요한 오버헤드가 걷잡을 수 없이 증가합니다. 따라서, 인터넷처럼 큰 네트워크에서 경로 계산의 복잡성을 감소시킬 방법이 분명 필요합니다.
  • 관리 자치: 인터넷은 ISP들의 네트워크이고 각 ISP들은 자신의 라우터들로 구성된 네트워크입니다. ISP는 일반적으로 자신의 네트워크를 원하는대로 운용하거나, 네트워크 내부 구성을 외부에 감추기를 원합니다. 이상적으로, 하나의 조직은 자신의 네트워크를 외부 네트워크에 연결하면서도 자신이 원하는 대로 네트워크를 운영하고 관리할 수 있어야 합니다.

이 두가지 문제는 라우터들을 자율 시스템(autonomous system, AS)으로 조직화하여 해결할 수 있습니다.

한 ISP의 라우터와 그들을 연결하는 링크가 종종 하나의 AS를 이룹니다.

어떤 ISP들은 그들의 네트워크를 여러 개의 AS로 나누기도 합니다.

같은 AS 안에 있는 라우터들은 동일한 라우팅 알고리즘을 사용하고 상대방에 대한 정보를 가지고 있습니다.

자율 시스템 내부에서 동작하는 라우팅 알고리즘을 AS 내부 라우팅 프로토콜(intra-autonomous system routing protocol)이라고 합니다.

개방형 최단 경로 우선(Open Shortest Path First, OSPF) 프로토콜

기본적으로 OSPFAS 내부 라우팅 프로토콜입니다.

OSPF는 링크 상태 정보를 플러딩(flooding)하고, 다익스트라 최소 비용 경로 알고리즘을 사용하는 링크 상태 알고리즘입니다.

OSPF를 이용하여 각 라우터는 전체 AS에 대한 완벽한 토폴로지 지도(그래프)를 얻고, 최단 경로 트리를 결정하기 위해 혼자 다익스트라의 최단 경로 알고리즘을 수행합니다.

개별 링크들의 비용은 네트워크 관리자가 구성합니다. 관리자는 모든 링크 비용을 1로 설정함으로써 최소 홉 라우팅이 이루어지게 하거나, 적은 대역폭을 가진 링크 사용을 억제하기 위해 링크 용량에 반비례하게 링크 가중치를 설정할 수 있습니다.

OSPF를 사용하는 라우터는 인접한 라우터만이 아니라 자율 시스템 내의 다른 모든 라우터에게 라우팅 정보를 정보 변경시 혹은 정기적으로 브로드캐스트 합니다.

OSPF에 구현된 몇 가지 개선 사항들은 다음과 같습니다.

  • 보안: OSPF 라우터들 간의 정보 교환이 인증될 수 있습니다. 인증을 통해 신뢰할 수 있는 라우터들만이 AS 내부의 OSPF 프로토콜에 참여할 수 있고, 악의적인 침입자가 잘못된 정보를 라우터 테이블에 삽입하는 것을 막게 해줍니다.

    원래 라우터 간의 OSPF 패킷은 인증을 하지 않으므로 위조될 수 있습니다.

  • 복수 동일 비용 경로: 하나의 목적지에 대해 동일한 비용을 가진 여러 개의 경로가 존재할 때 OSPF는 여러 개의 경로를 사용할 수 있습니다.
  • 유니캐스트와 멀티캐스트 라우팅 통합 지원: 멀티캐스트 OSPF(MOSPF)는 멀티캐스트 라우팅 기능을 제공하기 위해 OSPF를 단순 확장하였습니다.
  • 단일 AS 내에서의 계층 지원: OSPF의 자율 시스템(AS)은 계층적인 영역(area)으로 구성될 수 있습니다. 각 영역은 알고리즘을 수행하고, 한 영역 내의 라우터는 영역 내의 라우터들에게만 브로드캐스팅을 합니다. 각 영역 내에서 하나 혹은 그 이상의 영역 경계 라우터(area border rotuer)가 영역 외부로의 패킷 라우팅을 책임집니다. 그리고 AS에서 오직 하나의 영역만이 백본(backbone) 영역으로 설정됩니다. 백본은 항상 AS 내 모든 영역 경계 라우터를 포함하고, 일부 비경계 라우터(non-border router)또한 포함할 수 잇습니다. 영역내 라우팅이 이루어지고, 백본을 통과하여 목적지 영역의 경계 라우터로 라우팅한 후 최종목적지로 라우팅 됩니다.

인터넷 서비스 제공업자(ISP) 간의 라우팅: BGP

BGP(Border Gateway Protocol)자율 시스템 간 라우팅 프로토콜(inter-autonomous system routing protocol)으로 AS 간 라우팅 프로토콜을 의미합니다.

BGP는 인터넷에 있는 수천 개의 ISP들을 연결하는 프로토콜이므로, 인터넷 프로토콜 중에 가장 중요하다고 말할 수 있스빈다.

BGP는 거리 벡터 라우팅과 같은 줄기에서 나왔다고 볼 수 있는 분산형 비동기식 프로토콜입니다.

BGP의 역할

BGP에서는 패킷이 특정한 목적지 주소를 향해서가 아니라 CIDR(Classless Inter Domain Routing) 형식으로 표현된, 주소의 앞쪽 접두부(prefix)를 향해 포워딩합니다.

따라서 라우터의 포워딩 테이블은 (x,I)(x, I) 같은 형식의 엔트리들을 갖게 되는데, 여기서 xx는 주소 접두부이고, II는 라우터 인터페이스의 인터페이스 번호입니다.

AS 간 라우팅 프로토콜로서 BGP는 각 라우터에게 다음과 같은 수단을 제공합니다.

  1. 이웃 AS로부터 도달 가능한 서브넷 접두부 정보를 얻습니다. 특히, BGP는 각 서브넷이 자신의 존재를 인터넷 전체에 알릴 수 있도록 합니다.
  2. 서브넷 주소 접두부로의 "가장 좋은" 경로를 결정합니다.

먼저, 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-PATHNEXT-HOP입니다.

  • AS-PATH: 알림 메시지가 통과하는 AS들의 리스트를 담습니다. 이것은 루프를 감지하고 방지하는 역할도 수행합니다.
  • NEXT-HOP: AS-PATH를 시작하는 라우터 인터페이스의 IP주소입니다. 예를 들어, AS1에서 AS2를 통과하여 x로 가는 "AS2 AS3 x"경로의 NEXT-HOP 속성은 라우터 2a의 왼쪽 인터페이스의 IP 주소입니다.

이제 BGP 라우팅 알고리즘에 대해서 정리해 봅시다.

뜨거운감자 라우팅(Hot Potato Routing)

그림에서 네트워크 라우터 1b를 봐봅시다. 이 라우터는 주소가 x로 시작하는 서브넷으로 가는 두 개의 BGP 경로를 알고 있습니다.

뜨거운 감자 라우팅에서는 (가능한 모든 경로중에서) 경로 각각의 시작점인 NEXT-HOP 라우터까지의 경로 비용이 최소가 되는 경로가 선택됩니다.

이 예에서는 라우터 1b는 NEXT-HOP 라우터 2a와 3d 각각에 대해 최소 비용을 가진 AS 내부 경로를 찾기 위해 AS 내부 라우팅 정보를 조사한 후, 이들 최소 비용 경로 중에서도 가장 적은 비용을 가진 경로를 선택합니다.

여기서 링크의 수를 cost로 생각하면, 라우터 2a가 선택되는 것입니다.

뜨거운감자 라우팅 방법은 포워딩 테이블에 AS 외부의 목적지를 추가할 때 AS간 라우팅 프로토콜(BGP)과 AS 내부 라우팅 프로토콜(예를 들면 OSPF) 둘 다가 사용됩니다.

뜨거운감자 라우팅에 깔려있는 기본 아이디어는 자신의 AS 바깥에 있는 부분에 대한 비용은 신경쓰지 않고 최대한 신속하게(가능한 최소 비용) 패킷을 자신의 AS 밖으로 내보내는 것입니다.

경로 선택 알고리즘

실제로 BGP는 뜨거운감자 라우팅보다 더 복잡한 알고리즘을 사용하지만, 여전히 뜨거운감자 라우팅을 포함하고 있습니다. 경로가 두 개 이상 존재한다면, BGP는 하나의 경로가 남을 때까지 다음의 제거 규칙을 수행합니다.

  1. 지역 선호도(local preference)가 경로에 할당
  2. 최단 AS-PATH를 가진 경로가 선택
  3. 뜨거운감자 라우팅을 수행
  4. BGP 식별자를 사용

IP 애니캐스트(anycast)

BGP는 인터넷 AS 간 라우팅 외에도 종종 DNS에서 흔히 사용되는 IP 애니캐스트 서비스를 구현하는 데도 활용됩니다.

상황을 좀 유도해보자면, 같은 컨텐츠를 지리적으로 분산된 많은 다른 서버에 복제하고, 각 사용자를 가장 가까운 서버의 컨텐츠로 접근하게 하려고 하는 경우를 생각해 봅시다.

예를 들어 CDN은 비디오나 다른 자료들을 서로 다른 나라의 서버들에 복제해 둡니다.

이런 경우 어떤 사용자가 이 복제된 컨텐츠에 접근을 원할 때 사용자에게 복제된 컨텐츠를 가진 "가장 가까운" 서버를 알려주는 것이 바람직합니다. 그리고 해당 서버들은 동일한 IP를 공유하고 있습니다.

이러한 방식으로 사용자가 어디에 위치에 있든 상관없이 지리적으로 분산되어 있는 서버들이 공통적으로 사용하는 IP 주소를 사용자에게 돌려줍니다.

사실 이 방식에는 오점이 존재하는데, BGP 라우팅이 변경되면 하나의 TCP 연결에 속한 패킷들이 웹서버의 서로 다른 복제본으로 도착할 수 있기 때문에 문제가 발생할 수 있습니다.

라우팅 정책

앞서 라우팅 정책에 관련해서 언급해놨습니다.

경로 선택 알고리즘에서도 맨 먼저 지역 선호도 속성에 따라 경로가 선택되는데, 이 속성의 값이 각 AS의 정책에 의해 결정됩니다.

이 방식의 경우 사용자 액세스 ISP백본 제공자 네트워크사이에서 경로 정보 교환의 과정을 설명할 수 있게 해줍니다.

간단하게만 정리하자면 다음과 같습니다.

  • 사용자 액세스 ISP는 두 개 이상의 백본 네트워크와 연결된 다중 홈(multi-homed) 액세스 ISP일 경우 서로 다른 백본 네트워크에게 본인이 다른 백본 네트워크와 연결되어 있다는 정보를 알리지 않습니다. 이렇게 함으로써, 액세스 ISP는 자신이 선택한 백본 제공자와의 연결성을 유지하고, 경쟁 백본 제공자의 영향을 최소화할 수 있습니다. 이러한 라우팅 정책은 보안경제적인 이유로 일반적으로 사용됩니다.
  • 백본 제공자 네트워크의 경우 경로가 추가되는 트래픽을 짊어지게 되는 경우(쓸데 없는 트래픽이 늘어나는 경우)에는 해당 경로 정보를 다른 백본 네트워트에게 넘겨주지 않습니다. 백본 제공자 네트워크가 주로 대규모 인터넷 트래픽을 처리하다 보니까, 추가적인 경로 정보가 필요한 경우 매우 복잡하고 비용이 많이 들기 때문입니다. 그러므로 액세스 ISP자체적으로 라우팅 정책을 구성하고 백본 제공자 네트워크를 거쳐 다른 액세스 ISP에 데이터를 전송할 때는 백본 제공자 네트워크의 중간 경로를 거치지 않고 바로 액세스 ISP로 데이터를 전송합니다.

소프트웨어 정의 네트워크(SDN) 제어 평면

SDN 구조의 네 가지 특성은 다음과 같이 정리됩니다.

  • 플로우 기반 포워딩: SDN으로 제어되는 스위치들에서의 패킷 포워딩은 전송 계층, 네트워크 계층, 또는 링크 계층 헤더의 어떤 값들을 기반으로도 이루어 질 수 있습니다. 패킷 포워딩 규칙은 스위치의 플로우 테이블에 기록됩니다.
  • 데이터 평면과 제어 평면의 분리: 데이터 평면은 네트워크 스위치들로 구성되는데, 이들은 상대적으로 단순한(그러나 빠른) 장치들로서 자신들의 플로우 테이블 내용을 기반으로 "비교와 실행"을 수행합니다. 제어 평면은 서버와 스위치들의 플로우 테이블을 결정, 관리하는 소프트웨어로 이루어집니다.
  • 네트워크 제어 기능이 데이터 평면 스위치 외부에 존재: 네트워크 스위치로부터 멀리 떨어진 별도의 서버에서 수행됩니다. 제어 평면은 두 개의 구성요소 즉, SDN 컨트롤러네트워크 제어 응용들의 집합으로 이루어집니다.

    컨트롤러의 기능

    1. 정확한 상태 정보 유지
    2. 이 정보를 제어 평면에서 동작하고 있는 네트워크 제어 응용들에 제공
    3. 응용들이 하부 네트워크 장치들을 모니터하고 프로그램하고 제어까지 할 수 있도록 수단 제공
  • 프로그램이 가능한 네트워크: 제어 평면에서 수행중인 네트워크 제어 응용을 통해 네트워크를 프로그램 할 수 있습니다. SDN 컨트롤러가 제공하는 API를 이용하여 네트워크 장치들에 있는 데이터 평면을 명세하고 제어합니다. 예를 들면, 다익스트라 알고리즘을 통해 경로를 결정하거나, 서버의 부하를 분산시키는 방식으로 패킷을 포워딩할 수 있습니다.

SDN이 네트워크 기능들의 획기적인 "분리"를 의미함을 알 수 있습니다.

SDN 컨트롤러와 SDN 네트워크 제어 응용

컨트롤러의 기능에 대해서 자세히 살펴봅시다.

  • 통신 계층: SDN 컨트롤러와 제어받는 네트워크 장치들 사이의 통신. 장치들의 동작 제어와 정보를 전달하는 것, 혹은 링크에서 발생가능한 이벤트들은 컨트롤러에게 전달됩니다. 이러한 이벤트들은 SDN 컨트롤러에게 네트워크 상태에 대한 최신의 정보를 제공합니다.
  • 네트워크 전역 상태 관리 계층: SDN 제어 평면의 궁극적인 제어 결정. SDN으로 제어되는 다른 장치들에 대한 최신 정보를 알고 있고, 이것을 플로우 테이블에 반영합니다. 플롱 테이블의 복사본을 유지하고 이러한 정보 조각들은 모두 SDN 컨트롤러가 유지하는 네트워크 전역 "상태"의 예들입니다.
  • 네트워크 제어 응용 계층과의 인터페이스: 컨트롤러는 "노스바운드(northbound)" 인터페이스를 통해서 네트워크 제어 응용들과 상호 작용합니다. 이 API는 네트워크 제어 응용들이 상태 관리 계층 내의 네트워크 상태 정보와 플로우 테이블을 읽고 쓸 수 있도록 해줍니다.

오픈플로우(OpenFlow) 프로토콜

오픈플로우 프로토콜SDN 컨트롤러SDN으로 제어되는 스위치 또는 오픈플로우 API를 구현하는 다른 장치와의 사이에서 동작합니다.

컨트롤러에서 제어되는 스위치로 전달되는 중요한 메시지들은 다음과 같습니다.(컨트롤러 -> 스위치)

  • 설정: 컨트롤러가 스위치의 설정 파라미터들을 문의하거나 설정할 수 있도록 합니다.
  • 상태 수정: 컨트롤러가 스위치 플오우 테이블의 엔트리를 추가/제거 또는 스위치 포트의 특성을 설정하기 위해 사용됩니다.
  • 상태 읽기: 컨트롤러가 스위치 플로우 테이블과 포트로부터 통계 정보와 카운터 값을 얻기 위해 사용됩니다.
  • 패킷 전송: 컨트롤러가 제어하는 스위치의 지정된 포트에서 특정 패킷을 내보내기 위해 사용됩니다. 이 메시지 자체는 페이로드 부분에 보맬 패킷을 포함합니다.

SDN으로 제어되는 스위치에서 컨트롤러로 전달되는 중요한 메시지들은 다음과 같습니다.(스위치 -> 컨트롤러)

  • 플로우 제거: 컨트롤러에게 어떤 플로우 테이블 엔트리가 시간이 만료되거나 상태 수정 메시지를 수신한 결과로 삭제되었음을 알려줍니다.
  • 포트 상태: 스위치가 컨트롤러에게 포트의 상태 변화를 알리기 위해 사용합니다.
  • 패킷 전달: 스위치 포트에 도착한 패킷에는 플로우 테이블의 어떤 엔트리와도 일치하지 않은 패킷 또는 일치한 패킷 중에서도 일부는 처리를 위해 컨트롤러에게 보내지기도 합니다. 이 메시지는 그러한 패킷을 컨트롤러에게 보내기 위해 사용됩니다.

데이터 평면과 제어 평면의 상호 작용

먼저 다음 그림을 봐봅시다.

그림의 예에서 스위치 s1과 s2사이의 링크가 단절되었다고 가정해봅시다. 최단 경로 알고리즘이 사용되고 있으며 따라서 s1, s3, s4로 들어오고 나가는 플로우 포워딩 규칙은 변경이 되었으나 s2의 동작은 바뀌지 않았다고 생각합니다.

  1. 링크 단절을 감지한 s1은 오픈플로우의 포트 상태 메시지를 사용하여 링크 상태의 변화를 SDN 컨트롤러에게 알립니다.
  2. SDN 컨트롤러는 링크 상태 관리자에게 알리고, 링크 상태 관리자는 링크 상태 데이터베이스를 갱신합니다.
  3. 다익스트라 링크 상태 라우팅을 담당하는 네트워크 제어 응용은 링크 상태의 변화에 대한 알림을 받습니다.
  4. 링크 상태 라우팅 응용이 링크 상태 관리자와 접촉하여 갱신된 링크 상태를 가져옵니다. 이 작업은 상태 관리 계층에 있는 다른 구성요소의 도움이 필요할 수도 있습니다. 그 후 새로운 최소 비용을 계산합니다.
  5. 링크 상태 라우팅 응용은 갱신되어야 할 플로우 테이블을 결정하는 플로우 테이블 관리자와 접촉합니다.
  6. 플로우 테이블 관리자는 오픈플로우 프로토콜을 사용하여 링크 상태 변화에 영항을 받는 스위치들의 플로우 테이블을 갱신합니다.

ICMP와 SNMP

인터넷 제어 메시지 프로토콜(Internet Control Message Protocol, ICMP)은 호스트와 라우터가 서로 간에 네트워크 계층 정보를 주고 받기 위해 사용됩니다.

가장 전형적인 사용 형태는 오류 보고입니다.

ICMP 메시지도 IP 페이로드로 전송이 되고 수신자가 받으면 역다중화 작업도 이루어 집니다.

사실, ICMP 메시지는 출발지 억제 메시지 역할도 하는데, 이것는 혼잡제어르 수행하기 위한 것입니다. 하지만 TCP에서 혼잡제어 기능이 존재하기 때문에 이 기능은 잘 사용되지 않습니다.

실제로 라우터에서는 이 ICMP 메시지를 이용해서 송신자 측과 정보를 교환합니다.

송신자측에서 보낸 데이터그램의 TTL이 어느 한 라우터에서 만료가 되었을 때 해당 라우터에서는 ICMP 메시지를 보내서 사이에 존재하는 라우터의 수와 정체, 그리고 왕복 시간을 알게 해줍니다.

네트워크 관리는 무엇일까?

네트워크 관리는 다음과 같은 정의가 있습니다.

네트워크 관리는 적정한 비용으로 실시간, 운용성능, 서비스 품질 등의 요구사항을 만족시키기 위하여 네트워크 구성요소 자원들을 감시, 테스트, 폴링, 설정, 분석, 평가, 제어하는 하드웨어, 소프트웨어, 인간요소 들을 배치하고, 통합, 조정하는 것입니다.

네트워크 관리 핵심 요소에는 다음과 같은 것들이 있습니다.

  • 관리 서버(managing server): 네트워크 운영 센터(NOC)의 중앙 집중화된 네트워크 관리 스테이션에서 동작하는, 일반적으로 사람과 상호 작용하는 응용이다.
  • 피관리 장치(managed device): 관리 대상 네트워크에 존재하는 네트워크 장비들이다.
  • 피관리 장치 내의 피관리 객체들에 관련된 정보들은 MIB(Management Information Base)에 저장됩니다.
  • 각 피관리 장치에는 네트워크 관리 에이전트(network management agent)가 있는데, 이는 관리 서버와 통신하면서 관리 서버의 명령과 제어에 따라 피관리 장치에 국지적인 행동을 취하는, 피관리 장치상의 프로세스입니다.
  • 네트워크 관리 프로토콜(network management protocol)은 관리 서버와 피관리 장치들 사이에서 동작하면서 관리 서버가 피관리 장치의 상태에 대해 질의하고 에이전트를 통해 간접적으로 피관리 장치에 행동을 취할 수 있도록 해줍니다.

SNMP(Simple Network Management Protocol)는 관리 서버와 그 관리 서버를 대표하여 실행되고 있는 에이전트 사이에서 네트워크 관리 제어 및 정보 메시지를 전달하기 위해 사용됩니다.

SNMP의 가장 흔한 형태는 요청-응답 모드(request-response mode)인데, 여기서 SNMP 관리 서버는 에이전트에게 요청을 송신하고 이를 받은 SNMP 에이전트는 이를 수행한 후 요청에 대한 응답을 보냅니다.

SNMP의 두 번째로 일반적인 사용은 에이전트가 요구받지 않았더라도 트랩 메시지(trap message)라는 이름의 메시지를 관리 서버에게 전송하는 것입니다. 이 메시지들은 관리 서버들에게 MIB 객체 값들을 변화시킨 예외 상황의 발생을 통지하기 위해 이용됩니다.


Reference

profile
개발정리블로그

0개의 댓글