SDN
SDN(Software Defined Network)
네트워크 리소스를 가상화하고 추상화하는 네트워크 인프라에 대한 접근 방식을 의미
소프트웨어 애플리케이션과 API를 이용하여 네트워크를 프로그래밍하고 중앙에서 전체 네트워크를 제어하고 관리하는 것

SDN 동작 방식
* 네트워크 장비의 Control Plane(제어부) 와 Data Plane(전송부) 의 분리
    Control Plane : 네트워크 장비 제어
    Data Plan      : 데이터 전송

*기존 라우터(Router) : 제어부와 전송부가 같이 존재 하여 제어부에서 최적의 경로를 계산하고 전송부에서 데이터를 전송 하는 것의 행위
                            네트워크 운영자는 각각의 네트워크 장비를 수동으로 관리해야 했으며 전체 기능이 필요하지 않은 경우에도 비싼 라우터를 구매하는 하여 관리

*SDN 적용으로 제어부를 별도의 컴퓨팅 서버로 분리하고 네트워크 장비는 데이터 전송 기능만 담당 하도록 구성

SDN 장점
* 비용 절감 : 제어부에서 여러 네트워크 장비를 제어 하기에 관리가 편리하고 비용이 감소
                장ㅇ비의 사양을 각각의 기능에 최적화 할 수 있어 리소스 낭비를 최소화

* 확장성과 유연성 : 하드웨어를 소프트웨어로 전환하면서 물리적인 리소스의 한계에 구애 받지 않음
                        필요한 시기에 필요한 만큼의 네트워크 리소스를 확장 축소 가능
                        네트워크 장비를 선택할 때 유연성 확보 가능(벤터 종속성이 없음)

구글 G-scale SDN : 구글에서 OpenFolw로 전 세계에 흩어져 있는 구글 데이터 센터 Backbone 구간을 SDN 기반으로 전환

SDN Architecture
* SDN Architecture  :	Application Layer, 
			Control Plan(SDN 컨트롤로),
			Data Plane(SDN 전송 장비)
  
Application Layer : Routing, LoadBalance, ACL 등 네트워크 제어를 하는데 사용되는 소프트웨어 애플리케이션 , SDN 컨트롤러에서 제공받은 API와 여러 서비스들을 이용하여 Control기능을 구현

SDN Controller : 전체 네트워크 자원에 대한 중앙집중적인 제어를 담당 하는 네트워크 운영체제 역할을 담당
                     중앙 집중적인 네트워크 제어를 위해 글로벌 뷰를 기반으로 포워딩을 제어하고 토폴로지 및 자원의 상태를 관리하는 기본 기능을 수행
                     여러 네트워크 장비와 통신할 수 있도록 South-bound API를 제공하거나 추가할 수있으며 여러가지 기능의 애플리케이션을 개발하고 다른 운영 도구가 통신할 수 있게 해주는 North-bound API도 제동
                     SDN Controller는 ONF의 주도로 만들어진 ONOS와 Floodlight, Trema,Maestro,OpenDayLight 등이 있음

Data Plan : SDN의 디바이스는 SDN 컨트롤러의 지시에 따라 패킷 전송을 수행하는 네트워크 장비를 통칭 
               SDN의 개념과 화이트박스 스위치와를 이용하여 레거시 장비 대비 획기적인 낮은가격으로 데이터 센터 구축 가능

OpenFlow
SDN에서는 Control Planer와 Data Plane 구분 되며 SDN 컨트롤로는 Data Plan계층에 대한 포워딩을 제어(Match and Action) 하고 정보수집을 위해 SouthBound 인터페이스를 사용
ONF에서 정의하고 있는 OpenFlow Protocol 사용
이론적으로만 가능한 SDN을 구현하기 위해 처음으로 제정된 표준 통신 인터페이스

OpenFlow
   - OpenFlow 스위치, OpenFlow 컨트롤로 구성
   - 흐름(flow) 정보를 제어하여 패킷의 전달 경로 및 방식을 결정
      흐름(flow): 특정 시간 동안 네트워크상의 지정된 관찰 지점을 지나가는 패킷의 집합
                    패킷의 출발지와 목저지 정보등을 가진 테이터

OpenFlow 구성 요소
 - Controller : 오픈플로우 프로토콜을 사용하여 네트워크장치설정 및 어플리케이션 최적 경로 설정하는 소프트웨어
                 상위 응용이나 정책 요구에 따라 차별화된 포워딩 및 패킷 처리 룰을 결정하여 하위의 스위치 박스에 Rule을 전달
                  Flow Table내 Folw Entry의 삽입, 추가 삭제 가능

 - OpenFlow Protocol : 스위치와 스위치를 관리하는 컨트롤러가 통신하기 위한 개방형 표준 인터페이스

 - OpenFlow Switch: L2 스위치에 OpenFlow 프로토콜을 펌웨어로 추가하여 OpenFlow 스위치를 구성하거나 소프트웨어 방식의 Logical 스위치
                          Flow Table별 패킷 포워드와 조작 통계 수집 터이컬 캡슐화,비캡슐화 등기능 수행
                          Flow Table, Pipeline(각 플로우 테이블의 패킷 프로세싱 통로), 그룹테이블, 보안채널(SSL)로 구성

