a. SDN
a-1. SDN 구조의 특징
- 플로우 기반 포워딩 : 스위치들에서 패킷 포워딩은 전송 계층, 네트워크 계층, 링크 계층 헤더의 어떤 값을 기반으로도 가능하다.
IP 데이터그램의 포워딩이 온전히 목적지 주소만으로 이뤄지는 전통적 라우터 기반과는 매우 대조적. - 데이터 평면과 제어 평면의 분리 : 데이터 평면은 네트워크 스위치로 구성. 이들은 자신의 플로우 테이블의 내용을 기반으로 비교와 실행을 수행. 제어 평면은 서버와 스위치의 플로우 테이블을 결정, 관리하는 소프트웨어로 이뤄진다.
- SDN의 제어 평면은 SDN 컨트롤러와 네트워크 제어 응용들의 집합으로 이뤄짐
- 데이터 평면 스위치, 컨트롤러, 네트워크 제어 응용들이 서로 다른 제조사나 기관에서 제공하는 분리된 개체이다.
a-2. SDN 컨트롤러와 SDN 네트워크 제어 응용
컨트롤러는 크게 세개의 계층으로 구성된다.
- 통신 계층 : SDN 컨트롤러와 제어받는 네트워크 장치들 사이의 통신
컨트롤러와 장치들 사이에 정보를 전달하는 프로토콜.
사우스바운드라는 컨트롤러 인터페이스(API)를 넘나는다. - 네트워크 전역 상태 관리 계층 : SDN 제어 평면의 궁극적인 제어 결정
제어 장치들의 플로우 테이블을 결정. - 네트워크 제어 응용 계층과의 인터페이스 : 컨트롤러와 네트워크 제어 응용들과의 상호 작용
노스바운드라는 인터페이스를 통해 네트워크 제어 응용들이 네트워크 상태 정보와 플로우테이블을 읽도록 함
논리적으로는 중앙 집중화된 것으로 보이지만, 실제로는 분산된 서버의 집합으로 구현된다.
a-2-1. 오픈플로우 프로토콜
통신 계층에서 동작하는 프로토콜.
컨트롤러와 스위치(혹은 오픈플로우 api를 구현한 다른 장치)와의 사이에서 동작.
TPC 상에서 포트번호 6653을 사용.
a-2-1-1. 오픈플로우에서 자주 사용되는 메시지
컨트롤러에서 스위치로 전달 되는 주요 메시지
- 설정 : 스위치의 설정 파라미터를 문의하거나 설정
- 상태 수정 : 스위치 플로우 테이블의 엔트리를 추가/제거/수정 하거나 스위치 포트의 특성을 설정
- 상태 읽기 : 스위치 플로우 테이블과 포트로부터 통계 정보와 카운터 값을 요청
- 패킷 전송 : 스위치의 지정된 포트에서 특정 패킷을 내보내기 위해 사용
스위치에서 컨트롤러로 전달 되는 주요 메시지
- 플로우 제거 : 어떤 플로우 테이블 엔트리가 시간이 만료 되었거나, 상태 수정 메시지에 대한 결과로 삭제됨을 알림
- 포트 상태 : 포트의 상태 변화를 알리기 위해 사용
- 패킷 전달 : 플로우 테이블의 어떤 엔트리와도 일치하지 않는 패킷이나, 작업을 위해 컨트롤러로 패킷을 전달.
a-3. 데이터 평면과 제어 평면의 상호 작용 예제
위 예제는 다익스트라 알고리즘이 최단 경로를 위해 사용되는 SDN 예시이다.
라우터별 제어 시나리오와는 두가지 차이점을 가진다.
- 다익스트라 알고리즘이 패킷 스위치 외부에서 별도의 어플리케이션으로 실행
- 링크 업데이트 정보를 서로 간이 아닌 SDN 컨트롤러에게 전송한다.
본 예시에서 s1, s2 사이의 링크가 단절되어 플로우 테이블을 수정해야 하는 상황이다.
- 링크 단절을 감지한 s1이 오픈 플로우의 포트 상태 메시지를 통해 SDN 컨트롤러에 링크 상태 변화를 알린다.
- SDN 컨트롤러는 링크 상태 관리자에게 알려 링크 상태 데이터베이스를 갱신한다.
- 다익스트라 링크 상태 라우틍을 담당하는 네트워크 제어 응용은 링크 상태 변화가 있을 경우 알려받도록 이전에 등록해두었다. 이 응용은 링크 상태의 변화를 알게 된다.
- 링크 상태 라우팅 응용이 링크 상태 관리자와 접촉해 갱신된 링크 상태를 가져와 새로운 최소 비용 경로를 계산한다.
- 컨트롤러의 플로우 테이블 관리자가 오픈플로우 프로토콜을 사용해 링크 상태 변화에 영향을 받는 스위치들의 플로우 테이블을 갱신한다.