OpenFlow
2025-06-13
OpenFlow는 소프트웨어 정의 네트워킹(SDN, Software-Defined Networking)의 기술 중 하나로, 네트워크 장비의 제어 기능을 중앙화된 컨트롤러로 분리해내기 위해 도입되었다. 기존의 네트워크 장비는 데이터 전달과 제어 기능을 모두 장비 내부에서 처리했기 때문에 복잡한 정책 변경이나 새로운 기능 적용이 어렵고 비효율적이었다. 하지만 OpenFlow는 제어 기능을 외부의 중앙 컨트롤러가 담당하고, 스위치나 라우터는 단순히 컨트롤러의 지시에 따라 패킷을 전달하는 역할만 수행하게 만든다.
OpenFlow를 사용하는 장비는 내부에 flow table이라는 구조를 가지고 있다. 이 테이블은 들어오는 패킷이 어떤 규칙에 일치하는지를 확인한 뒤, 그에 따라 어떤 동작을 취할지를 정의한다. 각 flow entry는 일치 조건(Match), 동작(Action), 그리고 통계 정보(Stats)로 구성된다.
- Match (일치 조건)
- 패킷이 스위치에 도달하면 해당 패킷의 헤더 정보를 기반으로 flow table에서 일치하는 항목을 찾는다. 이때 참조하는 헤더 필드는 계층별로 다양하다.
- 예를 들어 데이터링크 계층에서는 입력 포트나 MAC 주소, VLAN 정보 등을 사용할 수 있고, 네트워크 계층에서는 IP 주소나 프로토콜 번호, 전송 계층에서는 TCP/UDP 포트 번호 등이 사용된다. 이처럼 풍부한 헤더 필드를 기반으로 정교한 분류가 가능하다.
- Action (동작)
- 일치하는 flow entry를 찾으면 정의된 동작에 따라 해당 패킷은 특정 포트로 전달되거나(drop), 헤더가 수정되거나, 혹은 컨트롤러로 전송되기도 한다. 네트워크의 제어 논리는 외부 컨트롤러에서 정의하고 각 스위치는 그것을 빠르게 실행하는 역할을 맡는다.
- Stats (통계)
- 각 flow entry는 얼마나 많은 패킷과 바이트를 처리했는지에 대한 통계 정보를 유지한다. 네트워크 상태를 모니터링하거나 동적으로 정책을 조정할 때 활용될 수 있다.
📡 계층 분리 없는 제어: L2~L3
OpenFlow는 패킷의 헤더 정보를 기반으로 구체적인 정책을 테이블 형식으로 정의하고 네트워크를 제어할 수 있다. 이 규칙들은 포워딩부터 방화벽 수준의 정책까지 다양하게 확장될 수 있다.
Destination-Based Forwarding
- IP 주소가 51.6.0.8인 패킷을 포트 6으로 전달한다
IP Dst
51.6.0.8나머지 필드
* (와일드카드)Action
forward to port6
- 전통적인 라우팅과 비슷하지만, 매우 구체적인 정책을 테이블로 명시할 수 있다
Firewall (방화벽)
- TCP 포트 22 (SSH)로 향하는 트래픽은 차단(drop), 특정 애플리케이션(SSH)을 정책적으로 차단할 수 있다
IP Proto
TCPTCP Dst Port
22나머지 필드
*Action
drop
- 특정 출발지 IP(128.119.1.1)에서 온 패킷은 모두 차단(drop)하고, 특정 장치나 유저의 트래픽을 정밀하게 필터링이 가능하다
IP Src
128.119.1.1나머지 필드
*Action
drop
Layer 2 Destination-Based Forwarding
- 목적지 MAC 주소가 22:A7:23:11:E1:02인 프레임, 스위치의 포트 3으로 전달한다
MAC dst
22:A7:23:11:E1:02나머지 필드
*Action
forward to port3
- L3 라우터 뿐만 아니라 L2 스위치까지 모두 통합적으로 제어 가능하다
📡 End-to-End 제어
- 네트워크 구성도
- s3는 h5/h6과 연결
- s1 → s2는 라우팅 중간 지점
- s2는 목적지 h3/h4로 연결
OpenFlow의 가장 큰 장점 중 하나는 여러 스위치를 거치는 복잡한 네트워크 흐름을 중앙 컨트롤러가 설계하고 각 스위치에는 이에 맞는 규칙만 설치하면 전체 트래픽 흐름을 구현할 수 있다는 점이다. 다음은 그런 end-to-end 제어의 대표적인 예시다.
네트워크에는 여러 호스트와 스위치가 존재한다. h5와 h6는 각각 IP 주소 10.3.0.5
, 10.3.0.6
을 가지며 스위치 s3에 연결되어 있고, 최종 목적지는 10.2.0.3
(h3) 또는 10.2.0.4
(h4)다. 이 트래픽은 스위치 s1과 s2를 거쳐야 하고 이러한 흐름을 위해 각 스위치에는 다음과 같은 flow rule이 설정된다.
-
s3 (엣지 스위치)
- h5, h6에서 나온 트래픽은 일단 s1으로 포워딩한다
plainmatch: IP Src = 10.3.*.* IP Dst = 10.2.*.* action: forward(3) // s1으로 향하는 포트
-
s1 (중간 스위치)
- s1은 s3에서 온 트래픽을 s2로 넘긴다
plainmatch: ingress port = 1 IP Src = 10.3.*.* IP Dst = 10.2.*.* action: forward(4) // s2로 전달
-
s2 (마지막 스위치)
- 목적지 IP에 따라 정확한 호스트로 포워딩한다
plainmatch: ingress port = 2 IP Dst = 10.2.0.3 action: forward(3) // h3 match: ingress port = 2 IP Dst = 10.2.0.4 action: forward(4) // h4
-
전체 흐름
- h5 → s3 (match) → s1 (match) → s2 (match) → h3 or h4
- 모든 스위치의 Flow Table이 SDN 컨트롤러에 의해 조율된다(orchestrated). 즉, 하나의 중앙 지능이 전체 네트워크 동작을 설계하고 명령한다.