지금까지 우린 per-router control plane에 대해 공부했다.

위의 방식은 각 라우터의 라우팅 알고리즘을 통해 테이블을 생성하고, 데이터를 주고 받았다.
외부의 logically centralized 컨트롤러가 각 라우터의 플로우 테이블을 만든다.
- 각 라우터가 다양한 기능 수행할 수 있도록 서비스를 제공한다.

컨트롤 에이전트(CA)를 통해 자신의 상태정보, 통계정보, 링크 coat정보, DV값 등을 외부 컨트롤러에 전달하고쉬운 네트워크 관리
각 라우터의 misconfigurations을 피할수 있고,
원하는 설정 및 서비스로 트래픽 플로우 관리의 유연함을 얻을 수 있다.
(기존 방식은 각각의 라우터마다 분리되어 동작하기에 설정이 꼬일 수 있다..)
프로그래밍 라우터
플로우 테이블을 외부 centralized 컨트롤러에서 만들기 때문에
각각의 라우터에서 분산된 알고리즘으로 테이블을 만드는 것보다 훨씬 쉽다.
오픈된 컨트롤 플랜의 구현
이전 방식에서는 하나의 라우터를 하나의 회사가 만들어 생산했다면 (Cisco),
여러 회사에서 하드웨어 SW을 개발가능 하여 발전이 빠르게 이루어 진다.


기존 방식SDN
기존 방식SDN
기존 방식SDN
OpenFlow를 사용한다.
northbound API를 통해 위의 어플리케이션 계층과 통신을 한다.southbound API를 통해 아래의 네트워크 스위치와 통신한다.
세가지 부분으로 나뉜다.
네트워크 컨트롤 애플리케이션의 인터페이스 계층추상화 API를 제공한다.네트워크 전체 상태 관리
네트워크 링크, 스위치, 서비스 등의 상태를 유지하며 이를 기반으로 결정을 내린다.
분산 데이터베이스로 설계된다.
(호스트 정보, 플로우테이블, 링크상태정보, 통계데이터를 유지한다.)
통신
SDN 컨트롤러와 네트워크 장치(스위치) 간의 통신을 담당. (OpenFlow, SNMP)

SDN 컨트롤러와 네트워크 장치(스위치) 간의 통신을 지원하는 프로토콜.
하지만, OpenFlow API와 구별된다.
(OpenFlow API는 generalized포워당 작업을 지정하는 데 사용된다.)
컨트롤러에서 스위치로 보내는 제어 메세지에는 4가지 종류가 있다.
상태(features) 메세지상태 수정(modify-state) 메세지
컨트롤러가 스위치 플로우 테이블(openflow table)의
엔트리를 추가/제거/수정을 위해 해당 메세지를 보낸다.
설정(configure) 메세지
이 메시지는 컨트롤러가 스위치의 설정 파라미터들을 얻거나(쿼리),
설정할 수 있도록 한다.
패킷 전송(packet-out) 메세지스위치에서 컨트롤러에 보내는 메세지는 3가지 종류가 있다.
패킷 전달(packet-in) 메세지
패킷을 받았는데, 플로우 테이블 엔트리에 매칭되지 않을 때(어디로 보낼지 모를 때)
패킷을 컨트롤러에 보낸다.
➡️ 추후 컨트롤러에서 오는 패킷 전송(packet-out) 메세지 를 기다린다.
플로우 제거(flow-remove) 메세지
플로우 테이블 엔트리가 삭제되었음을 알린다.
(테이블은 시간이 만료되었거나, 상태 수정 메시지를 수신한 결과로 삭제될 수 있다.)
포트 상태(port-status) 메세지
스위치 s2와의 링크 단절을 감지한 s1은 OpenFlow의 포트 상태 메시지를 사용하여 링크 상태의 변화를 SDN 컨트롤러에게 알린다.
메시지를 받은 SDN 컨트롤러는 링크 상태 정보를 갱신한다.
(데이터베이스 갱신)
다익스트라 링크 상태 라우팅을 담당하는 네트워크 제어 애플리케이션은 링크 상태의 변화가 있을 경우 알려달라고 이전에 등록해 두었는데,
링크 상태가 변화하여 알림을 받게 된다.
링크 상태 라우팅 애플리케이션이 링크 상태 관리자에게 요청하여 갱신된 링크 상태를 가져온다.
➡️ 그 후 다시 새로운 최소 비용 경로를 계산한다.

링크 상태 라우팅 애플리케이션은 갱신되어야 할 플로우 테이블을 결정하는 플로우 테이블 관리자와 접촉한다.
(새로 계산한 경로로 플로우 테이블을 바꾸기 위해)
플로우 테이블 관리자는 OpenFlow 프로토콜을 사용하여 링크 상태 변화에 영향을 받는 스위치들의 플로우 테이블을 갱신한다.
s1 s2의 링크 고장으로 해당 경로를 사용할 수 없어, 플로우 테이블이 다시 생성되었다.
위의 7번에 링크 상태 변화에 영향을 받는 스위치란 s1, s2, s4을 뜻한다.
s1 : 이제부터 s2를 목적지로 하는 패킷을 s4로 보낸다.
s2 : 이제부터 s1로부터의 패킷을 중간 스위치 s4를 통해 받는다.
s4 : s1에서 s2로 가는 패킷을 전달해야 한다.

서비스 추상 계층(Service Abstraction Layer, SAL)ONOS는 분산 코어를 통해 고가용성과 성능 확장,
Intent 프레임워크를 통해 고수준의 제어를 제공한다.

ONOS는 분산 코어를 통해, 서비스 안정성, 복제 성능, 확장성등을 제공한다.
제어 평면은 신뢰할 수 있고, 성능 확장성이 우수하며 보안이 강화된 분산 시스템으로 설계되어야 한다.
장애 복원력 (Robustness to Failures)
장애가 발생했을 때 이를 견딜 수 있는 강한 분산 시스템 이론이 필요하다.
보안과 신뢰성 (Dependability, Security)
"보안이 기본적으로 내재되어 있는가?“를 고민해야 한다.
각 어플리케이션 혹은 네트워크 마다 특정 요구 사항을 만족해야 한다.
실시간성 (Real-Time)
특정 응용 프로그램에서는 네트워크와 프로토콜이 실시간 통신을 지원해야 한다.
초고신뢰성 (Ultra-Reliable)
네트워크가 항상 작동해야 하는 상황에서 높은 신뢰성을 유지해야 한다.
초고보안성 (Ultra-Secure)
보안이 최우선으로 중요한 환경에서도 이를 충족해야 한다..
네트워크가 단일 AS를 초과하는 환경에서도 문제없이 동작하고, 대규모 인터넷 확장을 지원해야 한다.