SDN(Software defined networking)이란?
소프트웨어 정의 네트워킹(Software defined networking, SDN)은 개방형 API(오픈플로우)를 통해 네트워크의 트래픽 전달 동작을 소프트웨어 기반 컨트롤러에서 제어/관리하는 접근방식이다.
트래픽 경로를 지정하는 컨트롤 플레인과 트래픽 전송을 수행하는 데이터 플레인이 분리되어 있다. 따라서 네트워크의 세부 구성정보에 얽매이지 않고 요구사항에 따라 네트워크를 관리할 수 있다.
SDN의 등장 이전에는 monolithic(획일적인) 라우터로 네트워크가 구성었었다. 예로 CISCO 같은 라우터 제조사의 같은 OS와 같은 프로토콜, 같읕 middlebox (firewall, load balancer, NAT box)로만 네트워크를 구성해야 한다. 따라서 장비 제조 회사에 매우 종속적이게 되며 관리자는 네트워크 장비를 수동으로 일일히 관리해야했다.
SDN이란 네트워크층의 제어 로직을 소프트웨어로 제어하는 것이다. 제어부와 전송부를 분리함으로써 네트워크 장비는 전송 기능만 담당하도록 하는 것이다. SDN의 등장으로 라우터 내부에 탑재되어있던 로직이 control plane에서 제어할 수 있게 되었다.
SDN은 control plane에 논리(개념)적으로 중앙화 된다. 이에 따라
- 네트워크 관리가 쉬워진다
- 테이블 기반 포워딩(OpenFlow API)를 사용하여 라우터를 프로그래밍 할 수 있게 된다.
- 대신 분산된 프로그래밍이 어려워진다.
- 제어 평면을 공개된(non-propriety) 환경을 구성할 수 있다.
SDN의 등장으로 인한 변화는 예로 PC 환경의 발전과 유사하다.
위 그림과 같이 특정 하드웨어, 특정 운영체제, 특정 어플리케이션을 사용해여 네트워크를 구성하는 monolothic한 상황에서 CPU부터 어플리케이션까지 모두 제각각 선택할 수 있게 발전했다. 이에 따라 PC 시장은 빠르게 발전하고 성장하였다.
SDN의 구성요소
데이터 평면 스위치 (Data-plane switchies)
- 하드웨어로 일반화된 포워딩을 구현하는 빠르고 단순한 범용 스위치 (라우터)
- 컨트롤러의 명령을 기반으로 플로우 테이블을 계산
- 테이블 기반 스위치 제어용 API (OpenFlow)
- southbound API까지 담당
SDN 컨트롤러 (network OS)
- 네트워크 상태 정보를 유지
- northbound API 를 통해 네트워크 제어 어플리케이션 위로 통신가능
- southbound API를 통해 네트워크 스위치 아래로 통신 가능
- 성능, 확장성, 견고성 등을 위해 분산된 시스템으로 구현
네트워크 제어 어플리케이션
- routing, access control, load balance
- 제어의 두뇌로서, 컨트롤러에게 제공받은 API로 저수준의 서비스를 이용하여 제어 기능을 구현한다.
- unbundled : 제3의 어플리케이션에게 제공될 수 있다.
SDN의 특징 4가지
일반화된 flow 기반의 포워딩 (OpenFlow)
SDN으로 제어되는 스위치들에서 패킷 전달은 전송층, 네트워크층, 링크층 헤더의 어떤 값을 기반으로 하던 이루어질 수 있다. SDN에서는 모든 네트워크 스위치의 플로우 테이블 항목들을 계산하고 관리, 설치하는 일들이 모두 SDN 제어평면의 임무이다.제어 평면과 데이터 평면의 분리
데이터 평면은 네트워크의 스위치들로 구성되는데, 이들은 상대적으로 단순한 장치들로 자신들의 플로우 테이블 내용을 기반으로 동작을 수행한다. 제어 평면은 서버와 스위치들의 플로우 테이블을 관리하는 소프트웨어로 이루어져있다.네트워크 제어 기능이 데이터 평면 스위치 외부에 존재
전통적인 라우터들과 달리 제어평면의 소프트웨어는 네트워크 스위치로부터 멀리 떨어진 별도의 서버에서 수행된다. 즉, SDN 컨트롤러는 네트워크 상태 정보를 유지하고, 이를 제어 평면에서 동작하는 제어 어플리케이션들에게 제공하여 장치들을 모니터링하고 제어할 수 있는 수단을 제공한다.프로그래밍 가능한 제어 어플리케이션
제어 평면에서 수행 중인 네트워크 제어 어플리케이션을 통해 네트워크를 프로그램할 수 있다. 이 어플리케이션들은 SDN 제어평명의 두뇌로서 컨트롤러가 제공하는 API를 이용하여 장치들에 있는 데이터 평면을 명세하고 제어한다.
오픈플로우 프로토콜 OpenFlow Protocol
OpenFlow 프로토콜은 SDN 컨트롤러와 네트워크 장치 사이에서 동작하는 프로토콜이다.
기존 레거시 장비에서는 제어 부분이 하나의 장비에 같이 탑재되었기 때문에 통신이 필요없었지만 SDN에서는 데이터 평면의 포워딩을 제어(match & action)하고 정보를 수집하기 위해 이러한 Southbound 인터페이스를 사용한다. OpenFlow는 이론 상으로 가능했던 SDN을 구현하기 위한 처음으로 제정된 표준 통신 인터페이스이다.
컨트롤러가 스위치로 전달하는 메세지
컨트롤러가 스위치에게 주는 메세지
설정
: 컨트롤러가 스위치의 설정 파라미터들을 질의하거나 설정할 수 있도록한다.상태 수정
: 컨트롤러가 스위치 플로우 테이블의 엔트리를 추가/제거/수정 하거나 특성을 설정한다.상태 읽기
: 스위치 플로우 테이블과 포트로 부터 통계 정보와 카운터 값을 얻기 위해 사용한다.패킷 전송
: 스위치의 지정된 포트에서 특정 패킷을 내보내기 위해 사용한다. 이 메세지 자체는 페이로드 부분에 보낼 패킷을 포함한다.
스위치가 컨트롤러로 전달하는 메세지
스위치가 컨트롤러에게 주는 메세지
플로우 제거
: 플로우 테이블 엔트리가 시간 만료되었거나 또는 상태 수정 메세지를 받은 결과로 삭제되었음을 보고패킷 전달
: 플로우 테이블의 어떤 엔트리와도 일치하느않는 경우, 그러한 특정 패킷을 컨트롤러에게 전달하면서 처리 방법을 질의포스 상태
: 포트의 상태 변경을 컨트롤러에 알림
SDN의 동작 방식 (예제)
최단경로 다익스트라 알고리즘이 사용되는 위 상황에서 스위치 s1과 s2가 단절되었을 때 s1에서의 상황을 살펴보자. s1, s3, s4로 들어오고 나가는 플로우 포워딩 규칙은 변경되었으나, s2의 동작을 바뀌지 않았다고 가정한다. OpenFlow를 사용하며 제어 평면은 링크 상태 라우팅 외의 기능을 수행하지 않는다.
- 단절을 감지한 s1은 OpenFlow의 포트상태 메세지를 사용하여 링크 상태의 변화를 컨트롤러에 알림
- 메세지를 받은 컨트롤러는 링크 상태 관리자에게 알리고, 관리자는 링크 상태 DB를 갱신
- 다익스트라 링크상태 라우팅을 담장하는 제어 어플리케이션은 링크 상태 변화에 대한 알림을 받음
- 링크 상태 라우팅 어플리케이션이 상태관리자에게 요청하여 갱신된 링크 상태를 받아와 최소비용경로를 계산
- 라우팅 어플리케이션은 갱신되어야 할 플로우 테이블을 결정하는 플로우 테이블 관리자와 접촉
- 플로우 테이블 관리자는 OpenFlow 프로토콜을 사용하여 영향을 받는 스위치들의 플로우 테이블을 갱신
위 그림에서는 s1, s2, s4가 6번의 영향을 받는 스위치에 해당한다. 위는 이전의 라우터 별 제어구조에서 모든 개별 라우터에서 제공되던 제어평면 서비스를 SDN 제어평면이 OpenFlow를 이용하여 어떻게 제공하는지 보여주고 있다.