블로거 워누입니다!
저번 포스팅에서 mininet을 활용해서 가상 네트워크를 구성하고, flow entry를 추가도 해보고 삭제도 해 보았습니다. 그럼 이제 실제로 OpenFlow Controller를 설치해서 간단하게라도 테스트를 진행해 보아야겠죠?
.
근데 그걸 하기전에..!
오늘 포스팅에서는 OpenFlow Controller가 어떤 역할을 하는지, 그리고 어떤 종류가 있는지 알아봅시다!
.
혹시 제가 맨 처음 포스팅에서 SDN에서 네트워크의 데이터 평면(data plane)과 제어 평면(control plane)을 분리하고 이 사이에 표준화된 인터페이스를 제공하며, 네트워크 운용자가 여러 상황에 맞추어 제어 평면을 프로그래밍하여 데이터 평면에서 이루어지는 통신 기능을 다양한 방식으로 제어할 수 있다고 한 거 기억하시나요? 컨트롤러가 하는 역할이 바로 이것입니다! 조금 간략하게 정리해드리자면, OpenFlow Controller는 OpenFlow Switch에게 프로그래밍 인터페이스를 제공합니다.이 프로그래밍 인터페이스를 이용해 제어와 관리 업무를 수행하고 새로운 기능을 제공하는 네트워크 어플리케이션을 작성할 수 있습니다. 그리고 SDN과 OpenFlow의 제어 평면은 논리적으로 집중되어 있고, 네트워크 어플리케이션은 네트워크가 마치 단일 시스템인 것처럼 작성됩니다!
.
아래 그림도 참고하시면 될 거 같아요. 역시 SDN 첫 포스팅에서 보여드린 그림인데요.
이 그림이 컨트롤러의 역할을 잘 설명할 수 있는 그림인거 같네요!
.
[원본 출처 : http://terms.naver.com/entry.nhn?docId=2851199&cid=56756&categoryId=56756]
.
위 그림이 영어로 되어있지만 쉽게 풀어보자면 ,
1계층은 네트워크(장비) 인프라 계층으로 네트워크 장비들이 있고,
2계층은 제어 계층으로 SDN 제어 소프트웨어가 있네요.
3계층은 응용 계층으로 어플리케이션들이 있습니다.
.
1계층과 2계층 사이에서 데이터 평면 제어 인터페이스를 주고 받고
2계층과 3계층 사이에 노스바운드 API를 주고 받는 것을 알 수 있습니다.
.
반응형 제어 모델의 경우 OpenFlow Switch는 새로운 패킷 플로우가 OpenFlow Switch에 도착과 같은 결정이 필요한 상황이 발생하면 이걸 OpenFlow Controller에게 문의합니다.
.
플로우 기반 제어 모델의 경우에는 각 플로우의 첫번째 패킷이 포워드나 폐기 등의 결정을 하려면 컨트롤러에게 전달되야 하므로 해당 플로우에 속한 나머지 트래픽들은 스위칭 하드웨어 내에서 약간의 성능지연이 발생할 수밖에 없습니다. 대부분의 경우에는 첫 패킷의 지연을 무시할 수 있는 수준이지만 만약, 중앙의 OpenFlow Controller가 지리적으로 멀리 떨어져있거나 대부분의 플로우가 단일 패킷 플로우같이 일시적인 경우에는 문제가 됩니다. 대안으로 사전적 접근방법에서 OpenFlow는 정책 룰을 Controller가 Switch에게 밀어넣는 것이 가능합니다.
.
.
위에 너무 구구절절하게 썻지만 '대충 이런느낌이구나...' 이렇게 넘어가셔도 될거에요! OpenFlow Controller가 어떻게 동작하는지 실제로 해봐야 '아! 그렇구나!!' 하는 느낌이 오겠죠?
이제 어떤 OpenFlow Controller를 써야 할지 종류를 한번 보겠습니다.
.
이름 | 언어 | 플랫폼 | 라이센스 | 제작자/사 | 비고 |
OpenFlow Reference | C | Linux | OpenFlow License | Stanford/ Nicira | Not designed for extensibility |
NOX | Python, C++ | Linux | GPL | Nicira | actively developed |
POX | Python | Any | GPL |
| POX is NOX's younger sibling. |
Beacon | Java | Win, Mac, Linux, Android | GPL(core), Foss Licenses for your code | David Erickson (stanford) | Web UI framework, regression test framework |
Floodlight | Java | Any | Apache | BigSwitch, based on Beacon | Rest API Open community |
Trema | Ruby, C | Linux | GPL | NEC | regression test Framework supports OpenFlow 1.3 |
Maestro | Java | Win, Mac, Linux | LGPL | Zheng Cai (Rice) | Multi-threading and targets researchers. |
Opendaylight | Java | Linux, and others | EPL |
| OpenDaylight is a Collaborative, open source project to advance SDN. |
FlowVisor |
|
|
| On.lab | "slices" network resources |
RouteFlow | C++, Python | Linux | Apache | CPqD(Brazil) | virtual IP routing as a service. |
<OpenFlow Controller List>
.
종류가 많죠? 이 많은 걸 다 할 수는 없을거 같아요.. 그래서 다음 포스팅에 쓸 컨트롤러를 결정을 해야 하는데.. 익숙한 언어와 운영체제를 쓰는게 좋을거 같네요!
저는 주로 Java를 활용하니 Beacon이나 Maestro, Opendaylight 셋중에 하나를 골라 프로젝트를 진행해 보도록 하겠습니다.
.
오늘 포스팅은 여기까지 할 겁니다! 다음 포스팅에서는 저 3개 controller중 하나를 골라서 설치하는 것부터 간단한 운용까지 하는 방법을 담아보도록 노력하겠습니다~
그럼 20000!
'Project Report - SDN' 카테고리의 다른 글
리눅스에서 jdk 간단하게 설치하기! (0) | 2018.01.09 |
---|---|
SDN Controller - 마에스트로를 알아봅시다! (0) | 2017.11.19 |
SDN - 가상 네트워크 구성하기 (0) | 2017.11.10 |
SDN - VirtualBox를 세팅해보아요! (0) | 2017.11.09 |
SDN 구현을 위한 설치환경을 구축해봅시다! (0) | 2017.11.08 |