- Flow Table : Flow Entry 는 match field (조건),action (처리),counters(통계) 3 가지 정보로 구성
                  Flow Entry가 모여 Flow Table 구성

- PipleLining : flow table에는 패킷에 대한 Action을 처리하거나 다른 Action을 추가할 수 있는데 다른 플로우 테이블에 있는 엔트리와 비교하여 패킷처리가 계속되도록 지시
                 연속되는 테이블내의 flow Entry는 추가적인 Action을 부가하거나 이전에 추가된 Action을 삭제 또는 수정하거나 특정한 Action을 수행

- Group Table : 각 엔트리는 ID값, 그룹의 Type, Counter 및 Action Buckets들로 구성
                    Action bucket은 실행할 action들의 집합과 파라미터들을 포함
                    Broadcast나 Multicast를 구현하는데 유용

- Secure Channel : 보안 채널

Flow Table 구조 : 프로우를 정의하는 패킷 헤더 정보(RULE), 패킷을 어떻게 처리할 지 여부를 표시하는 동작(Action) 및 각 플로우별 통계(Statistice)를 포함
   Rule  |  Action | Stats                         
 * Stats : packet + byte counters
 * Action: Forward packet to Ports 
            Encapsulate and forward go controller
            Drop packet
            Send to normal processing pipeline
            스위치에 정의되어 있는 경로에 따라 패킷 전달
           정해진 하나의 포트 또는 여러개의 포트로 패킷전달(전달경로 변경)
          패킷이 더이상 전달되지  못하도록 차단(drop)
 * Rule :  switch Port | MAC src | MAC dst | Eth type | VLAN ID | IP src | IP dst | IP Port | TCP sport | TCP dport  로 구성 === Header fields 와 같은 말

Flow Table 이용 패킷 경로 제어 : Flow Table을 기반으로 특정 패킷 플로우에 대해 가장 짧은 패킷 경로를 선택
OpenFlow 동작과정
  TCP 연결 - Hello - Feature Request, Reply - Set Configuration - Stats

OpenFlow 라우팅 방식
  - Hob by Hob 방식 : 컨트롤로가 모든 스위치의 상태와 서비스별로 계산된 경로를 알고 있음 , 복잡한 경로 구성을 자유롭게 할 수 있어 네트워크 이용효율 100%까지 향상, 각 스위치가 모든 경로 정보를 가지고 있어야 하프로 확장성의 문제 발생

 - Overlay 방식 : 컨트롤로가 모든 경로를 제어하지 않고 터널링 기술을 이용하여 경로를 설정, 관리해야 할 대량의 라우팅 정보를 하부계층에서 처리하므로 대규모 네트워크 뿐만 아니라 기존의 IP네트워크에도 적용가능, 네트워크 사용 효율은 기존의 네트워크와 같은 수정

http://www.jidum.com/jidums/view.do?jidumId=1076

===========================================================

OpenFlow 스위치 내부에는 패킷전달 경로와 방식에 대한 정보를 가진 flow Table이 있음
   - 패킷이 발생하면 먼저 Flow Table이 해당 패킷에 대한 정보를 가지고 있는지 확인
   - 패킷에 대한 정보가 존재하면 그에 맞춰 패킷을 처리하고 정보가 존재하지 않으면 해당 패킷에 대한 제어정보를 OpenFlow 컨트롤러에 요청
   - 스위치로 부터 제어정보를 요청받은 OpenFlow 컨트롤러는 내부에 존재하는 패킷 제어 정보를 확인하고 해당 결과를 OpenFlow 스위치에 전달
   - OpenFlow 컨트롤러내의 패킷제어 정보는 외부의 프로그램에서 API를 통해 입력할 수 있음
   - OpenFlow 스위치는 컨트롤러로 부터 전달 받은 제어 정보를 Flow Table에 저장하고 이후 동일한 패킷이 발생하면 Flow Table에 있는 정보를 활용하여 패킷을 전달
   - OpenFlow 패킷 제어 정보
        OpenFlow에서 패킷을 제어하는 정보는 FlowTable에 저장
        Header Filld
  - OpenFlow Protocol : match(매치) , instruction (명령어), action(액션)
           Match(매치):매치에 사용할 수 있는 조건에는 여러가지가 있으면 OpenFlow의 버전이 올라갈 때 마다 그종류가 증가
           Instruction(명령어): 매치에 해당하는 패킷을 수신했을 때의 동작을 정의
           Action(액션): 패킷 전송을 지정