하나의 logical하게 중앙화된 Remote Controller에서 모든 계산을 해준다. 그러면 CA가 Remote Controller하고 이야기해서 계산된 결과만 받아오면 된다.
즉, data plane은 각 라우터별로 있고, control plane만 따로 묶어 이것을 프로그래밍 하는 것이 SDN이다.
💡왜 logically centralized control plane인가?
SDN을 사용함으로써 이전에는 라우터가 잘못 구성되는 경우도 있었는데 이를 피할 수 있고, traffic flow에 대한 유연성을 더 좋게 만들 수 있다. 그래서 table-based forwarding 프로그래밍을 하게 된 것이다. (centralized 프로그래밍).
table-based forwarding에 API를 하나 둬가지고 OpenFlow API를 제공해주어 프로그래밍을 줄 수 있다. 이 OpenFlow는 control plane을 open(누구나 쓸 수 있게)으로 구현하였다.
- 장점: 네트워크 관리가 좋다, 프로그램어블 하다.
PC를 생각했을 때 PC는 맨 밑에 하드웨어가 있고, 그 위에 OS, 그 위에 Application이 있다. 하드웨어도 여러 종류, OS도 여러 종류, Application도 여러 종류이다. 이럴 때 맨 아래 Microprocessor 위에 Open Interface를 만들면, 그 위에 어떤 OS가 돌아가도 작동한다. OS와 Application 사이도 마찬가지이다.
innovation이 급격하게 이루어지고 있고, industry도 상당히 커서 Open Interface는 꼭 필요하다.
하드웨에서 일반화된 데이터 평면 포워딩을 구현하는 빠르고 단순한 범용 스위치이다. software에 의해 control 되는 API가 존재하는데 이 API는 OpenFlow를 통해서 단일화되어 있는데, 어떤 것이 control 가능한지, 어떤 것이 안되는지 이런 것들이 정의되어 있다.
네트워크 상태정보를 유지하고 상위 layer와 정보를 주고받는다.
중간 컨트롤러와 프로토콜을 연결한다. 밑에 있는 하드웨어와 독립되어 있다.
communication layer : switch하고 통신하는 부분. OpenFlow나 SNMP가 있다. 이런 네트워크를 관리하는 protocol들이 붙어있다.
Network-wide state management layer : 분산된 switch, router들에 대한 정보들이 DB에 저장이 된다. link-state에 대한 정보, host 정보, 물리적인 switch정보들이 중간에 있다. 이것으로부터 통계를 뽑아내고 flow table도 만든다.
interface layer : 위에 있는 프로그램(APP)을 실행하기 위한 API들이 있다.(APP과 송신을 위해)
각각의 switch로부터 공통된 정보를 주고받는 역할을 한다. 여기에는 TCP가 사용이 된다. 그리고 OpenFlow message를 만들기 위해 3가지 클래스가 있다.(controller-to-switch, asynchronous(switch to controller), symmetric(msic))
Controller에서 switch로, 위에서 아래로 내려가는 것이다. 컨트롤러와 스위치가 만드는 회사가 서로 다르다.
switch에서 controller로, 아래서 위로 올라가는 messages이다.
1. s1이 controller에다가 link failure가 생겼다고 OpenFlow protocol을 통해서 알려준다.
2. 중간에 있는 SDN controller가 이를 받고, 자신의 link state information을 업데이트 한다. 끊어진 링크를 무한대로 바꾼다.
3. 이 내용을 위쪽으로 올려서 다익스트라 알고리즘이 이 변화를 적용해서 알고리즘을 돌리게 된다.
4. 이 알고리즘의 계산 결과(route 정보)를 밑으로 내려준다.
5. 맨 위에 있는 routing application이 계산된 Flow table을 밑으로 내려준다.
6. controller가 OpenFlow 통해서 밑에 있는 모든 switch들에게 이렇게 적용하라고 뿌려준다.
발생할 수 있는 문제: 동시에 보내면 컨트롤러로 가는 트래픽이 몰려 혼잡이 발생할수 있다.
컨트롤러가 고장나면 전체 네트워크가 동작을 못한다.(single node faliure) 이 문제를 방지하기 위해 예비 서버를 두어야 한다.
Controller 종류: ODL,ONOS가 있다정도만 알고있으면 됨.