용어 요약
VPP 문서 전반에서 쓰이는 핵심 기술 용어를 카테고리별로 정의한 용어 요약입니다. 벡터 패킷 처리, 그래프 노드, 데이터 경로, 호스트 스택, TLS/QUIC, 보안, 성능, 운영 용어를 다룹니다.
벡터 · 그래프 · 노드
- Vector Packet Processing (VPP)
- 패킷을 하나씩이 아닌 벡터(배열) 단위로 묶어 동일한 처리 단계를 통과시키는 모델. I-캐시 지역성과 분기 예측 효율을 극대화합니다.
- Graph Node
- VPP의 패킷 처리 파이프라인을 구성하는 단위. 각 노드가 하나의 처리 단계(파싱·분류·포워딩 등)를 담당하며, 벡터가 노드 간을 이동합니다. INPUT · INTERNAL · PROCESS · PRE_INPUT 네 가지 유형이 있습니다.
- vlib
- VPP의 핵심 인프라 라이브러리. 노드 스케줄링, 메인 루프, 타이머, 이벤트 로거 같은 기반 기능을 제공합니다.
- vlib_buffer_t
- VPP의 패킷 버퍼 구조체. 패킷 데이터와 메타데이터(오프셋·다음 노드 인덱스·에러 상태)를 묶은 형태로, 리눅스 커널의
sk_buff에 해당하는 역할을 합니다. - Main Loop
- 워커 스레드가 돌리는 이벤트 루프. 입력 노드에서 패킷을 받아 그래프를 따라 처리한 뒤 출력 노드로 내보냅니다.
- Feature Arc
- 한 노드에 여러 기능(ACL·NAT 등)이 덧붙어야 할 때, 기능을 동적으로 끼워 넣는 훅 메커니즘입니다.
- clib · vppinfra
- VPP 전용 C 인프라 라이브러리. 벡터·풀·해시·메모리 할당자·시간 같은 저수준 기본 자료구조를 제공합니다.
- vnet
- VPP의 네트워킹 계층 라이브러리. L2/L3/L4 노드, 인터페이스 추상화, FIB 등을 정의합니다.
데이터 경로
- DPDK (Data Plane Development Kit)
- 커널을 우회해 유저스페이스에서 NIC를 직접 다루는 라이브러리. VPP의 주요 입출력 드라이버 중 하나입니다.
- memif
- VPP 인스턴스 간 또는 VPP↔외부 프로세스 간 제로카피 공유 메모리 인터페이스. 서비스 체이닝에 주로 쓰입니다.
- AF_XDP
- 리눅스 커널의 XDP와 연동하는 소켓 타입. NIC에서 가능한 한 빨리 패킷을 유저스페이스로 넘깁니다.
- vhost-user
- QEMU/KVM 가상머신과 공유 메모리로 패킷을 주고받는 virtio 백엔드. VPP를 vSwitch로 쓸 때 핵심.
- FIB (Forwarding Information Base)
- L3 라우팅 포워딩 테이블. VPP는 LPM(Longest Prefix Match) 기반의 자체 FIB를 구현합니다.
- Classify Table
- 헤더 바이트 오프셋과 마스크를 기반으로 한 N-tuple 매칭 엔진. ACL·방화벽·분류 규칙에 사용됩니다.
- ACL (Access Control List)
- VPP의 패킷 필터링 규칙 집합. plugin으로 제공되며 stateful/stateless 모드를 지원합니다.
호스트 스택 · 세션
- Host Stack
- VPP가 유저스페이스에서 구현한 TCP/UDP/TLS/QUIC 프로토콜 스택. 커널 스택을 대체합니다.
- VCL (VPP Comms Library)
- 애플리케이션이 VPP 호스트 스택을 POSIX 소켓과 비슷한 API로 사용할 수 있게 해 주는 라이브러리.
- VLS (VCL Locking Sublayer)
- VCL 위에 얹은 얇은 잠금 계층. 멀티스레드 애플리케이션이 세션을 안전하게 공유하도록 합니다.
- LD_PRELOAD 가속
- 기존 애플리케이션을 수정하지 않고
libvcl_ldpreload.so를 주입해 POSIX 소켓 호출을 VCL로 우회시키는 방법입니다. - Session Layer
- VPP 내부에서 TCP·TLS·QUIC 연결을 추상화하는 중앙 계층. 세션 FIFO와 이벤트 큐를 관리합니다.
- Session FIFO
- 세션 레이어가 애플리케이션과 데이터 경로 사이에 두는 큐. rx/tx FIFO 쌍으로 백프레셔를 구현합니다.
TLS · QUIC
- CKPAIR (Certificate-Key Pair)
- VPP가 관리하는 인증서·개인 키 쌍 오브젝트. TLS 리스너에 바인딩됩니다.
- SNI (Server Name Indication)
- TLS ClientHello에 포함되는 호스트명 확장. 멀티 도메인 인증서 선택이나 바이패스 정책의 기준이 됩니다.
- ALPN (Application-Layer Protocol Negotiation)
- TLS 핸드셰이크 중에 상위 프로토콜(h2, h3 등)을 협상하는 확장입니다.
- 0-RTT (Early Data)
- TLS 1.3·QUIC의 기능으로, 이전 세션 티켓을 이용해 첫 패킷과 함께 응용 데이터를 전송합니다. 재전송 공격에 취약하므로 멱등 요청에만 사용해야 합니다.
- picotls
- 경량 TLS 라이브러리. VPP TLS 플러그인의 한 엔진으로 쓰입니다.
- quicly
- H2O 프로젝트의 QUIC 라이브러리. VPP QUIC 플러그인이 기본으로 통합하는 엔진입니다.
- kTLS
- 리눅스 커널이 직접 TLS 레코드 암복호화를 처리하는 기능. VPP TLS와 대비되는 커널 측 구현입니다.
- Connection Migration
- QUIC의 기능으로 클라이언트 5튜플이 바뀌어도 Connection ID로 같은 연결을 유지합니다. 모바일 핸드오버·NAT 재바인딩에 유리합니다.
- ECH (Encrypted Client Hello)
- TLS 1.3 확장으로, SNI를 포함한 ClientHello 내용을 암호화합니다. SSL Inspection 과제 중 하나입니다.
보안 · 터널링
- IPsec
- IP 계층 암호화·인증 프로토콜군. VPP는 ESP·AH, IKEv2, Policy/Route 기반 배치를 모두 지원합니다.
- IKEv2 (Internet Key Exchange v2)
- IPsec의 동적 키 교환 프로토콜. VPP는 전용 플러그인으로 구현합니다.
- ESP (Encapsulating Security Payload)
- IPsec의 암호화·무결성 보호 페이로드 포맷.
- Anti-Replay Window
- IPsec 수신 측이 재전송 공격을 막기 위해 유지하는 시퀀스 번호 창.
- TPROXY (Transparent Proxy)
- 원본 목적지 IP·포트를 유지한 채 유저스페이스 프록시로 패킷을 우회시키는 기법. 리눅스 커널에 원 구현이 있고 VPP도 이를 구현합니다.
- NAT44 / NAT64
- IPv4-IPv4 / IPv6-IPv4 주소·포트 변환 기능. VPP는 stateful·endpoint-independent mapping 등을 지원합니다.
- SSL Inspection
- TLS 트래픽을 중간자로 종단·복호화해 검사한 뒤 재암호화해 전달하는 기법. 동적 leaf 인증서와 내부 CA가 필요합니다.
- SRv6 (Segment Routing over IPv6)
- IPv6 헤더에 세그먼트 리스트를 실어 경로를 지시하는 라우팅 기술. 모바일 백홀·SFC에 쓰입니다.
- VXLAN · GENEVE
- L2-over-L3 오버레이 터널링 프로토콜. 데이터센터·SDN 네트워크에서 널리 쓰입니다.
성능 · 오프로드
- RSS (Receive Side Scaling)
- NIC가 5튜플 해시로 수신 패킷을 여러 큐에 분산해 멀티 코어 처리량을 올리는 기능.
- TSO · LRO · GRO
- TSO는 송신 시 큰 버퍼를 NIC가 세그먼트 분할, LRO/GRO는 수신 시 여러 세그먼트를 합쳐 상위 계층에 올립니다.
- Inline IPsec / Crypto Offload
- NIC나 가속기 카드가 암호화·복호화를 수행해 CPU 부담을 덜어 주는 오프로드 기능.
- QAT (QuickAssist Technology)
- 인텔의 암호화·압축 가속기. DPDK cryptodev를 통해 VPP TLS·IPsec에서 활용합니다.
- cryptodev
- DPDK의 암호화 디바이스 추상화 API. QAT·Nitrox 같은 하드웨어와 소프트웨어 엔진을 같은 인터페이스로 제공합니다.
- NUMA (Non-Uniform Memory Access)
- CPU 소켓별로 로컬 메모리 접근이 빠른 아키텍처. VPP는 NIC·버퍼·워커를 같은 NUMA 노드에 배치하는 것이 중요합니다.
- Hugepage
- 2MB·1GB 단위의 큰 메모리 페이지. TLB miss를 줄여 패킷 처리 성능을 올립니다. VPP·DPDK 운영 전제 조건입니다.
- CPU Pinning
- 워커 스레드를 특정 CPU 코어에 고정해 캐시 지역성과 스케줄링 지터를 줄이는 기법.
운영 · DPU
- CSIT (Continuous System Integration and Testing)
- FD.io 프로젝트의 릴리스 성능 테스트 프레임워크. 매 릴리스마다 회귀 벤치마크를 자동 수행합니다.
- Stats Segment
- VPP가 공유 메모리에 노출하는 카운터 트리. Prometheus exporter·
vppctl show가 이 세그먼트를 읽습니다. - DPU (Data Processing Unit)
- 네트워크·스토리지·보안 워크로드를 오프로드할 목적으로 설계된 지능형 NIC. BlueField 계열이 대표적입니다.
- SmartNIC
- 일반 NIC에 프로그래머블 처리 능력을 추가한 제품군. DPU는 SmartNIC의 한 형태로 볼 수 있습니다.
- BlueField
- NVIDIA(옛 Mellanox)의 DPU 제품군. ConnectX NIC + Arm 코어를 통합합니다.
- Prometheus · Grafana
- 시계열 모니터링 수집기(Prometheus)와 대시보드(Grafana). VPP Stats Segment를 외부에 노출하는 표준 조합입니다.
- TRex
- Cisco가 만든 고성능 트래픽 생성기. VPP 벤치마크에서 외부 부하원으로 자주 사용됩니다.
- Calico/VPP
- Calico CNI의 데이터플레인으로 VPP를 쓰는 구성. Kubernetes 환경에서 Pod 네트워킹을 가속합니다.
VPP 26.02 신규 보강 용어
- ABF (ACL Based Forwarding)
- ACL 매칭 결과로 다음 홉을 결정하는 정책 기반 라우팅. 5튜플이나 VLAN 같은 조건으로 FIB와 다른 경로를 선택합니다.
- DET44 (Deterministic NAT)
- 캐리어급 NAT44의 특수 모드. 내부 IP가 외부 IP의 특정 포트 범위에 결정론적으로 매핑되어 로그 없이도 사후 추적이 가능합니다.
- DS-Lite · MAP · 464XLAT · NPTv6
- IPv4/IPv6 전환 메커니즘군. DS-Lite는 IPv6 코어에서 IPv4를 터널링(stateful), MAP은 stateless, 464XLAT은 모바일 IPv6 단말의 IPv4 호환, NPTv6는 stateless IPv6 프리픽스 변환입니다.
- BFD (Bidirectional Forwarding Detection)
- RFC 5880. 밀리초 단위로 인접 장비 장애를 감지하는 경량 프로토콜. BGP·OSPF 같은 라우팅 프로토콜의 느린 감지를 보완합니다.
- LACP (Link Aggregation Control Protocol)
- IEEE 802.3ad. 링크 집선 멤버의 상태를 동적으로 협상해 fail-over와 대역폭 합산을 제공합니다.
- LLDP (Link Layer Discovery Protocol)
- IEEE 802.1AB. 인접 장비의 시스템명·포트 ID·관리 주소를 주기적으로 광고하는 이웃 탐지 프로토콜.
- HSI (Host Stack Intercept)
- VPP 데이터 평면을 지나가는 플로우를 특정 조건으로 호스트 스택에 가로채는 메커니즘. 투명 L7 검사에 사용됩니다.
- DPO (Data-Plane Object)
- VPP FIB에서 "이 지점에서 다음에 무엇을 할지"를 캡슐화한 객체. Adjacency, Load Balance, MPLS Label, Replicate 등 유형이 있습니다.
- Adjacency
- L3 다음 홉의 L2 주소 해석 상태를 나타내는 객체. Complete/Incomplete/Midchain 세 종류.
- BIER (Bit Indexed Explicit Replication)
- RFC 8279. 패킷 헤더의 비트 마스크로 수신 라우터를 지정해 멀티캐스트를 전달. 트리 상태 유지 없이 확장 가능합니다.
- LISP (Locator/ID Separation Protocol)
- RFC 6830. IP 주소를 EID(식별자)와 RLOC(위치자)로 분리해 모바일성·멀티호밍을 지원하는 오버레이.
- MPLS · SR-MPLS
- 레이블 스위칭. MPLS는 고정 레이블 경로, SR-MPLS는 binding SID로 segment routing을 MPLS 위에서 구현합니다.
- sFlow
- RFC 3176. 패킷 N개당 1개를 랜덤 샘플링해 외부 수집기로 보내는 경량 모니터링. 라인레이트에서도 오버헤드가 일정합니다.
- IPFIX
- RFC 7011~7015. NetFlow v9의 표준화 후속. 모든 플로우를 5튜플·바이트 카운터·시작/종료 타임스탬프로 기록해 수집기에 전송합니다.
- perfmon
- VPP의 CPU 성능 카운터 측정 플러그인. Intel Top-Down 분석·cache miss·branch miss를 그래프 노드별로 수집합니다.
- Packet Generator (PG)
- VPP 내장 트래픽 생성기. 외부 TRex 없이 스크립트로 특정 패킷 패턴을 노드에 주입해 재현 테스트를 수행합니다.
- nsim (Network Delay Simulator)
- VPP 플러그인. 송신 경로에 지연·대역폭·손실을 주입해 WAN 조건을 재현합니다. 리눅스 netem의 VPP 버전.
- QPACK
- RFC 9204. HTTP/3에서 HPACK(HTTP/2)을 대체하는 헤더 압축 코덱. QUIC의 비순차 스트림 전송을 염두에 두고 설계되어 동적 테이블 갱신이 순서에 의존하지 않습니다. VPP 26.02는 QPACK 인코딩·디코딩을 static table 전용으로 도입했으며 dynamic table은 아직 제공하지 않습니다.
- H3 framing layer
- HTTP/3 프레임 타입(HEADERS, DATA, SETTINGS, GOAWAY 등)을 파싱·직렬화하는 계층. VPP 26.02에서 http 플러그인에 코어 스켈레톤과 함께 추가되어, 기존 quicly 직결 구조에서 벗어나 VPP 호스트 스택이 h3 프레이밍을 1급으로 처리합니다.
- NPol (Network Policies Plugin)
- VPP 26.02에서 추가된 네트워크 정책 플러그인 API. Kubernetes NetworkPolicy 스타일의 L3/L4 정책을 VPP 데이터 평면에 매핑하기 위한 기반으로 제안되었습니다. 구체 동작은 릴리스 노트와
src/plugins/npol을 참고하시기 바랍니다. - SFDP (Stateful Data Plane Services)
- VPP 26.02에서 도입된 서비스 API. 세션 인지 기반의 상태형 서비스(예: 연결 추적을 활용한 SFC)를 표현하기 위한 메시지군입니다. 기존 ACL/flowprobe 조합과 달리 서비스 체인 관점의 stateful 결정을 공식 API로 올린 점이 핵심입니다.
- HTTP CONNECT proxy client
- 클라이언트가 업스트림 HTTP proxy에
CONNECT host:port를 보내 터널을 여는 패턴. VPP 26.02에서 호스트 스택 측에 client 구현이 추가되어, VPP가 직접 기업 프록시·사이드카를 거쳐 TCP/TLS 세션을 여는 경로를 지원합니다. - Unified ESP crypto+HMAC
- VPP 26.02에서 IPsec ESP 경로를 암호화와 HMAC을 단일 cryptodev 오퍼레이션으로 통합한 변경. 이전에는 디스크립터를 두 번 소모하던 AES-CBC + HMAC-SHA 계열도 한 번의 하드웨어 호출로 처리할 수 있어, 작은 패킷이 많은 VPN 게이트웨이에서 CPU/디바이스 디스크립터 소모가 줄어듭니다.
- IGE (Intel Gigabit Ethernet) 네이티브 드라이버
- VPP 26.02에서 추가된 i211/i225/i226용 1G NIC 전용 PMD. 기존에는 DPDK
igbPMD를 경유해야 했으나, 네이티브 경로가 생기면서 DPDK 없이도 소규모 장비(가정용/랩/DPU 저전력 포트)에서 VPP를 돌릴 여지가 커졌습니다.