SDN 제어평면에서의 패킷 포워딩은 목적지 기반 포워딩이 아닌 일반적인 포워딩을 사용한다. 즉 출발지/목적지의 IP주소만 가지고 패킷을 알맞게 포워딩하는것이 아니다. 네트워크 계층, 링크 계층에서의 출발지/목적지 주소에 이어서 트랜스포트, 네트워크, 링크 계층에 있는 패킷 헤더의 많은 다른 값에 기반해서 포워딩이 이루어진다.
SDN 구조의 네가지 특징
- 플로우 기반 포워딩 : SDN으로 제어되는 패킷 스위치(라우터, 링크계층 스위치)에서 패킷 포워딩은 세그먼트, 데이터그램, 링크 프레임의 헤더의 다양한 값을 가지고 포워딩을 한다. (OpenFlow 1.0그림의 11가지 헤더 참고) 이러한 패킷 포워딩 규칙은 각 스위치의 플로우 테이블에 기록된다. 그래서 SDN 제어평면 에서는 모든 네트워크 스위치들의 플로우 테이블 항목들을 계산하고 관리, 설치하는 일들을 맡게된다.
- 데이터 평면과 제어 평면의 분리 : 데이터 평면은 네트워크 스위치들로 구성되는데 이들은 주로 빠른 하드웨어로 구성되어있다. 그리고 자신들의 플로우 테이블 내용을 기반으로 패킷들을 "비교, 실행"을 수행한다. 제어 평면은 서버와 스위치들의 플로우 테이블을 결정, 관리하는 소프트웨어로 이루어진다.
- 네트워크 제어 기능이 데이터 평면 스위치 외부에 존재 : 전통적인 라우터들과 달리, SDN은 네트워크 스위치로부터 멀리 떨어진 별도의 서버에서 수행된다. 위 그림에서 보듯이 제어 평면은 SDN컨트롤러와 제어 애플리케이션들의 집합으로 이루어진다. 컨트롤러는 원격링크와 스위치, 호스트들의 상태등등 정확한 상태 정보를 유지하고, 이 정보를 제어 애플리케이션들에게 제공한다. 그리고 애플리케이션들이 하부 네트워크 장치들을 모니터하고 프로그램하고 제어까지 할 수 있도록 수단을 제공한다. 위 그림에서 컨트롤러는 단일 중앙 서버의 형태이지만, 실제로 컨트롤러는 단지 논리적으로만 중앙 집중 형태이다. 일반적으로 협업, 확장성, 이용성을 위해서 몇 개의 서버에 나눠서 구현된다.
- 프로그램이 가능한 네트워크 : 제어 평면에서 실행중인 제어 애플리케이션을 통해 네트워크를 프로그램 할 수 있다. 애플리케이션들은 SDN 제어 평면의 "두뇌"라고 불리며 SDN 컨트롤러가 제공하는 API를 이용하여 네트워크 장치들에 있는 데이터 평면을 명세하고 제어한다. 예를 들어 라우팅 네트워크 제어 애플리케이션은 SDN컨트롤러가 가지고 있는 노드 상태 및 링크 상태 정보에 기반한 다익스트라 알고리즘을 수행하여 출발지와 목적지 사이의 경로를 결정한다. 그리고 어떤 애플리케이션은 어떤 패킷을 스위치에서 막을지를 결정하는 접근 제어를 수행할 수 있고, 어떤 애플리케이션은 서버의 부하를 분산시키는 방식으로 패킷을 포워딩 할 수 있다.
많은 질문이 생길 수 있다. 플로우 테이블은 실제로 어디서 어떻게 계산되는가? 이 테이블들은 SDN으로 제어되는 장치들에서 발생하는 사건에 대응하여 어떻게 갱신되는가? 여러 스위치들의 플로우 테이블 엔트리들이 네트워크 전역과 관련된 기능들의 일관성 유지를 위해 어떻게 조율될 수 있는가? 등등 의문점 투성이다.
위와 같은 기능들을 제공하는일이 모두 SDN 제어 평면의 역할이고 하나씩 알아보자.
SDN 컨트롤러와 SDN 네트워크 제어 애플리케이션
위 그림을 보면, 네트워크 장치를 포함하는 인프라 계층은 단순히 패킷과 이벤트 신호들을 전달하는 역할만 한다. 컨트롤러와 애플리케이션 계층에서 패킷의 흐름을 제어할 수 있는 소프트웨어를 프로그래밍하여 하나의 네트워크 인프라에서 다양한 네트워크 환경을 구축할 수 있다. 즉, SDN에서는 패킷이 장치로 들어왔을 때 패킷을 어디로 전달할지 SDN 제어 소프트웨어에게 물어보고, 그 결과를 반영하여 패킷을 전송하는 경로와 방식을 결정한다.
SDN 컨트롤러의 3가지 계층을 자세히 알아보자
- 통신 계층 : SDN 컨트롤러와 제어받는 네트워크 장치들 사이의 통신을 담당한다. SDN 컨트롤러가 원격의 SDN 기능이 가능한 스위치, 호스트 또는 다른 장치들의 동작을 제어하기 위해서는 컨트롤러와 그 장치들 사이에 정보를 전달하는 프로토콜이 분명히 필요하다.(OpenFlow, SNMP..) 그리고 장치는 주변에서 관찰한 이벤트들을 컨트롤러에 알릴 수 있어야 한다. 예를 들어 연결된 링크가 동작을 시작했거나 단절되었음을 나타내는 메시지, 디바이스가 네트워크에 합류했다는 메시지, 장치가 가동되어 동작중임을 나타내는 신호 등등.. 이러한 이벤트들은 SDN 컨트롤러에게 네트워크 상태에 대한 최신 정보를 제공한다. 통신 계층은 사우스 바운드라고 알려진 컨트롤러 인터페이스를 넘나든다. 아래에 OpenFlow에 대해 설명이 되어있는데 오픈플로우는 모두는 아니지만 대부분의 SDN 컨트롤러에 구현되어 있다.
- 네트워크 전역 상태 관리 계층 : SDN 제어 평면의 제어 결정(희망하는 종단간 포워딩, 부하 균형, 특별한 방화벽 기능을 구현하기 위해서 모든 스위치의 플로우 테이블을 구성하는 일)을 위해서는 컨트롤러가 네트워크 호스트와 링크, 스위치, 그리고 SDN으로 제어되는 다른 장치들에 대한 최신 정보를 알아야 한다. 스위치의 플로우 테이블은 카운터를 포함하므로 이 값을 사용할 수 있어야 한다. 제어 평면의 궁극적인 목적은 장치들의 플로우 테이블을 결정하는 것이므로 컨트롤러도 이 테이블들의 복사본을 당연히 알고 있어야한다. 이러한 정보들은 모두 SDN 컨트롤러가 유지하는 네트워크 전역 상태이다.
- 네트워크 제어 애플리케이션 계층 : 컨트롤러는 노스바운드 인터페이스를 통해서 네트워크 제어 애플리케이션들과 상호 작용한다. 이를 API 라고 하는데 API는 네트워크 제어 애플리케이션들이 상태 관리 계층 내의 네트워크 상태 정보와 플로우 테이블을 읽고 쓸수 있도록 해준다. 제어 애플리케이션들은 상태 변화 이벤트가 발생하면 알려달라고 요청해두고, 요청이 오면 적절하게 플로우 테이블을 수정할 수 있다.
'CS > Network' 카테고리의 다른 글
[Network] 링크 계층 주소체계와 ARP (0) | 2021.11.04 |
---|---|
[Network] 네트워크 계층 : OpenFlow 프로토콜 (0) | 2021.10.08 |
[Network] 네트워크 계층 : 라우터(Router) (0) | 2021.10.01 |
[Network] 네트워크 계층 : 개요와 서비스 모델 (0) | 2021.10.01 |
[Network] 트랜스포트 계층 : 흐름제어, TCP 연결 (0) | 2021.09.28 |