SDN과 NFV로 보는 네트워크 가상화와 운영체제
SDN과 NFV의 제어 구조, VNF와 NFVI, Linux 네트워크 가상화, OVS·DPDK·SR-IOV 기반 성능 및 보안 고려사항을 정리한다.
2026-08-14 · 최초 발행 2026-01-19
하드웨어에 묶인 네트워크를 소프트웨어로 분리하는 방식
전통적인 네트워크는 하드웨어 의존성과 폐쇄적인 구조 때문에 확장과 구성 변경에 제약이 있었다. SDN과 NFV는 네트워크의 제어와 기능을 소프트웨어로 옮기는 접근이다. 이때 운영체제는 가상화 플랫폼의 기반이 되어 네트워크 네임스페이스, 가상 스위치, 고성능 데이터 플레인 기능을 제공한다.
SDN에서는 데이터 전달 기능과 네트워크 제어 로직을 분리한다. 컨트롤러가 전체 토폴로지를 관리하고, OpenFlow 같은 표준 프로토콜을 통해 네트워크 동작을 정의한다. 물리 인프라는 논리 자원으로 추상화되며, 정책 변경과 최적화도 동적으로 수행할 수 있다.
OpenFlow가 다루는 플로우 엔트리
OpenFlow는 매칭 조건과 처리 액션을 기반으로 패킷의 흐름을 제어한다. 다음은 플로우 테이블 엔트리를 표현한 의사 코드다.
# OpenFlow 플로우 테이블 예시 (의사 코드)
class FlowEntry:
def __init__(self):
self.match_fields = {
'in_port': None,
'eth_src': None,
'eth_dst': None,
'ip_src': None,
'ip_dst': None,
'tcp_port': None
}
self.actions = [] # FORWARD, DROP, MODIFY 등
self.priority = 0
self.counters = {'packets': 0, 'bytes': 0}
def match_packet(self, packet):
# 패킷이 플로우 엔트리와 매칭되는지 확인
for field, value in self.match_fields.items():
if value and packet[field] != value:
return False
return True
def apply_actions(self, packet):
# 매칭된 패킷에 액션 적용
for action in self.actions:
packet = action.execute(packet)
self.counters['packets'] += 1
self.counters['bytes'] += len(packet)
return packet
컨트롤러는 애플리케이션 계층의 요구를 Northbound API로 받고, Southbound API를 통해 가상 스위치와 물리 스위치에 정책을 전달한다.
컨트롤러 구현은 목적과 환경에 따라 선택한다.
- OpenDaylight: Java 기반의 모듈형 아키텍처로 엔터프라이즈 환경을 겨냥한다.
- ONOS: 고성능 분산 제어와 통신사업자 환경에 맞춘 구조를 제공한다.
- Ryu: Python 기반의 경량 컨트롤러이며 API 중심으로 설계됐다.
- Floodlight: OpenFlow 1.0/1.3을 지원하고 REST API를 제공한다.
- POX: Python 기반으로 교육과 프로토타이핑에 사용된다.
NFV가 네트워크 기능을 가상화하는 구조
NFV는 전용 장비에 탑재하던 네트워크 기능을 가상화해 실행한다. 오케스트레이터, VNF Manager, VIM, NFVI가 서로 역할을 나누며 VNF의 배치와 인프라 관리를 담당한다.
가상화 대상은 패킷 필터링을 위한 iptables·nftables 기반 방화벽, HAProxy·NGINX 기반 로드밸런서, FRRouting·BIRD를 활용한 소프트웨어 라우터가 대표적이다. DPI용 가상 어플라이언스와 가상화된 WAN 최적화 기능도 VNF로 구성할 수 있다.
NFVI는 VNF가 동작하는 컴퓨팅, 스토리지, 네트워크 기반이다. 운영체제와 하이퍼바이저는 이 계층에서 가상 머신의 생성과 실행을 맡는다.
# libvirt를 이용한 VNF 생성 예시
import libvirt
import xml.etree.ElementTree as ET
def create_vnf_vm(name, vcpus, memory_mb, disk_path):
"""VNF 가상머신 생성"""
conn = libvirt.open('qemu:///system')
# VM 정의 XML
domain_xml = f"""
<domain type='kvm'>
<name>{name}</name>
<memory unit='MiB'>{memory_mb}</memory>
<vcpu placement='static'>{vcpus}</vcpu>
<cpu mode='host-passthrough'>
<topology sockets='1' cores='{vcpus}' threads='1'/>
</cpu>
<os>
<type arch='x86_64'>hvm</type>
<boot dev='hd'/>
</os>
<features>
<acpi/><apic/><pae/>
</features>
<devices>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2' cache='none' io='native'/>
<source file='{disk_path}'/>
<target dev='vda' bus='virtio'/>
</disk>
<interface type='bridge'>
<source bridge='br0'/>
<model type='virtio'/>
</interface>
</devices>
</domain>
"""
dom = conn.defineXML(domain_xml)
dom.create() # VM 시작
return dom
Linux에서 만드는 격리된 네트워크 경로
Linux 네트워크 네임스페이스는 네트워크 스택을 분리하는 수단이다. 가상 이더넷 페어를 서로 다른 네임스페이스에 배치하면 VNF 간 통신 경로를 구성할 수 있다.
# 네트워크 네임스페이스 생성 및 구성
ip netns add vnf1
ip netns add vnf2
# 가상 이더넷 페어 생성
ip link add veth0 type veth peer name veth1
# 각 네임스페이스에 할당
ip link set veth0 netns vnf1
ip link set veth1 netns vnf2
# IP 주소 할당
ip netns exec vnf1 ip addr add 10.0.1.1/24 dev veth0
ip netns exec vnf2 ip addr add 10.0.1.2/24 dev veth1
# 인터페이스 활성화
ip netns exec vnf1 ip link set veth0 up
ip netns exec vnf2 ip link set veth1 up
OVS는 사용자 공간의 ovs-vswitchd, 구성 데이터베이스인 ovsdb-server, 커널 모듈과 데이터패스로 구성된다. 물리 NIC와 가상 포트를 연결하고 OpenFlow 컨트롤러와 연동하는 가상 스위치 역할을 한다.
DPDK는 패킷 처리를 사용자 공간에서 직접 수행하는 커널 바이패스 방식이다. PMD는 인터럽트 대신 폴링으로 패킷을 수신하고, Huge Pages는 메모리 관리 오버헤드를 줄인다. 데이터 플레인에는 전용 CPU 코어를 할당할 수 있으며, Zero-Copy 방식으로 메모리 복사 없이 패킷을 전달한다.
# DPDK 설정 예시
# Huge Pages 할당
echo 1024 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
# CPU 코어 격리 (부팅 옵션)
# isolcpus=2,3,4,5
# DPDK 바인딩
modprobe uio
modprobe uio_pci_generic
dpdk-devbind.py --bind=uio_pci_generic 0000:01:00.0
제어 정책과 가상 기능을 서비스 체인으로 연결하기
SDN의 제어 기능과 NFV의 가상 기능은 함께 구성할 수 있다. 서비스 체이닝에서는 유입 트래픽이 분류기를 거쳐 방화벽, DPI, NAT, 로드밸런서를 순서대로 통과한 뒤 백엔드 서비스에 도달한다.
OpenStack 환경에서는 Neutron을 통해 네트워크, 서브넷, 포트 체인을 생성해 SDN/NFV 통합을 구성할 수 있다.
# OpenStack Neutron을 통한 SDN/NFV 통합
from neutronclient.v2_0 import client as neutron_client
def create_service_chain(neutron, tenant_id):
"""서비스 체인 생성"""
# 네트워크 생성
network = neutron.create_network({
'network': {
'name': 'vnf-network',
'tenant_id': tenant_id,
'admin_state_up': True
}
})
# 서브넷 생성
subnet = neutron.create_subnet({
'subnet': {
'network_id': network['network']['id'],
'cidr': '192.168.100.0/24',
'ip_version': 4,
'tenant_id': tenant_id
}
})
# 포트 체인 생성 (서비스 체이닝)
port_chain = neutron.create_port_chain({
'port_chain': {
'name': 'chain1',
'port_pair_groups': ['ppg-firewall', 'ppg-lb'],
'flow_classifiers': ['classifier1']
}
})
return port_chain
데이터 플레인의 성능을 확인하는 기준
SR-IOV는 물리 NIC를 여러 가상 기능으로 나누는 하드웨어 가상화 기술이다. VM은 하이퍼바이저 없이 NIC에 직접 접근할 수 있어 네트워크 I/O 오버헤드를 줄인다. 각 VM에 전용 VF를 할당하고, 10Gbps 이상의 네트워크 성능을 달성할 수 있다.
OVS 통계, 플로우 정보, 데이터패스 상태와 함께 처리량·레이턴시를 수집하면 가상 네트워크의 상태를 확인할 수 있다.
# OVS 통계 확인
ovs-vsctl show
ovs-ofctl dump-flows br0
ovs-appctl dpctl/show
# 네트워크 처리량 측정
iperf3 -s # 서버 모드
iperf3 -c <server-ip> -t 60 # 클라이언트 모드
# 레이턴시 측정
ping -c 100 <target-ip>
hping3 -S -p 80 <target-ip> -c 100
통신사와 데이터센터에서의 활용
통신사 환경에서는 LTE 코어 네트워크를 가상화한 vEPC, VoIP 인프라를 가상화한 vIMS, 고객 측 장비를 가상화한 vCPE가 사용된다. SD-WAN과 5G Network Slicing도 소프트웨어 정의 네트워크의 적용 영역이다.
데이터센터에서는 VM 수준의 방화벽 정책을 적용하는 마이크로세그멘테이션, 트래픽 패턴에 따른 로드밸런싱 자동화, 자동화된 네트워크 프로비저닝을 구성할 수 있다. 멀티테넌시 격리와 애플리케이션별 대역폭을 보장하는 QoS 정책도 함께 다뤄진다.
중앙 제어 지점에 필요한 보안 통제
SDN 컨트롤러는 중앙 제어 지점이므로 공격 대상이자 단일 장애점(SPOF)이 될 수 있다. OpenFlow 채널의 도청과 위변조, 악의적 플로우 생성에 따른 플로우 테이블 오버플로 DoS, 잘못된 토폴로지 정보 주입, 악성 SDN 애플리케이션도 고려 대상이다.
Southbound API 통신은 TLS로 보호할 수 있다.
# TLS를 이용한 안전한 OpenFlow 통신
import ssl
from ryu.lib import hub
def secure_openflow_server(controller_cert, controller_key, ca_cert):
"""TLS 기반 OpenFlow 서버"""
context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
context.load_cert_chain(controller_cert, controller_key)
context.load_verify_locations(ca_cert)
context.verify_mode = ssl.CERT_REQUIRED
# OpenFlow 리스너 생성
server = hub.StreamServer(
('0.0.0.0', 6653),
handle_openflow_connection,
ssl_context=context
)
return server
SDN과 NFV는 네트워크 인프라를 소프트웨어 중심으로 전환해 민첩성과 효율성을 높인다. 운영체제는 네트워크 네임스페이스, 가상 스위치, SR-IOV를 제공하고, DPDK 같은 고성능 데이터 플레인 솔루션은 하드웨어에 근접한 성능을 뒷받침한다. 5G와 엣지 컴퓨팅 시대에 SDN/NFV는 네트워크 인프라의 표준으로 자리잡고 있다.