Forwarding and Routing
네트워크에서 데이터 패킷을 라우터의 입력에서 적절한 라우터 출력으로 전송하는 것을 Data Plane이라고 한다. 이는 패킷을 전달하는 역할을 수행한다.
반면, 라우팅은 소스에서 목적지까지 패킷이 이동하는 경로를 결정하는 것을 말한다. 이는 Control Plane의 역할로, 네트워크에서 라우터들이 어떻게 동작해야 하는지 결정한다.
네트워크 Control Plane을 구성하는 두 가지 접근 방식이 있다. 첫 번째는 기존의 개별 라우터 제어(per-router control) 방식으로, 각 라우터는 독립적으로 동작하며 자신의 결정을 내리는 방식이다.
두 번째는 소프트웨어 정의 네트워킹(software defined networking)에서 사용되는 논리적으로 중앙 집중화된 제어 방식(logically centralized control)이다. 이 방식에서는 네트워크 전체를 하나의 제어 시스템으로 관리하고, 중앙 집중화된 컨트롤러가 모든 라우터의 동작을 제어한다.
Routing protocol
라우팅 프로토콜의 목표는 송신 호스트로부터 수신 호스트까지의 네트워크 경로 또는 루트를 결정하는 것이다. 이 경로는 패킷이 초기 소스 호스트에서 최종 목적지 호스트까지 거치는 일련의 라우터이다.
"좋은" 경로는 다양한 요소를 고려하여 결정된다. 일반적으로 "좋은" 경로는 최소 비용, 가장 빠른 속도, 혹은 가장 혼잡하지 않은 경로를 의미한다. 최소 비용은 경로를 선택할 때 경로에 포함된 링크의 비용을 최소화하는 것을 의미하며, 가장 빠른 속도는 패킷 전달에 걸리는 시간을 최소화하는 것을 의미한다. 또한 혼잡하지 않은 경로를 선택함으로써 네트워크 내에서 트래픽 혼잡을 최소화할 수도 있다.
라우팅은 네트워킹에서 상위 10개의 도전과제 중 하나로 꼽힌다. 이는 네트워크에서 패킷의 경로를 결정하는 것이 매우 중요하며, 효율적이고 안정적인 라우팅 알고리즘을 개발하는 것이 도전적인 과제임을 의미한다.
라우팅 프로토콜에는 전체 링크에 대한 비용을 아는 'Link State' 알고리즘과 주변 이웃들에 대한 링크 비용만을 아는 'Distance Vector' 알고리즘이 존재한다.
Dijkstra’s link-state routing algorithm
중앙 집중화된 네트워크에서는 네트워크의 토폴로지와 링크 비용이 모든 노드에게 알려져 있다. 이는 "link state broadcast"를 통해 이루어진다. 모든 노드는 동일한 정보를 가지고 있으며, 한 노드에서 모든 다른 노드로의 최소 비용 경로를 계산하여 해당 노드에 대한 forwarding table을 제공한다.
이는 반복적인(iterative) 방식으로 이루어진다. k번의 반복(iteration) 후에는 k개의 목적지까지의 최소 비용 경로를 알 수 있다. C_x,y는 노드 x에서 y로의 직접 링크 비용을 나타내며, 이웃이 아닌 경우 ∞로 표시된다. D(v)는 소스에서 목적지 v까지의 최소 비용 경로의 현재 추정치를 나타내며, p(v)는 소스에서 v까지의 경로 상의 이전 노드를 나타낸다. N'은 최소 비용 경로가 명확하게 알려진 노드의 집합이다.
다익스트라 알고리즘의 시간 복잡도:
- 배열을 사용하는 경우 (단순 구현): O(V^2)
- 여기서 V는 노드의 수이다.
- 배열을 사용하여 각 노드까지의 현재까지의 최단 경로를 유지하고 업데이트한다.
- 각 노드를 선택하는 데 V, 각 반복에서 최단 경로를 찾는 데 V 시간이 걸린다.
- 우선순위 큐를 사용하는 경우: O((V + E) * log(V))
- 여기서 E는 간선의 수이다.
- 힙(Heap) 기반의 우선순위 큐를 사용하여 최소 거리를 가진 노드를 빠르게 찾는다.
- 각 노드를 선택하는 데 V, 간선을 검사하고 업데이트하는 데 E * log(V)의 시간이 걸린다.
oscillations possible
링크 비용이 트래픽 양에 따라 달라지는 경우 경로 진동(route oscillations)이 발생할 수 있다. 경로 진동은 네트워크에서 라우팅 경로가 반복적으로 변화하는 현상을 의미한다. 트래픽 양이 변하면 링크 비용이 변동되고, 이로 인해 최적 경로가 변경될 수 있다. 그러나 최적 경로가 변경되면 다시 트래픽이 해당 경로로 흐르고, 링크 비용이 다시 변동될 수 있다. 이러한 반복적인 과정으로 인해 경로 진동이 발생할 수 있다. 경로 진동은 네트워크의 안정성과 성능에 영향을 줄 수 있으므로, 효과적인 경로 선택 알고리즘과 링크 비용 조정 방법을 사용하여 이를 완화해야 한다.
Distance Vector Alogorithm
거리 벡터 알고리즘(Distance Vector Algorithm)은 벨만-포드(Bellman-Ford) 방정식을 기반으로 한다. 이 방정식은 다이나믹 프로그래밍(Dynamic Programming)의 개념을 사용하여 최소 비용 경로의 비용을 계산한다. LS 알고리즘과 달리 각 노드들은 이웃들의 라우팅 테이블 정보 만을 알 수 있다. 때문에 이웃들의 라우팅 테이블이 업데이트 되면 이 정보를 토대로 자신의 라우팅 테이블을 업데이트하고, 이를 이웃들에 알린다.
Dx(y)는 x에서 y까지의 최소 비용 경로의 비용을 나타낸다. 벨만-포드 방정식에 따라서 Dx(y)는 다음과 같이 계산된다:
Dx(y) = minv {cx,v + Dv(y)}
여기서 cx,v는 x에서 v로의 직접 링크 비용을 나타내며, Dv(y)는 v에서 y까지의 최소 비용 경로의 비용을 나타낸다. 이 식은 x에서 y까지의 최소 비용 경로를 결정하기 위해 모든 중간 노드 v를 고려하며, 각 중간 노드를 통해 경로를 형성하는 비용을 고려하여 최소 값을 선택한다.
거리 벡터 알고리즘은 이러한 방정식을 사용하여 각 노드에서 다른 모든 노드까지의 최소 비용 경로를 계산하고, 이를 주기적으로 업데이트하여 네트워크의 경로 정보를 유지한다. 이를 통해 노드들은 서로의 최소 비용 경로 정보를 교환하며, 네트워크 전체의 최적 경로를 결정한다.
LS vs DV
아래는 LS 알고리즘과 DV 알고리즘의 메시지 복잡도, 수렴 속도, 수렴성, 무한 카운트 문제, 내구성을 비교한 것이다.
1. 메시지 복잡도:
LS: n개의 라우터가 있을 때, O(n^2) 개의 메시지를 전송한다.
DV: 이웃 간 교환만 이루어지며, 수렴 시간에 따라 다양하다.
2. 수렴 속도:
LS: O(n^2) 알고리즘으로, 수렴에 시간이 오래 걸릴 수 있다.
DV: 수렴 시간은 다양하다.
3. 수렴성:
LS: 경로 진동이 발생할 수 있다.
DV: 라우팅 루프가 발생할 수 있다.
4. 무한 카운트 문제:
LS: 해당 문제가 없다.
DV: 무한 카운트 문제가 발생할 수 있다.
5. 내구성:
LS: 라우터가 오동작하거나 침해당하는 경우, 잘못된 링크 비용을 알리게 될 수 있다. 각 라우터는 자신의 테이블만 계산한다.
DV: DV 라우터는 잘못된 경로 비용을 알릴 수 있으며, 이는 black-holing으로 이어질 수 있다. 각 라우터의 테이블은 다른 라우터에 의해 사용되므로, 오류가 네트워크를 통해 전파될 수 있다.
이러한 차이점을 고려하여 LS 알고리즘과 DV 알고리즘 중 적절한 알고리즘을 선택해야 한다. 네트워크의 크기, 요구되는 수렴 시간, 안정성 등을 고려하여 알고리즘을 선택하는 것이 중요하다.
Routing in real world
라우팅을 확장 가능하게 만들기 위해서는 현재까지의 라우팅 연구를 현실적으로 적용해야 한다. 이를 위해서는 몇 가지 중요한 측면을 고려해야 한다.
- 라우터의 다양성: 실제로는 모든 라우터가 동일하지 않다. 다양한 유형의 라우터가 존재하며, 이들 간에는 성능, 기능 및 프로토콜의 차이가 있을 수 있다.
- 네트워크의 "플랫"하지 않음: 현실적인 네트워크에서는 네트워크가 계층적 구조를 가지며, 다양한 수준의 서브넷과 라우팅 도메인이 존재한다. 이로 인해 라우팅이 더 복잡해지고 스케일링에 어려움을 겪을 수 있다.
- 대규모 라우팅: 수십억 개의 목적지를 처리해야 하는 대규모 네트워크에서는 모든 목적지를 라우팅 테이블에 저장할 수 없다. 이로 인해 라우팅 테이블 교환은 링크를 과부하시킬 수 있다.
- 관리적 자율성: 인터넷은 네트워크의 네트워크이며, 각 네트워크 관리자는 자체 네트워크에서 라우팅을 제어하고 싶어한다. 각 네트워크는 자체적으로 라우팅 결정을 내릴 수 있어야 한다.
Intra/inter routing
인터넷에서 확장 가능한 라우팅을 위한 접근 방식은 "자율 시스템"(AS, Autonomous System)으로 라우터를 영역으로 묶는 것이다. 자율 시스템은 네트워크 영역으로도 알려져 있다.
자율 시스템 내부 (intra-AS 또는 intra-domain)에서는 동일한 자율 시스템 내에서의 라우팅이 이루어진다. 자율 시스템 내의 모든 라우터는 동일한 intra-domain 프로토콜을 실행해야 합니다. 다른 자율 시스템 내의 라우터는 서로 다른 intra-domain 라우팅 프로토콜을 실행할 수 있다.
게이트웨이 라우터는 자체 자율 시스템의 "경계"에 위치하며, 다른 자율 시스템 내의 라우터와의 연결을 가지고 있다. 이러한 게이트웨이 라우터는 inter-AS (또는 inter-domain) 라우팅을 수행하며, intra-domain 라우팅 뿐만 아니라 inter-domain 라우팅도 수행한다.
이러한 접근 방식은 인터넷을 관리 가능한 단위로 나누어 스케일링과 관리를 용이하게 한다. 각 자율 시스템은 자체적으로 라우팅 결정을 내리고 관리할 수 있으며, 다른 자율 시스템과의 연결을 통해 인터넷 전체의 라우팅이 이루어진다. 이를 통해 인터넷은 다양한 자율 시스템으로 구성된 네트워크의 네트워크로 구성되며, 각 자율 시스템은 자체적으로 라우팅을 제어하고 관리할 수 있다.
Forwarding table
포워딩 테이블은 intra-AS 및 inter-AS 라우팅 알고리즘에 의해 구성된다.
intra-AS 라우팅은 자율 시스템 내부의 목적지에 대한 항목을 결정한다. 자율 시스템 내에서의 라우팅 결정은 자율 시스템 내의 네트워크 토폴로지, 링크 상태, 대역폭 등을 고려하여 이루어진다. 이를 통해 자율 시스템 내부의 패킷 전달 경로가 결정된다.
inter-AS 및 intra-AS 라우팅은 외부 목적지에 대한 항목을 결정한다. inter-AS 라우팅은 다른 자율 시스템과의 경로를 결정하고, intra-AS 라우팅은 자율 시스템 내부의 목적지로의 경로를 결정한다. 이를 통해 외부 목적지로의 패킷 전달 경로가 결정된다.
이러한 라우팅 알고리즘의 결과는 각 라우터의 포워딩 테이블에 반영된다. 포워딩 테이블은 목적지 IP 주소와 해당 목적지로의 패킷을 전달하기 위한 출력 링크 또는 인터페이스의 매핑 정보를 포함한다. 이를 통해 라우터는 수신한 패킷을 목적지로 전달하기 위한 올바른 출력 포트를 선택하게 된다.
따라서, intra-AS 및 inter-AS 라우팅 알고리즘은 포워딩 테이블의 구성에 중요한 역할을 한다. 이를 통해 네트워크에서 효율적인 라우팅과 패킷 전달이 가능해진다.
OSPF
OSPF (Open Shortest Path First) 라우팅은 "open"이라는 개념으로 공개적으로 이용 가능한 라우팅 프로토콜이다. OSPF는 클래식 링크 상태(link-state) 프로토콜로 작동한다. 각 라우터는 IP를 통해 OSPF 링크 상태에 대한 정보를 AS 내의 모든 다른 라우터에게 전파한다. 이때 TCP/UDP를 사용하지 않는다.
다양한 링크 비용 지표(metric)가 가능하며, 대역폭(bandwidth)과 지연(delay) 등이 링크 비용으로 사용될 수 있다. 각 라우터는 전체 네트워크의 토폴로지(topology) 정보를 가지고 있으며, Dijkstra 알고리즘을 사용하여 포워딩 테이블을 계산한다. 이를 통해 각 라우터는 최단 경로를 결정하여 패킷을 전송한다.
보안 측면에서, OSPF 메시지는 모두 인증되어 있으며, 이는 악의적인 침입을 방지하기 위해 사용된다. 인증된 OSPF 메시지를 통해 라우터는 다른 라우터로부터 받은 정보의 신뢰성을 확인할 수 있다. 이를 통해 OSPF 네트워크는 안전하게 운영될 수 있다.
Hierarchical OSPF
만약 하나의 AS가 너무 많은 수의 라우터를 포함할 경우 최단거리를 찾는 것이 부담이 될 수 있다. 때문에 AS 내에서도 영역을 나누어 각 영역에서 OSPF가 별도로 동작하게 하느는데, 이를 계층적 OSPF라 한다.
계층적 OSPF(Hierarchical OSPF)는 로컬 영역(Local Area)과 백본(Backbone) 두 가지 수준의 계층 구조를 가지고 있다. 링크 상태 광고는 해당 영역이나 백본 내에서만 전파된다.
각 노드는 자신이 속한 영역 내에 있는 목적지에 대한 자세한 정보를 가지고 있으며, 다른 영역으로 가는 경로는 다른 노드들을 통해 전달되는 방향 정보만 알고 있다.
이러한 계층 구조는 OSPF 네트워크를 보다 효율적으로 관리하고 확장할 수 있게 해준다. 로컬 영역은 자체적으로 링크 상태 광고를 전파하며, 영역 간에는 백본을 통해 연결된다. 이를 통해 전체 네트워크의 규모를 줄이고, 링크 상태 광고의 전파를 로컬 영역 또는 백본 내에만 제한함으로써 전체 OSPF 도메인의 오버헤드를 줄일 수 있다.
따라서, 계층적 OSPF는 네트워크 관리와 성능 향상을 위해 로컬 영역과 백본의 두 수준으로 OSPF를 구성한다. 각 노드는 자세한 영역 내의 정보를 가지고 있으며, 목적지까지의 경로 정보는 다른 노드들을 통해 전달되는 방향 정보로 제한된다.
Inter AS routing
AS1의 라우터가 AS1 외부로 향하는 데이터그램을 수신한다고 가정해보자. 라우터는 AS1 내의 게이트웨이 라우터로 패킷을 전달해야 한다. 그러나 어떤 게이트웨이 라우터로 전달해야 할까?
AS1의 inter-domain 라우팅은 AS2를 통해 도달 가능한 목적지와 AS3를 통해 도달 가능한 목적지를 학습해야 한다. 이러한 도달 가능성 정보를 AS1 내의 모든 라우터로 전파해야 한다.
이를 위해 AS1은 inter-AS 라우팅 프로토콜을 사용한다. 예를 들어, 인터넷에서는 BGP(Border Gateway Protocol)가 이러한 역할을 수행한다. AS1의 게이트웨이 라우터는 AS2와 AS3와의 연결을 가지고 있으므로, AS2와 AS3로부터 받은 목적지 정보를 AS1 내의 라우터에게 전달한다. 이 정보는 AS1 내의 라우터들이 패킷을 올바른 게이트웨이 라우터로 전달하기 위해 사용된다.
따라서, AS1의 inter-AS 라우팅은 AS1 내의 intra-domain 포워딩에도 역할을 한다. 도달 할 수 있는 목적지들의 정보를 학습하고 전파함으로써 AS1 내의 라우터는 외부 목적지로 패킷을 전달하기 위해 올바른 게이트웨이 라우터를 선택할 수 있다.
BGP
BGP (Border Gateway Protocol)는 Inter-Domain 라우팅 프로토콜로 알려져 있다. "인터넷을 유지하는 접착제"라고도 불리며, 서브넷이 자신의 존재와 도달 가능한 목적지를 인터넷의 나머지에 알릴 수 있도록 합니다. BGP는 각 AS에 다음과 같은 기능을 제공한다.
- eBGP (External BGP): 인접한 AS로부터 서브넷 도달 가능성 정보를 얻을 수 있다.
- iBGP (Internal BGP): 도달 가능성 정보를 모든 AS-내부 라우터로 전파할 수 있다.
도달 가능성 정보와 정책에 기반하여 다른 네트워크로의 "좋은" 경로를 결정할 수 있다.
BGP는 인터넷을 구성하는 다양한 AS들 간에 경로 정보를 교환하고 관리함으로써 전 세계적인 네트워크의 연결성을 유지하는 역할을 담당하고 있다.
BGP에서는 경로 광고를 위해 프리픽스와 속성(attribute)이 함께 사용된다. 프리픽스는 광고되는 목적지를 나타내며, AS-PATH와 NEXT-HOP라는 두 가지 중요한 속성이 있다.
AS-PATH: 프리픽스 광고가 통과한 AS 목록을 나타낸다. 이는 경로의 유래를 추적하는 데 사용된다. (목적지까지의 경로)
NEXT-HOP은 다음 AS로의 특정 내부-AS 라우터를 지정한다. 이는 경로가 어떤 AS를 통과하여 다음 목적지로 전달되어야 하는지를 나타낸다. (목적지를 가기 위해 넘겨야 하는 다음 라우터)
정책 기반 라우팅(policy-based routing)은 경로 광고를 수신하는 게이트웨이가 수입 정책(import policy)을 사용하여 경로를 수락하거나 거부하는 것을 의미한다. 예를 들어, AS Y를 통과하지 않도록 경로를 설정할 수 있다.
또한 AS 정책은 해당 경로를 다른 인접한 AS에 광고할지 여부를 결정한다. AS는 자체 정책에 따라 경로를 선택적으로 광고할 수 있다.
AS2 라우터 2c는 AS3 라우터 3a로부터 AS3,X 경로 광고를 eBGP를 통해 받는다. AS2의 정책에 따라, AS2 라우터 2c는 AS3,X 경로를 수락하고 (iBGP를 통해) AS2의 모든 라우터로 전파한다. 또한 AS2의 정책에 따라, AS2 라우터 2a는 AS2, AS3, X 경로를 AS1 라우터 1c에게 광고하기 위해 eBGP를 사용한다.
게이트웨이 라우터는 목적지로 가는 여러 경로를 학습할 수 있다. AS1의 게이트웨이 라우터 1c는 2a로부터 AS2, AS3, X 경로를 학습한다. AS1의 게이트웨이 라우터 1c는 3a로부터 AS3, X 경로를 학습한다. 정책에 따라 AS1의 게이트웨이 라우터 1c는 AS3, X 경로를 선택하고 AS1 내부에서 iBGP를 통해 경로를 광고한다. 이렇게 함으로써 AS1 내에서 선택한 경로를 모든 AS1 라우터에게 전파할 수 있다.
BGP messages
BGP 메시지는 TCP 연결을 통해 피어간에 교환된다. BGP 메시지에는 다음과 같은 종류가 있다:
OPEN: 원격 BGP 피어에게 TCP 연결을 열고, 보내는 BGP 피어를 인증한다.
UPDATE: 새로운 경로를 광고하거나 이전 경로를 철회한다.
KEEPALIVE: UPDATE 메시지가 없을 때 연결을 유지하며, OPEN 요청에 대한 응답으로도 사용된다.
NOTIFICATION: 이전 메시지의 오류를 보고하거나 연결을 종료하는 데 사용된다.
BGP 메시지는 BGP 피어 간에 정보를 교환하고 경로 광고 및 철회, 연결 유지 등의 역할을 수행한다.
Inter AS vs Intra AS
내부-AS(intra-AS) 라우팅과 외부-AS(inter-AS) 라우팅이 다른 이유는 정책, 규모, 성능 등의 요소 때문이다.
1. 정책(policy) 관점
- Inter-AS 라우팅: 관리자는 자신의 트래픽이 어떻게 라우팅되는지, 누가 자신의 네트워크를 통과하는지에 대한 제어를 원한다. 따라서 정책이 중요한 역할을 한다.
- Intra-AS 라우팅: 단일 관리자에 의해 운영되므로 정책이 크게 문제가 되지 않는다.
2. 규모(scale) 관점
계층적 라우팅(hierarchical routing)은 라우팅 테이블의 크기를 줄이고 업데이트 트래픽을 감소시킨다. 이는 외부-AS 라우팅에서 더 중요하다.
3. 성능(performance) 관점
- Intra-AS 라우팅: 성능에 집중할 수 있다. 하나의 관리자가 네트워크를 운영하기 때문에 성능 최적화가 가능하다.
- Inter-AS 라우팅: 정책이 성능보다 우선한다. 경로 선택과 관련된 정책을 적용하기 때문에 성능보다 정책을 우선시한다.
Hot potato routing
핫 포테이토 라우팅은 로컬 게이트웨이의 내부 도메인 비용이 가장 적은 것을 선택하는 원칙을 따른다. 예를 들어, 2d는 2a를 선택하고, X로 가는 경로에 AS 호핑이 더 많더라도 상관하지 않는다. 외부 도메인 비용에 대해서는 고려하지 않는다. 즉, 이 방식은 외부 도메인 비용보다 내부 도메인 비용을 최소화하고 네트워크 내에서 최적의 경로를 선택하는 데 중점을 둔다.
BGP: achieving policy via advertisements
실제 현실에서 ISP는 자체 고객 네트워크와의 트래픽만 라우팅하려고 하며, 굳이 다른 ISP 간의 트래픽을 운반하고 싶지 않을 것이다.
우선 A는 경로 Aw를 B와 C에게 광고했다고 생각해보자. 하지만 B는 경로 BAw를 C에게 광고하고 싶지 않다. C, A, w 모두 B의 고객이 아니므로 B는 CBAw를 라우팅하면서 수익을 얻지 않기 때문이다. 때문에 B가 C에 경로를 광고를 하지 않으면, C는 CBAw라는 경로에 대해 알지 못한다. 그 결과 C는 w에 도달하기 위해 B를 사용하지 않고 CAw를 라우팅할 것이다.
아래 그림에서 A, B, C는 네트워크 제공자이고, x, w, y는 고객이다. 또한 x는 두 개의 네트워크에 연결되어 있는 듀얼홈(dual-homed) 상태이다. 이 경우 x가 B에서 C로 통하는 경로의 연결통로가 될 수 있다. 만약 x가 B에게 C로 가는 경로를 광고하지 않는다면 x는 그러한 역할에서 벗어날 수 있다.
BGP route selection
BGP 라우터는 목적지 AS에 대해 여러 경로를 학습할 수 있으며, 다음과 같은 기준을 기반으로 경로를 선택한다:
Local Preference Value Attribute: 지역 선호 값은 정책 결정에 사용되는 속성으로, 더 높은 값이 우선시된다. 이를 통해 라우터는 특정 경로를 선호할 수 있다.
Shortest AS-PATH: AS-PATH는 경로를 따라 거치는 AS의 시퀀스로 구성된다. 라우터는 AS-PATH가 더 짧을수록 우선시하게 된다. 즉, AS-PATH가 더 짧은 경로를 선택한다.
Closest NEXT-HOP 라우터: 핫 포테이토 라우팅 원칙에 따라, 라우터는 가장 가까운 NEXT-HOP 라우터를 선택한다. 이는 패킷을 최대한 빠르게 전송하기 위한 방식이다.
SDN
소프트웨어 정의 네트워킹(SDN)의 제어 평면은 네트워크의 제어와 관리를 담당하는 부분이다. 기존의 분산된 라우터 제어 방식과는 달리, SDN은 중앙 집중식 제어 모델을 사용한다.
SDN 제어 평면은 네트워크의 전반적인 동작을 관리하기 위해 소프트웨어 컨트롤러로 구성된다. 이 컨트롤러는 네트워크 전체에 대한 통찰력을 가지고 있으며, 네트워크 장비들에게 제어 명령을 전달하고 상태 정보를 수집한다.
제어 평면은 네트워크 정책과 서비스 요구 사항을 정의하며, 네트워크의 논리적인 구조를 관리한다. 또한, 트래픽 엔지니어링, 경로 선택, 품질 보증(QoS), 보안 등과 같은 고급 기능을 구현한다.
SDN의 제어 평면은 네트워크 관리자가 유연하게 네트워크를 구성하고 효율적으로 운영할 수 있도록 돕는다. 이를 통해 네트워크의 관리, 유지보수, 정책 변경 등이 간소화되고 자동화될 수 있다.
논리적으로 중앙 집중된 제어 평면이 사용되는 이유는 다음과 같다:
- 네트워크 관리의 용이성: 분산된 라우터 제어 방식과 비교하여 논리적으로 중앙 집중된 제어 평면은 라우터 구성 오류를 방지하고 트래픽 흐름의 유연성을 증가시킨다. 중앙 집중식 제어 평면을 통해 네트워크 전체의 상태와 동작을 통합적으로 관리할 수 있다.
- 테이블 기반 포워딩: 오픈플로우(OpenFlow) API를 상기해보면, 테이블 기반 포워딩을 통해 라우터를 "프로그래밍"할 수 있다. 중앙 집중식 제어 평면은 테이블을 중앙에서 계산하고 분배함으로써 라우터를 쉽게 "프로그래밍"할 수 있다.
- 중앙 집중식 "프로그래밍"의 용이성: 중앙 집중식 제어 평면은 테이블을 중앙에서 계산하고 분배하기 때문에 라우터에서 분산 알고리즘(프로토콜)을 통해 테이블을 계산하는 분산 "프로그래밍"보다 쉽다.
전통적인 routing 방식에는 몇가지 한계가 존재한다.
만약 기존 라우팅 방식에서 기존의 path인 uxyz를 uvwz로 바꾸기 위해서는 링크 비용을 변경하는 수밖에 없다.
패킷들을 여러 경로로 분산시키는 것이 불가능하다.
한 라우터에서부터 여러 가지 경로로 패킷을 보내는 것이 불가능하다.
소프트웨어 정의 네트워킹(SDN)은 다음과 같은 특징을 갖는다:
- 일반화된 "flow-based" 포워딩: SDN은 일반화된 "플로우 기반" 포워딩을 지원한다. 예를 들어, OpenFlow 프로토콜을 사용하여 플로우를 식별하고 제어할 수 있습니다. 이를 통해 네트워크 트래픽을 유연하게 제어하고 관리할 수 있다.
- Control Plane과 Data Plane의 분리: SDN은 제어 평면과 데이터 평면을 분리한다. 제어 평면은 네트워크의 상태 정보를 수집하고 정책을 결정하는 역할을 담당하며, 데이터 평면은 효율적인 패킷 전달을 담당한다. 이를 통해 네트워크의 유연성과 관리 용이성을 향상시킬 수 있다.
- Data Plane 스위치 외부의 Control Plane 기능: SDN에서는 제어 평면 기능이 데이터 평면 스위치 외부에 위치한다. 이는 중앙 집중식 컨트롤러를 사용하여 네트워크의 전체적인 제어와 관리를 담당하는 것을 의미한다. 제어 평면 기능은 네트워크 정책의 설정, 경로 결정, 트래픽 엔지니어링 등을 수행한다.
- 프로그래밍한 제어 응용 프로그램: SDN은 프로그래밍 가능한 제어 응용 프로그램을 지원한다. 이는 제어 평면에서 동작하는 애플리케이션을 개발하여 네트워크 동작을 커스터마이즈하고 자동화할 수 있다. 이를 통해 네트워크 관리자는 유연하게 네트워크를 제어하고 필요에 맞게 확장할 수 있다.
SDN의 구성 요소는 다음과 같다:
1. Data-plane switches
데이터 평면 스위치는 빠르고 간단하며 하드웨어에서 일반화된 데이터 평면 포워딩을 구현하는 상용 스위치이다.
데이터 평면 스위치는 컨트롤러의 감독 하에 계산되고 설치되는 플로우(포워딩) 테이블을 구현한다. 이를 통해 데이터 평면 스위치는 컨트롤러의 지시에 따라 효율적인 패킷 전달을 수행할 수 있다.
테이블 기반 스위치 제어를 위한 API(예: OpenFlow)가 제공된다. 이를 통해 어떤 부분이 제어 가능하고 어떤 부분이 그렇지 않은지를 정의할 수 있다. 또한, 컨트롤러와의 통신을 위한 프로토콜(예: OpenFlow)이 정의되어 있다.
2. SDN controller (network OS)
네트워크 상태 정보 유지:
SDN 컨트롤러는 전체 네트워크의 상태를 유지한다. 연결된 디바이스, 네트워크 토폴로지, 트래픽 흐름 등과 관련된 정보를 포함한다.
상위의 네트워크 제어 응용프로그램과 Northbound API를 통한 상호작용:
SDN 컨트롤러는 상위 수준의 네트워크 제어 응용프로그램과 통신하기 위해 Northbound API를 사용한다. 이러한 응용프로그램에는 네트워크 관리 도구, 오케스트레이션 시스템 등이 포함될 수 있다.
하위의 네트워크 스위치와 Southbound API를 통한 상호작용:
SDN 컨트롤러는 데이터 평면의 네트워크 스위치 및 다른 디바이스와 Southbound API를 통해 통신한다. 이 API를 사용하여 컨트롤러는 스위치에 트래픽 처리 방법, 흐름 규칙 정의 및 네트워크 구성 변경과 같은 명령을 내릴 수 있다.
분산 시스템으로 구현:
성능, 확장성, 내고장성 및 견고성을 보장하기 위해 SDN 컨트롤러는 일반적으로 분산 시스템으로 설계된다. 이는 여러 노드로 구성되어 네트워크를 관리하기 위한 부하 분산, 장애 복구 및 전체적인 시스템 성능 향상을 가능하게 한다.
3. Network-control apps
제어의 "두뇌":
네트워크 제어 응용프로그램은 제어의 핵심 부분을 담당하며, 이를 통해 하위 수준의 서비스 및 SDN 컨트롤러에서 제공하는 API를 사용하여 제어 기능을 구현한다. 이러한 응용프로그램은 네트워크 동작을 조정하고 최적화하는 역할을 수행한다.
응용프로그램의 분리:
이러한 응용프로그램은 분리될 수 있다. 즉, 라우팅 업체나 SDN 컨트롤러와 별개로 제공될 수 있다. 이는 다른 제공업체로부터 제공되는 서비스나 솔루션을 통합할 수 있게 해주며, 유연성과 선택의 여지를 제공한다.
제3자 제공 가능:
네트워크 제어 응용프로그램은 제3자에 의해 제공될 수 있다. 이는 특정 라우팅 업체나 SDN 컨트롤러 공급자와는 독립적으로, 여러 다양한 제공업체가 다양한 응용프로그램을 개발하고 제공할 수 있음을 의미한다.
;
Components of SDN controller
SDN(소프트웨어 정의 네트워킹) 컨트롤러는 여러 구성 요소로 구성되어 있으며, 각각의 구성 요소는 특정한 목적을 수행한다.
- 네트워크 제어 애플리케이션에 대한 인터페이스 레이어: 추상화 API
- 이 레이어는 네트워크 제어 애플리케이션들이 SDN 컨트롤러와 상호 작용할 수 있는 인터페이스를 제공한다. 이는 기존 네트워크 인프라의 복잡성을 추상화하고, 애플리케이션이 고수준의 추상화를 사용할 수 있게 한다. 추상화 API는 애플리케이션과 SDN 컨트롤러 간의 통신을 용이하게 하며, 네트워크 제어 기능을 구현하는 데 도움을 준다.
- 네트워크 전체 상태 관리: 분산 데이터베이스
- 이 구성 요소는 네트워크의 전역 상태를 유지하고 관리한다. 이에는 네트워크 링크, 스위치 및 서비스에 관한 정보가 포함된다. 확장성과 내고장성을 보장하기 위해 이 상태 관리 시스템은 보통 분산 데이터베이스로 구현된다. 분산된 특성은 각 부분의 네트워크 컨트롤러가 관련된 상태 정보에 액세스할 수 있도록 하여 일관되고 최신의 전체 네트워크 뷰를 제공한다.
- 통신: SDN 컨트롤러와 제어되는 스위치 간의 통신
- 이 구성 요소는 데이터 평면에서 SDN 컨트롤러와 제어되는 스위치 간의 정보 교환을 처리한다. 이 교류는 Southbound API를 통해 이루어진다. 컨트롤러는 스위치에 흐름 규칙 및 네트워크 구성 업데이트와 같은 명령을 보낸다. 스위치는 반면에 네트워크 상태 및 트래픽 통계와 같은 정보를 제공한다. 이 양방향 통신은 네트워크의 동작을 효과적으로 제어하기 위해 중요하다.
OpenFlow 프로토콜
- 프로토콜 운영:
- OpenFlow 프로토콜은 주로 SDN 컨트롤러와 네트워크 스위치 간의 통신을 담당한다. 이 프로토콜은 네트워크의 데이터 평면(스위치)과 제어 평면(컨트롤러) 간의 통신을 허용하여 네트워크 동작을 중앙에서 제어할 수 있게 해준다.
- 메시지 교환을 위한 TCP 사용:
- OpenFlow 메시지는 주로 TCP를 사용하여 컨트롤러와 스위치 간에 교환된다. TCP는 안정적인 연결을 제공하여 신뢰성 있는 데이터 전송을 보장한다.
- 선택적 암호화:
- OpenFlow 프로토콜은 통신을 보호하기 위한 선택적인 암호화를 지원한다. 이는 보안 요구 사항을 충족하기 위해 데이터를 암호화하여 민감한 정보의 누출을 방지한다.
- 세 가지 OpenFlow 메시지 클래스:
- 컨트롤러에서 스위치로의 메시지 (Controller-to-Switch): 컨트롤러가 스위치에 명령을 보내는 데 사용된다.
- 비동기 메시지 (Asynchronous - Switch to Controller): 스위치가 상태 변경 또는 이벤트에 대한 알림을 컨트롤러에게 전달하는 데 사용된다.
- 대칭 메시지 (Symmetric - Misc.): 추가적인 교환 및 상태 유지를 위한 대칭형 메시지로, 컨트롤러 및 스위치 간에 사용된다.
- OpenFlow API와 구분:
- OpenFlow 프로토콜은 하위 수준의 통신을 담당하는 반면, OpenFlow API는 네트워크 제어 응용프로그램이 컨트롤러와 상호 작용하기 위한 고수준의 인터페이스를 제공한다.
- API는 일반화된 전달 작업을 지정하는 데 사용:
- OpenFlow API는 컨트롤러가 스위치에 대한 일반화된 전달 작업을 지정하기 위해 사용된다. 이것은 스위치의 동작 및 전달 규칙을 조정하는 데 사용된다.
SDN: 제어 평면 및 데이터 평면 상호 작용 예시
- S1이 링크 장애를 경험하면, OpenFlow 포트 상태 메시지를 사용하여 컨트롤러에 통지한다.
- SDN 컨트롤러가 OpenFlow 메시지를 수신하고, 링크 상태 정보를 업데이트한다.
- Dijkstra의 라우팅 알고리즘 응용프로그램이 링크 상태 변경 시 호출되도록 미리 등록되어 있다.
- Dijkstra의 라우팅 알고리즘이 네트워크 그래프 및 컨트롤러의 링크 상태 정보에 액세스하여 새로운 경로를 계산한다.
- 링크 상태 라우팅 응용프로그램이 SDN 컨트롤러의 플로우 테이블 계산 구성 요소와 상호 작용하여 필요한 새로운 플로우 테이블을 계산한다.
- 컨트롤러는 OpenFlow를 사용하여 업데이트가 필요한 스위치에 새로운 테이블을 설치한다.
- 컨트롤러는 OpenFlow를 사용하여 네트워크의 스위치 중 업데이트가 필요한 스위치에 새로운 플로우 테이블을 설치한다.
ICMP: 인터넷 제어 메시지 프로토콜
사용 목적: 호스트와 라우터가 네트워크 수준의 정보를 통신하는 데 사용된다.
오류 보고:
- 호스트, 네트워크, 포트, 프로토콜 등에 대한 오류 보고를 포함한다.
- 예: 도달할 수 없는 호스트, 네트워크, 포트, 프로토콜 등의 상황에서 발생하는 오류를 보고한다.
에코 요청/응답 (ping에서 사용): ICMP는 "ping"과 같은 도구에서 사용되는 에코 요청 및 응답 메시지를 통해 네트워크 기기 간의 접근성을 확인할 수 있다.
IP 위의 네트워크 계층: ICMP 메시지는 IP 데이터그램 안에 실려 전송된다.
ICMP 메시지 구조:
- 유형 및 코드: ICMP 메시지의 유형과 세분화된 코드를 지정한다.
- 오류 유발 IP 데이터그램의 첫 8바이트: 오류를 유발한 IP 데이터그램의 첫 8바이트가 함께 전송된다.
ICMP는 네트워크에서 발생하는 문제를 식별하고 보고하는 데 사용되며, 특히 도달 불가능한 상태와 같은 오류 조건을 알리는 데 중요한 역할을 한다. 또한, 에코 요청과 응답을 통해 호스트 및 네트워크 간의 접근성을 확인할 수 있다.
ttl 값을 1 2 3 4 ... 으로 설정한 뒤, 패킷을 보냄으로써 ICMP 에러를 반환하게 함하여 path를 추적하는 것이 가능하다.
'학교공부 > 컴퓨터 네트워크' 카테고리의 다른 글
Network Layer: Data Plane (0) | 2023.11.29 |
---|---|
[컴퓨터 네트워크] Computer Network outline (0) | 2023.10.21 |
[컴퓨터 네트워크] Transport Layer (1) | 2023.10.18 |
[컴퓨터 네트워크] Application Layer (0) | 2023.10.11 |