Loading content...
Having established the foundational concept of NFV, we now turn our attention to the entities at its heart: Virtual Network Functions (VNFs). If NFV is the architectural paradigm, VNFs are its building blocks—the software implementations of network capabilities that replace traditional hardware appliances.
A VNF is not simply "network software running in a VM." It is a carefully engineered software entity designed to deliver network functionality with carrier-grade performance, reliability, and manageability. The difference between a prototype network application and a production-ready VNF is as significant as the difference between a student project and enterprise software.
This page explores VNFs in depth: their architecture, design principles, lifecycle management, and the characteristics that separate mature VNF implementations from problematic ones.
By the end of this page, you will understand the anatomy of Virtual Network Functions, VNF component architecture and design patterns, the distinction between VNFC and VNF, VNF descriptors and packaging standards, lifecycle management from instantiation to termination, and the key characteristics of well-designed VNFs.
A Virtual Network Function is more than just software—it's a complete package that includes the application logic, configuration, dependencies, and metadata needed for automated deployment and management.
The Formal Definition:
According to ETSI GS NFV 003, a Virtual Network Function (VNF) is defined as:
"A virtualization of a network function in a legacy non-virtualized network. For practical purposes, a VNF is a software implementation of a network function that is capable of running over the NFV Infrastructure (NFVI)."
Key Characteristics of VNFs:
VNF vs. VNFC:
A critical distinction in the ETSI framework is between a VNF and its constituent VNF Components (VNFCs):
VNF Component (VNFC):
VNF (Virtual Network Function):
Example: Multi-VNFC Architecture
Consider a virtualized Evolved Packet Core (vEPC) VNF:
vEPC VNF
├── VNFC-1: MME (Mobility Management Entity)
├── VNFC-2: SGW-C (Serving Gateway Control Plane)
├── VNFC-3: SGW-U (Serving Gateway User Plane)
├── VNFC-4: PGW-C (PDN Gateway Control Plane)
├── VNFC-5: PGW-U (PDN Gateway User Plane)
└── VNFC-6: HSS (Home Subscriber Server)
Each VNFC is a separate VM with specific resource requirements and scaling characteristics, but together they form a single VNF representing the complete EPC functionality.
While the multi-VNFC model matches traditional telecom architecture, many modern VNFs consolidate functionality into fewer components to reduce complexity. The optimal VNFC decomposition balances independent scaling needs, fault isolation requirements, and operational simplicity.
Within a VNF (or VNFC), the internal architecture determines performance, reliability, and manageability. Well-designed VNF architectures share common patterns that address the unique challenges of network function software.
The Data Plane / Control Plane Split:
Network functions typically separate into two fundamental processing paths:
Data Plane (Fast Path):
Control Plane (Slow Path):
Common VNF Architectural Patterns:
Pattern 1: Monolithic VNF
Pattern 2: Multi-Process VNF
Pattern 3: Microservices VNF
| Aspect | Monolithic | Multi-Process | Microservices |
|---|---|---|---|
| Complexity | Low | Medium | High |
| Scalability | Vertical only | Component-level | Fine-grained |
| Fault Isolation | Limited | Good | Excellent |
| Resource Efficiency | Good | Moderate | Variable |
| Deployment Complexity | Simple | Moderate | Complex |
| Update Granularity | Full VNF | Per-component | Per-service |
| State Management | Simple | Moderate | Complex (distributed) |
| Typical Use Case | Simple functions | Traditional telecom | Cloud-native |
VNF Networking Considerations:
VNFs require carefully designed networking that addresses:
Internal Connectivity:
External Connectivity:
Virtual Interface Types:
For data plane VNFs requiring high throughput, SR-IOV provides the best raw performance but limits live migration and some virtualization features. OVS-DPDK offers a balance—better performance than standard VirtIO while preserving management flexibility. Choose based on your specific performance requirements and operational constraints.
For VNFs to be deployable in an automated, standardized manner, they must be packaged with comprehensive metadata describing their requirements, dependencies, and operational parameters. ETSI NFV defines standard formats for VNF packaging.
The VNF Package (VNFD):
A VNF Descriptor (VNFD) is a deployment template that describes a VNF in terms of its:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
# Example VNFD following ETSI SOL001 TOSCA-based specification tosca_definitions_version: tosca_simple_yaml_1_3 description: Virtual Firewall VNF Descriptor metadata: template_name: vFirewall template_version: "2.0.0" template_author: NetworkVendor topology_template: # Input parameters for customization inputs: vnf_name: type: string description: Name of the VNF instance default: vFirewall-prod admin_password: type: string description: Admin password for management access sensitive: true # Node definitions (VNFCs) node_templates: # Primary firewall VNFC vFirewall_VNFC: type: tosca.nodes.nfv.Vdu.Compute properties: name: firewall-primary description: Primary firewall processing node sw_image_data: name: vFirewall-image-v2.0 version: "2.0.0" checksum: algorithm: sha-256 hash: abc123... size: 4 GB operating_system: Ubuntu 22.04 LTS vdu_profile: min_number_of_instances: 1 max_number_of_instances: 10 capabilities: virtual_compute: properties: virtual_cpu: num_virtual_cpu: 8 cpu_architecture: x86_64 virtual_memory: virtual_mem_size: 16 GB numa_enabled: true virtual_local_storage: - size_of_storage: 100 GB requirements: - virtual_storage: vFirewall_storage # Storage for logs and state vFirewall_storage: type: tosca.nodes.nfv.Vdu.VirtualBlockStorage properties: size_of_storage: 500 GB type_of_storage: ssd # External connection points ext_cpd_mgmt: type: tosca.nodes.nfv.VduCpd properties: layer_protocols: [ipv4] role: management description: Management interface for VNF configuration requirements: - virtual_binding: vFirewall_VNFC ext_cpd_data_ingress: type: tosca.nodes.nfv.VduCpd properties: layer_protocols: [ipv4] role: data_ingress description: Data plane ingress interface bitrate_requirement: 40 Gbps requirements: - virtual_binding: vFirewall_VNFC ext_cpd_data_egress: type: tosca.nodes.nfv.VduCpd properties: layer_protocols: [ipv4] role: data_egress description: Data plane egress interface bitrate_requirement: 40 Gbps requirements: - virtual_binding: vFirewall_VNFC # Policies for VNF behavior policies: - anti_affinity_policy: type: tosca.policies.nfv.AntiAffinityRule targets: [vFirewall_VNFC] properties: scope: NFVI_node - scaling_policy: type: tosca.policies.nfv.ScalingAspects targets: [vFirewall_VNFC] properties: aspects: firewall_scale: name: Firewall scaling aspect description: Scale firewall instances based on throughput max_scale_level: 9 step_deltas: - delta_1 VNF Package Structure:
ETSI SOL004 defines the structure of a VNF Package (CSAR format):
vFirewall-pkg.csar
├── TOSCA-Metadata/
│ └── TOSCA.meta # Package metadata
├── Definitions/
│ ├── vnfd.yaml # Main VNF descriptor
│ └── types.yaml # Custom type definitions
├── Files/
│ └── scripts/
│ ├── install.sh # Installation script
│ ├── configure.sh # Configuration script
│ ├── start.sh # Start script
│ ├── stop.sh # Stop script
│ ├── scale_out.sh # Scale-out script
│ └── health_check.sh # Health check script
├── Images/
│ └── vFirewall-2.0.qcow2 # VNF software image
├── Artifacts/
│ ├── ansible/ # Ansible playbooks
│ └── helm/ # Helm charts (for CNFs)
└── manifest.mf # Package manifest with checksums
Key VNFD Elements:
ETSI SOL001 defines the TOSCA-based VNFD specification, while SOL004 defines packaging. Compliance with these standards ensures VNF portability across different MANO implementations. However, many vendor VNFs use proprietary extensions that limit portability—always verify interoperability when selecting VNFs.
Unlike static hardware appliances, VNFs are dynamic entities with defined lifecycles. The VNF Manager (VNFM) orchestrates these lifecycle transitions, ensuring VNFs are properly instantiated, configured, scaled, healed, and terminated.
The VNF Lifecycle States:
A VNF instance progresses through several well-defined states:
Lifecycle Management Operations:
Instantiate:
Configure:
Scale:
Heal:
Update/Upgrade:
Terminate:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
#!/bin/bash# Example VNF Lifecycle Scripts # ===========================================# INSTANTIATE SCRIPT# Called when VNF resources are allocated# ===========================================instantiate() { echo "[$(date)] Starting VNF instantiation..." # Wait for cloud-init to complete cloud-init status --wait # Configure network interfaces configure_network_interfaces # Initialize data plane (DPDK) initialize_dpdk # Start core services systemctl start vnf-control-plane systemctl start vnf-data-plane # Register with management system register_with_ems echo "[$(date)] VNF instantiation complete"} # ===========================================# CONFIGURE SCRIPT # Called to apply operational configuration# ===========================================configure() { local config_file=$1 echo "[$(date)] Applying VNF configuration from $config_file..." # Validate configuration syntax if ! vnf-config-validator "$config_file"; then echo "ERROR: Invalid configuration" exit 1 fi # Apply configuration atomically vnf-config-apply --atomic "$config_file" # Verify configuration was applied vnf-config-verify echo "[$(date)] Configuration applied successfully"} # ===========================================# SCALE OUT SCRIPT# Called when new instances are added# ===========================================scale_out() { local new_instance_id=$1 echo "[$(date)] Scaling out: adding instance $new_instance_id..." # Wait for new instance to be ready wait_for_instance_ready "$new_instance_id" # Add to load balancer pool add_to_lb_pool "$new_instance_id" # Synchronize state to new instance sync_state_to_instance "$new_instance_id" # Enable traffic to new instance enable_traffic "$new_instance_id" echo "[$(date)] Scale out complete: instance $new_instance_id active"} # ===========================================# HEAL SCRIPT# Called when instance failure is detected# ===========================================heal() { local failed_instance_id=$1 echo "[$(date)] Healing failed instance $failed_instance_id..." # Remove from traffic distribution disable_traffic "$failed_instance_id" # Attempt recovery if attempt_in_place_recovery "$failed_instance_id"; then enable_traffic "$failed_instance_id" echo "[$(date)] In-place recovery successful" else # Request VNFM to replace instance request_instance_replacement "$failed_instance_id" echo "[$(date)] Requested instance replacement" fi} # ===========================================# HEALTH CHECK SCRIPT# Called periodically by VNFM# ===========================================health_check() { echo "[$(date)] Executing health check..." # Check control plane if ! systemctl is-active vnf-control-plane; then echo "UNHEALTHY: Control plane not running" exit 1 fi # Check data plane if ! check_dpdk_ports; then echo "UNHEALTHY: Data plane ports down" exit 1 fi # Check processing capacity if ! check_processing_capacity; then echo "DEGRADED: High resource utilization" exit 2 # Degraded but not failed fi echo "HEALTHY" exit 0}The quality of lifecycle scripts directly impacts operational reliability. Poorly written scripts that don't handle edge cases, lack proper error handling, or assume specific infrastructure behaviors are a common source of VNF deployment failures. Always test lifecycle scripts thoroughly across different failure scenarios.
One of the most challenging aspects of VNF design is managing state in a dynamic, virtualized environment. Unlike hardware appliances that maintain state in local memory for the device's lifetime, VNFs must handle state in ways that support scaling, healing, and migration.
Categories of VNF State:
Configuration State:
Session State:
Processing State:
| State Category | Lifetime | Size | Sharing Approach | Persistence |
|---|---|---|---|---|
| Configuration | Instance lifetime | KB to MB | Distributed at config time | Persisted in config store |
| Session/Flow | Seconds to hours | MB to GB | Shared state store or sync | Optional (checkpoint) |
| Processing | Microseconds | Bytes to KB | Not shared | Never persisted |
| Metrics/Logs | Hours to days | MB to GB | Push to external systems | Time-series DB / log store |
State Management Patterns:
Pattern 1: Stateless VNF
The simplest approach: design VNFs with no persistent state.
Pattern 2: Sticky Sessions (Affinity)
Route related traffic to the same VNF instance.
Pattern 3: State Replication
Synchronize state across multiple VNF instances.
Pattern 4: External State Store
Store state in a dedicated, highly available data store.
Whenever feasible, design VNFs to be stateless or minimize local state. Stateless VNFs are inherently more cloud-native—they scale effortlessly, heal instantly, and avoid complex state synchronization challenges. If state is required, externalize it to purpose-built data stores designed for high availability.
The diverse landscape of network functions translates into a diverse VNF ecosystem. Different VNF categories have different performance profiles, scaling characteristics, and architectural requirements.
Security VNFs:
| VNF Type | Function | Key Challenge | Example Products |
|---|---|---|---|
| Virtual Firewall | Packet filtering, inspection | High-throughput deep inspection | Palo Alto VM-Series, Fortinet FortiGate-VM |
| vIDS/vIPS | Intrusion detection/prevention | Real-time signature matching | Snort, Suricata, Cisco Firepower |
| vWAF | Web application firewall | HTTP/HTTPS termination | F5 BIG-IP VE, Imperva WAF |
| vVPN Gateway | IPsec/SSL VPN termination | Crypto acceleration | Cisco CSR 1000v, strongSwan |
Traffic Management VNFs:
| VNF Type | Function | Key Challenge | Example Products |
|---|---|---|---|
| Virtual Load Balancer | Traffic distribution | Session persistence at scale | HAProxy, NGINX Plus, F5 BIG-IP VE |
| vWAN Optimizer | Compression, deduplication | Stateful optimization | Riverbed SteelHead, Silver Peak |
| vDPI | Deep packet inspection | Line-rate analysis | Sandvine Policy TS, Procera |
| vCGNAT | Carrier-grade NAT | Millions of translations | A10 vThunder, Cisco CGv6 |
Routing and Switching VNFs:
| VNF Type | Function | Key Challenge | Example Products |
|---|---|---|---|
| Virtual Router | IP routing | Line-rate forwarding | Cisco CSR 1000v, Juniper vMX, VPP |
| Virtual Switch | L2 switching | Millions of MAC entries | Open vSwitch, Contrail vRouter |
| vBNG | Broadband network gateway | Subscriber management | Cisco Staros, Casa CBRS |
| vPE | Provider edge router | MPLS/VRF support | Nokia VSR, IOS-XRv |
Telecom Core VNFs:
| VNF Type | Function | Key Challenge | Example Products |
|---|---|---|---|
| vEPC | 4G core network | Ultra-high availability | Cisco Ultra Services, Nokia CloudBand |
| vIMS | VoLTE/VoIP core | SIP session handling | Metaswitch, Oracle OCSBC |
| vSBC | Session border control | Media transcoding | Ribbon SBC, Oracle Enterprise SBC |
| vPCRF | Policy and charging | Real-time decisions | Huawei PCRF, Oracle Policy |
The latest evolution is Cloud-Native Network Functions (CNFs)—VNFs designed from the ground up for container platforms like Kubernetes. CNFs use microservices architecture, are packaged as Helm charts, and leverage Kubernetes primitives for scaling and healing. Major telecom vendors now offer CNF versions of their VNF products for 5G deployments.
The difference between a successful VNF deployment and a problematic one often comes down to VNF design quality. Well-designed VNFs are easier to deploy, more reliable in operation, and less costly to maintain.
Design Principles:
Anti-Patterns to Avoid:
Performance Engineering:
VNF performance requires deliberate engineering:
Data Plane Optimization:
Resource Efficiency:
Observability:
Many early VNFs were simply existing appliance software running in a VM—'lifted and shifted' without redesign. These VNFs often exhibit poor performance, limited scalability, and brittle failure handling. True VNFs are designed from the ground up for virtualized operation, not ported as an afterthought.
We've comprehensively explored Virtual Network Functions—the software building blocks of NFV. Let's consolidate the key concepts:
What's Next:
With VNFs understood, we'll next examine the NFV Architecture in detail—the complete framework that enables VNF deployment and operation. We'll explore NFVI, MANO (Management and Orchestration), and the reference points that connect NFV components.
You now understand Virtual Network Functions comprehensively—their architecture, packaging, lifecycle, state management, and design principles. This knowledge prepares you to evaluate VNF products, design VNF-friendly infrastructure, and understand the NFV architecture that supports them.