Chapitre 12
12 — SDN & NFV
> SDN (OpenFlow, ONOS, OpenDaylight), NFV (VNF, MANO, OpenStack), VPP, DPDK, P4, NETCONF/YANG, Ansible, NAPALM, Cisco ACI, VMware NSX
Cours 12 — SDN & NFV
1. Software-Defined Networking (SDN)
1.1 Principe
SDN sépare le plan de contrôle (control plane) du plan de données (data plane).
Diagramme en cours de génération...
Avantages :
- Programmable (API northbound/southbound)
- Centralisé (vision globale du réseau)
- Flexible (déploiement rapide de nouveaux services)
- Économique (switches "bêtes" moins chers)
1.2 Architecture SDN
Diagramme en cours de génération...
1.3 OpenFlow
OpenFlow est le protocole standard de communication entre le control plane et le data plane.
Table de flux OpenFlow :
| Match | Priority | Instruction | Counter | Timeout |
|---|---|---|---|---|
| ip_src=10.0.0.0/8, tcp_dst=80 | 100 | Output: port 1 | 1542 | 60 |
| ip_dst=192.168.1.0/24 | 50 | Output: port 2 | 890 | 120 |
| * | 0 | Send to controller | 15000 | - |
1.4 Controllers SDN
| Controller | Langage | OpenFlow | Usage |
|---|---|---|---|
| ONOS | Java | 1.0-1.5 | Opérateurs télécom, WAN |
| OpenDaylight | Java | 1.0-1.5 | Datacenters, entreprise |
| Ryu | Python | 1.0-1.5 | Prototypage, recherche |
| POX | Python | 1.0 | Éducation |
2. NFV (Network Function Virtualization)
2.1 Principe
NFV virtualise les fonctions réseau (firewall, LB, NAT, VPN) qui étaient exécutées sur du matériel dédié.
Diagramme en cours de génération...
2.2 MANO (Management and Orchestration)
Diagramme en cours de génération...
2.3 OpenStack
OpenStack est la plateforme open-source de référence pour NFV.
Composants réseau OpenStack (Neutron) :
neutron net-create public-net --shared
neutron subnet-create public-net 203.0.113.0/24 --name public-subnet
neutron router-create router1
neutron router-gateway-set router1 public-net
neutron net-create private-net
neutron subnet-create private-net 10.0.0.0/24 --name private-subnet
neutron router-interface-add router1 private-subnet
neutron port-create private-net --fixed-ip ip_address=10.0.0.100
3. VPP (Vector Packet Processing)
3.1 Architecture
VPP (FD.io) est un framework de traitement de paquets haute performance.
Diagramme en cours de génération...
Performances : Jusqu'à 100+ Gbps par cœur CPU.
3.2 Commandes VPP
# Interface
vppctl create host-interface name eth0
vppctl set interface state host-eth0 up
vppctl set interface ip address host-eth0 10.0.0.1/24
# Routage
vppctl ip route add 0.0.0.0/0 via 10.0.0.254
# NAT
vppctl nat44 add interface address host-eth0
vppctl nat44 add static mapping tcp local 10.0.1.10 80 external 203.0.113.10 80
4. DPDK (Data Plane Development Kit)
4.1 Principe
DPDK permet le traitement de paquets ultra-rapide en contournant le kernel Linux.
Diagramme en cours de génération...
Architecture DPDK :
- Poll Mode Driver (PMD) : polling au lieu d'interruptions
- Huge Pages : TLB plus efficace
- CPU Pinning : affinité de cœur
- Lockless Rings : communication inter-cœurs sans verrou
Performance : 10x+ vs kernel networking standard
5. P4 — Programmable Data Plane
5.1 Principe
P4 est un langage pour programmer le plan de données des switches.
Diagramme en cours de génération...
Exemple P4 :
header ethernet_t {
macAddr_t dstAddr;
macAddr_t srcAddr;
bit<16> etherType;
}
parser MyParser(packet_in pkt, out headers hdr) {
state start {
pkt.extract(hdr.ethernet);
transition select(hdr.ethernet.etherType) {
0x0800: parse_ipv4;
default: accept;
}
}
}
control MyIngress(inout headers hdr, inout metadata_t meta) {
action forward(egressSpec_t port) {
standard_metadata.egress_spec = port;
}
table routing {
key = { hdr.ipv4.dstAddr: lpm; }
actions = { forward; drop; }
size = 1024;
}
}
5.2 Comparaison
| Critère | OpenFlow | P4 |
|---|---|---|
| Plan de données | Fixe (match 12-tuples) | Programmable |
| Protocoles | Standard uniquement | Personnalisables |
| Version | 1.0 → 1.5 | Indépendant |
| Flexibilité | Limitée | Totale |
6. Network Automation
6.1 NETCONF / YANG
<rpc message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<get-config>
<source>
<running/>
</source>
<filter type="subtree">
<interfaces xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces"/>
</filter>
</get-config>
</rpc>
module example-interface {
yang-version 1.1;
namespace "urn:example:interface";
prefix "if";
container interfaces {
list interface {
key "name";
leaf name { type string; }
leaf enabled { type boolean; default true; }
leaf mtu { type uint16; default 1500; }
}
}
}
6.2 Ansible Network Automation
---
- name: Configurer switches Cisco
hosts: switches
gather_facts: no
vars:
ansible_connection: ansible.netcommon.network_cli
ansible_network_os: cisco.ios.ios
tasks:
- name: Configurer VLANs
cisco.ios.ios_vlans:
config:
- name: Servers
vlan_id: 10
- name: Database
vlan_id: 20
- name: Management
vlan_id: 100
state: merged
- name: Configurer interfaces
cisco.ios.ios_interfaces:
config:
- name: GigabitEthernet0/1
description: "Link to Core"
enabled: true
mode: trunk
6.3 NAPALM
from napalm import get_network_driver
driver = get_network_driver('ios')
device = driver(
hostname='192.168.1.1',
username='admin',
password='cisco',
optional_args={'secret': 'enable_secret'}
)
device.open()
# Récupérer la configuration
config = device.get_config()
print(config['running'])
# Appliquer une configuration
device.load_replace_candidate(filename='new_config.cfg')
print(device.compare_config())
device.commit_config()
device.close()
7. Cisco ACI
Diagramme en cours de génération...
- APIC : Application Policy Infrastructure Controller
- EPG : Endpoint Group (groupe de workloads)
- Contract : Politiques de communication entre EPGs
- Tenant : Isolation logique
8. VMware NSX
Diagramme en cours de génération...
Composants NSX :
- NSX Manager : Interface de gestion
- NSX Controller : Plan de contrôle distribué
- VTEP : VXLAN Tunnel Endpoint
- DFW : Distributed Firewall (micro-segmentation)
Résumé
Diagramme en cours de génération...