Le Routeur Programmable Click Présentation de Click : Routeur Programmable Logiciel MIT 2003 Toujours maintenu (vour site Web : http://www.pdos.lcs.mit.edu/click Diverses fonctionnalités efficace Trouver exemples Click sous : users/enseig/genius/click-1.4.3/elements
Le Routeur Programmable Click. Présentation de Click : Routeur Programmable Logiciel MIT 2003 Toujours maintenu (vour site Web : http://www.pdos.lcs.mit.edu/click Diverses fonctionnalités efficace Trouver exemples Click sous : users/enseig/genius/click-1.4.3/elements. Qu ’est-ce Click ?. - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Le Routeur Programmable Click
Présentation de Click : Routeur Programmable Logiciel
MIT 2003
Toujours maintenu (vour site Web :
http://www.pdos.lcs.mit.edu/click
Diverses fonctionnalités
efficace
Trouver exemples Click sous :
users/enseig/genius/click-1.4.3/elements
Qu ’est-ce Click ?
Routeur programmable
Acheminer les paquets vers la bonne sortie en faisant ou non
des traîtements
Quelques fonctinnalités de base (regroupés dans les éléments
de Click = briques de base)
Analyse de l’en-tête
Mécanisme de branchement
consultation d ’une table de routage
Historique
MIT puis Berkeley 2000-??
Thèse de Eddie Kohler dirigé par Robert Morris et Frans
Kaashoek
Implémentation d‘un routeur Multiprocesseur
annoncé dans un article by Benjie Chen et Eddie Kohler
l‘implémentation n‘a pas été rendu publique
Le Langage CLICK
Décrire l'architecture d'une application de routage des paquets
Language haut niveau, simple, configurable et efficace
Configuration
langage fonctionnal
Elements : Classes C++, Ports
Paramétres de configurations
Méthodes d'interfaces
Paquets
Le Langage CLICK
Connections :
définissent un graphe orienté
lient les éléments entre eux en passant d'un port de sortie
a un port d'entrée.
Exemple Syntaxe : FromDevice(eth0) -> Counter -> Discard ;
Quelques simples éléments branchement sans modification du paquet : tee
Modification de l‘en-tête : strip(8) enlève 8 bits
Vérification de l‘en-tête : Check IP header
CheckIPHeader(18.26.4.255 1.255.255.255)
Strip(8)
Chaîne de configuration
CheckIPHeader(…)
Tee(2)
Chaîne de configuration
Port d‘entrée
Port d‘entrée
Ports de sortie
Port de sortie
Chaîne de configuration
Communications en CLICK
Technique de transfert de paquets entre éléments:
PUSH :L'élément source initie le transfert paquet et l'envoie à l'élément destination (downstream).
PULL : L'élément destination initie le transfert paquet en demandant a l'élément source de retourner un paquet (upstream).
Implémenté par des appels de fonctions virtuels : efficacité
Il y a trois classes des connecteurs : PUSH, PULL et AGNOSTIC. Cette dernère change le caractère de ses ports pour s’adapter aux élements précédents/suivants mais doit être push ou pull pour tous les ports d’un élement
Transition push-pull, pull-push : Fifo
Communications en CLICK
Contrôle du flot de paquets
Les Fifos de CLICK
Stockage des paquets : FIFO
Elément : Queue (elements/stadard/queue.hh)
Port d'entrée de type PUSH
Port de sortie de type PULL
FIFO non bloquante en écriture
Indique qu'elle est vide aux éléments concernés
Indique l'arrivée du premier paquet aux éléments concernés
Jète des paquets selon une politique définie (dropping policy)
Queue
Interdits de Click
cet image comporte 4 erreurs
sortie push de FromDevice est connecté à l’entrée pull de PullDevice
sortie push de FromDevice comporte plusieurs connexions
plusieurs connexions aboutissent à l’entrée de ToDevice
Voir documentation sur les éléments (il y manquent quelques-uns) et éléments fournis avec la distribution
push
push
Flow-based router context
Recherche en largeur/en profondeur danns le graphe des configurations
Extension importante de la communication par appel des fonctions virtuels
Important entre autres pour RED dropping
Robuste en absence des cycles
Permet entre autres
de suivre le chemin des paquets
de notifier du côte de la fifo l‘élément précédent du fait de sa remplissage
Politique des Fifos (Dropping Policies)
Les fifos sont évidemment non-bloquantes; ceci est une
assumption de base dans le monde des réseaux
Jeter des paquets
en-tête de la fifo
à la queue de la fifo
Stratégies de dropping fournies
RED (Random Early Detection) Dropping : laisser tomber
un paquet au choix
Weighted RED : les paramètres indiquent les priorités
différentes
Un Simple Classifieur
Trois priorités
Jeter des paquets selon la stratégie RED
cherchez l ’erreur
Ordonnancement en Click
Deux stratégies sont implementées parmi des éléments
Round-Robin
Priority-based
Des stratégies plus compliquées sont imaginables mais pas
implémentées
Ordonnancement en CLICK
Ordonnancement : les initiateurs sont ordonnancés
Algorithme d'ordonnancement : Stride scheduling
Un élement qui initie de façon autonôme une requête PUSH ou PULL est ordonnancable et doit être mis dans la file d'attente
Tous les autres éléments sont ordonnancé implicitement
En général, un programme Click s'éxecute en un seul thread
Un appel à une méthode PUSH ou PULL doit retourner à son appelant avant qu'une autre tâche ne commence
Algorithme déterministe d'ordonnancement des tâches Stride Scheduling
Routage IPv4 en Langage Click
Analyser une configuration déjà existante
Algorithme de Routage IPv4
Le Langage Click
Communications en Click
Ordonnancement en Click
Protocole de résolution d ’adresses ARP
IPv4 codé en Click
Evaluation
Un premier routeur : IPv 4
Algorithme de Routage IPv4
Enlever un paquet de la file de sortie
Vérifier si il s‘agit version 4 ou 6
Vérifier l‘addresse destination
Vérifier checksum Stocker champ checksum et effacer En-tete prise comme serie des entiers 16 bit Calculer complement-1 du complement-1 de la somme de ces entiers Comparer a la checksum
Lookup route: chercher l‘addresse destination dans table de routage Recupérer l‘addresse IP du hop prochain
Mise à jour temps de survie (time-to-live TTL) : decrémenter champ TTL et modifier champ checksum
Insérer paquet dans une des files de sortie
IPv4 en Click
Aspects pratiques:
OS: Linux
Routage IPv4 (simplifié) est la plus grande application disponible en Click actuellement
Userlevel
Paquets sont générés par Click
Eléments „InfiniteSource“ et „Discard“ au lieu d‘une entrée et sortie sur Ethernet
ASIM : Kernel patch: paquets entre deux/plusieurs machines
Eléments FromDevice et ToDevice
Deux (vieilles) cartes Ethernet de la marque Tulip
IPv4 Code en Clickc0 :: Classifier(12/0806 20/0001,
// Connect ARP outputs to the interface queues.fake_arpq0 -> out0;fake_arpq1 -> out1;
// Proxy ARP on eth0 for 18.26.7, as well as cone's IP address.ar0 :: ARPResponder(18.26.4.24 00:00:C0:AE:67:EF, 18.26.7.0/24 00:00:C0:AE:67:EF);c0[0] -> ar0 -> out0;
// IP routing table. Outputs:// 0: packets for this machine.// 1: packets for 18.26.4.// 2: packets for 18.26.7.// All other packets are sent to output 1, with 18.26.4.1 as the gateway.
0.0.0.0/0 18.26.4.1 1)// Hand incoming IP packets to the routing table.
// CheckIPHeader checks all the lengths and length fields// for sanity.ip :: Strip(14) -> CheckIPHeader(18.26.4.255 1.255.255.255) -> [0]rt;c0[2] -> Paint(1) -> ip;c1[2] -> Paint(2) -> ip;
// IP packets for this machine.// ToHost expects ethernet packets, so cook up a fake header.rt[0] -> EtherEncap(0x0800, 1:1:1:1:1:1, 2:2:2:2:2:2) -> tol;
// These are the main output paths; we've committed to a// particular output device.// Check paint to see if a redirect is required.// Process record route and timestamp IP options.// Fill in missing ip_src fields.// Discard packets that arrived over link-level broadcast or multicast.// Decrement and check the TTL after deciding to forward.// Fragment.// Send outgoing packets through ARP to the interfaces.rt[1] -> DropBroadcasts -> cp1 :: PaintTee(1) -> gio1 :: IPGWOptions(18.26.4.24) -> FixIPSrc(18.26.4.24) -> dt1 :: DecIPTTL -> fr1 :: IPFragmenter(300) -> [0]fake_arpq0;rt[2] -> DropBroadcasts -> cp2 :: PaintTee(2) -> gio2 :: IPGWOptions(18.26.7.1) -> FixIPSrc(18.26.7.1) -> dt2 :: DecIPTTL -> fr2 :: IPFragmenter(300) -> [0]fake_arpq1;
// Send back ICMP UNREACH/NEEDFRAG messages on big packets with DF set.// This makes path mtu discovery work.fr1[1] -> ICMPError(18.26.7.1, 3, 4) -> [0]rt;fr2[1] -> ICMPError(18.26.7.1, 3, 4) -> [0]rt;
ARP (Address Resolution Protocol) Comment établir le lien adresse IP / adresse physique ?
Mise en place dans TCP/IP d’un protocole de bas niveau appelé Address
Resolution Protocol (ARP)
Rôle de ARP : fournir à une machine donnée l'adresse physique
d'une autre machine située sur le même réseau à partir de l'adresse
IP de la machine destinataire
Fournit a la couche liaison un mapping des addresses IP (logiques)
aux addresses physiques
Comparable au fonctionnement de la table de routage
Donner un addresse IP, rendre l‘addresse physique
Si l‘addresse IP n‘existe pas, générer une requête en utilisant un
protocole de contrôle
Enfiler le paquet
0 248 16 31
Type de service Longueur totale (en octets)
Identification Déplacement fragment
Adresse IP Source
Adresse IP Destination
Options IP
4
version HLEN
19
Fanions
Durée de vie Protocole Total de contrôle en-tête
Padding
Données
. . .
Le datagramme ARP Unité de transfert de base est le datagramme, constituée d'un en-tête et
d'un champ de données (de 1,5Ko à 64Ko)
Fake (Faux, simulé) ARP en Click
out0 :: Queue(200) -> Discard;out1 :: Queue(200) -> Discard;tol :: Discard;// An "ARP querier" for each interface.fake_arpq0 :: EtherEncap(0x0800, 00:00:c0:ae:67:ef, 00:00:c0:4f:71:ef); //ARPQuerier(18.26.4.24, 00:00:C0:AE:67:EF);fake_arpq1 :: EtherEncap(0x0800, 00:00:c0:4f:71:ef, 00:00:c0:4f:71:ef); //ARPQuerier(18.26.7.1, 00:00:C0:4F:71:EF);// Deliver ARP responses to ARP queriers as well as Linux.t :: Tee(3);c0[1] -> t;c1[1] -> t;t[0] -> tol;t[1] -> fake_arpq0; // was -> [1]arpq0t[2] -> fake_arpq1; // was -> [1]arpq1// Connect ARP outputs to the interface queues.fake_arpq0 -> out0;fake_arpq1 -> out1;
Fake ARP // Proxy ARP on eth0 for 18.26.7, as well as cone's IP address.ar0 :: ARPResponder(18.26.4.24 00:00:C0:AE:67:EF, 18.26.7.0/24 00:00:C0:AE:67:EF);c0[0] -> ar0 -> out0;// Ordinary ARP on eth1.ar1 :: ARPResponder(18.26.7.1 00:00:C0:4F:71:EF);c1[0] -> ar1 -> out1;// IP routing table. Outputs:// 0: packets for this machine.// 1: packets for 18.26.4.// 2: packets for 18.26.7.// All other packets are sent to output 1, with 18.26.4.1 as the gateway.
18.26.4.0/24 1,18.26.7.0/24 2,0.0.0.0/0 18.26.4.1 1) // Hand incoming IP packets to the routing table.// CheckIPHeader checks all the lengths and length fields for sanity.ip :: Strip(14) -> CheckIPHeader(18.26.4.255 1.255.255.255) -> [0]rt;c0[2] -> Paint(1) -> ip;c1[2] -> Paint(2) -> ip;// IP packets for this machine.// ToHost expects ethernet packets, so cook up a fake header.rt[0] -> EtherEncap(0x0800, 1:1:1:1:1:1, 2:2:2:2:2:2) -> tol;
Sorties // These are the main output paths; we've committed to a// particular output device.Check paint to see if a redirect is required.// Process record route and timestamp IP options.// Fill in missing ip_src fields.// Discard packets that arrived over link-level broadcast or multicast.// Decrement and check the TTL after deciding to forward.Fragment.// Send outgoing packets through ARP to the interfaces.rt[1] -> DropBroadcasts -> cp1 :: PaintTee(1) -> gio1 :: IPGWOptions(18.26.4.24) -> FixIPSrc(18.26.4.24) -> dt1 :: DecIPTTL -> fr1 :: IPFragmenter(300) -> [0]fake_arpq0;rt[2] -> DropBroadcasts -> cp2 :: PaintTee(2) -> gio2 :: IPGWOptions(18.26.7.1) -> FixIPSrc(18.26.7.1) -> dt2 :: DecIPTTL -> fr2 :: IPFragmenter(300) -> [0]fake_arpq1;// DecIPTTL[1] emits packets with expired TTLs.// Reply with ICMPs. Rate-limit them?dt1[1] -> ICMPError(18.26.4.24, 11, 0) -> [0]rt;dt2[1] -> ICMPError(18.26.4.24, 11, 0) -> [0]rt;// Send back ICMP UNREACH/NEEDFRAG messages on big packets with DF set.// This makes path mtu discovery work.fr1[1] -> ICMPError(18.26.7.1, 3, 4) -> [0]rt;fr2[1] -> ICMPError(18.26.7.1, 3, 4) -> [0]rt;
Differentiated Services (DiffServ)
Meter(12500)
RatedSplitter(7500)
SetIPDSCP(D)
DiffServ(2)
• Il s‘agit d‘une des implémentations possibles de Nouveaux éléments