1. OpenFlow
SDN 에서 분리된 제어부와 전송부는 정해진 통신 방법을 통해 라우팅을 요청하고 결과를 보내줄 수 있다. 그리고 이 통신 방법을 southbound API 라 부른다. 이 southbound 통신을 위해 만들어진 많은 표준 통신 규격 중 하나인 OpenFlow 에 대해서 알아보려 한다.
그전에 이러한 표준 통신 규격이 왜 필요한지 간단하게 알아보자. SDN 의 장점을 통해 알 수 있는데, 소수의 기업들의 독점에서 벗어나 네트워크 상황에 맞는 장비들의 선택이 가능해졌다. 그러나 이들은 서로 다른 출처의 장비들이기 때문에 이들 사이에서 안정적으로 네트워크를 구축하는 것은 매우 어렵다. 결국 어떤 장비를 들이더라도 안정적인 네트워크를 구축하기 위해서는 표준이 되는 통신 규격이 필요한 것이다. 그렇게 정해진 것이 표준 통신 규격이다.
1-1. OpenFlow 의 구조
OpenFlow 는 비영리단체인 ONF(Open Networking Foundation) 에서 개발된 인터페이스이다. OpenFlow 인터페이스에는 OpenFlow 스위치, OpenFlow 컨트롤러로 구성되어 있다.
OpenFlow 스위치에는 Flow Table 이 존재한다. Flow Table 에는 이전에 처리를 했었던 패킷들의 정보를 갖고 있다. 그렇기에 도착하는 패킷들의 정보를 이미 갖고 있는 정보들을 활용하여 OpenFlow 컨트롤러를 통해 라우팅 처리 결과를 받을 필요 없이 바로 스위치 자체에서 처리가 가능해진다. 만약 갖고 있지 않는 패킷의 정보라면 OpenFlow 컨트롤러와 정해진 프로토콜을 통해 패킷에 대한 처리 방법을 요청하게 된다. OpenFlow 컨트롤러는 해당 요청을 처리하면 다시 정해진 프로토콜을 통해 OpenFlow 스위치에게 결과를 알려주고 그 결과에 맞춰 스위치는 패킷을 처리하게 된다. 이때, 새로 처리한 패킷에 대한 정보를 Flow Table 에 저장하여 후에 패킷이 들어왔을 때 저장된 패킷의 정보들을 활용하여 쉽게 처리할 수 있다.
1-2. Flow Table 패킷 정보
위에서 말했듯, OpenFlow 스위치는 Flow Table 을 다수 보유하고 있다. 그리고 각 Flow Table 마다 다수의 Flow Entry 가 저장되어있다. Flow Entry 각각은 처리를 거치고 저장한 패킷들의 정보들을 의미한다.
각 Flow Entry 들에 저장된 정보들 중 3개의 중요한 정보들인 Match(Header) Field, Actions, Counters 들을 알아보겠다.
우선 Match(Header) Field 에는 해당 패킷의 주요 정보들이 담겨있다. 결국 OpenFlow 스위치는 새로 들어온 패킷들의 정보가 Flow Table 에 저장된 Header 정보들과 Match(일치) 한다면 OpenFlow 컨트롤러로 처리 요청을 하지 않고 바로 처리하게 되는 것이다. Match(Header) Field 에는 스위치 포트, source 와 destination 의 MAC address, 이더넷 정보 등을 확인할 수 있다. OpenFlow 스위치는 L2(Data Link Layer) ~ L4(Transport Layer) 까지의 헤더 정보들을 모두 활용한다.
Actions 에는 새로 들어온 패킷들을 처리하는 방법들이 저장되어 있다. 만약 Flow Table 에 저장된 정보들로 처리가 불가능하다면 컨트롤러에게 보내도록 저장되어 있다. Flow Table 에 저장된 정보들로 처리가 가능한 패킷이라면 바로 처리하도록 다양한 방법들이 저장되어 있다. 하나 또는 그 이상의 포트들로 패킷들을 보낼 수 있다. 이때, 정해진 스위치 포트로 보내기도 하지만 더 나은 경로로 포트들로 변경하여 보내기도 한다. 반대로 패킷을 보내지 않고 drop 시킬 수도 있다.
마지막으로 Counters 에는 새로 들어온 패킷의 정보가 특정 Flow Entry 의 정보와 일치한다면 해당 Entry 의 Counters 값이 1씩 증가하게 된다.
이 외에도 Entry 의 비교 우선순위를 뜻하는 Priority, Table 에 저장되어 있을 수 있는 남은 시간을 뜻하는 Timeouts 값들이 존재한다.