MFormations
Modern Network Engineering

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 :

MatchPriorityInstructionCounterTimeout
ip_src=10.0.0.0/8, tcp_dst=80100Output: port 1154260
ip_dst=192.168.1.0/2450Output: port 2890120
*0Send to controller15000-

1.4 Controllers SDN

ControllerLangageOpenFlowUsage
ONOSJava1.0-1.5Opérateurs télécom, WAN
OpenDaylightJava1.0-1.5Datacenters, entreprise
RyuPython1.0-1.5Prototypage, recherche
POXPython1.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 :

  1. Poll Mode Driver (PMD) : polling au lieu d'interruptions
  2. Huge Pages : TLB plus efficace
  3. CPU Pinning : affinité de cœur
  4. 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èreOpenFlowP4
Plan de donnéesFixe (match 12-tuples)Programmable
ProtocolesStandard uniquementPersonnalisables
Version1.0 → 1.5Indépendant
FlexibilitéLimitéeTotale

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...