Vous êtes sur la page 1sur 338

Master 1 ère année

UE Réseaux Avancés I — P-F. Bonnefoi


Version du 12 décembre 2013
Table des matières

1 Deux topologies de réseaux : diffusion et point-à-point . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8


2 Le réseau TCP/IP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3 Adressage des matériels : Adresse IPv4 et Adresse MAC . . . . . . . . . . . . . . . . . . . . . . . . 24
4 Routage direct & indirect, encapsulation & fragmentation . . . . . . . . . . . . . . . . . . . . . . . . . 33
5 Le DNS, « Domain Name Server » : Principe de délégation . . . . . . . . . . . . . . . . . . . . . . . 46
6 Configuration manuelle d’une machine pour l’accès à Internet . . . . . . . . . . . . . . . . . . . . 57
1 Abstraction du réseau : les « couches » . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
1.1 La notion de protocole . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
1.2 La pile TCP/IP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
2 La programmation Socket ou la programmation de la couche 4 . . . . . . . . . . . . . . . . . . . . . 90
3 L’algorithme de routage : généralisation du premier pas . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
3.1 Routage : routeur & table de routage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
4 Diffusion dans un réseau : Multicast et classe D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
5 Le format du datagramme IP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
5.1 Encapsulation du datagramme IP ⇒ fragmentation ? . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
5.2 Fragmentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
6 Quelques métriques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
6.1 Du réseau « Circuit-Switched » au réseau « Packet-switched » . . . . . . . . . . . . . . . . . . . 135
6.2 Mode « Circuit virtuel » matériel : ATM, Asynchronous Transfer Mode . . . . . . . . . . . . . 146
ResAvI
7 Les contraintes de gestion des communications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
7.1 Circuit virtuel vs datagramme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
8 Contrôle d’erreur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
8.1 Code de détection et correction d’erreurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
8.2 Détection d’erreur et Envoi/Réception des données . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
8.3 Caractéristique des code détecteur d’erreur : distance de Hamming . . . . . . . . . . . . . . 156
8.4 Distance de Hamming d’un code détecteur d’erreur . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
8.5 Exemples de code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
8.6 Détection ou Correction ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
8.7 Exemple de code : le contrôle de parité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
8.8 Correction des erreurs : combien de bits sont suffisants ? . . . . . . . . . . . . . . . . . . . . . . . 162
8.9 Un code correcteur optimal pour une erreur simple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
8.10 Le cas des erreurs en rafale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
8.11 Autre code de détection d’erreur : le CRC, « Cyclic Redundancy Check » . . . . . . . . . . 166
8.12 Les codes polynomiaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
8.13 Code polynomiaux : exemple d’application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
8.14 Les codes polynomiaux : exemple de codes utilisés . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
8.15 Capacité des codes polynomiaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
8.16 Implémentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
9 Protocole TCP, Transmission Control Protocol RFC 793 . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
9.1 TCP : Segmentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
ResAvI
9.2 TCP : le format du segment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
9.3 TCP : établissement d’une connexion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
9.4 TCP : la fermeture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
9.5 TCP : l’automate de fonctionnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
9.6 TCP : le RST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
9.7 TCP : Améliorations par l’utilisation d’options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
9.8 TCP : détection de l’entrée en congestion du réseau . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
9.9 L’identification de système d’exploitation « OS fingerprinting » . . . . . . . . . . . . . . . . . . . . 219
10 UDP, User Datagram Protocol, RFC 768 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
10.1 UDP vs TCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
11 Conception de réseaux : la segmentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
11.1 Problème de croissance d’Internet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
11.2 La segmentation : les commandes « classiques » . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
11.3 Segmentation : domaine de diffusion et de collision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
11.4 Segmentation des réseaux locaux : le pont ou « bridge » . . . . . . . . . . . . . . . . . . . . . . . . 250
11.5 Segmentation des réseaux locaux : commutation et switch, les VLANs . . . . . . . . . . . . 258
11.6 Les « containers » Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
12 Le Firewall : la décision d’autoriser ou non le traitement du datagramme . . . . . . . . . . . . 269
12.1 Firewall : le plan de la présentation des usages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
13 QoS, « Quality of Service » . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309
13.1 Les flux « temps réel » . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
ResAvI
13.2 QoS : Integrated Services vs Differentiated Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315
13.3 QoS : « packet switching » avec MPLS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
13.4 Qos & GNU/Linux : Les queuing disciplines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321
13.5 Qos & GNU/Linux : Classless qdiscs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323
13.6 Qos & GNU/Linux : Classful qdiscs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
13.7 Qos & GNU/Linux : La commande tc, ou « traffic control » . . . . . . . . . . . . . . . . . . . . . . 333
13.8 Qos & GNU/Linux : un exemple avec HTB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334
13.9 Qos & GNU/Linux : combiner qdisc et iptables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336
ResAvI
Présentation générale du contenu du cours 6
Le réseau : différents points de vue
? vision programmeur : un système de « couches OSI, Open Systems Interconnection » :
 de la couche physique, n◦ 1, à la couche applicative n◦ 7 ;
 des protocoles de communications à maîtriser : TCP, UDP, SMTP, POP, SSH etc. ;
? vision humaine et géographique :
 des échanges au sein de la même structure « humaine » (entreprise, université, etc) :
? matériels administrés par la même autorité : segmentation du réseau, DNS « Domain Name System » local, etc.
? demande de performances de haut niveau : QoS, partage d’accès à des ressources, applications distribuées, etc.
 des échanges entre réseaux répartis sur la planète :
? de l’organisation : organisme internationaux, DNS, etc.
? des réseaux interconnectés : INTERconnected NETworks : du routage de haut niveau avec BGP, etc.
? vision théorique :
 réseau « point à point » vs « diffusion » ;
 des mesures : latence, gigue, débit, bande passante, etc.
 des principes : contrôle de flux, contrôle de congestion, contrôle d’erreur, etc.
? vision sécurité :
 surveillance du réseau : détection et identification du trafic, protection contre les attaques ;
 filtrage des échanges ;
 mise en place de tunnels d’échanges sécurisés ;
? vision concepts fondamentaux :
 adressage : niveau 2, IPv4, IPv6, VLAN, MPLS ;
 switching ou commutation : sélectionner une sortie pour un paquet en entrée ;
 forwarding ou relayage : sélectionner intelligemment une sortie pour un paquet en entrée ;
 routing ou routage : construire une route pour l’acheminement d’un paquet.
ResAvI
Plan de la partie Fondamentaux 7

Éléments importants
. Deux topologies théoriques : diffusion et « point-à-point » ;
. Les réseaux utilisés et le matériel d’interconnexion ;
. La gouvernance d’Internet : les organisations et les RFCs ;
. Le réseau TCP/IP : adressage, encapsulation, routage direct & indirect ;
. Le DNS : global et local ;
. La configuration du poste de travail.
ResAvI
1 Deux topologies de réseaux : diffusion et point-à-point 8
Le réseau en mode « diffusion »
Les réseaux à diffusion, broadcast network, n’ont qu’un seul canal de communication que toutes les machines
partagent.

Computer

Cable Computer

Une machine envoie de petits (a)


messages qui sont reçus par toutes les autres machines
(b) :
? dans le message un champ d’adresse permet d’identifier le destinataire
? à la réception du message, une machine teste ce champ :
 si le message est pour elle, elle le traite ;
Fig.
 sinon, elle1-7. Two broadcast networks. (a) Bus. (b) Ring.
l’ignore.
Exemple :
un couloir sur lequel débouche un certain nombre de portes de bureau.
quelqu’un sort dans le couloir et appelle une personne,
tout le monde entend l’appel mais une seule personne répond à l’appel
cas des annonces dans les gares ou les aéroports
ResAvI
Deux topologies de réseaux : diffusion et point-à-point 9
Le réseau en mode « diffusion »

Contraintes
? chaque machine appartenant au réseau doit disposer d’une adresse.

Avantages
◦ envoyer un message vers tout le monde en utilisant une adresse particulière :
Ce message est traité par toutes les machines.
Ce procédé est appelé « diffusion générale » ou « broadcasting ».

◦ transmettre un message à un sous-ensemble de machines :


Ce procédé est appelé « diffusion restreinte » ou « multipoint » ou « multicast ».
Une façon de faire consiste à utiliser les n bits d’adresse de la manière suivante :
? associer un bit à l’indication de mode multipoint
? utiliser les n-1 bits restants pour l’identification du groupe.
? permettre à chaque machine d’appartenir à un ou plusieurs groupes.
◦ connaître le temps de transmission d’un message :
permet de simplifier des algorithmes de communication : « je suis sûr que le récepteur a reçu mon message, mais je
ne connais pas son état et s’il a pu le traiter. »

Inconvénients
? la rupture du support de transmission entraîne l’arrêt du réseau.
Le « hub » ou « switch » tombe en panne.

? la panne d’un des matériels connectés au réseau ne provoque pas de panne du réseau (en général. . . ).
ResAvI
L’adressage dans un réseau à diffusion 10

Dans le cas d’Ethernet, mais aussi de WiFi, de Bluetooth. . .


Chaque carte réseau possède une adresse matérielle appelée adresse MAC (Medium Access Control) :
. unique par rapport à toutes les cartes réseaux existantes !
. exprimée sur 48 bits ou 6 octets.
 Syntaxe : 08:22:EF:E3:D0:FF
 Adresse de Broadcast : FF:FF:FF:FF:FF:FF (en IPv4).
Pour garantir l’unicité :
a. des « tranches d’adresses » sont affectées aux différents constructeurs :
00:00:0C:XX:XX:XX Cisco
Unicité
08:00:20:XX:XX:XX Sun id. constructeur sur 3 octets

08:00:09:XX:XX:XX HP ...
Sun Cisco HP
00:09:BF:XX:XX:XX Nintendo id. carte sur 3 octets

00:D0:F1:XX:XX:XX Sega ... ... ... ... ... ... ... ...
Ce préfixe est appelé OUI, « Organization Unique Identifier ».
La liste est consultable à http://standards.ieee.org/regauth/oui/index.shtml.
b. chaque constructeur numérote différemment chaque carte réseau qu’il construit.
Avantage impossible de trouver deux fois la même adresse dans un même réseau.
Inconvénient elle ne donne aucune information sur la localisation d’une machine
« dans quel réseau est la machine avec qui je veux parler ? »

Solution utilisation de l’adresse IP !


ResAvI
Les caractéristiques des réseaux « point-à-point » 11
Réseaux en mode « point à point »

(a) (b) (c)

Ces réseaux sont formés d’un grand nombre de connexions entres les machines prises deux à deux.

Le trajet des communications est rendu plus complexe :


Fig. 2-20. (a) Fully-interconnected network. (b) Centralized
. pour aller de la source au destinataire, un message doit alors passer par un plusieurs intermédiaires.
switch. (c) Two-level hierarchy.
. il existe plusieurs routes de longueurs différentes pour joindre ces deux machines, il est nécessaire d’utiliser
de bons algorithmes d’acheminement des messages ;

Inconvénient le temps de transfert d’un message devient presque impossible à prévoir.


ResAvI
Les caractéristiques des réseaux « point-à-point » 12

Le support physique relie seulement une paire d’équipements à la fois.


La communication est :
 directe si les deux équipements sont connectés entre eux ;
 indirecte sinon : quand deux équipements veulent communiquer, ils le font par l’intermédiaire des autres nœuds du
réseau.

Problème ? Comment choisir par quels intermédiaires passer, ce qui s’appelle du « routage » ?

Cas d’un réseau L’algo. de routage est simple : le site central reçoit et renvoie tous les messages.
en « étoile »
Le fonctionnement est simple, mais la panne du site central paralyse tout le réseau.
Cas d’une « bouclechaque nœud recevant un message de son voisin en amont le réexpédie à son voisin en aval.
simple »
Pour que le message ne tourne par indéfiniment, il est retiré par le nœud émetteur.
Si l’un des nœuds tombe en panne, le réseau est bloqué.
Une solution partielle est d’utiliser une « double boucle ».

Ça se complique, on a deux possibilités :


Maillage régulier l’interconnexion est totale (plus besoin de passer par un intermédiaire)
la fiabilité est maximale
le coût en câblage est maximal
Maillage irrégulier l’interconnexion n’est plus totale
la fiabilité diminue le routage des messages peut devenir complexe impossible de prévoir le
temps de transfert d’un nœud à l’autre.
ResAvI
Réseau de grande taille :combiner « point-à-point » et « diffusion » 13

Subnet Router
. diffusion : réseau de petite taille, LAN,
Local Area Network ;
Exemple :Ethernet
. point-à-point : réseau d’interconnexion,
constitué uniquement de routeur et de ligne
Host de tranmission Exemple : liaison satellite.
. la combinaison des deux : WAN,
Wide Area Network.
LAN

Fig. 1-9. Relation between hosts on LANs and the subnet.


Inter(connexion)Net(work) : Regional ISP
Backbone
? du client à la maison ;
? de la ligne téléphonique au POP, « Point of Pre-
sence » vers ATM ; POP
? en passant par l’ISP, Internet Service Provider ;
? au réseau national : backbone ;
? par une connexion à un réseau, Network Access NAP

Client Telephone
Point ; system
Server farm

? vers le LAN de l’entreprise. . .

Corporate
LAN
Router
ResAvI

Fig. 1-29. Overview of the Internet.


broken, the entire LAN goes down. Troubleshooting a bus network is performed by some-
thing known as the half-split method. A network engineer “breaks” or separates the link at
about the halfway point and measures the resistance on both ends. If the segment measures
50 ohms, there is a good chance that side of the LAN segment is functioning correctly. If
the resistance measurement is not 50 ohms, it signals a problem with that part of the LAN
Les différents types de réseaux utilisés
segment. The engineer continues with this method until the exact location of the problem is
identified. Figure 1.6 illustrates an example of the bus topology.
14
Le
F I Gbus
URE 1. 6 Example of the bus topology

Computer File Server


? ancienne technologie : n’existe plus actuellement ;
Network Topologies 9

50 Ohm 50 Ohm ? représentation « conceptuelle » d’un LAN, « local


Terminator Terminator
area network » ;
Troubleshooting the Bus Topology ? réseau à diffusion :
I remember many years ago I was called to troubleshoot a problem on a small
local area network using a bus topology. The network consisted of a network file  tout matériel connecté peut communiquer avec
server, about 20 client stations, and a few network printers. The users complained
Computer Network Printer Computer
of intermittent problems with the network. After spending some time looking over
tous les autres : « multiple access » ;
the network, I decided to test the bus using the half-split method and checked to
verify that the cable was reporting the correct resistance using a volt-ohm-milliamp
(VoM) meter. Sure enough, one side of the network cable reported the correct resis-
tance reading, but the other side was giving intermittent results.
 un matériel décide de manière autonome quand
Ring
After spending some time repeating the troubleshooting method, I was able to
determine the problem. It turns out that someone had run the coax (bus) cable
il transmet : il peut y avoir des collisions d’ac-
underneath a heavy plastic office chair mat and one of the little pegs used to pro-
The ring topology is rarely used with LANs today, but it is still widely used by Internet
tect the flooring was causing the intermittent connection as it struck the cable when
the user moved their chair around the mat. I quickly replaced and rerouted the sec-
cès, et il faut s’en protéger : « collision detec-
service providers (ISPs) for high-speed, resilient backhaul connections over fiber-optic
tion of cable in question. It is a good thing I was there during the normal business
links. In the ring topology, each device connects to two other devices, forming a ring pat-
operating hours when the person was moving around in the chair or I might have tion », « collision avoidance », etc.
never found the problem. Ah, the joys of troubleshooting a bus topology.
tern. Ring topologies in LANs may use a token-passing access method, in which data
Anneau ou « ring »
travels around the ring in one direction. Only one device at a time will have the opportu-
F I G U R E 1.7 An example of the ring topology
nity to transmit data. Because this access method does not use collision detection, it will
File Server
commonly outperform the bus topology, achieving utilisé ?
higherches lesthan
data rates fournisseurs
are possible d’accès Internet ou ISP, « Internet Service
using a collision detection access method. Each
Computer Provider », pour des liaisons arapides en fibre optique ;
computer on the ring topology can act as
repeater, a capacity that allows for a much stronger signal. Figure 1.7 shows an example of
Computer

the ring topology. ?


chaque matériel est connecté à deux autres matériels :
 les données sont transmises dans un seul sens : elle « tourne » sur
Computer
Computer
l’anneau entre les différents matériels ;
Computer  un matériel ne peut transmettre que lorsque c’est son tour : un jeton
d’autorisation circule dans l’anneau pour autoriser les transmissions
c01.indd 8 (on parle de « token ring ») ; 8/25/2012 3:00:25 PM
 un seul matériel communique à la fois, pas de collision : les perfor-
ResAvI

mances sont meilleures, le débit maximal est atteint.


01.indd 9 8/25/2012 3:00:25 PM
Star
The star topology, as shown in Figure 1.8, is the most commonly used method of connect-
ing devices together on a LAN today. It consists of multiple devices connected by a central
connection device. Common central connection devices include hubs, switches, and wire-
less access points, although hubs are rarely used today. The hub provides a single broadcast
domain similar to a bus topology. However, the switch and wireless access point both have
intelligence—the ability to decide which port specific network traffic can be sent to. A big
Les différents types de réseaux utilisés
advantage over the bus and ring topologies is that if a connection is broken or damaged the
entire network is not down; only a single device in the star topology is affected. However,
15
the central connection device such as a switch or wireless access point can be considered a
potential central point of failure.
Étoile ou « star »
F I G U R E 1 . 8 A common star topology using either wired or wireless devices

Network Printer
File Server
topologie
11 ?
la
la plus courante pour définir un LAN : plusieurs
The OSI Model
matériels connectés à un nœud de connexion central :
 un « hub » : un seul domaine de diffusion ;
or device failure and a cost savings compared to full redundancy. Mesh technology can
 unto « switch » ou un point d’accès sans fil : le nœud a la
operate with both wired and wireless infrastructure network devices. The amendment
the IEEE 802.11 standard for mesh networking is 802.11s. This amendment was ratified in
Computer
2011 and is now part of the IEEE 802.11-2012 standard. Computer
capacité de mettre en relation deux matériels voulant com-
Wireless
Computers
Manufacturers currently are using proprietary Layer 2 routing protocols, forming
Computer

a self-healing wireless infrastructure (mesh) in which edge devices can communicate.


muniquer entre eux (commutation ou « switching ») ;
Manufacturers of enterprise wireless networking infrastructure devices provide
? support
avantage : si un matériel est en panne, le réseau continue à
for mesh access points (APs) such that the mesh APs connect back to APs that are directly
fonctionner.
wired into the network backbone infrastructure. This is a form of wireless distribution sys- Wireless Access Point

tem (WDS) deployment. The APs or wireless controllers in this case are used to configure
both the wired and mesh APs. Wireless
Computers

F I G U R E 1 . 9 Mesh
Mesh networks can be either wired or wireless devices.
Réseau maillé ou « Mesh »
Each device in a mesh topology (Figure 1.9) has one or more connections to other devices
that are part of the mesh. This approach provides both network resilience in case of link
? chaque matériel possède une ou plusieurs connexions avec les
autres matériels ;
Mesh Routers
? cette topologie offre une meilleur :
c01.indd 10
 une meilleure résistance, « resilience », en cas de rupture d’un
8/25/2012 3:00:25 PM

lien de connexion ou de panne d’un matériel ;


 une économie de moyens par rapport à une redondance totale
(maillage complet) ;
? les liens peuvent être filaire ou sans fil ou un mélange des deux.
Wireless Mesh Routers
Dans le cas du WDS, « Wireless Distribution System », un AP, « ac-
cess point », du maillage sert d’intermédiaire de connexion vers des
The OSI Model
ResAvI

APs connectés au réseau filaire « backbone ».

Before we continue with wireless LAN technology, you should have some background on
28 Chapter 1 u Internetworking

Le matériel d’interconnexion 16
F I G U R E 1 .17 A hub in a network
 le répéteur ou « repeater » :
 correspond au « hub » : un répéteur multiport ;
 regénére, réamplifie la transmission physique et la relaie vers tous les ports
(pour en augmenter la distance, lutter contre les atténuations) . . .
 tous les hôtes connectés
? font parti du même domaine de collision ; A B C D
? font parti du même domaine de diffusion ; 26 Chapter 1 Internetworking u

? partagent le débit du réseau.


 le pont ou « bridge » : All devices in the same collision domain.
All devices in the same broadcast domain.
Bridges and switches read each frame as it passes through the network. The layer 2 d
 « divise » le domaine de collision en sous-domaines : Devices share the same bandwidth.
then puts the source hardware address in a filter table and keeps track of which port
? relaie une trame d’un sous-domaine de collision à un autre seulement si l’émetteur
Download from Wow! eBook <www.wowebook.com> et le destinataire
frame was received on. This information (logged sont
in the bridge’s dans filter table
or switch’s
deux sous-domaines différents (un domaine par what Hubs,
helps
port, thelike
avec un repeaters,
machine don’t
determine
nombre très examine
the location
limité of any
de ports) of thesending
the; specific traffic device.
as it enters
Figure a1
shows
ted aout
switch
to in an
the internetwork.
other parts of the physical media. Every device connec
? apprend le sous-domaine où chaque hôte est localisé grâce à son adresse MAC ;
hubs, must listen if a device transmits. A physical star network—whe
F I G U R E 1 .1 6 A switch in an internetwork
 le « switch » : device and cables extend in all directions out from it—is the type of
 bridge multi-ports, réalisant le travail en « hardware Visually,
»: the design really does resemble a star, whereas Ethernet net
? circuits électronique dédiés : rapide et intelligentbus
; topology, meaning that the signal has to run through the networ
? parallélisme : plusieurs trames relayées simultanément entre
des ports différents : débit aggrégé très élevé Hubs and repeaters can be used to enlarge the area
Forwarding modes: Store-and-forward LAN segment, although I do not recommend this. L
Bandwidth: 48 Gbps for GS724TS, 96 Gbps for GS748TS able for almost every situation.
 chaque segment/port a son propre domaine de collision ;
 tous les segments sont dans le même domaine de diffusion ;
1 2 3 4
 ne bloque pas les trames en « brodcast » ou en « multicast » ;
Ethernet Networking
ResAvI

 évite les boucles avec STP, « Spanning Tree Protocol ».


Each segment has its own collision domain.
All segments are in the same broadcast domain.

Ethernet is a contention-based media access method that allows all h


Les liens de communication 17
Le lien point à point, « point to point »
? un seul émetteur d’un coté du lien ;
? un seul récepteur de l’autre côté du lien ;
? contrôle des échanges MAC « Medium Access Control » : « flow control » ou contrôle de flux ;
? exemples : PPP, tunnels, Ethernet Gigabit, switch full duplex. . .

Le lien à diffusion, « broadcast link »


? de multiples matériels accèdent en émission et en réception au support de communication, « Multiple Access » ;
? chaque matériel reçoit une copie du message émis ;
? contrôle des échanges MAC « Medium Access Control » : CSMA/CD « Carrier sense Multiple access with
Collision Detection », CSMA/CA « ...with Collision avoidance » ;
? exemples : Ethernet 10/100Mbits, hub, WiFi, bluetooth. . .

Les différents liens sous Linux

root@starfox:~# ip link
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
link/ether 00:0c:29:89:01:44 brd ff:ff:ff:ff:ff:ff
8: mon_pt_a_pt: <POINTOPOINT,NOARP> mtu 1480 qdisc noop state DOWN mode DEFAULT
link/sit 10.1.1.1 peer 192.168.1.1
ResAvI
La technologie Ethernet 802.3 ou Ethernet II 18
Ethernet
 « Half-Duplex »
 à l’origine dans la norme IEEE 802.3 Ethernet ;
 « CSMA/CD » :
? éviter les collisions ;
? retransmettre les trames en cas de collision ;
 utilise une paire de fils dans le câble pour une transmission alternée dans les deux sens ;
 30-40% d’efficacité : 30 Mbps à 40 Mbps ;
 « Full-Duplex »
 utilise une liaison « point à point » entre l’émetteur et le récepteur ;
 plus de collisions possibles ;
 exige un « switch » et non un « hub », avec un port « dédié » pour l’hôte :
? un switch et un autre switch ; ? un hôte et un autre hôte à l’aide d’un câble croi-
? un switch et un hôte ; sé (le croisement est réalisé automatiquement
? un routeur et un autre routeur ; par une interface gigabit avec l’option « Auto-
? un switch et un routeur ; MDIX ») ;
 utilise deux paires de fils dans le câble pour une transmission simultanée dans les deux sens ;
 100% d’efficacité possible dans les deux directions :
? 20 Mbps pour de l’Ethernet 10Mbps :
? 200 Mbps pour de l’Ethernet 100Mbps ;
 Comment la carte choisit entre les deux modes et le débit ? la « négociation » et un mécanisme d’auto-
détection.
ResAvI
La commande « ethtool » 19
La carte Ethernet et sa configuration
root@starfox:~# ethtool eth0
Settings for eth0:
Supported ports: [ TP ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Supported pause frame use: No
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Advertised pause frame use: No
Advertised auto-negotiation: Yes
Speed: 1000Mb/s
Duplex: Full
Port: Twisted Pair
PHYAD: 0
Transceiver: internal
Auto-negotiation: on
MDI-X: off
Supports Wake-on: d
Wake-on: d
Current message level: 0x00000007 (7)
drv probe link
Link detected: yes

On remarque que la commande nous renseigne sur l’interface « eth0 » :


? le gigabit Ethernet uniquement en « Full Duplex » ;
? le support du « câble croisé » ;
ResAvI
??
Différentes organisations 20

? IEEE, « Institute of Electrical and Electronics Engineers » : organisation internationale chargée de superviser le dévelop-
pement et l’adaptation de standards internationaux.
Par exemple dans le cadre des communications sans fil avec l’IEEE 802.11.
? ANSI, « American National Standards Institute » : organisation non gouvernementale à but non lucratif contribuant à
l’élaboration de standards pour l’industrie en protégeant les intérêts du public.
Par exemple, le code ASCII, American Standard Code for Information Interchange.
? EIA, « Electronic Industries Association » : organisation à but non lucratif proche de l’ANSI dédiée à la résolution des
problèmes de fabrication de composants électroniques.
La prise du « twisted-pair » appelé RJ-45.
? ISO, « International Standards Organization » : le nom vient du grec « isos » qui veut dire « égaux », organisation de
standardisation internationale dont les membres appartiennent à des comités de standardisation de différents pays. Elle
est basée sur le volontariat (pour les Etats-Unis, c’est l’ANSI qui participe).
Dans le cadre des réseaux, sa contribution principale est le modèle OSI : « Open Systems Interconnection Reference
Model » qui sert de base à l’analyse et la conception des protocoles de communication.
? ITU-T, « International Telecommunications Union-Telecommunication Standards Sector » : permettre une infrastructure
mondiale non seulement dans les réseaux de données mais également dans la téléphonie, PSTN, « public switched
telephone network ».
Les Nations Unies ont formées un comité le CCITT, « Consultive Committee for International Telegraphy and Telephony »
compris dans l’ITU, « International Telecommunications Union ».
Tout communication qui traverse les frontières d’un pays doit se conformer aux recommandations de l’ITU-T. Une tech-
nologie comme ATM, « Asynchronous Transfer Mode » est un standard ITU-T.
? Des forums : promouvoir une technologie et sa standardisation.
Exemple le MEF, « Metro Ethernet Forum ».
? Obligations de se conformer aux régulateurs nationaux, comme le FCC, « Federal Communications Commission » qui
surveille, par exemple, l’utilisation des différents fréquences dans le cas de transmission sans fil.
ResAvI
a huge number are not). Work related to an experimental situation
affect Internet operation comprise experimental RFCs. These RFCs sh
be implemented
feedback is required (most of the feedback is provided in the drafting process). Each as part of any functional Internet service.
RFC is edited, assigned a number, and available to all. Not all RFCs are standards, even
Lesthose
documents de références Informational RFCs—Some RFCs contain general, historical, 21 or tutorial
that define protocols.
tion
This book will make heavy use of RFCs to explain all aspects of TCP/IP and the rather than instructions.
Les Internet,
« Request for details
so a few Commentare in » & l’IETF,
order. « Internet
RFCs have Engineering
various maturity Task
levels that they Force
go »
through in their lifetimes, according to their requirement levels. The RFCs
RFCare further classified into one of five requirement levels, as shown in Fi
life-cycle
 maturity
IETF :organisme responsable
levels are shown in Figure 1.5.du Note
développement des
that the timeline standards
does not alwaysde l’Internet.
apply,
 isson
or not applied
propreinsystème
a uniform de fashion.
standardisation des protocoles Required—These RFCs must
utilisés par les matériels be implemented
connectés à Internet.by all Internet systems t
minimum
A specification can fall into one of six maturity levels, after which it passes
Les protocoles concernés sont plus proches de l’utilisateur (applications)
to his-conformance. For example, IPv4 and ICMP, both discussed in
que du matériel.
torical status and is useful only for tracking a protocol’s development. Following
this book,intro- are required protocols. However, there are very few requir
 duction
Les standards Internet
as an Internet draft, :the
des spécifications
specification can be testées
a: et qui doivent être suivies.
 la procédure d’élaboration est stricte : Recommended—These RFCs are not required for minimum conformanc
Proposed standard—The specification is now well understood, very stable, and For example, FTP is a recommended protocol.
useful.
? « Internet
sufficiently interesting
draft » :todocument
the Internetde community. The specification
travail, souvent modifié sans is now
statut particulier et de durée de vie d’au plus 6 mois ;
usually tested and implemented by several groups, if this has not already in this category are not required and not recommended.
? les développeurs travaillent à partir de ces « draftsElective—RFCs
happened at the draft level.
»;
systems can use them for their benefit if they like, so they form a
? un draft peut être publié sous la forme d’un RFC (juste“option
Draft standard—After at least two successful and independent implementations,
une appellation, il n’y a plus besoin de retour ou feedback).
set” for Internet protocols.
 theRFC identifiée
proposed par un
standard numéro,tolibrement
is elevated consultable
a draft standard. Withoutet, suivant le niveau de requirements, obligatoire, ou pas.
complications,
Limited Use—These RFCs are only used in certain situations. Most expe
 andTouswith modifications
les RFCs ne sont if specific
pas desproblems are uncovered,
standards, même draft
ceuxstandards
définissantnor- des protocoles entiers.
mally become Internet standards. RFCs are in this category.
 Après un certain temps, la RFC peut arriver à maturité et finir dans les « RFC historiques ».
Internet Draft
RFC Requirement Levels

Experimental Proposed Informational Required: All systems must implement


RFCs Standard RFCs

Six months
Recommended: All systems should implement

Draft Standard

Four months Elective: Not required nor recommended

Internet
Standard
Limited Use: Used in certain situations, such as experimental

Historic RFCs Not Recommended: Systems should not implement


ResAvI

FIGURE 1.5 FIGURE 1.6


The RFC life cycle. Many experimental RFCs never make it to the standards track.
RFC requirement levels. There are very few RFCs that are required to implement an Inte
La gouvernance d’Internet : les organismes responsables 22

 InterNIC, « Internet Network Information Center » entre 1992-1998 :


 organisme public américain chargé de la gestion centrale des adresses et des noms de domaines Internet et de l’accrédi-
tation d’un organisme homologue dans chaque pays, les organismes délégués :
? AfriNIC (Afrique),
? APNIC (Asie, Pacifique),
? ARIN (Amérique du Nord),
? LACNIC (Amérique du Sud, îles Caraïbes),
? RIPE NCC (Europe, Moyen-Orient)
? NIC France ou afnic, NIC Angleterre, etc.¸

 ICANN, « Internet Corporation for Assigned Names and Numbers » :


 Organisation créée en octobre 1998, pour s’ouvrir à la concurrence
 traite les noms de domaine et leur délégation (par exemple VERISIGN Inc. : zone « .com ») ;
 exploitation des serveurs de la racine du DNS (ceux qui font autorité) ;
 allocation de blocs de numéro IP ;
 en France, les prestataires (fournisseurs d’accès) font l’intermédiaire avec l’afNIC
 IANA, « Internet Assigned Numbers Authority » :
 tient l’annuaire : adresses IP & numéros de protocoles ;
 adresses IP et numéros d’AS : déléguées aux RIR régionaux, « Regional Internet Registries » ;
 numéros de protocoles et de ports (entre 1 et 1023) ;
 déléguées aux LIRs, « Local Internet Registry » (eg. FAI).
 Les « Registrar » :
 Un registrar (bureau d’enregistrement) est une société ou une association permettant le dépôt de noms de domaine internet,
dans les TLD, « Top Level Domain », où il n’y a pas de vente directe.
 Il faut payer un certain montant pour acquérir et protéger un nom de domaine.
 GIP Renater (Groupement d’Intérêt Public) :
 Réseau de la recherche en France, « Réseau National de télécommunications pour la Technologie l’Enseignement et la
ResAvI

Recherche »
??
2 Le réseau TCP/IP 23

La conception
Contraintes du protocole IP « Internet Protocol » RFC 791 :
? utiliser la topologie réseau point à point (pour permettre des grandes distances c’est obligatoire) ;
? la panne d’un équipement du sous-réseau ne doit pas entraîner une rupture du réseau ;
? privilégier la disponibilité du réseau : il doit servir au maximum.

Le but est que les transactions continuent :


. du moment que l’ordinateur source et l’ordinateur destination fonctionnent ;
. même si certains routeurs ou certaines lignes de transmission tombent en panne (origine militaire de la création
d’Internet par le DoD états-uniens).

Les moyens
◦ définir une architecture très souple pour pouvoir mettre en œuvre des applications très diverses comme le
transfert de fichiers ou la transmission de la parole en temps réel (TCP et UDP) ;

◦ faciliter le routage : construire une méthode simple et rapide (opérations binaires par exemple) ;

◦ permettre le regroupement de machines pour les gérer ensemble (regroupement en réseau) ;

◦ faciliter le travail de l’administrateur (sisi. . . ).


ResAvI
3 Adressage des matériels : Adresse IPv4 et Adresse MAC 24

Adressage pour le protocole IP (IPv4)


Chaque ordinateur et chaque routeur du réseau Internet possède une adresse IP.
L’adresse IP est décomposée en deux parties <id. réseau><id. machine> :
? un identifiant de réseau ;
? un identifiant d’ordinateur appartenant à ce réseau.
Chaque est adresse IP doit être unique pour permettre de la localiser sur la planète.
? Il existent différentes répartitions des 32 bits entre identifiant réseau et identifiant machine :
 ces différentes répartitions définissent un ensemble de classes de réseaux ;
 ces classes ne sont plus utilisées en CIDR, où on indique uniquement le nombre de bits de la partie réseau ;

Propriétés
. elle est codée sur 32 bits.

. elle est représenté par commodité sous forme de 4 entiers variant entre 0 et 255 séparés par des points
exemple : 164.81.1.4

. un organisme officiel, le “NIC”, Network Information Center, est seul habilité à délivrer des numéros d’identifi-
cation des réseaux.

. il y a une seule adresse IP par interface réseau (en général. . . ).


Dans le cas d’un routeur interconnectant 2 réseaux différents, il possède une adresse IP pour chacune de ses
interfaces connectées à un réseau.
ResAvI
The IPv4 address is a network layer concept and has nothing to do with the addresses
that the data link layer uses, often called the hardware address on LANs. IPv4 addresses
must be mapped to LAN hardware addresses and WAN serial link addresses. However,
there is no real relationship between LAN media access control (MAC) or WAN serial
??
Répartition (adresse réseau, adresse machine)
link addresses in the frame header and the IPv4 addresses used in the packet header, 25
with the special exception of multicast addresses.
Les classes de réseaux The original IPv4 addressing scheme established in RFC 791 is known as classful
addressing. The 32 bits of the IPv4 address fall into one of several classes based on
the value of the initial bits in the IPv4 address. The major classes used for addresses
were A, B, and C. Class D was (and is) used for IPv4 multicast traffic, and Class E was
“reserved” for experimental purposes. Each class differs in the number of IPv4 address
bits assigned to the network and the host portion of the IP address. This scheme is
shown in Figure 4.2.
Note that with Class A, B, and C, we are referring to the size of the blocks being allo-
cated as well as the region from which they were allocated by IANA. However, Classes
D and E refer to the whole respective region. Multicast addresses, when they were
assigned for applications, for example, were assigned one at a time like (for instance)
port numbers. (We’ll talk about port numbers in a later chapter.) In the rest of this
chapter, references to Classes A, B, and C are concerned with address space sizes and
not locations.
The 4 billion (actually 4,294,967,296) possible IPv4 addresses are split up into five
Les adresses de classe A sont peu
classes. Theutilisées.
five classesExemple : 3.0.0.0/8
are not equal , AS80,
in size, and Class GE-CRD
A covers - General
a full half Electric Company.
of the whole
Aux niveaux des adresses IP
Number of % of
32-bit Address Starts with:
Addresses: Address Space
Class A 0 (0–127) 231 5 2,147,483,648 50

Class B 10 (128–191) 230 5 1,073,741,824 25

Class C 110 (192–223) 229 5 536,870,912 12.5

Class D 1110 (224–239) 228 5 268,435,456 6.25

Class E 1111 (240–255) 228 5 268,435,456 6.25

First Second Third Fourth


byte byte byte byte

FIGURE 4.2
ResAvI

Classful IPv4 addressing, showing the number of addresses possible and percentage of the total
address space for each class. Class D is still the valid IPv4 address range used for multicasting.
!"#$%%$%&'(&#)%$#*)$%&+,-#&"$%&-%./$%&+.#012-31$#%
4$%&."#$%%$%&+.#012-315#$%
Adresses IP réservées pour des usages particuliers
#$%&'()$%%$%&*$)+$,,$-,&(.$//$0,1$)23 26
($%&$-456%&($&+$%%'7$%&+18,69($%,6-','6)$%
!

! (:%67-$)&8'&+'0;6-$&051)'-,$
Ces adresses permettent d’effectuer : X51,&O&Y:)5 ZP5)(6-',$1)&8169+E+$
! (:%67-$)&8$&):%$'1&051)'-,<

? des envois de messages multi-destinataires ; X51,&O&Y:)5 6(<&($&+'0;6-$ [-&5)(6-',$1)&%1)&8$&):%$'1&8169+E+$

? désigner la machine courante ; X51,&O&> \6//1%65-&86+6,:$&'1&):%$'1&8169+E+$

? désigner le réseau courant. I(<&($&):%$'1 X51,&O&> \6//1%65-&(6)67:$&4$)%&0$&):%$'1

>?@ ]5+^)$&M1$805-M1$ U5108$


67."#$%%$&"$&8,-23$&=>?@<A<B<CD&*$)+$,&(.$//$0,1$)23
L’adresse de « boucle » (127.X.Y.Z)! permet d’effectuer :
($%&05++1-60',65-%&6-,$)9*)57)'++$&%1)&8'&+E+$&+'0;6-$

!"#$%&'()(*(+,-.(/011$203
! ($%&,$%,%&($&857606$8%&):%$'1F<

 des communications inter-programme sur la même machine


!"#$%&'$%&"$%()*%('$%+",-'.$%#'%$/#.%+"$%01'(('2'#.%123$%$-0%('%01$'"-4
! G<G<G<G&$%,&1,686%:&*')&1-$&+'0;6-$&*51)&05--'H,)$&%'&*)5*)$&'()$%%$&IJ&85)%&(.1-&*)50$%%1%&

 des tests de logiciels réseaux. Dans ces cas là, les paquets ne sont pas réellement émis sur le réseau.
(.'+5)K'7$<&5(('%6'70"%$'%+0/&-0'0%-#'%"60'$$'%89%+"0%(:3#.'02163"30'%6:-#'%"-.0'%2"&;3#'4
D’autres adresses particulières : ?LL<?LL<?LL<?LL&$%,&1-$&'()$%%$&($&(6//1%65-&850'8$&0')&$88$&(:%67-$&,51,$%&8$%&+'0;6-$%&(1&):%$'1&
!

 0.0.0.0 est utilisé par une machine pour '1M1$8&'**'),6$-,&8.5)(6-',$1)&M16&1,686%$&0$,,$&'()$%%$<&+"$%6'%&/##"3$$"#&'%6-%01$'"-<


connaître sa propre adresse IP lors d’un processus d’amorçage
(BOOTP). Elle devra se procurer6$%&."#$%%$%&+,-#&#)%$.-&+#1*)&,-&190#.9$0&=%'-%&'00N%&(6)$0,&O&8P$F,:)6$1)D
une adresse IP par l’intermédiaire d’une autre machine.
8$%&'()$%%$%&($&08'%%$&Q&($&>G<G<G<G&O&>G<?LL<?LL<?LL&=>G<G<G<GRSD&T
!

 255.255.255.255 est une adresse8$%&'()$%%$%&($&08'%%$&U&($&>@?<>V<G<G&O&>@?<W><?LL<?LL&=>@?<>V<G<GR>?D&T&


de diffusion locale car elle désigne toutes les machines du réseau auquel
!

8$%&'()$%%$%&($&08'%%$&#&($&>"?<>VS<G<G&O&>"?<>VS<?LL<?LL&=>"?<>VS<G<GR>VD<
!
!" cette adresse. pas besoin de connaissance du réseau.
appartient l’ordinateur qui utilise
Réseaux privés, RFC1918
Les adresses pour réseau privé ou intranet (sans accès direct à l’extérieur) :
? les adresses de classe A de 10.0.0.0 à 10.255.255.255 (10.0.0.0/8) ;
? les adresses de classe B de 172.16.0.0 à 172.31.255.255 (172.16.0.0/12) ;
? les adresses de classe C de 192.168.0.0 à 192.168.255.255 (192.168.0.0/16).
Ces réseaux ne sont pas « routés », ni diffusés dans le cas de BGP...mais faire attention !
$ whois -h riswhois.ripe.net 192.168.0.0
route: 192.0.0.0/3
origin: AS3303
ResAvI
??
Combiner réseau à diffusion et réseau IP 27

Faire le point. . .
◦ sur un réseau à datagramme, il circule. . . des datagrammes ! ;
◦ le réseau à datagramme est appelé réseau IP : il utilise des algorithmes, des formats de données définis dans
la norme IP, « Internet Protocol » ;
◦ un réseau à diffusion fait circuler des messages de nature différente : les trames (on parle de trame Ethernet
ou IEEE 802.3) ;
◦ un datagramme doit emprunter un réseau à diffusion pour atteindre un ordinateur :
 principe d’encapsulation : le datagramme est « inclus » dans une trame Ethernet :
 à l’adresse IP d’une machine doit correspondre l’identifiant de cette machine dans le réseau à diffusion :
une adresse MAC :
? l’adresse MAC est attachée à la carte réseau et est choisie par le constructeur de cette carte ;
? l’adresse IP est choisi par l’administrateur réseau suivant la configuration qu’il veut donner à son réseau ;

Comment faire la correspondance entre @MAC et @IP ?


a. c’est l’ordinateur qui connaît l’adresse MAC de sa carte réseau ;

b. c’est l’ordinateur qui connaît son adresse IP ;

c. Qui peut dire à quelle adresse IP correspond tel adresse MAC ? L’ordinateur lui même !

d. Définition d’un protocole pour « questionner » les ordinateurs : ARP, Address Resolution Protocol
ResAvI
Correspondance entre @MAC et @IP : le protocole ARP 28
Transmission physique des datagrammes IP
On appelle « couche liaison de données », le logiciel chargé de :
. la mise en correspondance des adresses IP avec les adresses spécifiques des interfaces physiques
. l’encapsulation des datagrammes IP afin qu’ils puissent être transmis sur un support physique particulier.

Correspondance entre adresses physiques et adresses IP


Le protocole ARP “Address Resolution Protocol” :
il fournit une correspondance dynamique entre une adresse IP connue et l’adresse matérielle lui correspondant.

Fonctionnement :
. ARP exploite les possibilités de diffusion :
Lorsque le protocole IP doit envoyer un datagramme à un équipement relié à un réseau à diffusion, la couche liaison de
donnée consulte sa mémoire cache pour voir si l’adresse IP distante y est mise en correspondance avec une adresse
physique.
 Si c’est le cas le datagramme IP est émis immédiatement, enveloppé dans une trame Ethernet envoyée à l’adresse
physique destination (@MAC).
 Sinon la couche liaison de données construit une requête ARP.
. Lorsqu’un message ARP est reçu, la couche liaison de donnée fait :
 une première vérification pour vérifier si l’adresse IP de l’émetteur se trouve déjà dans la mémoire cache ARP locale
sinon il y a mise à jour de la mémoire cache,
 une seconde vérification pour voir si l’adresse IP demandée correspond à l’adresse IP locale, si ce n’est pas le cas
le message est détruit, sinon si le message ARP est une requête, une réponse ARP est envoyée.
ResAvI
??
Illustration d’ARP 29
Comment échanger réellement sur un réseau local à diffusion ?
? Les machines ont chacune une carte réseau ;
? Chaque carte a une adresse MAC unique donnée par le constructeur ;
? Chaque machine dispose d’une adresse IP donnée par l’administrateur du réseau.
3
What’s the MAC address of 10.10.12.52?
1 Tell 10.10.12.166, okay ?
Here’s my MAC address...

Ethernet LAN
ARP
Request 4
Broadcast

Inxclient bsdserver wincli2 CE6 winsvr2


10.10.12.166 10.10.12.77 10.10.12.222 10.10.12.1 10.10.12.52

ARP Request Not me! Not me! Not me! Hey!


Sent and Reply (request (request (request That’s me!
Processed ignored) ignored) ignored) (reply sent
2 unicast)
(These two devices can cache the
sender’s MAC and IP addresses.)

La machine 10.10.10.166 demande l’@MAC de la machine 10.10.12.52.


ResAvI
Chapter 8 • Internet Protocols 365
??
Illustration d’ARP : les échanges 30

IP: 192.200.96.21 IP: 192.200.96.22 IP: 192.200.96.20


MAC: 01-23-45-67-89-AB MAC: 00-01-03-1D-CC-F7 MAC: 49-BD-2F-54-1A-0F

Sender

ARP Request: to FF-FF-FF-FF-FF-FF


Target
Sender MAC: 01-
01-23-
23-45-
45-67-
67-89-
89-AB
Sender IP: 192.200.96.21
Target IP: 192.200.96.23

ARP Reply
Sender MAC: A3- A3-B0-
B0-21-
21-A1-
A1-60-
60-35 IP: 192.200.96.23
Sender IP: 192.200.96.23 MAC: A3-B0-21-A1-60-35
Target MAC: 01-
01-23-
23-45-
45-67-
67-89-
89-AB
Target IP: 192.200.96.21

Figure 8-17: ARP


La requête de request and response
la machine example.
« 192.200.96.21 » demande l’@MAC de la machine
192.200.96.23 ;
!!"!!"!!"!!"!!"!!#$%&'(%)*+(%,'-,%*.)/%,'(%01%-++2(//%2(345(/%.5,'%-)%671%3-89(,%8*),-5)5):%
,'(%2(/3*)+(2;/%<6=%-++2(//#%&'(%2(34>%5/%/(),%,*%,'(%?@(25(2;/%<6=%-++2(//A%-B-54-C4(%D2*E%,'(%
La réponse de la machine 192.200.96.23 donne la réponse @MAC A3:B0:21:A1:60:35.
671%2(?@(/,#%
!5:@2(%F"GF%/'*./%,'(%671%3-89(,%D*2E-,%D*2%E-335):%01BH%-++2(//(/%,*%<6=%-++2(//(/#%0)%,'5/%
8-/(A% ,'(% 671% 3-89(,% /5I(% 5/% JF% C>,(/#% 671% 8-)% C(% @/(+% D*2% *,'(2% 95)+/% *D% E-335):/A% .5,'%
ResAvI

+5DD(2(),%-++2(//%/5I(/A%-/%/,-)+-2+5I(+%C>%,'(%06K6%Lhttp://iana.org/$#%&'(%3-89(,%D5(4+/%-2(M%
•%N-2+.-2(%&>3(M%/3(85D5(/%,'(%45)9"4->(2%32*,*8*4%,>3(#%!*2%(O-E34(A%,'(%8*+(%D*2%P,'(2)(,%5/%G#%
CHAPTER 5 Address Resolution Protocol 157 ??
Illustration d’ARP : les échanges 31

10.10.12.166 10.10.12.52
Inxclient winsvr2
00:b0:dO:45:34:64 00:0e:0c:3b:88:56

LAN2

0!0001 0!0800
0!06 0!04 0!00001
0!00B0D0453464
0!0A0A0CA6 ARP Request
(10.10.12.166)
0!000000000000
0!0A0A0C34 (10.10.12.52)
Source Destination
CRC Data (28 bytes) 0!0806 0!00B0D0453464 0!FFFFFFFFFFFF

0!0001 0!0800
ARP Reply 0!06 0!04 0!00002
(10.10.12.52) 0!00E0C3B8856
0!0A0A0C34
(10.10.12.166) 0!00B0D0453464
0!0A0A0CA6

Destination Source
0!00B0D0453464 0!00E0C3B8856 0!0806 Data (28 bytes) CRC

FIGURE 5.7 transmet une « requête ARP » à tous, broadcast ;


? la machine lnxclient
ARP exchange
? la machine winsrv2 reçoit example, showing
cette requête ethow the requested
découvre qu’elleinformation is provided
lui est destinée by the
: elle destination’s
envoie en retour une « ré-
reply.
ponse ARP », mais uniquement à destination de lnxclient.
ResAvI

ARP VARIATIONS
??
Illustration d’ARP 32
Le protocole RARP “Reverse Address Resolution Protocol”
Il réalise l’opération inverse :
◦ une machine sans adresse IP connue peut envoyer une requête RARP pour demander son adresse IP.
◦ une machine particulière (un serveur gérant le réseau) lui répond et lui affecte son adresse IP.
◦ cette machine dispose d’une table de correspondance : (adresse physique, adresse IP).
Le protocole RARP est utile pour amorcer une station sans disque, un Terminal X-Window, ou une imprimante.

Pour consulter la table ARP


Sous Linux
pef@solaris:~$ ip neighbor
192.168.42.254 dev eth0 lladdr 00:07:cb:cc:d4:e5 STALE
192.168.42.122 dev eth0 lladdr 64:b9:e8:d2:23:ba REACHABLE
Sous Windows
ResAvI
4 Routage direct & indirect, encapsulation & fragmentation 33

Pour envoyer un datagramme d’une source vers une destination, il faut savoir localiser la machine destination.

Deux possibilités :
. les deux machines font partie du même réseau local : on parle de routage direct (sur Ethernet, on utilisera le protocole
ARP et l’envoi direct sur le réseau à diffusion) ;
. les deux machines ne font pas partie du même réseau local : on parle de routage indirect.
On doit passer par un intermédiaire qui permet de sortir du réseau local pour aller vers l’extérieur : le routeur (ou appelé
« passerelle » ou gateway).

Pour faire du routage direct ou indirect pour un datagramme


. savoir si les deux machines font partie du même réseau local ;
. connaître l’@IP d’un routeur de sortie ;
. remettre le datagramme à la machine destination si elles sont dans le même réseau locale ;
. remettre le datagramme au routeur sinon.

Comment savoir si Source et Destination sont dans le même réseau ?


Il faut comparer l’ <id. réseau> des deux adresses : si c’est la même alors les deux sont dans le même réseau local.

Comment remettre le datagramme au routeur


Il faut utiliser le mécanisme d’encapsulation d’un datagramme dans une trame :
. la trame sert à remettre des données d’une machine connectée à un réseau local à une autre machine connectée au
même réseau locale ;
. la trame possède une @MAC de destination indépendante de l’@IP : il est possible d’envoyer la trame à une machine
dont l’@IP ne correspond pas à son @IP !
Par exemple : on peut envoyer une datagramme à destination de l’extérieur du réseau local à l’@MAC du routeur.
ResAvI

Attention : les attaques MiTM, « Man-in-the-Middle », opèrent sur l’association @MAC ⇔ @IP du routeur !
Savoir si deux machines appartiennent au même réseau local
??
34
En utilisant la notion de classe
Il suffisait de comparer les <id. réseau> des deux @IP suivant la répartition donnée par la classe, mais. . .

La notion de sous-réseau ou Subnetting


But Partition d’un réseau en différents sous-réseaux.
Avantages Éviter d’avoir recours à plusieurs réseaux (de classe A, B, ou C) pour disposer de réseaux autonomes au
sein d’une même entité
Exemple : l’université de Limoges avec les machines du site de Condorcet, du campus de Vanteaux, de La Borie. . .
Mise en œuvre Définition de sous-réseaux en découpant <id. machine> en deux parties :
<id. de réseaux sur r bits><id. de sous-réseau sur s bits><id. de
machine sur m bits>, avec r + s + m = 32.
Le découpage par multiple de 8bits facilite le travail des routeurs, mais n’est pas obligatoire.

Une machine connectée à un sous-réseau doit connaître :


◦ son @IP ;
◦ le nombre de bits attribués à l’<id. réseau + sous-réseau> et à <id. machine> ;
Remarque : l’ensemble des sous-réseaux d’un même réseau est vu de l’extérieur comme un unique réseau (gestion du
courrier. . . ).

Masque de sous-réseau (subnet mask)


c’est un mot de 32 bits contenant :
? des bits à 1 à la place de l’identificateur de réseau et de sous-réseau,
? des bits à zéro au lieu et place de l’identificateur de machine.
Ainsi, 255.255.255.0 indique que les premiers 24bits désignent le sous-réseau.

Nouvelle notation CIDR : @IP / nombre de bits pour identifiant réseau


Exemple : 164.81.55.0/24 pour désigner un réseau ou bien 164.81.55.12/24 pour une machine.
ResAvI
Algorithme de routage : choix entre direct ou indirect 35
Localisation de la machine destinataire
Chaque ordinateur connecté au réseau Internet dispose :
− d’une @IP ;
− d’un masque de sous-réseau (indiquant la répartition des 32 bits d’@IP entre <id. réseau><id. machine>).
Lors de l’envoi d’un paquet de S à destination d’une machine D, l’algorithme de routage est :
? combinaison avec l’opérateur binaire « ET », &, de l’@IP de S et du masque de sous-réseau de S ;
? combinaison avec l’opérateur binaire « ET », &, de l’@IP de D et du masque de sous-réseau de S ;
? comparaison entre ces deux valeurs :
 Si M asque(S)&@IP (S) == M asque(S)&@IP (D) alors envoi en direct sur le réseau local
 Sinon c’est un routage indirect : envoi par l’intermédiaire d’un routeur de sortie du réseau local.
Nouvelle version : la notion de préfixe
Actuellement, on ne tient plus compte de la notion de classe (CIDR : Classless Inter-Domain Routing), on indique
la répartition <id. réseau><id. machine> directement à l’aide d’un « /n ».
Exemple : 164.81.128.34/18 où /18 indique l’affectation des 18 premiers bits de l’adresse pour indiquer le
réseau (notation : 255.255.192.0 pour un masque).
D’où : Si pref ixe(tailleS , @IP (S)) == pref ixe(tailleS , @IP (D))=⇒ routage direct

Mise en œuvre du routage direct


Utilisation du réseau à diffusion et donc de la fameuse @MAC et du protocole ARP. . .
Mise en œuvre du routage indirect
. il faut connaitre l’adresse d’un routeur de sortie ;
. il faut remettre le datagramme à ce routeur en routage direct.
ResAvI
Le premier routeur ou la « passerelle » : sortir du réseau local 36
Sous Unix
Commandes ip address & ip link pef@solaris:~$ ip link show eth0

permet de connaître la configuration 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:11:de:ad:be:ef brd ff:ff:ff:ff:ff:ff
des interfaces actives : carte réseau,
pef@solaris:~/RESEAUX_I/FIREWALL$ ip address show eth0
pont (bridge), interface virtuelle. . . 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:11:de:ad:be:ef brd ff:ff:ff:ff:ff:ff
inet 192.168.42.83/24 brd 192.168.42.255 scope global eth0
inet6 fe80::211:deff:fead:beef/64 scope link
valid_lft forever preferred_lft forever

Pour :
? activer une interface :
sudo ip link set dev eth0 up
? désactiver :
sudo ip link set dev eth0 down

Commande ip route pef@solaris:~$ ip route


137.204.212.128/25 dev bridge_dmz proto kernel scope link src 137.204.212.129
137.204.212.0/25 dev bridge_internal proto kernel scope link src 137.204.212.1
192.168.42.0/24 dev eth0 proto kernel scope link src 192.168.42.83 metric 1
169.254.0.0/16 dev eth0 scope link metric 1000
default via 192.168.42.254 dev eth0 proto static
ResAvI
Le premier routeur ou la « passerelle » : sortir du réseau local 37
Sous Windows
Commande ipconfig

Commande route print


ResAvI
CHAPTER 5 Address Resolution Protocol 147

Routage & ARP : Quatre cas de figure 38

Case 1: Find the address Case 2: Find the address 1. hôte vers hôte : l’émetteur est un hôte qui veut envoyer
of a host on the same of a router on the same
subnet as the source. subnet as the source. un paquet à un autre hôte dans le même réseau local.
Sending Host Sending Host
ARP ARP
Dans ce cas, l’@IP de destination est connue et
bsdclient Wincli1
l’@MAC de destination doit être trouvée.
LAN LAN

Inxserver CEO 2. hôte vers routeur : l’émetteur est un hôte et veut en-
Receiving Host Receiving Router
voyer un paquet à un autre hôte appartenant à un autre
Case 3: Find the address Case 4: Find the address réseau local.
of a router on the same of a host on the same
subnet as the source router. subnet as the source router. Il doit consulter la table de routage, « forwarding table »
Sending Router Sending Router ou « Forwarding Information Base », pour trouver l’@IP
ARP ARP
CE0 CE6
du routeur.
LAN LAN
L’@IP du routeur est connue et l’@MAC du routeur doit
PE5 bsdserver être trouvée.
Receiving Router Receiving Host

3.FIGURE 5.2 vers routeur : l’émetteur est un routeur et veut « faire suivre » un paquet à un autre routeur connecté dans le
routeur
Four ARP scenarios. Note that routers employ ARP just as hosts do, and that an ARP stays on the
même réseau local.
same subnet as the sender.
La table de routage est utilisée pour trouver l’@IP du routeur.
L’@IP du routeur est connue et l’@MAC du routeur destination doit être trouvée.
Router to router—The ARP sender is a router and wants to forward a packet to
another router on the same LAN. A forwarding (routing) table is used to find
the IP address
4. routeur of the: router.
vers hôte In thisest
l’émetteur case,
unthe IP address
routeur of the
et veut « router is known
faire suivre » un
paquet vers un hôte dans le même réseau local.
and the MAC address of the destination router must be found.
L’@IP de l’hôte est connue, elle est contenue dans le paquet et l’@MAC de l’hôte doit être trouvée.
Router to host—The ARP sender is a router and wants to forward a packet to a
hostRemarque
on the same LAN. In this case, the IP address of the host is known (from
the IP destination address on the packet) and the MAC address of the host
« must
...dans le même réseau local » ! ARP ne sert quand dans un réseau
be found. local.
Let’s look at Case 1 in detail because the others are more or less variations on this
basic theme. In Case 1, ARP is used when a host wants to send to another host on the
ResAvI

same IP subnet and the MAC address of the destination is not already known. We’ll
start the LAN2 host lnxclient sending a short message to winsrv2 (it doesn’t really
matter what the message is). Because this is the first time that these devices have
communicated in a long time, an ARP request is broadcast on LAN2 and the sender
Encapsulation en technologie Ethernet 39

Le réseau à diffusion utilise une technologie différente du réseau IP :


? il dispose de ses propres adresses : @MAC ;
? il utilise des messages sous un format particulier : la trame Ethernet ou IEEE 802.3 :
MAC header
bytes: 8 6 6 2 0 to 1500 0 to 46 4
Destination Source
Preamble Type Data Pad Checksum
address address

Où :
CHAPTER 3 Network Link Technologies
 « Preamble » : identifie le début de la trame, jamais transmis aux programmes ;
 @MAC destination & source ;
 Length si valeur < 1500 (IEEE 802.3) ou Type si valeur > 1500 (Ethernet II) :
? nombre d’octets du champ Information (la longueur de ce champ est comprise entre 0 et 1500 octets) ;
DIXEthernet
? en Ethernetv2.0,
Frame Structure
champ EtherType à la place : 0x0800 pour un datagramme IPv4, 0x08DD pour un
datagramme IPv6, 0x806 pour un message ARP, 0x888E pour du 802.1x, 0x8100 pour du VLAN. . .
Destination Address Source Address Type Information FCS
 Information ou Data : les données de la trame, complétées éventuellement par du bourrage ;
6 bytes 6 bytes 2 bytes 46–1500 bytes 4 bytes
 Bourrage ou « padding » (PAD) : octets de bourrage sans signification, insérés si la longueur du champ
Data est insuffisante (inférieure à 46 octets) ;
 FCS, frame check sequence ou Checksum : champ pour la détection d’erreurs (rarement transmis aux
programmes). Type 5 030800 for IP packets
IEEE 802.3 LANs Frame Structure
Destination Address Source Address Length Information FCS
6 bytes 6 bytes 2 bytes 48–1492 bytes 4 bytes
ResAvI
Encapsulation
!"#$%&'()'($#(*#+,-.'()/-"'(,.#0'(1('"*#+&-$#,23"(4,.#0'(456(4786999 40
:#+,-.'()/-"'(,.#0'(;($/#2)'()'(<2.'&=#.>
Un datagramme IP est contenu dans une trame, par exemple une trame Ethernet :
!"#$%&'()(*(+,-.(/011$203

!"
Le datagramme IP encapsule lui-même un datagramme UDP. . .
ResAvI
Routage direct illustré 41

Chaque machine est identifiée par :


? une adresse de niveau 2 (@MAC) ;
? une adresse de niveau 3 (@IP) ;
? un réseau d’appartenance (connu à l’aide du préfixe « /n » ou du masque réseau, netmask).
ResAvI
Routage direct illustré 42

Les datagrammes IP sont encapsulés dans des trames Ethernet :


? la trame contient une @MAC source et une @MAC de destination ;
? le datagramme contient une @IP source et une @IP destination et des données ;
? la trame contient le datagramme IP.
ResAvI
Routage direct illustré & ARP 43

Pour connaitre la correspondance entre adresse IP et adresse MAC :


. mise en oeuvre du protocole ARP (Address Resolution Protocol) ;
. construction d’une table de correspondance entre @ IP et MAC sur chaque machine (cache ARP).

La modification malveillante de cette table est possible : « ARP Spoofing » (usurpation d’identité), « ARP Cache
Poisoning » (insertion d’association erronée).
ResAvI
Routage indirect illustré 44

Le paquet de la machine 164.81.1.178 est routé par l’intermédiaire du routeur vers la machine 193.50.3.12.
ResAvI
Routage indirect illustré 45

Le datagramme IP est encapsulé, par la machine 164.81.1.178, dans une trame à destination du routeur,
puis, par le routeur, dans une nouvelle trame à destination de la machine 193.50.3.12.

L’encapsulation permet la redirection vers le routeur sans modifier les @IP du datagramme.
ResAvI
5 Le DNS, « Domain Name Server » : Principe de délégation 46

Le système DNS est entièrement distribué au niveau planétaire en utilisant la délégation de domaine.
À tout domaine est associé une responsabilité administrative.
Une organisation responsable d’un domaine peut
. découper le domaine en sous-domaines ;
. déléguer les sous-domaines à d’autres organisations :
 qui deviennent responsables du (des) sous-domaine(s) qui leurs sont délégué(s) peuvent, à leur tour, dé-
léguer des sous-domaines des sous-domaines qu’elles gèrent.
 Le domaine parent contient alors seulement un pointeur vers le sous-domaine délégué;
? Les serveurs de nom enregistrent les données propres à une partie de l’espace nom de domaine dans une
zone.
? le serveur de nom à autorité administrative sur cette zone ;
? un serveur de nom peut avoir autorité sur plusieurs zones ;
? une zone contient les informations d’un domaine sauf celles qui sont déléguées.
ResAvI
Les bases « WhoIs » 47
WhoIs « unilim.fr »
darkstar:~ pef$ whois unilim.fr registrar: RENATER
%% type: Isp Option 1
%% This is the AFNIC Whois server. address: 23-25 Rue Daviel
%% address: PARIS
%% complete date format : DD/MM/YYYY country: FR
%% short date format : DD/MM phone: +33 1 53 94 20 30
%% version : FRNIC-2.5 fax-no: +33 1 53 94 20 31
%% e-mail: domaine@renater.fr
%% Rights restricted by copyright. website: http://www.renater.fr
%% See http://www.afnic.fr/afnic/web/mentions-legales-whois_en anonymous: NO
%% registered: 01/01/1998
%% Use ’-h’ option to obtain more information about this service. source: FRNIC
%%
%% [2a01:0e35:8a71:bec0:66b9:e8ff:fed2:23ba REQUEST] » unilim.fr nic-hdl: DM269-FRNIC
%% type: PERSON
%% RL Net [##########] - RL IP [#########.] contact: Daniele Mercurio
%% address: centre Universitaire de Calcul de Limoges
domain: unilim.fr address: 87065 Limoges Cedex
status: ACTIVE country: FR
hold: NO phone: +33 5 55 45 75 75
holder-c: UDL3-FRNIC fax-no: +33 5 55 45 75 95
admin-c: DM269-FRNIC e-mail: dmercurio@unilim.fr
tech-c: GR1378-FRNIC notify: dmercurio@unilim.fr
zone-c: NFC1-FRNIC changed: 15/10/2000 migration-dbm@nic.fr
nsl-id: NSL5796-FRNIC anonymous: NO
registrar: RENATER obsoleted: NO
anniversary: 01/01 source: FRNIC
created: 01/01/1995
last-update: 11/03/2009
source: FRNIC Le responsable du domaine : le « CUCL » ...
ns-list: NSL5796-FRNIC
nserver: limdns.unilim.fr [164.81.1.4]
nserver: limdns2.unilim.fr [164.81.1.5]
nserver: cnudns.cines.fr [193.48.169.40 2001:660:6301:301::2:1]
source: FRNIC
ResAvI
La requête DNS 48
Modèle de fonctionnement client / serveur
− l’utilisateur utilise un nom de domaine dans une application (exemple : ping www.bonjour.fr) ;
− l’application cliente demande la traduction du nom de domaine auprès d’un serveur de nom (DNS)
cette opération s’appelle la « résolution de nom », ou « name resolver » ;
 si le serveur connait la réponse il répond ;
 sinon,
? s’il fait autorité pour le domaine demandé, alors pas de réponse (la machine n’existe pas) ;
? s’il ne fait pas autorité, le serveur de nom interroge d’autres serveurs de nom (de plus grand suffixe
commun) jusqu’à ce que l’association nom de domaine / adresse IP soit trouvée ;
 le serveur de nom retourne l’adresse IP au logiciel client : @IP de la machine « www » (il mémorise la
réponse dans un cache et pour une certaine durée) ;
Le logiciel client contacte le serveur, comme si l’utilisateur
avait spécifié une adresse IP.
Exemple :
$ telnet ishtar.msi.unilim.fr
connexion établie avec 164.81.60.43
ResAvI
Mécanismes 49
Resolver
Les « resolvers » sont les processus clients qui contactent les serveurs de nom Fonctionnement :
 contacte un « name server » (dont l’(les) adresse(s) est (sont) configurées sur la machine exécutant ce resolver) ;
 interprète les réponses et retourne l’information au logiciel appelant ;
 gère un cache (dépend de la mise en oeuvre).
Le serveur de nom interroge également d’autres serveurs de nom, lorsqu’il n’a pas autorité sur la zone requise
(fonctionnement itératif ou récursif).
Si le serveur de nom est en dehors du domaine requis, il peut être amené à contacter un serveur racine.
Amélioration des performances
Mécanisme de cache dans les serveurs pour limiter le nombre d’interrogations
 évite la surcharge du réseau ;
 diminue les délais de réponse ;
 baisse la charge des serveurs de haut niveau (les serveurs racines).
Remplissage du cache lors des requêtes des clients et durée de vie limitée dans le cache
 TTL (Time To Live) spécifié dans les réponses pour éviter qu’une association soit conservée trop longtemps.¸
Types de serveur de nom
Serveur de nom primaire :
 maintient la base de données de la zone dont il a l’autorité administrative
Serveur de nom secondaire :
 interroge périodiquement le serveur de nom primaire et met à jour les données
Il y a un serveur primaire et généralement plusieurs secondaires.
La redondance permet la défaillance éventuelle du primaire et du (des) secondaire(s)
Un serveur de nom peut être primaire pour une (des) zone(s) et secondaire pour d’autre(s).
ResAvI
Les 13 serveurs racines 50

Le terme « anycast » permet d’offrir des services DNS de proximité à l’aide de cette capacité
offerte par IPv6.

On peut remarquer que ce service de proximité permet même de délocaliser géographiquement


les serveurs et améliore la disponibilité et la sécurité du système DNS.
ResAvI
Exemple : une requête DNS vers « google.com » 51

bonnefoi@msi:~$ dig +trace @164.81.1.5 www.google.com ?la configuration de la machine msi.unilim.fr :


; «» DiG 9.7.3 «» +trace @164.81.1.5 www.google.com
bonnefoi@msi:~$ more /etc/resolv.conf
; (1 server found)
;; global options: +cmd search msi.unilim.fr unilim.fr
. 344794 IN NS j.root-servers.net. nameserver 164.81.60.1
. 344794 IN NS g.root-servers.net.
. 344794 IN NS l.root-servers.net. nameserver 164.81.1.4
. 344794 IN NS k.root-servers.net. nameserver 164.81.1.5
.
.
344794
344794
IN
IN
NS
NS
c.root-servers.net.
f.root-servers.net. ? la requête fait appel au serveur DNS 164.81.1.5 connu de
. 344794 IN NS e.root-servers.net. la machine msi.unilim.fr, mais demandé explicitement
. 344794 IN NS m.root-servers.net. dans l’utilisation de l’outil dig.
. 344794 IN NS b.root-servers.net.
. 344794 IN NS d.root-servers.net. ?le serveur, resolver, 164.81.1.5 réalise une requête à diffé-
. 344794 IN NS h.root-servers.net. rents « root servers »
. 344794 IN NS a.root-servers.net.
. 344794 IN NS i.root-servers.net.
;; Received 272 bytes from 164.81.1.5#53(164.81.1.5) in 1 ms
?il obtient une réponse de la part du serveur racine « k.root-
servers.net » qui lui donne la liste des serveurs « GTLD », « Ge-
com. 172800 IN NS a.gtld-servers.net.
com. 172800 IN NS b.gtld-servers.net.
neric Top Level Domain », chargés du domaine « .com » ;
com.
com.
172800
172800
IN
IN
NS
NS
c.gtld-servers.net.
d.gtld-servers.net. ?le serveur « e.gtld-servers.net » lui renvoi la liste des
com. 172800 IN NS e.gtld-servers.net. serveurs DNS en charge du domaine google.com ;
com. 172800 IN NS f.gtld-servers.net.
com. 172800 IN NS g.gtld-servers.net. ?le serveur DNS « ns1.google.com » renvoi une liste d’adresse
com. 172800 IN NS h.gtld-servers.net. correspondant à la machine google.com.
com. 172800 IN NS i.gtld-servers.net. Il retourne plusieurs adresses IP pour la même adresse sym-
com. 172800 IN NS j.gtld-servers.net. bolique pour réaliser du « round-robin » qui effectue de l’équili-
com. 172800 IN NS k.gtld-servers.net. brage de charge, « load-balancing ».
com. 172800 IN NS l.gtld-servers.net.
com. 172800 IN NS m.gtld-servers.net. Les serveurs racines présents dans le système d’exploitation
;; Received 492 bytes from 193.0.14.129#53(k.root-servers.net) in 31 ms
; Cache file:
google.com. 172800 IN NS ns2.google.com.
. IN NS A.ROOT-SERVERS.NET.
google.com. 172800 IN NS ns1.google.com.
A.ROOT-SERVERS.NET. IN A 198.41.0.4
google.com. 172800 IN NS ns3.google.com.
. IN NS B.ROOT-SERVERS.NET.
google.com. 172800 IN NS ns4.google.com.
B.ROOT-SERVERS.NET. IN A 128.9.0.107
;; Received 168 bytes from 192.12.94.30#53(e.gtld-servers.net) in 34 ms
. IN NS C.ROOT-SERVERS.NET.
www.google.com. 604800 IN CNAME www.l.google.com.
C.ROOT-SERVERS.NET. IN A 192.33.4.12
www.l.google.com. 300 IN A 209.85.227.147
. IN NS D.ROOT-SERVERS.NET.
www.l.google.com. 300 IN A 209.85.227.106
D.ROOT-SERVERS.NET. IN A 128.8.10.90
www.l.google.com. 300 IN A 209.85.227.103
. IN NS E.ROOT-SERVERS.NET.
www.l.google.com. 300 IN A 209.85.227.99
E.ROOT-SERVERS.NET. IN A 192.203.230.10
www.l.google.com. 300 IN A 209.85.227.105
. IN NS F.ROOT-SERVERS.NET.
www.l.google.com. 300 IN A 209.85.227.104
F.ROOT-SERVERS.NET. IN A 39.13.229.241
ResAvI

;; Received 148 bytes from 216.239.32.10#53(ns1.google.com) in 26 ms


La résolution inversée d’adresse : @IP vers « nom symbolique » 52
Resolution inverse
Elle consiste a obtenir le nom de domaine à partir de l’adresse IP :
− pour faciliter la compréhension des humains
− pour des raisons de sécurité
Elle est plus délicate que de nom vers IP car le système DNS est organisé pour la résolution de nom
−→ recherche exhaustive ???
Solution : utiliser les adresses comme des noms :
 le domaine « in-addr.arpa »
 les noms des noeuds correspondent aux octets de l’adresse IP en ordre inverse
 le domaine in-addr.arpa a 256 sous-domaines,
 chacun de ces sous-domaines a 256 sous-domaines,
 chacun de ces sous-domaines a, à son tour, 256 sous-domaines,
 le 4ème niveau correspond à un NS connaissant le nom de domaine associé à cette adresse IP.
Le nom de domaine associé à la résolution inverse est noté selon l’adresse IP inversée car la résolution d’un nom de
domaine se fait de droite à gauche :
Exemple : 43.60.81.164.in-addr.arpa
Résolution :
1 in-addr.arpa A.ROOT-SERVER.NET
2 164.in-addr.arpa NS.RIPE.NET
3 .in-addr.arpa NS.RIPE.NET
4 60.81.164.in-addr.arpa msi.unilim.fr

darkstar:~ pef$ dig +short @164.81.1.4 -x 164.81.60.163


portable-pf.msi.unilim.fr.
ResAvI
Configuration du serveur DNS 53

Les données d’un serveur DNS sont enregistrées dans une base identifiée par les noms de domaine correspondants
(chaque enregistrement est appelé RR, « Resource Records »).
Types d’enregistrements :
◦ SOA : décrit l’autorité administrative (Start of Authority)
◦ NS : liste de serveurs de nom pour ce domaine
◦ A : correspondance nom -> adresse
◦ PTR : correspondance adresse -> nom
◦ CNAME : alias ou surnom
◦ TXT : texte
◦ HINFO : description machine, plus utilisé pour des questions de sécurité
◦ RR = { classe, type, clé, valeur } où classe est IN pour INTERNET

Exemple :
1 SOA = Start of Authority Spécifie que ce serveur de nom a autorité sur le domaine
2 ; Database file msi.unilim.fr zone.
3 unilim.fr IN SOA msi.unilim.fr
4 ( 2006110204 ; serial number (ex : AAAAMMJJnn)
5 21600 ; refresh (ex : 6h période de mise à jour des secondaires)
6 3600 ; retry (ex: 1h durée minimale avant procaine interrogation)
7 86400 ; expire (ex: 1 jour)
8 3600 ) ; minimum TTL des entrées dans le cache
9 NS dns.msi.unilim.fr
10 TXT « Departement Informatique »
11 ishtar IN A 164.81.60.43
12 msi IN A 164.81.60.6
13 www IN CNAME msi ; des alias
14 164.81.60.6.in-addr IN PTR msi.unilim.fr
ResAvI
Certains champs correspondent à des services 54
Le serveur de courrier
MX = Mail eXchanger Permet l’adressage email sur la base du nom de domaine plutôt que sur l’adresse
du (des) serveur(s) de mail :
 bonnefoi@unilim.fr plutot que bonnefoi@msi.unilim.fr ;
 permet à l’émetteur d’ignorer quelle est la machine serveur de mail ;
 permet le deplacement du gestionnaire de mail vers une autre machine ;
 permet la gestion de plusieurs serveurs de mail avec priorité dans l’ordre de consultation des serveurs

L’enregistrement MX est utilisés par les MTA, « Mail Transfer Agent », en tenant compte des priorités :
bonnefoi@msi:~$ dig +short mx unilim.fr bonnefoi@msi:~$ dig +short mx google.com
50 mail.unilim.fr. 30 alt2.aspmx.l.google.com.
40 alt3.aspmx.l.google.com.
50 alt4.aspmx.l.google.com.
10 aspmx.l.google.com.
20 alt1.aspmx.l.google.com.

Le MTA utilise le protocole SMTP, « Simple Mail Transfer Protocol », en tant que client.
ResAvI
Le DNS : utilisation de la commande dig 55
Une requête plus concise
bonnefoi@msi:~$ dig +noall +answer web.unilim.fr
web.unilim.fr. 83023 IN A 164.81.1.61

Pour IPv6 avec des champs adresses 4 fois plus grand (AAAA)
bonnefoi@msi:~$ dig +short AAAA www.renater.fr
2001:660:3001:4002::10

Interrogation du SOA
bonnefoi@msi:~$ dig soa unilim.fr
; «» DiG 9.7.3 «» soa unilim.fr
;; global options: +cmd
;; Got answer:
;; -»HEADER«- opcode: QUERY, status: NOERROR, id: 36568
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 6
;; QUESTION SECTION:
;unilim.fr. IN SOA
;; ANSWER SECTION:
unilim.fr. 86400 IN SOA limdns.unilim.fr. postmaster.unilim.fr. 2011091501 28800 7200 3600000 86400
;; AUTHORITY SECTION:
unilim.fr. 78813 IN NS cnudns.cines.fr.
unilim.fr. 78813 IN NS limdns2.unilim.fr.
unilim.fr. 78813 IN NS limdns.unilim.fr.
;; ADDITIONAL SECTION:
cnudns.cines.fr. 2583 IN A 193.48.169.40
cnudns.cines.fr. 2583 IN AAAA 2001:660:6301:301::2:1
limdns.unilim.fr. 73317 IN A 164.81.1.4
limdns.unilim.fr. 85383 IN AAAA 2001:660:6201:1::4
limdns2.unilim.fr. 73317 IN A 164.81.1.5
limdns2.unilim.fr. 85383 IN AAAA 2001:660:6201:1::5

;; Query time: 18 msec


;; SERVER: 164.81.60.1#53(164.81.60.1)
;; WHEN: Thu Sep 15 13:25:13 2011
;; MSG SIZE rcvd: 276
ResAvI
Le DNS : plus loin 56
Le TTL qui décroit en direct et « Round Robin »
On fait plusieurs requêtes en suivant, et on constate que la durée de vie de la validité de la réponse diminue :
bonnefoi@msi:~$ dig +noall +answer gmail.com bonnefoi@msi:~$ dig +noall +answer gmail.com
gmail.com. 300 IN A 74.125.230.86 gmail.com. 25 IN A 74.125.230.86
gmail.com. 300 IN A 74.125.230.87 gmail.com. 25 IN A 74.125.230.87
gmail.com. 300 IN A 74.125.230.88 gmail.com. 25 IN A 74.125.230.88
gmail.com. 300 IN A 74.125.230.85 gmail.com. 25 IN A 74.125.230.85
bonnefoi@msi:~$ dig +noall +answer gmail.com bonnefoi@msi:~$ dig +noall +answer gmail.com
gmail.com. 298 IN A 74.125.230.85 gmail.com. 3 IN A 74.125.230.86
gmail.com. 298 IN A 74.125.230.86 gmail.com. 3 IN A 74.125.230.87
gmail.com. 298 IN A 74.125.230.87 gmail.com. 3 IN A 74.125.230.88
gmail.com. 298 IN A 74.125.230.88 gmail.com. 3 IN A 74.125.230.85
bonnefoi@msi:~$ dig +noall +answer gmail.com bonnefoi@msi:~$ dig +noall +answer gmail.com
gmail.com. 271 IN A 74.125.230.87 gmail.com. 2 IN A 74.125.230.85
gmail.com. 271 IN A 74.125.230.88 gmail.com. 2 IN A 74.125.230.86
gmail.com. 271 IN A 74.125.230.85 gmail.com. 2 IN A 74.125.230.87
gmail.com. 271 IN A 74.125.230.86 gmail.com. 2 IN A 74.125.230.88
bonnefoi@msi:~$ dig +noall +answer gmail.com bonnefoi@msi:~$ dig +noall +answer gmail.com
gmail.com. 30 IN A 74.125.230.87 gmail.com. 1 IN A 74.125.230.88
gmail.com. 30 IN A 74.125.230.88 gmail.com. 1 IN A 74.125.230.85
gmail.com. 30 IN A 74.125.230.85 gmail.com. 1 IN A 74.125.230.86
gmail.com. 30 IN A 74.125.230.86 gmail.com. 1 IN A 74.125.230.87

On remarque que la réponse du serveur DNS est : Il correspond à répartir un trafic (HTTP par exemple) afin d’équilibrer la charge entre
? multiple ; différents serveurs.
? l’ordre de ces réponses change avec le temps On « fait tourner » différentes réponses (algo. de « Round-Robin »).
Une requête Wikipedia au travers du protocole DNS

On utilise le champ « TXT » :


bonnefoi@msi:~$ dig +short txt startrek.wp.dg.cx
"Star Trek is an American science fiction entertainment series and media franchise. The Star Trek fictional universe created
by Gene Roddenberry is the setting of six television series including the original 1966 Star Trek, in addition to ten feature films"
" with an eleventh in post-production to be released on May 8, 2009. The franchise also extends to dozens of computer and...
http://a.vu/w:Star_Trek"
ResAvI
6 Configuration manuelle d’une machine pour l’accès à Internet 57

? Configuration de l’adresse IP et du réseau de connexion :


root@solaris:~# ip address flush dev eth0
root@solaris:~# ip address show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:11:de:ad:be:ef brd ff:ff:ff:ff:ff:ff
root@solaris:~# ip address add 192.168.42.57/24 brd + dev eth0
root@solaris:~# ip address show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:11:de:ad:be:ef brd ff:ff:ff:ff:ff:ff
inet 192.168.42.57/24 brd 192.168.42.255 scope global eth0
root@solaris:~# ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:11:de:ad:be:ef
inet adr:192.168.42.57 Bcast:192.168.42.255 Masque:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Packets reçus:2222687 erreurs:1723210 :7968 overruns:0 frame:0
TX packets:915273 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 lg file transmission:1000
Octets reçus:1148981328 (1.1 GB) Octets transmis:807289372 (807.2 MB)
Interruption:19 Adresse de base:0x2024

? Configuration de la route par défaut :


root@solaris:~# ip route add default via 192.168.42.254
root@solaris:~# ip route
192.168.42.0/24 dev eth0 proto kernel scope link src 192.168.42.57
default via 192.168.42.254 dev eth0
Il ne manquera plus qu’à configurer la résolution DNs avec le fichier /etc/resolv.conf.
ResAvI
Configuration paramétrée d’une machine pour l’accès à Internet 58

? On édite le contenu de /etc/network/interfaces


root@solaris:~# more /etc/network/interfaces
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 192.168.42.57
netmask 255.255.255.0
gateway 192.168.42.254

? le fichier /etc/resolv.conf :
root@solaris:~# more /etc/resolv.conf
domain pefnet
search pefnet
nameserver 192.168.42.53
Le « search » indique le nom de domaine à ajouter au nom d’une machine entrée sans le FQDN (exemple :
msi au lieu de msi.unilim.fr

? on relance le « service » réseaux :


root@solaris:~# /etc/init.d/networking restart
ResAvI
Configuration automatisée d’une machine pour l’accès à Internet 59

? configuration de l’interface pour utiliser le client DHCP, « Dynamic Host », dans le fichier
/etc/network/interfaces :
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

? en ligne de commande :
$ sudo dhclient eth0
Le client DHCP configure l’interface, le fichier resolv.conf et la route par défaut si un serveur DHCP prend
en charge sa demande.
root@solaris:~# ip address show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:11:de:ad:be:ef brd ff:ff:ff:ff:ff:ff
inet 192.168.42.83/24 brd 192.168.42.255 scope global eth0

root@solaris:~# ip route
192.168.42.0/24 dev eth0 proto kernel scope link src 192.168.42.83
default via 192.168.42.254 dev eth0
ResAvI
Plan de la partie Protocoles 60

Éléments importants
. Notion de couches et de processus pairs ;
. Notion de service et d’interface ;
. Modèle OSI et pile de protocoles TCP/IP ;
. Modélisation de protocole ;
. Problème de synchronisation et de programmation.
ResAvI
1 Abstraction du réseau : les « couches » 61
Organisation en série de couches
But réduire la complexité de conception.
Les réseaux sont organisés en série de couches ou niveaux, chacune étant construite sur la précédente.

Rôle d’une coucheoffrir certains services aux couches plus hautes, en leur masquant l’implémentation de ces
services.

Relation entre couches sur différentes machines :


La couche n d’une machine gère la conversation avec la couche n d’une autre machine.

Notion de « protocole » :
Les règles et conventions utilisées pour cette conversation sont connues sous le nom de « protocole de la couche
n »:
− Un protocole est un accord entre les parties sur la façon de communiquer ;
− Toute violation du protocole rend la communication extrêmement difficile voire impossible.

Notion de « processus pairs » :


Les couches correspondantes sur différentes machines sont appelés processus pairs, peer.
Ce sont les processus pairs qui communiquent à l’aide du protocole.
En réalité, aucune donnée ne passe directement de la couche n d’une machine à la couche n d’une autre
machine, mais chaque couche passe par les données et les contrôle à la couche qui lui est immédiatement
inférieure.
ResAvI
??
1.1 La notion de protocole 62
Un protocole humain et un protocole machine
« demander l’heure à quelqu’un » et « demander une ressource sur un serveur Web ».

Les protocoles définissent :


? le format des données échangées ;
? l’ordre des messages émis et reçus entre les entités réseaux;
? ainsi que les réactions à ces messages.
Un protocole correspond à un comportement qui évolue en fonction des données échangées.
ResAvI
Exemple de protocole 63
Le protocole SMTP, « Simple Mail Transfer Protocol »
bonnefoi@msi:~$ socat - tcp:smtp.unilim.fr:25 La commande « socat » permet de simple-
220 smtp.unilim.fr ESMTP Sendmail 8.13.1/8.13.1; Thu, 15 Sep 2011 15:28:24 +0200 ment établir une connexion TCP avec le ser-
HELO msi.unilim.fr
veur que l’on a désigné sur le port indiqué.
250 smtp.unilim.fr Hello www.msi.unilim.fr [164.81.60.6], pleased to meet you
MAIL FROM: <bonnefoi@unilim.fr>
250 2.1.0 <bonnefoi@unilim.fr>... Sender ok
RCPT TO: <bonnefoi@unilim.fr>
250 2.1.5 <bonnefoi@unilim.fr>... Recipient ok
DATA
354 Enter mail, end with "." on a line by itself
Subject: Message

Message de test envoye directement !


.
250 2.0.0 p8FDSOJe031646 Message accepted for delivery
QUIT
221 2.0.0 smtp.unilim.fr closing connection
bonnefoi@msi:~$
ResAvI
Exemple de protocole 64
Le protocole HTTP, « Hyper Text Transfer Protocol »

bonnefoi@msi:~$ socat - tcp:www.unilim.fr:80


HEAD / HTTP/1.0

HTTP/1.1 200 OK
Date: Thu, 15 Sep 2011 14:01:18 GMT
Server: Apache
Vary: Cookie,Accept-Encoding
Composed-By: SPIP 1.9.2j @ www.spip.net + article_pdf(0.1)
Connection: close
Last-Modified: Thu, 15 Sep 2011 14:01:18 GMT
Content-Type: text/html; charset=utf-8
Content-Language: fr

bonnefoi@msi:~$

Le protocole POP, « Post Office Protocol »

bonnefoi@msi:~$ socat - tcp:pop.unilim.fr:110


+OK courriel Cyrus POP3 v2.2.13-Debian-2.2.13-14.xm.1 server ready <299345444.1316380363@courriel>
USER bonnefoi
+OK Name is a valid mailbox
PASS bob
-ERR [AUTH] Invalid login
^C
bonnefoi@msi:~$
ResAvI
Les couches 65

Notion d’interface :
entre chaque couche adjacente existe une interface.
L’interface définit :
? les opérations élémentaires, appelées « primitives » ;
? les services que la couche inférieure offre à la couche supérieure.
La définition des interfaces doit être claire :
◦ chaque couche réalise un ensemble de fonctions bien définies ;
◦ le changement d’implémentation d’une couche est transparent : il suffit à la nouvelle implémentation d’offrir
exactement à sa voisine du dessus le même ensemble de services que l’ancienne
Exemple : changement d’une carte réseau, passage d’une connexion filaire à du sans-fil. . .
L’ensemble des couches et protocoles est appelé architecture réseau.

Au niveau de la conception du réseau :


. les spécifications de l’architecture doivent contenir suffisamment d’information pour permettre d’écrire le lo-
giciel ou de construire le matériel pour chaque couche de manière qu’il obéisse correctement au protocole
approprié ;
. ni les détails de mise en œuvre, ni les spécifications de l’interface ne font partie de l’architecture puisqu’ils
sont invisibles à l’extérieur.
. il n’est pas nécessaire que les interfaces de toutes les machines du réseau soient identiques, pourvu que
chaque machine puisse utiliser correctement les protocoles (windows et GNU/Linux par exemple).

L’ensemble des protocoles utilisés par un système, avec un protocole par couche, est appelé souvent « pile
de protocoles ».
ResAvI
??
Programmation d’une couche : primitives de service et programmation Socket 66

a. Le serveur indique qu’il est prêt et d’accord pour établir une connexion à l’aide de l’instruction accept ;
b. le client demande l’accès au service de connexion au travers d’une instruction connect :
 ce connect réalise la primitive de service : requête ;
 des paquets sont échangés à travers les interfaces;

c. la réception de ces paquets sur le serveur déclenche une indication sur l’OS d’Alice qui possède déjà l’autorisation
d’accepter la connexion, etc.
ResAvI
Les Couches 67
Deux concepts importants
a. Relation entre communication virtuelle et effective
b. Différence entre protocoles et interfaces
Exemple
les processus pairs de la couche 5 conçoivent leur communication de façon horizontale, grâce au protocole
fournis par la couche 4 :
? chacun des processus utilise :
◦ une procédure appelée « envoi à l’autre côté »,
◦ une procédure « réception de l’autre côté »,
? en réalité : ces procédures communiquent avec les couches inférieures par l’intermédiaire de l’interface 3/4,
et non, comme elles en donnent l’impression, avec l’autre côté !

Le concept abstrait de processus pair est crucial pour la conception des réseaux.

Cette technique d’abstraction permet de passer :


. d’un problème insoluble : la conception d’un réseau global,
. à plusieurs problèmes solubles : la conception de chaque couche.
L’ensemble des couches a été normalisées par l’ISO en 7 couches.
Ce modèle a été appelé OSI (Open System Interconnection).

Il existe aussi celui, plus simple, de la pile TCP/IP.

Seul la pile TCP/IP a été implémentée.


ResAvI
ter 1 „ Introduction to Computer Networking

0 The OSI
Le model
modèle OSI, « Open Systems Interconnection » 68

Application Layer 7
? sert de référence pour décrire le fonctionnement du réseau :
 5 couches présentes dans TCP/IP : Physique, Liaison de données, Réseau,
Presentation Layer 6 Transport, Application ;
 2 couches « applicatives » dans TCP/IP : Session, Présentation ;
Session Layer 5 ? chaque couche réalise un travail distinct avec des « moyens » interchangeables
(protocoles, technologies) :
Transport Layer 4  Physique : technologie WiFi, Ethernet, Bluetooth, etc.
 Liaison de données : trame 802.3/Ethernet II ;
Network Layer 3  Réseau : datagramme IPv4, IPv6 ;
 Transport : UDP, « User Datagram Protocol », TCP, « Transmission Control
Data Link Layer 2 Protocol », SCTP, « Stream Control Transmission Protocol », etc.
14 „  Application : navigateur Web, logiciel de messagerie. etc.
Chapter 1 Introduction to Computer Networking
Physical Layer 1 ? Présentation : 48encodageChapter
des1 données,
Internetworking
représentation ;
u

? Session : ouverture/fermeture de session, identification des utilisateurs. . .


working
F I G Ufunctions
R E 1 .11 atPeer
Communicationthe communication
two lowest
« Pair à Pairlayers of the
» between OSIofmodel,
three
et encapsulation Layer
the seven 1F I G U R E
layers 1. 2 8 Data encapsulation
Layer 2 (Data Link). However, to some degree Layer 3 (Network) plays a
nerally for the TCP/IP protocol capabilities. Here’s how each layer is used: Application PDU

Presentation
HY, the Physical layer) consists of bit-level data streams and computer
Upper layer data Session
ardware connecting the devices together. This hardware
APPLICATION includes network
APPLICATION
Direct Connection TCP header Upper layer data Transport Segment
PRESENTATION
ards, cables, switches, PRESENTATION
wireless access points, and bridges. In the case of
SESSION SESSION
tworking, radio TRANSPORT
frequency (RF) uses air as the medium for wireless com-
TRANSPORT IP header Data Network Packet
Direct Connection
ns. The Physical NETWORK
layer consists of two sublayers: the NETWORK
Physical Layer Conver-
LLC header Data FCS
ocol (PLCP) andDATA LINK
Physical
PHYSICAL
Medium Dependent (PMD). DATA LINK
The PLCP, the higher
PHYSICAL
Data Link Frame

layers, is the interface between the PMD and Media Access Control (MAC)
Direct Connection MAC header Data FCS

Physical Bits
he PMD is the lower sublayer at the bottom of the protocol stack and is
Encapsulation 0101110101001000010
ResAvI

for transmitting the data onto the wireless medium. Each segment is then handed to the Network layer for network addressing and routing
Encapsulation
ata Link layer) is responsible for organizing the bit-level data for communica-
through the internetwork. Logical addressing (for example, IP) is used to get each segment
to the correct network. The Network layer protocol adds a control header to the segment
en devices on a network and detecting and correcting Physical layer errors.
handed down from the Transport layer, and what you have now is called a packet or data-
??
Le modèle
Ivanen
Marsiccouches : le modèle OSI « illustré »
• Rutgers University 22 69

• Application
7: Application services (SIP, FTP,
HTTP, Telnet, )

• Data translation (MIME)


6: Presentation • Encryption (SSL)
• Compression

• Dialog control
5: Session • Synchronization

• Reliable (TCP)
4: Transport • Real-time (RTP)

• Source-to-destination (IP)
3: Network • Routing
• Address resolution

• Wireless link (WiFi)


2: Link MAC • Wired link (Ethernet)

• Radio spectrum
• Infrared
1: Physical • Fiber
• Copper
ResAvI

Figure 1-15: OSI reference architecture for communication protocol layering.

"#$! %$&$'! ()*$+%! ,)'! -$! ,.',$/01)((*! .+2)'34$5! 0.! 0#+$$! %1-2+.1/%6! 73+%08! ()*$+%! 98! :8! )'5! ;<
44 PART I Networking Basics

1.2 La pile TCP/IP 70

FTP DNS SSH SNMP

Application

SMTP HTTP TFTP DHCP

Transport UDP TCP Others

IPv4 IP Support
IP NAT
Protocols: Routing
ICMPv4 Protocols:
Network
ICMPv6 RIP, OSPF,
Neighbor BGP
IPv6 IPSec Discovery

ARP RARP

Data Link
Protocols and Links Determined by Underlying Network
(includes SLIP and PPP)
Physical

Attention : FIGURE 1.22

? certains protocolesTCP/IP protocols and layers. Note the position of some protocols between layers.
comme RIP, OSPF, BGP utilisent des protocoles de niveau 4, « Transport ».
? le protocole ARP est entre les couches 2 et 3.
ResAvI

With few exceptions, the TCP/IP protocol suite does not really define any low-level
protocols below the network layer. TCP/IP usually specifies how to put IP packets into
frames and how to get them out again. Many RFCs define IP mapping into these lower-
As it was mentioned before, the OSI model is more of a theoretical model and it is
very useful in the learning process. On the other hand, the Internet was built on the
7&3,3PRGHODQGVR7&3,3LVWKHPRVWSRSXODUGXHWRLWVXVDJHDQGLWVSURWRFROV
TCP/IP vs OSI 71

Pas de couche « Présentation » et de couche « session » dans TCP/IP par rapport à OSI.
Some similarities between the two models are:
ResAvI

x %RWKPRGHOVDUHOD\HUHGPRGHOVDQGKDYHWKHEHQHÀWVRIOD\HUHG
communication models.
Networking Fundamentals

Let
VVHHDQH[DPSOHLQD7&3,3QHWZRUN
TCP/IP : couches, protocoles et routage 72

$SDFNHWRULJLQDWLQJIURPKRVW;ZLOOJHWWRKRVW<E\WUDYHUVLQJURXWHUV$%DQG&
Chaque matériel dispose d’une pile TCP/IP, plus ou moins complète.
ResAvI

/HW
VVD\IRUH[DPSOHWKDWKRVW;LVDZHEVHUYHUUHSO\LQJWRDUHTXHVWRULJLQDOO\
initiated from host Y.
Modélisation de protocole 73
Protocoles de haut niveau
Les protocoles dans le monde TCP/IP sont décrits dans les RFC « Request For Comment ».
RFC 1945 pour HTTP, RFC 821 pour SMTP et 1032 pour DNS, etc.
Un protocole est la définition de règles pour la communication entre deux entités paires.
Il est défini par :
? un certain nombre de primitives (listen, socket, bind. . . ),
? la définition d’un ordre d’échange d’utilisation de ces primitives (bind doit être utilisé après socket),
? la définition d’un ensemble de question/réponse attendu (un accept réussi après un connect)
Toute violation du protocole entraîne l’échec de la communication, mais peut également bloquer l’émet-
teur et/ou le récepteur.

Il est nécessaire de faciliter :


. la conception : définir les primitives, l’ordre d’échange et les interactions entre émetteur et récepteur ;
. la validation : vérifier qu’il fonctionne en permettant un dialogue tel qu’il a été décidé ;
. la correction : faire en sorte qu’il soit possible de sortir ou d’éviter une situation de blocage ;
La solution : a. Élaboration de scenarii pour définir le protocole ;
b. Modélisation du fonctionnement du protocole ;
c. Obtention d’une spécification formelle du protocole.
Les moyens : Utilisation d’automate fini et de réseaux de Pétri.
ResAvI
Modélisation de protocole 74
Organisation des échanges
? choix du modèle de conception générale :
centralisé ou répartie, « client/serveur » ou « égal à égal »
? choix du type de communication :
orienté connexion ou datagramme, TCP ou UDP
Comportement du serveur si nécessaire
◦ gestion d’un seul client à la fois ;
◦ gestion de plusieurs clients simultanément ;
Durée du déroulement du protocole
? le protocole est limité à une seule transaction ;
? le protocole peut s’étendre sur plusieurs transactions :
Comment mémoriser les étapes du protocole ?
Imaginer des scénarii d’usage du protocole
◦ dérouler le fonctionnement suivant les différents comportements prévus ;
◦ en cas d’erreur de l’interlocuteur, du réseau (pertes de messages, arrivée des données dans le désordre, etc.) ;
Formaliser le protocole
? définir le format des échanges ;
? combiner les différents scénarii pour définir le comportement complet ; choisir le comportement pour la fiabilité
du protocole (éviter les blocages, garantir la disponibilité, se protéger des comportements malveillants, etc.).
ResAvI
Modélisation d’une transaction : Message Sequence Charts 75

? utilisés pour modéliser les échanges au cours du temps entre un nombre fini de processus.
? permettent de définir des « scenarii » pour détailler le comportement d’un protocole sur des exemples de cas
concrets.

les différents acteurs un scenario d’échange le protocole une transaction complète

? des événements (en orange) : réception et émission placé sur chaque processus ;
? des échanges : des flêches ;
? le contenu des messages : étiquette sur les flêches.
? un ordre sur les échanges ;
? le MSC permet de :
 définir des exigences ;  détecter les mauvais comportements.
ResAvI
Modélisation d’une transaction : Message Sequence Charts 76

Limitations
? modélisation limitée à une transaction ou à une ses-
sion complète (plusieurs transactions la suite) ;
Pour décrire tout le protocole, il faut envisager de
nombreux scenarii, voire tous les scenarii possibles!

Lorsque plusieurs échanges sont nécessaires pour une


même transaction ou lorsque plusieurs transactions
sont nécessaires pour une même session :
− nécessité de mémoriser « où on en est » par rapport
à ces différents échanges/transactions :
 chaque mémorisation peut modifier le scenarii :
reprendre une transaction peut être impossible à
partir d’un certain temps, une session peut s’in-
terrompre automatiquement au bout d’un certain
temps, etc.
 pour chaque mémorisation il faudrait reprendre et
définir tous les scenarii...
Un scenario décrit un cas d’usage ou « use case » : il sert à illustrer, pour une situation donnée comment le protocole
va se comporter.

Pour décrire complètement le protocole il faut un outil permettant de décrire son « comportement » global en tenant
compte des « mémorisations » possibles : la modélisation par automate à nombre fini d’états.
ResAvI
La modélisation d’un protocole avec un automate fini 77
ResAvI
Le protocole HTTP, « HyperText Transfer Protocol », RFC 1945 78

? protocole « texte » : échange de lignes de commandes au format ASCII 7bits ;


? utilise le protocole de transport entre le client et le serveur de type TCP.
? très simple, ce qui explique sa popularité et sa facilité de mise en oeuvre.
Différentes versions :
◦ HTTP/0.9 version de base avec requête/réponse le document est renvoyé directement ;
◦ HTTP/1.0 version normalisée (RFC 1945) avec comme amélioration, l’ajout d’en-tête pour la description des ressources
échangées (utilisation du format MIME RFC822), d’informations supplémentaires envoyées par le client (format de don-
nées supporté ou désiré, description de la version et de la marque du navigateur...)
◦ HTTP/1.1 ajout de connexions persistantes entre le client et le serveur en vue de l’échange de plusieurs ressources par
l’intermédiaire de la même connexion (transfert des différents éléments d’un même document composite).
pef@darkstar:~$ socat stdio tcp:libpfb.so:80
GET /toto HTTP/1.0
Host: libpfb.so

HTTP/1.0 404 Not Found


Date: Sun, 08 Sep 2013 18:21:17 GMT
Server: Apache
Set-Cookie: fe_typo_user=794333b9b1f8709f82d91220c245dc30; path=/
Set-Cookie: PHPSESSID=i5n97e4jf7ll8mn4v0hhn2rv30; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Vary: Accept-Encoding
Content-Length: 26
Connection: close
Content-Type: text/html

<h1>Page not found!</h1>


ResAvI
Le protocole HTTP, « HyperText Transfer Protocol », RFC 1945 79
ResAvI
Le protocole HTTP 80

Utilisation du « mode connecté » : protocole de transport TCP, encapsulant le protocole HTTP


pour échanger un descripteur de format MIME, encapsulatn un contenu formaté HTML, . . .
ResAvI
Le protocole HTTP 81
Une pile de protocole
? protocole « utilisateur » ou abstrait : consultation d’une page web ;
? protocole de transport : TCP ;
? protocole d’échange : HTTP ;
? format d’échange : MIME.
ResAvI
Le protocole HTTP 82
Rapport entre les différents protocoles
Le protocole abstrait est celui qui intéresse l’utilisateur (ici, Alice), c-à-d. « naviguer sur le Web ».
L’unité élémentaire de ce protocole est la transaction (Alice charge une page Web).
Le navigateur d’Alice réalise plusieurs échanges au format HTTP pour récupérer les contenus multimédia.
La notion de session décrit l’ensemble des transactions qui ont un certain lien entre elles.
Par exemple : entrer dans le magasin virtuel, s’identifier, remplir son caddie, payer et quitter le site.
ResAvI
Le protocole HTTP : la notion de session 83

Utilisation de cookies, de données de formulaires, de contenus JSON, d’URL particulière (REST), etc.
ResAvI
Le protocole SMTP 84
ResAvI
??
HTTP over UDP 85
Le protocole UPnP, « Universal Plug and Play »
? HTTPU, « HTTP unicast » ? HTTPMU, « HTTP multicast »
0000 01 00 5E 7F FF FA B4 07 F9 F3 3A 73 08 00 45 60 ..^.......:s..E‘
0010 00 F9 00 00 40 00 04 11 DA 04 A4 51 07 44 EF FF ....@......Q.D..
0020 FF FA 07 6C 07 6C 00 E5 F1 76 4E 4F 54 49 46 59 ...l.l...vNOTIFY
0030 20 2A 20 48 54 54 50 2F 31 2E 31 0D 0A 48 6F 73 * HTTP/1.1..Hos
0040 74 3A 20 32 33 39 2E 32 35 35 2E 32 35 35 2E 32 t: 239.255.255.2
0050 35 30 3A 31 39 30 30 0D 0A 4E 54 3A 20 75 72 6E 50:1900..NT: urn
0060 3A 6E 75 6C 6C 73 6F 66 74 2E 63 6F 6D 3A 64 65 :nullsoft.com:de
0070 76 69 63 65 3A 41 6E 64 72 6F 69 64 3A 31 0D 0A vice:Android:1..
0080 4E 54 53 3A 73 73 64 70 3A 61 6C 69 76 65 0D 0A NTS:ssdp:alive..
0090 43 61 63 68 65 2D 43 6F 6E 74 72 6F 6C 3A 6D 61 Cache-Control:ma
00a0 78 2D 61 67 65 3D 33 30 0D 0A 4C 6F 63 61 74 69 x-age=30..Locati
00b0 6F 6E 3A 68 74 74 70 3A 2F 2F 31 36 34 2E 38 31 on:http://164.81
00c0 2E 37 2E 36 38 3A 33 34 34 38 38 0D 0A 69 64 3A .7.68:34488..id:
00d0 39 37 37 34 64 35 36 64 36 38 32 65 35 34 39 63 9774d56d682e549c
00e0 0D 0A 6E 61 6D 65 3A 73 61 6D 73 75 6E 67 20 47 ..name:samsung G
00f0 54 2D 49 39 30 30 30 0D 0A 70 6F 72 74 3A 33 34 T-I9000..port:34
0100 34 38 38 0D 0A 0D 0A 488
ResAvI
Programmation d’un protocole : le problème de la synchronisation 86
Des processus qui échangent des messages
. synchrones
 l’émetteur attend que le récepteur ait reçu le message (envoyer un fax par exemple) ;
 le récepteur qui attend un message est bloqué jusqu’à sa réception ;
 Avantage : l’émetteur et le récepteur sont dans un état connu ;
 Inconvénient : fort couplage entre les processus.
. asynchrones
 l’émetteur n’est pas bloqué en attente de réception (poster une lettre) ;
 le récepteur peut fonctionner suivant deux modes :
? réception bloquante si pas de message ;
? réception non bloquante avec témoin de réception (boîte aux lettres américaine) ;
 Avantage : l’émetteur et le récepteur sont indépendants au cours du temps
 Inconvénients :
? pas d’acquittement implicite
? pas de relation entre les états de l’émetteur et du récepteur
? difficultés en cas d’erreurs !
Solution : le modèle de l’Invocation à distance, « Remote Procedure Call » ou « rendez-vous »
◦ correspond à la demande d’exécution d’une fonction à un autre processus (téléphoner) ;
◦ est accompagnée d’un passage de messages entre processus ;
◦ comme pour l’appel d’une fonction :
 l’appelant attend la réponse de l’appelé (la réponse est facultative) ;
◦ correspond au modèle client/serveur ;
◦ peut être mis en oeuvre par messages synchrones ou asynchrones (utilisation de tampons, modèle produc-
teur/consommateur).
ResAvI
Synchronisation distante vs locale 87
Modèle producteur/consommateur en mode message asynchrone
Deux points de vue simultanés
 asynchronisme entre sites distants : propagation
sur le réseau (le réseau n’est pas modélisé mais il
pourrait l’être) ;
 synchronisation locale sur les tampons d’émis-
sion et de réception.

Asynchronisme entre l’émetteur et le récepteur


? L’émetteur
 effectue un envoi ;
 reprend son exécution immédiatement après.
Le message est transmis par le réseau de façon asynchrone par rapport à l’émetteur.

? Le récepteur
 décide de traiter un message ;
 prend le premier message disponible ;
Le message était dans une file d’attente de réception.
ResAvI
Synchronisation et programmation : comment ça marche dans l’OS ? 88
Synchronisation locale
Le processus émetteur a fourni l’adresse d’un tampon (contenant le message) partagé avec l’interface réseau.
Différents cas possibles :
. l’émetteur reste bloqué tant que le message n’a pas été envoyé (attente du tampon redevenu libre) ;
=⇒ émission bloquante (celle que l’on utilisera en TP ! )
. l’émetteur reste bloqué tant que le message n’a pas été recopié dans l’interface réseau ;
=⇒ émission bloquante moins longtemps (pas accessible en Python)
. l’émetteur reprend le contrôle alors que l’interface réseau utilise le tampon, il sera avertit par un signal quand il sera
réutilisable.
=⇒ émission non bloquante (déconseillée dans le cas d’un échange : on n’a pas de garantie sur l’émission effective,
et on peut attendre une réponse qui ne viendra jamais)

Le processus récepteur a fourni l’adresse d’un tampon partagé avec l’interface réseau.
Différents cas possibles :
. le récepteur reste bloqué tant qu’un message reçu n’a pas été écrit dans le tampon ;
=⇒ réception bloquante (celle que l’on utilisera en TP !)
. le récepteur continue son exécution et se bloque quand il ne peut plus avancer sans message reçu ;
=⇒ réception non bloquante + attente (déconseillé car compliqué à mettre en œuvre)
. le récepteur continue mais il peut savoir si un message a été reçu ;
=⇒ réception non bloquante + opération de test de message (déconseillé, car débouche souvent sur de l’« attente
active »)
Attention
Gestion du buffer d’envoi et de réception dans le protocole TCP : rôle du bit PUSH !
ResAvI
Plan de la partie Programmation Socket 89

Éléments importants
. TSAP, « Transport Service Access Point » ;
. Mode « orienté connexion » vs mode datagramme ;
. Protocoles TCP et UDP ;
. Mode « client/serveur » ;
ResAvI
2 La programmation Socket ou la programmation de la couche 4 90

Une interface de programmation définie pour mettre en place simplement des communications :
? chaque communication a lieu avec :
 un interlocuteur : communication « point à point », ou « unicast » ;
 plusieurs interlocuteurs : communication par « diffusion » ou « multicast » ;
? la communication correspond à l’échange de données entre les interlocuteurs :
 des données en continu : flux d’octets de taille indéfinie, non connue à l’avance ;
 des paquets : données de taille fixe et réduite connue à l’avance.
Deux types de communication uniquement en TCP/IP
1. mode « connecté »
 elle ne concerne que deux interlocuteurs : un de chaque côté (point à point) ;
 les données arrivent les unes après les autres dans « l’ordre d’émission » ;
 la communication est bi-directionnelle (dans les deux sens) ;
 elle est « full-duplex », les deux interlocuteurs peuvent échanger simultanément ;
 il y a une garantie contre la perte de données.
C’est le mode offert par le protocole TCP, « Transmission Control Protocol ».
2. mode « datagramme »
 elle peut concerner un ou plusieurs interlocuteurs (unicast ou multicast) ;
 les données sont groupées dans des paquets de taille limitée ;
 il peut y avoir des pertes de paquets.
C’est le mode offert par le protocole UDP, « User Datagram Protocol ».
Attention
Le mode « connecté » est simulé par TCP sur un réseau en mode « datagramme ».
ResAvI
Notion de port : multiplexage et identification d’un processus 91
Modèle Client/Serveur
Un logiciel « serveur » attend la communication en provenance d’un logiciel « client ».
Localisation du logiciel serveur
◦ un ordinateur est localisable sur Internet grâce à son adresse IP ;
◦ un ordinateur ne possède habituellement qu’une adresse IP joignable ;
◦ un ordinateur peut exécuter plusieurs programmes qui peuvent vouloir communiquer simultanément ;
◦ il faut multiplexer ces communications en « sachant » avec quel programme communiquer : notion de « port » !
À chaque processus communiquant est associé un port
Pour une communication en « mode connecté » :
? un Serveur qui attend la connexion du client ;
? un Client qui effectue la connexion au serveur.
Pour localiser le Serveur ? Connaître le numéro de port où attend la communication !
Comment connaître le numéro de port ?
Le point sur les communications sur un ordinateur :
? chaque communication est associée à un seul programme donné (logiciel de messagerie, navigateur web, client
de chat, etc) ;
? chaque communication se fait suivant un protocole donné (SMTP, POP pour récupérer le courrier, HTTP, etc) ;
? chaque protocole est associé à un « serveur » particulier : serveur SMTP pour l’envoi de courrier, serveur Web,
serveur FTP, etc.
? un numéro de port identifie un serveur donné : il faut rendre standard les numéros de port !
Exemple : http : 80, ftp : 21, smtp : 25, DNS : 53 etc, la liste dans le fichier /etc/services.
Le client veut communiquer avec un serveur donné ? il utilise le port standard associé !
ResAvI
La notion de numéro de port : « multiplexer » les communications 92
Notion de numéro de port
 différentes communications peuvent avoir lieu pour des protocoles différents, donc des programmes différents,
donc des numéros de port différents ;
 chaque communication sur une machine est identifiée par un TSAP, « Transport Service Access Point », c-à-d
un couple (@IP, numéro de port).

Comment un ordinateur peut-il voir plusieurs communications simultanément ?


On ajoute également la notion de numéro de port :
? il varie de 1 à 65535 (sur 16 bits) ;
? il est associé à un seul programme ;
? du côté de la machine cliente, il peut prendre n’im-
porte quelle valeur ;
? du côté de la machine serveur, il permet à la ma-
chine cliente de désigner le programme que l’on
veut contacter ;

Le port permet de multiplexer les communications :


◦ chaque datagramme sera identifié par le TSAPsource duquel il transporte les données ;
◦ tous les datagrammes utilisent le même lien de communication ;
◦ lors de leur arrivée sur la machine destination, ils sont identifiés par leur TSAPdestination et remis au bon
processus.
ResAvI
Les « Sockets » Berkeley utilisées dans TCP/IP 93
Objectifs
? fournir des moyens de communications entre processus, IPC, « Inter Processus Communication », utilisable en
toutes circonstances : échanges locaux sur la même machine (boucle) ou sur le réseau.
? masquer les détails d’implémentation des couches de transport ;
? fournir une interface d’accès qui se rapproche des accès fichiers pour simplifier la programmation
La notion de socket ou de « prise »
C’est un point d’accès pour les services de transport :
 Elle possède un type : Quel protocole de transport va être utilisé ? Pour quel mode de communication ?
 Elle permet d’utiliser un ensemble de primitives de service ;
 Elle encapsule des données : un descripteur et des files d’attente des messages en entrée et en sortie ;
 Elle est identifiée par un nom unique : le TSAP, c-à-d « le numéro de port » et une @IP.
Le protocole TCP
? C’est un protocole de transport fiable, en mode connecté, en mode bidirectionnel.
? Une socket TCP peut être utilisée par plusieurs connexions TCP simultanément du côté serveur :
 on peut traiter simultanément plusieurs clients ;
 on peut configurer une « file d’attente » des clients : si un client se présente il est mis en attente ou renvoyer
directement.
? Une communication est identifiée par le couple d’adresse IP/port, TSAP, des deux extrémités :
T SAPclient ⇐⇒ T SAPserveur
? Un échange TCP est un flot continu d’octets. Les données sont reçues dans l’ordre de leur transmission.¸

Une optimisation de TCP est de temporiser l’envoi des données dans des tampons pour augmenter la taille des
envois, mais il est possible de demander l’émission immédiate des données.
ResAvI
ResAvI
"#$%&'()*)+),-./)0122%314

!
Connexion
!"##$%&"#'(!)
94 TCP
Les « Sockets » Berkeley utilisées dans TCP/IP 95

Les différentes étapes pour l’établissement de la connexion :


Les instructions réseaux à utiliser sont indiquées dans un cadre en fin de ligne.
1. Le serveur attend sur le SAP [@IP serveur, numéro de port] Réseau
socket, bind, listen, accept
Client Serveur
2. Le client obtient automatiquement un numéro de port libre (par ex. 3456)
Port 3456 Port 8080
socket

Réseau Nouvelle connexion 3. Le client se connecte au serveur connect


Le système d’exploitation du client et du serveur, mémorise la
Client Serveur
connexion par un couple :
Port 3456 Port 8080
(T SAPclient ⇐⇒ T SAPserveur )
[@IP client, 3456] ⇐⇒ [@IP serveur, 8080]
Cette connexion peut être affichée avec la commande Unix « nets-
socket initiale
tat ».

Remarques :
 La primitive de programmation accept retourne au serveur une nouvelle socket associée à la connexion avec le client.
C’est par cette socket que l’on communique avec le client.
 Le serveur peut recevoir la connexion de nouveaux clients sur la socket initiale.
Un serveur peut avoir plusieurs communications simultanées avec différents clients.
Chacune de ces communications correspond à un couple différent de TSAP (le même du côté du serveur associé à un
TSAP côté client différent pour chaque communication).
ResAvI
Les « Sockets » Berkeley utilisées dans TCP/IP 96
Le protocole UDP
 C’est un protocole de transport non fiable, sans connexion.
 L’échange de données se fait par datagrammes.
 L’ordre dans lequel les paquets sont envoyés peut ne pas être respecté lors de leur réception.
Schéma de fonctionnement en TCP
Serveur Client
1 socket 1 socket
2 bind 2 connect
3 listen 3 recv, send
4 accept 4 close
5 recv, send
6 close
Schéma de fonctionnement en UDP
Serveur Client
1 socket 1 socket
2 bind 2 recvfrom, sendto
3 recvfrom, sendto 3 close
4 close
ResAvI
Les « Sockets » Berkeley utilisées dans TCP/IP 97
Les primitives de l’interface socket
? socket : Elle permet de créer un nouveau point d’accès de service de transport

Trois paramètres d’appel :


La famille d’adresses utilisée : 1 AF_UNIX (communication locale à une machine)
2 AF_INET (communication réseau avec IPv4)
3 AF_INET6 (communication réseau avec IPv6)

le type de service demandé : 1 SOCK_STREAM (flot d’octets en mode connecté)


2 SOCK_DGRAM (datagramme en mode non connecté)

le protocole de transport utilisé 1 IPPROTO_TCP


2 IPPROTO_UDP
3 IPPROTO_ICMP

Le prototype de la fonction socket : 1 #include <sys/types.h>


2 #include <sys/socket.h>
3 #include <netinet/in.h>

5 int socket(int famille, int type, int protocole);


ResAvI
Les « Sockets » Berkeley utilisées dans TCP/IP 98

? bind : Elle permet d’attribuer un numéro de port à la socket.


Le choix d’un numéro de port n’est pas systématique lors de la création de la socket, car un client n’a pas
besoin de fixer un numéro de port particulier (choisi automatiquement par le système), et un serveur qui attend
des connexions doit définir sur quel numéro de port il les attend.
Trois paramètres d’appel : 1 #include <sys/socket.h>
 le numéro de descriptif de la socket (retourné par la fonction 2 struct sockaddr_in {
socket) ; 3 short sin_family;
 une structure de données adresse de socket de type 4 u_short sin_port;
sockaddr_in ; 5 struct in_addr sin_addr;
 la taille de cette structure ; 6 char sin_zero[8]; };

Exemple d’utilisation : 1 struct sockaddr_in adresse_socket;


2 adresse_socket.sin_family = AF_INET;
3 adresse_socket.sin_port = 16;
4 adresse_socket.s_addr = htonl(INADRR_ANY); /* Conversion
5 dans le sens reseau */
6 if ((s = socket(AF_INET, SOCK_STREAM, 0)) < 0)
7 { /* cas d’erreur */ }
8 if (bind(s, &sin, sizeof(sin)) < 0)
9 { /* cas d’erreur */ }
ResAvI
Les « Sockets » Berkeley utilisées dans TCP/IP 99

? listen :
 Utilisée dans le mode connecté lorsque plusieurs clients sont susceptibles d’établir une ou
plusieurs connexions avec le serveur.
 Il permet de fixer le nombre d’appel maximum que pourra traiter le serveur (les appels non
gérés immédiatement sont alors mis en attente).
int listen (int descripteur_socket, int max_connection);

? accept :
 Utilisée dans le mode connecté, permet de se bloquer en attente d’une nouvelle demande
de connexion.
 Après l’accept, la connexion est complète entre les deux processus.
 Pour chaque nouvelle connexion entrante, la primitive accept renvoie un pointeur sur une
nouvelle socket de structure identique à la précédente.
1 #include <sys/types.h>
2 #include <sys/socket.h>¸
3 int accept (int nouvelle_socket, struct sockaddr_in *adresse_client,
4 int longueur_adresse_client);
ResAvI
Les « Sockets » Berkeley utilisées dans TCP/IP 100

? connect :
 Cette primitive permet à un client de se connecter à un serveur. ¸
 Elle ouvre une connexion entre le client et le serveur.
 On doit lui fournir l’adresse IP du serveur (la partie locale est renseignée automatiquement).
 Pour chaque opération d’écriture/lecture, seule le descripteur de la socket est à fournir à chaque
fois.
1 #include <sys/types.h>
2 #include <sys/socket.h>
3 int connect(int descripteur_socket, struct sockaddr_in *adresse_serveur, int longueur_adresse);

? send, recv
 Ces primitives permettent l’échange d’information au travers de la socket.
 Elles s’utilisent de la même façon que les instructions read et write sur fichiers avec une option
supplémentaire pour préciser des options de communication
1 #include <sys/types.h>
2 #include <sys/socket.h>

4 int send (int socket, char *zone, int longueur_zone, int options);
5 int recv (int socket, char *zone, int longueur_zone, int options);
Les options permettent d’indiquer si les données urgentes, etc.
ResAvI
Les « Sockets » Berkeley utilisées dans TCP/IP : version Python 101

Le client
1 import os, socket, sys

3 adresse_symbolique_serveur = ’localhost’
4 adresse_serveur = socket.gethostbyname(adresse_symbolique_serveur)
5 numero_port_serveur = 6688

7 ma_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # AF_INET6 pour IPv6

9 try:
10 ma_socket.connect((adresse_serveur, numero_port_serveur)) #SAP désignant le serveur
11 except Exception, message:
12 print "probleme de connexion", message
13 sys.exit(1)

15 while 1:
16 entree_clavier = raw_input(’:>’)
17 if not entree_clavier:
18 break
19 ma_socket.sendall(clavier)
20 ma_socket.close()
ResAvI
Les « Sockets » Berkeley utilisées dans TCP/IP : version Python 102

Le serveur
1 import sys, os, socket, select

3 masque_acces = ” # filtre les clients, ici aucun


4 numero_port_serveur = 6688 # identique à celui du client

6 ma_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_TCP) # ou AF_INET6


7 # Permet de ne pas attendre pour réutiliser le numéro de port
8 ma_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR,1)
9 # Accroche le numéro de port à la socket
10 ma_socket.bind((masque_acces, numero_port_serveur))
11 # Configure la file d’attente
12 ma_socket.listen(socket.SOMAXCONN)
13 # L’accept renvoie une nouvelle socket
14 (nouvelle_connexion, tsap_depuis) = ma_socket.accept()
15 print "Nouvelle connexion depuis ", tsap_depuis
16 while 1:
17 ligne = nouvelle_connexion.recv(1000)
18 if not ligne :
19 break
20 print ligne
21 connexion.close()
22 ma_socket.close()
ResAvI
3 L’algorithme de routage : généralisation du premier pas 103
Distinction entre ordinateur et routeur
? un ordinateur est un équipement relié à un seul réseau ;
? un routeur est un équipement relié à au moins deux réseaux, éventuellement à un réseau où ne sont connectés
que des routeurs (réseau d’interconnexion) ;
? chacun dispose pour chaque connexion d’une carte réseau ;
? chacun dispose pour chaque carte réseau d’une @MAC et d’une @IP ;
? l’ordinateur est soit l’expéditeur initial, soit le destinataire final d’un datagramme ;
? le routeur réémet, relaye, des datagrammes :
 provenant d’une de ses interfaces (carte de connexion à un réseau) ;
 vers une autre de ses interfaces ;
c’est à lui de choisir une étape sur le chemin que devra emprunter le datagramme pour atteindre l’ordinateur
destinataire.

Généralisation : algorithme de routage par sauts successifs, “next hop routing”


Le datagramme va passer d’intermédiaire en intermédiaire, d’entité réseau à une autre : il fait des « sauts » ou
hop :
. l’entité réseau (ordinateur ou routeur) exécute le même algorithme : décider entre routage direct et indirect
Dans le cas d’un routeur, le routage indirect peut faire le choix entre différentes adresses de routeurs.
. l’entité réseau doit déterminer l’adresse de prochain saut, c-à-d. la prochaine étape du chemin d’achemine-
ment du datagramme à transmettre.
Un saut correspond à la transmission d’un datagramme à un routeur ou à la machine destinataire.
ResAvI
Le routage complet ? Chercher un chemin 104
Acheminement des messages ou routage
Pour acheminer un datagramme de la source à la destination, il faut déterminer un chemin allant du réseau origine
au réseau destinataire :
? pour sortir du réseau origine, il faut un premier routeur (passerelle ou « gateway »)
? il faut ensuite trouver le routeur qui est connecté au réseau destination.
Deux cas possibles :
1. le routeur destination est directement accessible, c-à-d le réseau destination est directement connecté au réseau
origine par l’intermédiaire du même routeur ;
2. le routeur destination n’est pas directement accessible : le message doit circuler via un ou plusieurs routeurs
intermédiaires.
Ce qui permet d’appliquer l’algorithme de base de recherche du prochain saut
. Routage direct : le datagramme est transmis à une machine dans le même réseau local ;
. Routage indirect : le datagramme est échanger entre routeurs jusqu’au réseau destination (pour le routeur connecté
au réseau destination, la remise du datagramme se fait de manière directe).
Comment trouver le routeur destination ?
En théorie, le routage devrait se faire en tenant compte de paramètres difficiles à évaluer comme l’encombrement
du réseau, la longueur du datagramme ou le type de service mentionné dans l’en-tête du datagramme.
En pratique, l’acheminement des datagrammes se fait en fonction :
? de la connaissance par un routeur, des autres routeurs auxquels il est connecté : table de routage ;
? d’hypothèses statiques utilisées dans des algorithmes de calcul du plus court chemin (utilisation d’algorithmes
pour construire la table de routage ou seulement de l’intelligence de l’administrateur réseau).
? chaque routeur prend une décision au mieux, « best effort », pour l’étape de routage qu’il réalise.
ResAvI
3.1 Routage : routeur & table de routage 105

Le routage peut se faire suivant des routes différentes.


Ce qui explique que :
? certains datagrammes puissent se perdre
? qu’ils arrivent dans un ordre différent (temps d’achemi-
nement différents).

Fonctionnement du routage sur un routeur :


. il faut connaître des routeurs destinations pour accé-
der à d’autres réseaux ;
. ces routeurs sont indiqués dans une table de routage ;
. chaque entrée de la table contient :
 un réseau de destination ;
 une adresse de prochain saut, next hop :
? celle du prochain routeur à emprunter pour at-
teindre la destination (routage indirect) ;
? celle de l’interface du routeur s’il est connecté au
réseau (routage direct).
. la table de routage contient une route par défaut
(pour les destinations inconnues). R2 atteint D par l’intermédiaire de R3 :
=⇒R3 est son « next-hop » sur le chemin vers D.
ResAvI
??
Résumé sur le routage 106

Comment créer une méthode de routage « simple » pour un ordinateur ?


? Appliquer le principe de « localité » : connaissance locale =⇒ décision locale ;
? Ne considérer que le réseau auquel est connecté l’ordinateur ;
? Prendre en compte que c’est un réseau à diffusion ;
? Savoir qu’il est interconnecté par un réseau point à point aux autres réseaux (existence d’une sortie) ;
? Ignorer l’identité de tous ces autres réseaux (cette connaissance sera réservée aux routeurs).

Alors, cette méthode simple ?


. La seule possibilité de sortir du réseau local ? un routeur connecté à ce réseau ;
. Conclusion :  soit l’ordinateur communique avec le réseau local et il
le fait suivant la méthode d’un réseau à diffusion ;
 soit l’ordinateur veut communiquer avec l’extérieur et
il passe par le routeur !
 ce routeur est souvent appelé « passerelle » ou « ga-
teway » ou « route par défaut » ;
 l’ordinateur doit connaître l’@IP de ce routeur !
ResAvI
Pour suivre le routage avec le traceroute de Scapy 107

» sn,unans=traceroute(["www.unilim.fr"],maxttl=10)
Begin emission: AS3303
[SWISSCOM Swisscom (Switzerland) Ltd]
**Finished to send 10 packets.
192.168.42.254
*******
Received 9 packets, got 9 answers, remaining 1 packets 12322
[PROXAD Free SAS]
164.81.1.61:tcp80
1 192.168.42.254 11 88.167.27.254

2 88.167.27.254 11
3 213.228.42.62 11 213.228.42.62
4 212.27.57.137 11
5 212.27.57.89 11
212.27.57.137
6 212.27.51.57 11
7 212.27.51.82 11
9 193.51.189.37 11 212.27.57.89
10 193.51.189.126 11
212.27.51.57

ATTENTION
Une erreur s’est glissée dans l’affichage à droite, où il est indiqué que le ré- 212.27.51.82

seau privé 192.168.42.0/24 appartient à l’A3303.


En effet, scapy utilise la commande suivante :
unk0
darkstar:~ pef$ whois -h riswhois.ripe.net 192.168.0.0
2200
[FR-RENATER Reseau National de telecommunications pour la Technologie]
% This is RIPE NCC’s Routing Information Service
% whois gateway to collected BGP Routing Tables 193.51.189.37

% IPv4 or IPv6 address to origin prefix match


%
193.51.189.126
route: 192.0.0.0/3
origin: AS3303 1935
[FR-RENATER-LIMOUSIN Reseau Regional Limousin]
descr: SWISSCOM Swisscom (Switzerland) Ltd
164.81.1.61 80/tcp
ResAvI
4 Diffusion dans un réseau : Multicast et classe D 108

Lorsqu’un hôte envoie un datagramme, il a le choix du mode :


◦ Unicast : pour un seul destinataire ;
◦ Brodcast : à tous les noeuds connectés à un réseau ;
◦ Multicast : à tous les noeuds qui appartiennent à un même groupe.
Le multicast dans IPv4 est limité au réseau local.
Une classe est réservée à la définition d’adresse multicast :
. la classe de réseau D : 224.0.0.0/4 pour la plage d’adresses 224.0.0.0 à
239.255.255.255.
Il existe des groupes prédéfinis : Adresse but
224.0.0.1 All hosts on a subnet
224.0.0.2 All routers on a subnet
224.0.0.5 All OSPF routers (DR Others)
224.0.0.6 All OSPF Designated Routers
224.0.0.9 All RIPv2 routers
224.0.0.10 All EIGRP routers
224.0.0.12 DHCP Server
224.0.1.1 NTP
224.0.1.39 Cisco RP Announce
224.0.1.40 Cisco RP Discovery
ResAvI
Multicast : réduire la diffusion 109

Il est souhaitable de réduire la diffusion d’un datagramme envoyé à un groupe d’hôtes à ces seuls hôtes. Ainsi, lors
de la réception du datagramme :
? l’hôte fait partie du groupe destinatire : il traite le datagramme ;
? l’hôte ne fait pas partie du groupe : il ignore le datagramme.
Comment faire ?
Utiliser une @MAC destination particulière :
a. utiliser un préfixe particulier pour ce type d’@MAC : 01 00 5E ;
b. mapper les 23 derniers bits de l’@IP du groupe, sur l’@MAC.

Il peut y avoir des risques de chevauchement sur les 5 bits ignorés mais c’est rare donc sans risque. . .

Attention
Sous IPv6, le broadcast et la diffusion de groupe change avec une @MAC de la forme 33:33:00:00:00:01 pour le « groupe » ff02::1
ResAvI
Multicast et programmation 110

Pour pouvoir utiliser le « multicast » dans un programme, il est nécessaire d’informer le système d’exploitation que l’on veut
joindre un groupe, ce qui est fait par les instructions suivantes en Python :
1 gestion_mcast = struct.pack("4sl", socket.inet_aton("224.0.0.127"), socket.INADDR_ANY)
2 ma_socket.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, gestion_mcast)
3 ma_socket.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_LOOP, 0)
Attention : dans la chaîne de format du pack, c’est la lettre « l » et non le chiffre « 1 ».
L’option « IP_MULTICAST_LOOP » permet de choisir si l’émetteur reçoit le paquet qu’il envoie.
Si la machine dispose de plusieurs interfaces, il faut utiliser l’option « IP_MULTICAST_IF » pour la sélectionner.

Multicast & Routeur : protocole IGMP & TTL


Lorsque la machine rejoint un groupe, elle diffuse un message au format IGMP, « Internet Group Management Protocol »,
afin de prévenir les routeurs présents dans le réseau :
◦ que la machine joint un groupe (un paquet sera également diffusé lorsque la machine quitte le groupe) ;
◦ qu’ils pourront avoir à relayer des paquets multicast à destination de l’adresse du groupe choisi.
Pour restreindre le nombre de routeurs pouvant être traversé, on choisit la TTL, « Time To Live » des paquets multicast :
1 ma_socket.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 2)
Ici, le paquet pourra traverser uniquement 1 seul routeur.
Savoir à quels groupes on appartient
Pour afficher la liste des groupes auxquels appartient la machine : pef@solaris:~$ netstat -gn
IPv6/Adhésions au groupe IPv4
Interface RefCnt Group
–––––––- ––– ––––––––––-
lo 1 224.0.0.1
eth0 1 224.0.0.251
eth0 1 224.0.1.2
eth0 1 224.0.0.1
ResAvI
Le protocole IGMP, « Internet Group Management Protocol » 111
Lors de la création du groupe
Exemple avec la commande « socat » :
pef@cerberus:~$ socat stdio udp-recvfrom:7182,ip-add-membership=224.0.0.127:eth0,fork

et les paquets IGMP diffusés (TO_EX {empty} =⇒ quitter l’exclusion donc joindre) :
root@starfox:~# tcpdump -nvveX -i eth0 igmp
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
02:44:53.375237 00:0c:29:0f:31:a1 > 01:00:5e:00:00:16, ethertype IPv4 (0x0800), length 60: (tos 0xc0, ttl 1, id 0,
offset 0, flags [DF], proto IGMP (2), length 40, options (RA))
192.168.127.238 > 224.0.0.22: igmp v3 report, 1 group record(s) [gaddr 224.0.0.127 to_ex { }]
0x0000: 46c0 0028 0000 4000 0102 c362 c0a8 7fee F..(..@....b....
0x0010: e000 0016 9404 0000 2200 f97e 0000 0001 ........"..~....
0x0020: 0400 0000 e000 007f 0000 0000 0000 ..............

Lors de la terminaison du groupe


02:45:18.986933 00:0c:29:0f:31:a1 > 01:00:5e:00:00:16, ethertype IPv4 (0x0800), length 60: (tos 0xc0, ttl 1, id 0,
offset 0, flags [DF], proto IGMP (2), length 40, options (RA))
192.168.127.238 > 224.0.0.22: igmp v3 report, 1 group record(s) [gaddr 224.0.0.127 to_in { }]
0x0000: 46c0 0028 0000 4000 0102 c362 c0a8 7fee F..(..@....b....
0x0010: e000 0016 9404 0000 2200 fa7e 0000 0001 ........"..~....
0x0020: 0300 0000 e000 007f 0000 0000 0000 ..............

Le « switch » écoute les ports qui diffusent ces messages


IGMP pour limiter le multicast des paquets, il réalise du
« IGMP snooping ».

Les messages IGMP sont diffusés vers le groupe 224.0.0.22.

Exemple d’utilisation : diffusion d’un flux RTP, « Real Time


Protocol » pour la diffusion d’un flux vidéo au travers d’un
ResAvI

routeur.
Localisation de service dans réseaux locaux privés 112
Solution de DNS pour réseau local
C’est un protocole proposé par Apple (à la base utilisé par Bonjour), présent sur GNU/Linux (Avahi) :
? basé sur les mêmes formats de paquet que le DNS traditionnel :
 chaque ordinateur possède sa propre liste d’enregistrements DNS (A, MX, SRV, etc) ;
 chaque ordinateur peut diffuser la liste des services qu’il offre grâce au champ SRV ;
 domaine local appelé « .local » ;
? échangé de manière différentes dans le réseau :
 utilisation de l’adresse multicast 224.0.0.251 pour contacter toutes les machines du réseau local auquel on
est connecté ;
 utilise le port 5353 en UDP ;
 les paquets ont les caractéristiques suivantes :
MAC address 01:00:5E:00:00:FB
IPv4 address 224.0.0.251 or IPv6 address FF02::FB
UDP port 5353

 se combine avec l’auto-configuration des adresses IP, APIPA, « Automatic Private IP Addressing »,
(169.254.0.0/16), en l’absence de serveur DHCP ou de configuration manuelle ;
Il existe également UPnP SSDP, « Simple Service Discovery Protocol » de Microsoft qui n’utilise pas le format de
requête/réponse du DNS.
Exemple de paquet mDNS obtenu avec Scapy
»> l=sniff(count=3,filter="udp and port 5353")
»> DNS(str(l[0][UDP].payload))
<DNS id=0 qr=0L opcode=QUERY aa=0L tc=0L rd=0L ra=0L z=0L rcode=ok qdcount=1 ancount=0 nscount=1 arcount=0
qd=<DNSQR qname=’iPhone de Pierre-Francois Bonnefoi._avexvscreen._udp.local.’ qtype=ALL qclass=32769 |> an=None ns=<DNSRR
rrname=’iPhone de Pierre-Francois Bonnefoi._avexvscreen._udp.local.’ type=SRV rclass=IN ttl=120
rdata=’\x00\x00\x00\x00\x17q"iPhone-de-Pierre-Francois-Bonnefoi\xc0B’ |> ar=None |>
ResAvI
Extension des DNS : l’enregistrement SRV 113
Recherche de machine par service fourni (RFC 2782)
Un nouveau type d’enregistrement a été défini dans les DNS, suivant le format suivant :
_Service._Proto.Name TTL Class SRV Priority Weight Port Target
Exemple : _sip._udp.unilim.fr 43200 IN SRV 10 10 5060 sipserveur.unilim.fr

 le service est SIP ;


 le protocole est UDP ;¸
 la durée de vie de l’association est de 12h (43200 secondes) ;
 la classe est Internet ;
 le type d’enregistrement est SRV ;
 la priorité est de 10 (les valeurs inférieures sont utilisées préférentiellement) ;
 le poids est de 10 (pour pouvoir faire de l’équilibrage de charge) ;
 le port associé au SIP est 5060 ;
 le FQDN, « Full Qualified Domain Name » du serveur est sipserveur.unilim.fr.
Exemple de paquet mDNS sniffé avec Scapy

> paquet_sniffe.payload
<IP version=4L ihl=5L tos=0x0 len=160 id=18153 flags= frag=0L ttl=255 proto=udp chksum=0xa889 src=192.168.42.54 dst=224.0.0.251
options=” |<UDP sport=mdns dport=mdns len=140 chksum=0x9788 |<Raw load=’\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00#iPhone de
Pierre-Fran\xc3\xa7ois Bonnefoi\x0c_avexvscreen\x04_udp\x05local\x00\x00\xff\x80\x01\xc0\x0c\x00!\x00\x01\x00\x00\x00x\x00
\x00\x00\x00\x00\x17q"iPhone-de-Pierre-Francois-Bonnefoi\xc0B’ |>
> DNS(str(paquet_sniffe[UDP].payload))
<DNS id=0 qr=0L opcode=QUERY aa=0L tc=0L rd=0L ra=0L z=0L rcode=ok qdcount=1 ancount=0 nscount=1 arcount=0 qd=<DNSQR qname=’iPhone
de Pierre-Fran\xc3\xa7ois Bonnefoi._avexvscreen._udp.local.’ qtype=ALL qclass=32769 |> an=None ns=<DNSRR rrname=’iPhone de Pierre-
Fran\xc3\xa7ois Bonnefoi._avexvscreen._udp.local.’ type=SRV rclass=IN ttl=120 rdata=’\x00\x00\x00\x00\x17q"iPhone-de-Pierre-Francois-
ResAvI

Bonnefoi\xc0B’ |> ar=None |>


and that there are no more frames carrying pieces of this packet’s payload (the M
Fragments bit is set to 0).
In the following, we talk about fragmentation in IPv4 in more detail, and t
explore all of the fields in the IPv4 header in more detail.

5 Le format du datagramme IP 114


THE IPv4 PACKET HEADER
Le datagramme IP est une séquence d’octets, dont l’interprétation est réalisée :
The general structure of the IPv4 packet is shown in Figure 6.3. The minimum hea
. soit par groupe de 2 ou de 4, pour obtenir une valeur sur(using
16 ou 32 bitsthe
no options, ; most common situation) has a length of 20 bytes (always sho
in a 4-bytes-per-line format), and a maximum length (very rarely seen) of 60 bytes. So
. soit bit par bit, où chaque bit à un sens particulier. of the fields are fairly self-explanatory, such as the fields for the 4-byte (32-bit) I
Sur le schéma en français, la « fléche » vers le bas indiquesource
une coupure du datagramme
and destination tous
address, but others haveles octets, purposes.
specialized chaque
ligne représentant 4 octets ou 32 bits.
1 byte 1 byte 1 byte 1 byte
Header
Version Type of Service Total Packet Length
Length

Identification Flags Fragment Offset


H
e Time to Live Protocol Header Checksum
a
d
e 32-bit IPv4 Source Address
r
32-bit IPv4 Destination Address

(Options, if present, padded if needed)

DATA

32 bits

FIGURE 6.3
◦ version sur 4 bits : le numéro de version (en général 4, IPv4
mais bientôt 6. . . ).
Packet and Header
◦ longueur de l’en-tête sur 4 bits : longueur en nombre de mots de 32bits (une en-tête est au minimum d’une
longueur de 20 octets, mais peut être plus grande en présence d’options).
ResAvI
Le format du datagramme IP 115

◦ le type de service sur 8 bits : indique la manière dont doit être géré le datagramme par les routeurs :
01234 5 6 7
priorité D T R C

 le champ priorité varie de : 0 (priorité normale) à 7 (priorité maximale : supervision du réseau) ;


 ne s’applique qu’à l’intérieur d’un réseau sous même administration et n’est pas pris en compte par tous les routeurs ;
 les 4 bits D, T, R & C spécifient ce que l’on veut privilégier (RFC 1349, remplacée par la 2474) : D minimiser le délai
d’acheminement, T maximiser le débit de transmission, R fiabilité, C coûts de transmission, DTRC tout à 1 pour la
sécurité.
En fonction des différents services : application minimise le délai maximise le débit maximise la fiabilité minimise le coût
telnet/rlogin 1 0 0 0
FTP
contrôle 1 0 0 0
transfert 0 1 0 0
NNTP 0 0 0 1
SNMP 0 0 1 0

Actuellement :
? on recycle les bits 6&7 pour l’ECN, Explicit Congestion Notification, définie dans la RFC 3168.
Cela permet de détecter l’entrée en congestion du réseau, c-à-d qu’il va bientôt saturer.
? DSCP, « Differentiated Services Code Point » : RFC 2474, proposée par CISCO pour faire de la QoS.

◦ longueur totale sur 2 octets : contient la taille en octet du datagramme (inclus la taille de l’en-tête)

◦ identification, drapeaux & déplacement de fragments : gestion de la fragmentation du datagramme IP.


ResAvI
Le format du datagramme IP 116

◦ durée de vie (TTL) : indique le nombre de routeurs que peut traverser le datagramme avant d’être détruit.
La valeur d’initialisation est de 128.
 lorsqu’un routeur reçoit un datagramme avec la valeur 0, le datagramme est détruit et envoie à l’expéditeur un mes-
sage ICMP, « Internet Control Message Protocol » pour l’informer.
 permet de « décongestionner » automatiquement le réseau : un paquet ne peut rester bloqué dans le réseau indé-
finiment.

◦ protocole sur 8 bits : indique le protocole de haut niveau qui est contenu dans le datagramme
1 ICMP 6 TCP 2 IGMP 17 UDP
◦ somme de contrôle d’en-tête (header checksum) : assure l’intégrité de l’en-tête.
 complément à 1 de la somme des valeurs de l’en-tête, considérées comme une suite d’entiers sur 16 bits ;
 permet de faire de la « détection d’erreur » : le récepteur peut savoir si le datagramme a été endommagé pendant
la transmission.

◦ adresses IP source et destination


 permet de faire le routage :
? chaque routeur choisie une ligne de sortie en fonction de l’adresse de destination ;

◦ options : c’est une liste de longueur variable, mais toujours complétée par des bits de bourrage, pour obtenir une taille
multiple de 32 bits (la taille de l’en-tête étant exprimée en mots de 32bits).
 très peu utilisées : information concernant l’enregistrement de la route, estampille horaire. . .
 la présence d’option est déduite par la différence de la taille de l’en-tête avec la taille de l’en-tête minimale :
? HL − 20 = 0, pas d’options
? HL − 20 > 0, présence d’options
ResAvI
ICMP : « Internet Control Message Protocol
Networking », RFC 792
Fundamentals 117

? effectue un contrôle des échanges ; Message Returned Description / Interpretation


? permet de « déboguer » le réseau IP à Destination Unreachable 7KLVWHOOVWKHVRXUFHKRVWWKDWWKHUHLVDSUREOHP
GHOLYHULQJDSDFNHW7KHSUREOHPLVWKDWHLWKHUWKH
l’aide de message ; destination host is down or its internet connection is
down.
? utilise différents types de message avec
7LPH([FHHGHG ,WKDVWDNHQWRRORQJIRUDSDFNHWWREHGHOLYHUHG7KH
des significations différentes en deux packet has been discarded.
catégories : Source Quench 7KHVRXUFHLVVHQGLQJGDWDIDVWHUWKDQLWFDQEH
IRUZDUGHG7KLVPHVVDJHUHTXHVWVWKDWWKHVHQGHUVORZ
 messages d’erreurs ; down.
 messages de requêtes ; Redirect 7KHURXWHUVHQGLQJWKLVPHVVDJHKDVUHFHLYHGVRPH
packet for which another router, which is also directly
connected to the sender, would have had a better route.
Attention 7KHPHVVDJHWHOOVWKHVHQGHUWRXVHWKHEHWWHUURXWHU
Pour des questions de sécurité cer- Echo 7KLVLVXVHGE\WKHping command to verify connectivity.
7KHVHQGHUZLOOLVVXHDQHFKRUHTXHVWPHVVDJHDQGZLOO
tains messages ICMP « actifs » ne UHFHLYHDQHFKRUHSO\IURPWKHRWKHUKRVWLIDSDWKLV
found between the two.
sont plus interprétés et d’autres de
Parameter Problem 7KLVLVXVHGWRLGHQWLI\DSDUDPHWHUWKDWLVLQFRUUHFW
« surveillance » sont filtrés. 7LPHVWDPS 7KLVLVXVHGWRPHDVXUHURXQGWULSWLPHWRSDUWLFXODUKRVWV
$GGUHVV0DVN5HTXHVW5HSO\ 7KLVLVXVHGWRLQTXLUHDERXWDQGOHDUQWKHFRUUHFWVXEQHW
mask to be used.
Router Advertisement and 7KLVLVXVHGWRDOORZKRVWVWRG\QDPLFDOO\OHDUQWKH,3
Selection addresses of the routers attached to the subnet.

Le format du message ICMP : 0


ARP: Address Resolution Protocol is 1used to determine MAC
2
addresses for a 3given
le contenu des données dépend du type. IP address. 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
RARP: Reverse Address Resolution Protocol is used to determine an IP address for a
| Type | Code | Checksum |
given MAC address.
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data |
The TCP/IP Network Access Layer
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
7KHQHWZRUNDFFHVVOD\HULQ7&3,3DOVRFDOOHGKRVWWRQHWZRUNOD\HUDOORZV,3
ResAvI

packets to make physical links to the network media.


are used in pairs, and each request anticipates a response. The 10 ICMP Query messages Echo messages (used by ping), although some allow only incoming Echo replies but
are listed in Table 7.3, which shows how routers and hosts should handle each type. not Echo requests (which allows my devices to ping yours, but not the other way
These ICMP messages in Table 7.3 allow routers and hosts to query for timestamp,around). The timestamp reply is also used by traceroute, and if these messages are
address mask, and domain name information. Echo requests and replies have special blocked, asterisks (*) appear instead of times in the traceroute report (we’ll look at
uses described in the section of this chapter on ping. traceroute operation in detail in Chapter 9).

ICMP : les messages et leurs usages 118


Table 7.3 ICMP Query Messages Table 7.4 Other ICMP Query Messages
Router Router Host Host Router Router Host Host
Type Meaning Codes Data Sends Receives Sends Receives Type Meaning Codes Data Sends Receives Sends Receives
0 Echo reply 0 Varies M M M M 1 Unassigned NA NA NA NA NA NA
8 Echo 0 Varies M M M M 2 Unassigned NA NA NA NA NA NA
request
6 Alternate host 0 (4 bytes) (Prohibited) (Prohibited) Opt Opt
13 Timestamp 0 12 bytes Opt Opt Opt Opt address
request
9 Router 0 Varies M Opt Prohibited Opt
14 Timestamp 0 12 bytes Opt Opt Opt Opt advertisement
reply
10 Router 0 0 bytes M M Opt Opt
15 Information 0 0 bytes Obs Obs Obs Obs solicitation
request
19 Reserved– NA NA NA NA NA NA
16 Information 0 0 bytes Obs Obs Obs Obs security
reply
20–29 Reserved– NA NA NA NA NA NA
17 Mask 0 4 bytes M M Opt Opt robustness
request
30 Traceroute 0–1 Varies Opt Opt M M
18 Mask reply 0 4 bytes M M Opt Opt
31 Datagram con- 0–11 Varies ? ? ? ?
37 Domain 0 0 bytes M M M M version error
name
32 Mobile host 0 Varies Opt Opt Opt Opt
request
redirect
38 Domain 0 0 bytes M M M M
33 IPv6 0 ? Opt Opt Opt Opt
name reply
where-are-you
Obs, obsolete; Opt, optional; M, mandatory.
34 IPv6 I-am-here 0 ? Opt Opt Opt Opt
35 Mobile regis- 0, 16 Varies Opt Opt Opt Opt
? M, Mandatory : obligatoire ; tration request

? actuellement : les machines filtrent les paquets 36 Mobile regis- 0, 16 Varies Opt Opt Opt Opt
tration reply
« echo request » pour être « invisibles » sur le ré- 39 SKIP 0 Varies Opt Opt Opt Opt

seau (mode « stealth » sous Mac os X par ex.) ; 40 Photurius 0–3 Varies Exp Exp Exp Exp
Exp, expired; Obs, obsolete; Opt, optional; M, mandatory; NA, not applicable.

? le protocole « SKIP », « Simple Key-Management for Internet Protocol » pour l’utilisation des protocoles AH, « Au-
thentication Header » et ESP, « Encapsulating Security Protocol » et choix des protocoles cryptographiques ;
? le protocole « photuris » sert également à la cryptographie : « Session-Key Management Protocol ».
ResAvI
Les attaques utilisant ICMP 119
Pour la reconnaissance d’un réseau
◦ comprendre l’organisation de l’environnement de la cible ;
◦ obtenir des informations sur la cible pour préparer une attaque ;
◦ utiliser les bonnes techniques et outils pour les différentes phases de l’attaque ;
Les techniques
? « ICMP Sweep » : « balayer » la plage d’adresses d’un réseau (réalisable automatiquement par l’outil « nmap » par ex.) ;
? « traceroute » : envoi successif de datagrammes avec une valeur de TTL incrémentée à chaque datagramme :
 lorsqu’un routeur « forward » un datagramme, il décrémente le TTL ;
 lorsque la TTL arrive à zéro, un paque ICMP « time excedeed » est retourné à l’expéditeur, ce qui permet à celui-ci
de découvrir l’adresse du routeur ;
 on obtient des informations sur le chemin des datagrammes et sur la topologie du réseau ;
? « Firewalking » : améliorer le « traceroute » pour identifier les ports ouverts sur un firewall filtrant les communications et
obtenir les règles de configuration du firewall :
 première phase : réaliser un traceroute « classique » pour déterminer le nombre n de sauts, « hops », jusqu’au firewall ;
 deuxième phase : envoyer des datagrammes avec une TTL égale à n + 1 et associé à un protocole choisi :
? si un paquet ICMP « time excedeed » est reçu, alors le datagramme a réussi à traverser le firewall ;
? si rien n’est reçu, alors on en déduit qu’une règle du firewall a filtré le datagramme.
? « Inverse Mapping » : cette technique permet de « mapper » le réseau interne qui est protégé par un firewall :
 l’attaquant envoie des paquets ICMP « echo reply » vers une plage d’adresses présumées derrière le firewall ;
 à l’arrivée de ces paquets ICMP de réponse, le firewall autorise à passer car il ne maintient pas la liste des requêtes
ICMP (sauf si le firewall est de bon niveau ainsi que l’administrateur) ;
 s’il existe un routeur interne, ce routeur retournera un paquet ICMP « Host unreachable » pour chaque hôte indispo-
nible du réseau, ce qui informe, par déduction, l’attaquant sur les machines présentes dans le réseau.
ResAvI
Les attaques utilisant ICMP 120

? « L’OS fingerprinting » : reconnaissance de l’OS présent sur la machine cible :


 l’attaquant envoi un datagramme UDP avec le bit « DF » à 1 vers la cible avec un numéro de port fermé ;
 la cible retourne un paquet ICMP « Destination port Unreachable » à l’attaquant ;
 en analysant le format du paquet ICMP reçu, l’attaquant peut obtenir des informations sur la cible ;
Exemple : un paquet est envoyé depuis un Linux vers un Mac et un PC et la réponse est différente :
>>> paquet_mac
<IP frag=0 proto=udp dst=192.168.127.1 |<UDP dport=56467 |>>

>>> reponse_mac
<IP version=4L ihl=5L tos=0x0 len=56 id=9103 flags= frag=0L ttl=64 proto=icmp chksum=0xd747 src=192.168.127.1\
dst=192.168.127.156 options=[]
|<ICMP type=dest-unreach code=port-unreachable chksum=0x202c unused=0
|<IPerror version=4L ihl=5L tos=0x0 len=28 id=1 flags= frag=0L ttl=64 proto=udp chksum=0xfae1 src=192.168.127.156\
dst=192.168.127.1 options=[]
|<UDPerror sport=domain dport=56467 len=8 chksum=0x0 |>>>>

>>> paquet_pc
<IP frag=0 proto=udp dst=192.168.127.153 |<UDP dport=56467 |>>

>>> reponse_pc
<IP version=4L ihl=5L tos=0x0 len=56 id=2471 flags= frag=0L ttl=128 proto=icmp chksum=0xb097 src=192.168.127.153\
dst=192.168.127.156 options=[]
|<ICMP type=dest-unreach code=port-unreachable chksum=0x7d9d unused=0
|<IPerror version=4L ihl=5L tos=0x0 len=28 id=1 flags= frag=0L ttl=64 proto=udp chksum=0xfa49 src=192.168.127.156\
dst=192.168.127.153 options=[]
|<UDPerror sport=domain dport=56467 len=8 chksum=0xa28e |>>>>

Jeu des 7 erreurs : quelles sont-elles ?


ResAvI
Les attaques utilisant ICMP 121

? « L’OS fingerprinting » : reconnaissance de l’OS présent sur la machine cible :


Autre exemple : les paquets envoyés par la commande « ping » depuis un Mac et depuis un PC :
>>> ping_mac
<Ether dst=00:11:de:ad:be:ef src=00:50:56:c0:00:08 type=IPv4 |<IP version=4L ihl=5L tos=0x0 len=84 id=54669\
flags= frag=0L ttl=64 proto=icmp chksum=0x252d src=192.168.127.1 dst=192.168.127.156 options=[]
|<ICMP type=echo-request code=0 chksum=0xdbb7 id=0xdd4e seq=0x0
|<Raw load=’Ph\xc7\x8e\x00\x02;\xfd\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\
\x1c\x1d\x1e\x1f !"#$%&\’()*+,-./01234567’ |>>>>

>>> ping_pc
<Ether dst=00:11:de:ad:be:ef src=00:0c:29:d1:27:40 type=IPv4 |<IP version=4L ihl=5L tos=0x0 len=60 id=758\
flags= frag=0L ttl=128 proto=icmp chksum=0xb740 src=192.168.127.157 dst=192.168.127.156 options=[]
|<ICMP type=echo-request code=0 chksum=0x4d5a id=0x1 seq=0x1
|<Raw load=’abcdefghijklmnopqrstuvwabcdefghi’ |>>>>

? « ICMP route redirect » : c’est un paquet envoyé par un routeur lorsqu’il :


 reçoit du trafic d’un hôte ;
 trouve dans sa table de routage que l’adresse de « prochain saut » à laquelle doit être envoyé ce trafic est dans le
même réseau que celui de l’hôte ;
 il est possible de faire un attaque « Man-in-the-Middle » :
? l’attaquant prend le contrôle du routeur R1 ;
? l’attaquant envoi un paquet ICMP redirection vers la victime en prenant la place du routeur R2, utilisé par la victime ;
? la redirection demande à la victime de modifier sa table de routage pour passer par R1 au lieu de R2 ;
? l’attaquant intercepte le trafic sur R1.
? les paquets ICMP « oversized » : un paquet ICMP d’une taille maximale envoyé vers la victime fait planter sa pile TCP/IP ;
? « ICMP Router Discovery » : ce sont des paquets transmis dans le réseau pour permettre à un hôte de découvrir les
routeurs présents : « router solicitation ».
Un attaquant peut répondre par un « router advertisement » et prendre la place du routeur par défaut pour la victime.
ResAvI
Les attaques utilisant ICMP 122

? « ICMP floods » : en inondant la victime de message ICMP, on peut la ralentir et, éventuellement, l’empêcher de com-
muniquer :
 envoi depuis le même hôte ;
 « smurf attack » : on envoie un paquet ICMP « echo request » en diffusion sur le réseau en mettant l’adresse de la
victime comme adresse source ;
 la victime est « submergée » par toutes les paques ICMP « echo reply » qu’elle reçoit de toutes les machines.
Ne fonctionne plus.

? le « tunneling » : encapsuler le trafic d’un protocole comme TCP ou UDP dans le contenu des paquets ICMP échangés
entre un hôte compromis (où l’attaquant à pris le contrôle) et une machine située à l’extérieur du réseau :
 le trafic est difficile à découvrir ;
 le trafic peut être chiffré afin de le protéger.
This vulnerability exists because RFC 792, which is IETF’s rules governing ICMP packets, allows for an arbitrary data
length for any type 0 (echo reply) or 8 (echo message) ICMP packets.
>>> p=IP(dst=’192.168.127.1’)/ICMP(type=’echo-request’)/’ceci est un test’
>>> sr(p)
Begin emission:
*Finished to send 1 packets.
Received 1 packets, got 1 answers, remaining 0 packets
(<Results: TCP:0 UDP:0 ICMP:1 Other:0>, <Unanswered: TCP:0 UDP:0 ICMP:0 Other:0>)
>>> _[0][0]
(<IP frag=0 proto=icmp dst=192.168.127.1
|<ICMP type=echo-request
|<Raw load=’ceci est un test’ |>>>,

<IP version=4L ihl=5L tos=0x0 len=44 id=29697 flags= frag=0L ttl=64 proto=icmp chksum=0x86e1 src=192.168.127.1 dst=192.168.127.156
options=[] |<ICMP type=echo-reply code=0 chksum=0x2ee8 id=0x0 seq=0x0 |<Raw load=’ceci est un test’ |<Padding load=’\x00\x00’ |>>>>)
ResAvI
??
Encapsulation du datagramme IP dans une trame Ethernet 123

Problème
Une trame a une taille limite de 1500 octets en Ethernet 10 et 100 Mbits.
Si la taille du datagramme à encapsuler est supérieure à 1500 octets, alors le datagramme ne
peut être encapsulé !
Solution
Il faut découper le datagramme IP !

Problème
Un morceau de datagramme IP n’est pas un datagramme IP !
Si le morceau doit traverser un routeur il doit être vu comme un datagramme IP.
En particulier, si on a découpé le datagramme IP initial en deux morceaux, il se peut que le
deuxième morceau ne possède pas les entêtes nécessaires à son routage.

Solution
. Le datagramme IP doit être fragmenté avant d’être transmis.
. La fragmentation d’un datagramme IP doit donner des datagrammes IP avec toutes les entêtes
nécessaires !
ResAvI
mathis-frag-harmful-00.txt) took this one step further with the title, “F
Considered Very Harmful.”The paper asserts that most of the harm occur
ment of packet content, especially the first, is lost on the network. And
older network attacks involved sending long sequences of fragments to
finishing the sequence, until the host or router ran out of buffer space and
5.1 Encapsulation du datagramme IP ⇒ fragmentation ? 124
Unité de transfert du réseau
Table 6.1 Typical MTU Sizes*

Un datagramme IP a une taille maximale de Link Protocol Typical MTU Limit Maximum IP Packet
Ethernet 1518 1500
65535 octets (taille indiquée sur 16bits).
IEEE 802.3 1518 1492
Ce datagramme lors de son acheminement doit
Gigabit Ethernet 9018 9000
emprunter des réseaux dont la taille maximale IEEE 802.4 8191 8166
des paquets transportables peut être inférieure. IEEE 802.5 (Token Ring) 4508 4464
La taille maximale d’une trame d’un réseau est FDDI 4500 4352

appelée MTU, « Maximum Transfer Unit ». SMDS/ATM 9196 9180


Frame relay 4096 4091
Cette MTU dépend de la nature du réseau et peut
SDLC 2048 2046
exprimer la taille de la trame ou de son contenu.
*Frame overhead accounts for the differences between the theoretic limit and
Fonctionnement maximum IP packet size.

Le datagramme IP est soit :


? encapsulé dans une trame si il est de taille inférieure ou égale au MTU ;
? fragmenté en plusieurs fragments dans le cas contraire, où :
 chaque fragment doit avoir la plus grande taille possible et multiple de 8 octets.
Attention
Les routeurs d’un réseau ne défragmentent pas les fragments.
Ces fragments n’empruntent pas forcément tous le même chemin.
ResAvI
Fragments bit is set to 0).
In the following, we talk about fragmentation in IPv4 in more detail, and then
explore all of the fields in the IPv4 header in more detail.

THE IPv4 PACKET HEADER


5.2 Fragmentation
The general structure of the IPv4 packet is shown in Figure 6.3. The minimum header 125
(using no options, the most common situation) has a length of 20 bytes (always shown
in a 4-bytes-per-line format), and a maximum length (very rarely seen) of 60 bytes. Some
Un Fragment = Un datagramme IP
of the fields are fairly self-explanatory, such as the fields for the 4-byte (32-bit) IPv4
source and destination address, but others have specialized purposes.
Lors de la fragmentation, le routeur renseigne l’en-tête de chaque fragment :
1 byte
Header
1 byte 1 byte 1 byte
◦ fragment offset, déplacement : champ permettant de
Version Type of Service Total Packet Length
Length
connaître la position du début du fragment dans le
Identification Flags Fragment Offset
H
e
datagramme initial ;
Time to Live Protocol Header Checksum
a
d
32-bit IPv4 Source Address
◦ identification : numéro attribué à chaque fragment
e
r
32-bit IPv4 Destination Address
afin de permettre leur réassemblage : tous les frag-
(Options, if present, padded if needed)
ments sont identifiés de la même manière.
◦ total packet length : il est recalculé pour chaque frag-
DATA ment ;

32 bits

FIGURE 6.3
◦ IPv4
flags, drapeaux : il est composé de trois bits
Packet and Header

 le 1 er n’est pas utilisé ;


 le 2 nd, DF: Don’t Fragment : indique si le datagramme peut être fragmenté.
Si un datagramme a ce bit à un et que le routeur doit le fragmenter, alors le datagramme
est détruit avec un message d’erreur ICMP.
 le 3 ème, MF: More Fragments : indique si c’est un fragment :
? 0 : le dernier ou pas de fragmentation ;
? 1 : sinon.
ResAvI
Défragmentation 126

Le processus de réassemblage
? À la réception du premier fragment, le destinataire final déclenche un temporisateur de réas-
semblage ;
? Ce temporisateur est un délai maximal d’attente de tous les fragments :
 Si tous les fragments n’ont pas été reçus après ce délai d’attente, ils sont détruits et le
datagramme est ignoré.
le champs TTL de chaque fragment est décrémenté à intervalle régulier.
 la taille complète du datagramme n’est connue que lors de la réception du dernier fragment.

Exemple où la MTU donnée est celle du contenu ou « payload »


Packet from LAN: Frag1 Frag2 Frag3
Total Packet Length: 1500 1500 1500
Ethernet: 1500-byte MTU size
WAN Link:
4500-byte MTU size Identification: 03E4 03E4 03E4
Flags: MORE MORE LAST
Fragment Offset: 0 185 370
IP datagram from WAN:
Total Packet Length: 4460
Identification: 03E4 Est-ce que les « offset » sont corrects ?
Flags: LAST
Fragment Offset: 0
« LAST » vient de l’interprétation de « MF=0 ».
ResAvI
Fragmentation 127

Soit la trame suivante :

0000 00 22 AA 01 21 31 00 D0 F1 10 12 13 08 00 45 00 ."..!1........E.
0010 00 28 02 37 00 00 23 06 F9 23 C1 32 B9 12 C9 1B .(.7..#..#.2....
0020 59 15 08 10 01 BB 00 00 00 00 00 00 00 00 50 02 Y.............P.
0030 20 00 E9 A1 00 00

fragmentée en :

0000 00 22 AA 01 21 31 00 D0 F1 10 12 13 08 00 45 00 ."..!1........E.
0010 00 1C 02 37 20 00 23 06 D9 2F C1 32 B9 12 C9 1B ...7 .#..2̇....
0020 59 15 08 10 01 BB 00 00 00 00 Y.........

et :

0000 00 22 AA 01 21 31 00 D0 F1 10 12 13 08 00 45 00 ."..!1........E.
0010 00 1C 02 37 20 01 23 06 D9 2E C1 32 B9 12 C9 1B ...7 .#....2....
0020 59 15 00 00 00 00 50 02 20 00 Y.....P. .

Ce qui donne ?
ResAvI
6 Quelques métriques 128
Ces métriques correspondent à des mesures des performances d’un réseau
Elles peuvent être mesurées au cours du temps, ou seulement, à certains moments, ou bien encore, uniquement
avec une valeur approchée.

La latence ou « latency »
? définie par le temps de passage des données de l’émetteur vers le récepteur ;
? pas toujours mesurable facilement (l’heure entre deux interlocuteurs n’est pas forcément synchronisée... et la
synchroniser est difficile !)

Le RTT ou « Round Trip Time »


. mesure le temps pris pour obtenir une réponse après avoir envoyer une demande à un interlocuteur;
. permet d’obtenir une valeur approchée de la latence : RT T /2
 la machine A envoie une « estampille » avec sa propre heure dans
un paquet ;
 la machine B répond avec un paquet contenant cette estampille ;
 A mesure la différence de temps avec son heure actuelle.

La gigue ou « jitter »
? mesure la variation de la latence au cours du temps :
Jitter = latency(n){latency(n − 1), où la mesure n − 1 est prise à un temps t et n à un temps t + δt
? mesure importante pour les communications « temps réel » :
Mieux vaut une forte latence et une gigue stable, qu’une faible latence et une gigue importante
 Si la gigue est nulle : la latence est stable ; si elle varie (positive ou négative) : la latence varie.
ResAvI
Quelques
Chapter 3 • métriques
Multimedia and Real-time Applications 195 129
Influence du jitter sur l’ordre de remise des datagrammes

Network
O P Q 5 R 2 4 S O Q P 5 2 R 4 S
Source Packets departing source Packets arriving at receiver Receiver

8 8 8
7 7 7
6 6 6
Packet number

5 5 5
4 4 4
3 3 3
2 2 2
1 1 1

0 20 40 60 80 100 120 140 160 0 20 40 60 80 100 120 0 20 40 60 80 100 120 140 160 180 200 220 240 260

Time when packet departed (ms) Transit delay experienced (ms) Time when packet arrived (ms)

LaFigure 3-2: Packets


« commande depart
» de mesure de with a uniform
la RTT, le « ping »spacing,but they experience variable amount of
delay (jitter) and arrive at the receiver irregularly (packets #3 and #6 arrive out of order).
$ ping -c 5 164.81.1.4
$ ping6 fe80:1030:5329:6d2c:211:deff:fead:beef -I eth0

3.3.1 End-to-End Delayed Playout


Attention : le « ping » est sensible à l’occupation de la machine cible : plus elle est occupée moins vite elle
répond.
ResAvI

!"#$%&'()"&%*+&,)+#)+-.()(&/+.#01)!"#$%&')234)→)!"#$%&')235)
Quelques mesures de RTT 130

pef@solaris:~$ ping -c 3 164.81.1.4


PING 164.81.1.4 (164.81.1.4) 56(84) bytes of data.
64 bytes from 164.81.1.4: icmp_req=1 ttl=50 time=45.6 ms
64 bytes from 164.81.1.4: icmp_req=2 ttl=50 time=47.5 ms
64 bytes from 164.81.1.4: icmp_req=3 ttl=50 time=45.9 ms

–- 164.81.1.4 ping statistics –-


3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 45.614/46.351/47.507/0.827 ms
pef@solaris:~$ ping -c 3 www.berkeley.edu
PING www.w3.berkeley.edu (169.229.131.81) 56(84) bytes of data.
64 bytes from webfarm.Berkeley.EDU (169.229.131.81): icmp_req=1 ttl=48 time=192 ms
64 bytes from webfarm.Berkeley.EDU (169.229.131.81): icmp_req=2 ttl=48 time=192 ms
64 bytes from webfarm.Berkeley.EDU (169.229.131.81): icmp_req=3 ttl=48 time=192 ms

–- www.w3.berkeley.edu ping statistics –-


3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 192.513/192.709/192.874/0.149 ms
pef@solaris:~$ ping -c 3 www.usyd.edu.au
PING solo-rproxy.ucc.usyd.edu.au (129.78.155.111) 56(84) bytes of data.
64 bytes from solo-rproxy.ucc.usyd.edu.au (129.78.155.111): icmp_req=1 ttl=41 time=424 ms
64 bytes from solo-rproxy.ucc.usyd.edu.au (129.78.155.111): icmp_req=2 ttl=41 time=447 ms
64 bytes from solo-rproxy.ucc.usyd.edu.au (129.78.155.111): icmp_req=3 ttl=41 time=347 ms

–- solo-rproxy.ucc.usyd.edu.au ping statistics –-


3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 347.922/406.958/447.972/42.790 ms
ResAvI
RTT : les délais induits par leIvanréseau/par le traitement
Marsic • Rutgers University 28 131
Chapter 1 • Introduction to Computer Networking 27

Sender Receiver

Layer 2 Layer 2 Transport layer Processing delay within transport layers Transport layer
(sender) (receiver)

Send Receive Send Receive


data ACK ACK data

Network layer Processing delay within network layers Network layer

Layer 1 Layer 1 Send Receive Send Receive


(sender) (receiver)
packet packet packet packet

Processing and transmission delays


Link+Phys layer Link+Phys layer
Figure 1-17: Fluid flow analogy for delays in packet delivery between the protocol layers.
within link/physical layers

Propagation delay!"#!$%&"'%$!(#!)*%!)"+%!%,(-#%$!.%)/%%'! /*%'!(!.")!"#!#%')!()!)*%!#%'$%0!('$!


/*%'!")!"#!0%1%"2%$!()!)*%!0%1%"2%03!4*"#!$%,(5!$%-%'$#!6'!)*%!$"#)('1%!!!.%)/%%'!)*%!#%'$%0!('$!
)*%! 0%1%"2%0! ('$! )*%! 2%,61")5! "! 6&! %,%1)06+(7'%)"1! /(2%#! "'! )*%! )0('#+"##"6'! +%$"8+9! /*"1*! "#!
-06-60)"6'(,! )6! )*%! #-%%$! 6&! ,"7*)! "'! 2(188+! :#! ≈! ;×<=>! +?#@9! "! A! #?$9! /*%0%! $! "#! )*%! "'$%B! 6&!
0%&0(1)"6'!6&!)*%!+%$"8+3!C6)*!"'!16--%0!/"0%!('$!7,(##!&".%0!60!6-)"1(,!&".%0!$!≈!;?D9!#6!"!≈!D!×! Propagation delay (receiver → sender)
<=>!+?#3!4*%!"'$%B!6&!0%&0(1)"6'!&60!$05!("0!"#!(--06B"+()%,5!%E8(,!)6!<3!4*%!-06-(7()"6'!$%,(5!"#F!
$"#)('1% ! :+@
%& = =
2%,61")5 " :+?#@
! ! !
Chapter 4 !• :<3;@!
Switching and Queuing Delay Models Propagation delay (sender → receiver) 219
Processing delay! "#! )*%! )"+%! '%%$%$! &60! -061%##"'7! (! 0%1%"2%$! -(1G%)3! H)! )*%! #%'$%0! #"$%9! )*%!
-(1G%)!+(5!.%!0%1%"2%$!&06+!('!8--%0I,(5%0!-06)616,!60!&06+!)*%!(--,"1()"6'3!H)!)*%!0%1%"2%0!#"$%9!
)*%!-(1G%)!"#!0%1%"2%$!&06+!)*%!'%)/60G!60!&06+!(!,6/%0I,(5%0!-06)616,3!JB(+-,%#!6&!-061%##"'7! Figure 1-18: Delay components that contribute to round-trip time (RTT).
Source
"'1,8$%!16'2%0#"6'!6&!(!#)0%(+!6&!.5)%#!)6!&0(+%#!60!-(1G%)#!:G'6/'!(#!'()*+$,!60!&)#-.%+/)%+0$@9! Destination Source Router Destination
$()(!16+-0%##"6'9!%'105-)"6'9!0%,(5"'7!()!068)%0#9!%)13!K061%##"'7!$%,(5#!8#8(,,5!1('!.%!"7'60%$!
/*%'! ,66G"'7! &06+! ('! %'$I*6#)L#! 2"%/-6"')3! M6/%2%09! -061%##"'7! $%,(5! "#! 2%05! 10")"1(,! &60!
transmission
068)%0#!"'!)*%!'%)/60G!160%!)*()!'%%$!)6!0%,(5!(!*87%!'8+.%0!6&!-(1G%)#!-%0!8'")!6&!)"+%9!(#!/",,!.%!
" × !"#!$%&%'()*)*+!&,%!-..!)/!(01,!(2'%!12(34%5!)6!&,%!/%*7%'!8*7!'%1%)9%'!8'%!12**%1&%7!29%'!
time
#%%'!,()%0!"'!N%1)"6'!<3O3O3!
H'6)*%0! "+-60)(')! -(0(+%)%0! "#! )*%! round-trip time! :60! RTT@9! /*"1*! "#! )*%! )"+%! (! .")! 6&!
8!*%&:2';!:,%'%!(04&)34%!84&%'*8&)9%!38&,/!%5)/&<!8/!:)44!=%!/%%*!48&%'!)*!>%1&)2*!"#?#"#!@2:%9%'<!
"'&60+()"6'! )(G%#! &06+! $%-(0)"'7! 8')",! (00"2"'7! .(1G! ()! )*%! #%'$%0! "&! ")! "#! "++%$"()%,5! .68'1%$!
.(1G! ()! )*%! 0%1%"2%03! 4*"#! )"+%! 6'! (! #"'7,%! )0('#+"##"6'! ,"'G! "#! 6&)%'! (##8+%$! )6! %E8(,! P44! A!
%9%*!2*!8!/)*+4%!4)*;<!&,%!*2&)2*!26!-..!)/!(01,!(2'%!12(34%5!&,8*!A0/&!720=4%!&,%!3'238+8&)2*!
propagation
time 7%48B#!.2!=%&&%'!0*7%'/&8*7!-..<!:%!*%%7!&2!12*/)7%'!:,8&!)&!)/!0/%7!62'!8*7!,2:!)&!)/!(%8/0'%7#!
-..! )/! (2/&! 26&%*! 0/%7! =B! /%*7%'! &2! /%&! 03! )&/! '%&'8*/()//)2*! &)(%'! )*! 18/%! 8! 381;%&! )/! 42/&#!
C=9)20/4B<! *%&:2';! *27%/! 72! *2&! /%*7! )*7)9)7084! =)&/D! &,%B! /%*7! 381;%&/#! -..! )/! (%8/0'%7! =B!
router
'%12'7)*+! &,%! &)(%! :,%*! 8! 381;%&! )/! /%*&<! '%87)*+! 20&! &,%! &)(%! :,%*! &,%! 81;*2:4%7+%(%*&! )/!
Time

delay
'%1%)9%7<!8*7!/0=&'81&)*+!&,%/%!&:2!9840%/E!
detail
-..!F!G&)(%!:,%*!&,%!81;*2:4%7+%(%*&!)/!'%1%)9%7H!−!G&)(%!:,%*!&,%!381;%&!)/!/%*&H! G?#IH!
.2! 0*7%'/&8*7! :,8&! 12*&')=0&%/! &2! -..<! :%! *%%7! &2! 422;! 8&! ,2:! 381;%&/! &'89%4! &,'20+,! &,%!
E"F
*%&:2';#! J)'/&<! 81;*2:4%7+%(%*&/! (8B! =%! "#$$%&'()*+! E*F2*! 78&8! 381;%&/! 12()*+! =81;! 62'! &,%!
'%1%)9%'#! .,%'%62'%<! %9%*! )6! &,%! &'8*/()//)2*! 7%48B! )/! *2&! )*1407%7! 8&! &,%! /%*7%'! /)7%<! '%1%)9%'K/!
&'8*/()//)2*! 7%48B! 72%/! 12*&')=0&%! &2! &,%! -..#! G@2:%9%'<! :,%*! 8*! 81;*2:4%7+%(%*&! )/!
3)++B=81;%7!2*!8!'%+048'!78&8!381;%&!6'2(!'%1%)9%'!&2!/%*7%'<!&,%!&'8*/()//)2*!&)(%!26!&,)/!381;%&!
ResAvI

Figure 4-1: Delays in (0/&!=%!&8;%*!)*&2!81120*&#H!


datagram packet switching (or, forwarding, or, routing). (a) Single
hop source-to-destination connection
>%12*7<! without
:%! ,89%! intermediary
&2! '%(%(=%'! &,8&! nodes. (b)*27%/!
*%&:2';! Intermediary nodes3'2&2124/! G>%1&)2*! ?#?#IH#!
0/%! 48B%'%7!
introduce additionally L2*&)*0)*+!:)&,!&,%!640)7!642:!8*842+B!6'2(!J)+0'%!?MN<!:%!)440/&'8&%!)*!J)+0'%!?M?O!,2:!7%48B/!
processing and transmission delays.
Le calcul du RTT : utilisation du « Timestamp » 132

Une demande d’« étiquette de temps » est réalisé dans le protocole (par exemple TCP) :
. le serveur et le client ont leur propre réglage d’horloge sûrement décalé ;
. le client envoie l’heure courante dans t1 ;
. le serveur note t1 et mesure t2 l’heure d’arrivée du paquet ;
. le serveur après traitement du protocole envoie un message de réponse où il mesure t3 et indique t2 ;
. le client mesure t4 , l’heure d’arrivée du message de réponse ;

Client Server
network

Origin Timestamp: t1 client


msg

Receive Timestamp: t2
Transmit Timestamp: t3
er msg
serv

Destination Timestamp: t4

one-way delay is half of


know: t1,t2,t3,t4 the round trip, but only if
round trip delay=((t4-t1)-(t3-t2)) delays are symmetric

. à la fin de l’échange, le client et le serveur connaissent t1 , t2 , t3 et t4 et peuvent calculer une valeur approchée
du RTT !
ResAvI
Quelques métriques 133

Le débit :
? mesuré en bps ou bits par seconde, exprimé en puissance de 10 (norme ISO) ;
? correspond à la quantité d’information par unité de temps qui a été remis à son destinataire ;
? Le débit maximal d’une ligne de transmission correspond à sa capacité :
 peut être atteint sur des réseaux à circuit vituels (ou la perte de données est exclue) ;
 peut être égal ou inférieur au débit « physique » du réseau, car il faut enlever les informations nécessaires
au fonctionnement du réseau physique et aux erreurs (collision, attente de la disponibilité du support dans
le cas de réseau en mode datagramme).
? L’occupation du canal : pourcentage de la quantité d’information transmise par rapport au débit « physique »
du réseau :
un débit de 70Mbit/s dans un réseau Ethernet 100Mbit/s définit une occupation du canal de 70%
? Le débit utilisateur : pourcentage de données utilisateur transmises par rapport à la quantité d’information
transmise (informations d’adressages, de contrôle d’erreur, de contrôle, d’adaptation, etc)

La QoS ou « Quality of Service » :


◦ vise à associer un débit pour un type communication donné (VoIP, Web, Partage de fichier, etc) ;
◦ peut être garantie ou bien souhaitée ;
◦ suppose que les communications peuvent être identifiées et classifiées.

Rapport entre débit et latence, la notion de vitesse perçue


? Si un camion transporte par route un stock de DVDs de Limoges à Paris, la latence peut être grande (1j) mais
le débit peut être énorme !
? Un réseau faible débit de faible latence est perçu plus rapide (Surfer sur le net en ADSL par exemple)
ResAvI
Plan de la partie « Packet Switching » 134

Éléments importants
. Une ancienne technologie de réseaux :
la commutation de circuit ou « Circuit Switching » qui s’améliore pour devenir de la com-
mutation de paquets ou « Packet Switching » ;

. Le retour en virtuel de cette technologie : le « virtual Circuit » sur « Packet Switching » ;


. les éléments « historiques » pour comprendre la transformation :
 l’avantage de passer d’une communication longue à un message puis à un paquet de
taille petite et fixe pour la gestion des erreurs ;

 le « multiplexage temporel » ;
. le choix en un acheminement du paquet suivant :
 toujours le même chemin en mode « virtual circuit » ;
 un chemin défini progressivement en mode « datagram ».
ResAvI
6.1 Du réseau « Circuit-Switched » au réseau « Packet-switched » 135
Le réseau « Circuit-Switched »
◦ c’est historiquement le plus ancien (c’est la catégorie des anciens réseaux téléphonique) ;
◦ Fonctionnement :
 avant qu’une communication ne puisse commencer, il faut construire le circuit :
? déterminer un chemin entre la source et la destination ;
? allouer de manière statique des ressources sur tous les nœuds intermédiaires du chemin :.
 si l’opération de construction de circuit :
? réussi, alors la communication a lieu.
? échoue, à cause d’une ressource non disponible, la communication n’a pas lieu.
 à la fin de la communication, les ressources allouées doivent être libérées.

Évolution du « Circuit-Switched » vers le « Packet-switched »


 c’est une évolution historique des communications pour des raisons d’efficacité : gestion plus rapide des erreurs,
flexibilité de l’acheminement des paquets, gestion de plusieurs communications simultanées ;
 les communications sont découpées en paquets de taille fixe ou1.4bornée
Network classification
inférieure en générale à 100ko ; 9

 Exemple : le réseau ATM, « Asynchronous Transfer Mode » : proposé par les opérateurs télécommunications ;
Exemple d’utilisation :
? Connexion Internet d’un particulier :
? un réseau sans fil, « Wireless LAN » ;
ADSL
modem
? un modem ADSL et une ligne téléphonique : accès au
réseau ATM ; Internet
Telephone
network ISP core
network
? un lien vers l’ISP, « Internet Service Provider » ou FAI,
« Fournisseur d’accès Internet ». Fig. 1.8 A residential wireless LAN connected to the Internet
ResAvI

core network. Network devices called routers provide the desired connectivity between
different domains.
Fig. 1.8 sketches a more familiar portion of the whole picture: in this instance a residen-
Généralisation du réseau « Packet-switched » 136
Le réseau « Packet-switched » comme seul mode de fonctionnement
? mode de fonctionnement actuel des technologies réseau ;
? transport de données découpés en « paquets » contenant des bits de contrôle et des bits de données ;
? il existe deux sous-catégories :
. les « virtual circuit », ou « circuit virtuel », exemples : MPLS, « Multiprotocol label switching », ATM, Frame Relay,
X.25 (virtuellement2 TCP...) ;
. les « datagram networks », ou « réseau en mode datagramme », exemple : Internet ;
Les « virtual circuit », « circuit virtuel » : le retour du mode « circuit »
? un « circuit virtuel » doit être mis en place entre la source et la destination avant un échange ;
? la différence avec le « Circuit-switched » : l’allocation des ressources sur le chemin est dynamique :
 les liens de transmission sont interconnectés par des commutateurs ou des routeurs en « mode commutateur » ;
 les paquets partagent les capacités des liens traversés avec d’autres paquets appartenant à d’autres « circuits
virtuels » ;
 les paquets partagent de manière dynamique la puissance de traitement des commutateurs/routeurs, ses res-
sources mémoires ; 1.4 Network classification 11

? on parle de « multiplexage déterministe » :


 l’aspect « déterministe » entraîne que les paquets sont Packets of VC
Packets of VC
1
2
Packets of VC
traités de manière planifiée ; 3

 le temps de passage d’un paquet dans un commutateur


est connu et le temps de parcours du « circuit » est stable
et prévisible ;

 on peut garantir de la QoS, « Quality of Service ».


ResAvI

Fig. 1.9 A few virtual circuits traversing a network

crossed router taking it a little bit closer. As in virtual circuit networks, here too data-
grams queue up in routers and experience unpredictable delays before reaching the
Ttx

t 0 +Tproc +Tq +Ttx


Généralisation du réseau « Packet-switched » Tp 137
Les « datagram networks », ou « réseau en mode datagramme », vs « virtual circuit »
? chaque paquet est « routé » individuellement à travers le réseau ;
? il n’existe pas de chemin « a priori », alors chaque paquet d’une communication peut suivre un chemin différent ;
Tp
? pour le rendre autonome, le paquet contient l’adresse du destinataire : on parle de datagramme :
 chaque routeur intermédiaire traversé par ce datagramme utilise cette adresse pour décider du « lien de sortie »,
« output link » pour « relayer », « forward », ce datagramme.
 le datagramme « saute » de routeur en routeur, « hop-by-hop », jusqu’au destinataire final.
 si un routeur tombe en panne, le datagramme est perdu.
? on parle de « multiplexage statistiquet 0»+T
: proc +Tq +Ttx +Tp
 les paquets partagent de manière dynamique la puissance de traitement des commutateurs/routeurs, ses res-
sources mémoires ;
 la charge, « load », d’un routeur dépend du trafic non planifié qui passe par lui ;
 l’aspect « statistique » entraîne que des paquets peuvent être « mis en attente », dans des « queues » ;
 le datagramme peutFig. A pictorial
1.16des retards
subir viewtransfer
dans son of the s’il
different
est misdelays incurred
en attente byrouteur
sur un a packet on a: single link
(jitter)
 le temps de parcours du datagramme varie et devient imprévisible :
Le temps de transmission Tti
varie sur chaque ith lien
Source
Destination

i th link
Tt
i

 ce qui entraîne desFig. 1.17


difficultés Thefaire
pour entiredepath covered by the packet
la QoS.
ResAvI

other packets. Even if at the end of each link we do not find a router, yet the
Commutateur ou routeur ? « circuit virtuel » ou « datagramme » ! 138
Fonctionnement
Il est relié à une plusieurs lignes de transmission.
Il reçoit les bits d’information sur une ligne de transmission en entrée.
Il émet ces mêmes bits d’information sur une ligne de transmission en sortie.
Le choix de la ligne de sortie s’appelle commutation :
◦ « cut through » où l’information est retransmise à mesure qu’elle arrive ;
temps d’acheminement dans un « switch » de l’ordre de la µs
◦ « store and forward » où l’information est d’abord entièrement reçue et stockée avant sa ré-émission.
temps d’acheminement dans un « switch » de l’ordre de la ms

Les différences de mode de fonctionnement en « Packet Switching » ?


. en « datagram network » :
 il choisit sa commutation en fonction de ses lignes de transmissions et de sa table de routage ;
 il n’associent pas « d’état » à une communication qui passe par eux, on parle de « stateless » ;
. en « virtual circuit » :
 il ne choisit pas lui même comment il fait sa commutation : déterminée par un autre élément du réseau, comme par
exemple lors de la mise en place d’un circuit virtuel.
 il connait tous les circuits passant par lui, grâce à un état associé à une communication ou connexion, « per-
connection-state ».
ResAvI
??
Commutation de circuit, « Circuit Switching » : un historique 139
Création d’un chemin « en dur »
Elle consiste à :
. réquisitionner, pour une communication, des tronçons de réseau pour assurer une liaison de
bout en bout ;
les tronçons sont liés les uns aux autres à chaque nœud de commutation ;
. libérer les tronçons quand la communication est terminée ;
les tronçons sont disponibles pour une nouvelle commutation.

La communication est une suite ininterrompue d’information envoyée sur le circuit.


ResAvI
??
Amélioration : Commutation de message 140

? Les données à transmettre sont découpées en messages ;


? chaque nœud de commutation sert de relais et peut héberger des messages lorsque les tronçons du réseau
sont engorgés.
Ce mode de commutation a pratiquement disparu au profit de la commutation de paquets, « packet switching ».
ResAvI
??
Amélioration : Partage des lignes de transmission entre circuits 141
!"#$%&'()%&*+,+-(')(./+0/1+$%.*/1+0/+)'(*1"%11%&*+/*)'/+2%'23%)1
Optimisation de l’utilisation du réseau
45)%"%1()%&*+0/+$63)%$%1()%&*+03+'#1/(3
Pour optimiser l’exploitation des lignes de transmission :
#$%&'$()*+*,-&'./-0(.$*)1)*$2'3-,'.*42-,'3-')&12,+*,,*$2'5
. on décompose le temps en unités de temps ;
! $2'367$+($,-'.-')-+(,'-2'%2*)6,'3-')-+(,'8

. chaque
! 791:%-'7*&7%*)'-0*,)-'(-2312)'%2-'3-'7-,'%2*)6,'3-')-+(,'8
circuit existe pendant une de ces unités de temps ;
Exemple Tous les 1/10 ème de seconde on change l’affectation des lignes de transmission.
!"#$%&#'(')*+,'&#,'-.-/0$#'1#',#2*31#'*3'24536#'&7588#2)5)9*3'1#,'&963#,'1#'):53,$9,,9*3;
Il est ainsi possible de partager les lignes entre 10 circuits !
<&'#,)'593,9'%*,,9=&#'1#'%5:)56#:'&#,'&963#,'#3):#'-/'29:2+9),'>
Il est
' souhaitable de partager les lignes de transmissions entre différents circuits :
? à;.'-,)',$%91*)1<.-'3-'(1&)14-&'.-,'.*42-,'3-')&12,+*,,*$2,'-2)&-'3*==6&-2),'7*&7%*),'5
l’instant T entre un circuit est réservé entre A et B (circuit jaune).
! >'./*2,)12)'?'-2)&-'%2'7*&7%*)'-,)'&6,-&@6'-2)&-'A'-)'B'C7*&7%*)'D1%2-EF'
A et B peuvent communiquer pendant un temps δt (exemple : δ = 1/10) ;
A'-)'B'(-%@-2)'7$++%2*:%-&'(-2312)'%2')-+(,'3)'C-0-+(.-'5'3'G'HIHJE'8
? à! l’instant T + δt les lignes de transmissions sont affectées à un autre circuit ;
>'./*2,)12)'?K3)'.-,'.*42-,'3-')&12,+*,,*$2,',$2)'1==-7)6-,'>'%2'1%)&-'7*&7%*)F
? pendant
! (-2312)'3)'*.'-,)'($,,*<.-'3/679124-&'%2'$%'(.%,*-%&,'+-,,14-,F
δt, il est possible d’échanger un ou plusieurs messages entre C et D.
!"#$%&'()(*(+,-.(/011$203

L
L

A B
A B

4(5631#7%17(8(9(:7
4(5631#7%17(8
M M

!"
ResAvI
??
Commutation de paquets, « Packet Switching » 142
!"##$%&%'"()*+),&-$+%.
Réduction de la taille des échanges suivant une même unité
/0*$1%'"()*+)2&)%&'22+)*+.)013&(4+.).$'5&(%)$(+)#6#+)$('%0
Chaque message est découpé en paquets
"#$%&'()'**$+'('*,(-./0&1.('2(,&-$+%.(
◦ de
! petite taille, souvent fixe ;
-'(1',3,'(,$344'5(*0&6'2,(738'(9(
! ($#07"%0.(10&:(&2(:.;$**')<4$+'(40:*(-'(4$(:./'1,302=
◦ éventuellement numérotés pour un ré-assemblage lors de la réception.
Multiplexage temporel des paquets
8$2%',2+9&4+)%+#,"7+2)*+.),&-$+%.
On >2(/0)<32'(4?&,343*$,302(-'(1$%&',*(',(4'(1$:,$+'(-'*(43+2'*(-'(,:$2*)3**302*(@
combine l’utilisation de paquets et le partage des lignes de transmissions :
! &2'(43+2'(-'(,:$2*)3**302(2?'*,(1$*($77'/,.'(A(&2(/3:/&3,(1$:,3/&43':(9
. une ligne de transmission n’est pas affectée à un circuit particulier ;
! /?'*,(4'(1$%&',(%&3(1"(%'+(%(2:'(;"7#&%'"((-?$11$:,'2$2/'(A(&2(/3:/&3,(1$:,3/&43':=

. c’est le paquet qui contient l’information d’appartenance à un circuit particulier.


!"#$"%&$'()%&$*&$+#,%-.(--(/%0$'&-$1,2"&+-$-&$-"(3&%+0$.4.&$-5('-$%5,11,#+(&%%&%+$1,-$,"$.4.&$
Sur.&--,)&=
une ligne de transmission, les paquets se suivent, même s’ils n’appartiennent pas au même message.

"
!"#$%&'()(*(+,-.(/011$203

B C

!! D
ResAvI
??
!"##$%&%'"()*+)#+,,&-+,)!"#$%$)!"##$%&%'"()*+).&/$+%,
Commutation de messages vs Commutation de paquets 143
#$%&'(%)*+,,+-,%)+
.,'$(/0((01$2
!"#$%&'()(*(+,-.(/011$203

!"
ResAvI
Circuit virtuel vs Routage 144
Circuit virtuel

Router Subnet
Sending host Receiving host

Sending process Virtual circuit Receiving process

Routage ou mode « datagramme »


Fig. 1-30. A virtual circuit.
Router Subnet
Sending host Receiving host
B D
A E

C
Packet Router C makes a
Sending process Receiving process
choice to forward
packets to E and
not to D
ResAvI
Commutation de paquet : le format du paquet 145

Composition du paquet en général


Il est de taille petite (de quelques dizaines à un ou deux millier d’octets) souvent fixe ou limitée.

Chaque paquet a un numéro d’ordre résultant du découpage des données initiales (message).

Chaque paquet est identifié :


. dans le cas du circuit virtuel : le paquet contient le numéro de circuit virtuel qu’il emprunte.
Cela permet au commutateur de choisir la ligne de sortie du paquet en fonction de son appar-
tenance à un circuit virtuel, comme sous ATM.

. dans le cas du datagramme : le paquet est autonome, il contient tout ce qui est nécessaire
pour réaliser son acheminement.
Cela permet à chaque routeur de choisir au mieux la ligne de sortie pour chaque paquet qu’il
reçoit (méthode du « best effort » d’IPv4).
ResAvI
??
6.2 Mode « Circuit virtuel » matériel : ATM, Asynchronous Transfer Mode 146
Réseau en mode circuit virtuel, « orienté connexion »
• Une communication relie deux interlocuteurs uniquement ;
• Une connexion préalable est nécessaire pour établir un chemin à la demande des deux interlocuteurs, on parle de
VC, « Virtual Circuit »;
Dans le cas de chemins permanents (entre deux sites par exemple) on parle de « Permanent Virtual Circuit ».
• Les données échangées sont de tailles fixes et petites, appelées « cellules » : 53 octets ;
Bytes 5 48

Header User data

• L’en-tête contient le « Virtual Path Identifier » et le « Virtual Channel Identitifer » :


 Le VCI désigne l’ensemble Fig. 1-31. An ATMpartageant
des cellules cell. le même circuit virtuel, chaque cellule est ainsi identifiée et
permet de savoir à quel chemin virtuel elle appartient
 Le VPI désigne un chemin entre deux interlocuteurs, ce chemin pouvant être composé de plusieurs circuits
virtuels, ce qui permet de faire du multiplexage (plusieurs communications entre deux même interlocuteurs).
Ce type de réseau est utilisé par les Opérateurs de Telecommunication (« Telco »), et fournissent le réseau support
à l’ADSL Asymetric Digital Subscriber Line qui permet le raccord des usagers par la ligne téléphonique.

Les avantages sont :


? Une connaissance parfaite des temps de transfert de données, ce qui garantit les communications « temps réel » ;
? Une absence de pertes de données (les commutateurs sont extrêmement fiable, mais coûteux) ;
? Une gigue, jitter, très basse : important pour des réseaux avec des services MicroSoft ;
? De la QoS, « Quality Of Service », avec garantie ;
? Du débit : Optical Carrier Speed OC-1 52 Mbps, OC-3 155 Mbps, OC-12 622 Mbps, OC-48 2.4 Gbps, OC-192 9.6
Gbps et OC-768 40 Gbps !
ResAvI
7 Les contraintes de gestion des communications 147
Gestion des erreurs
? il est possible d’avoir des erreurs :
 les lignes de transmission ne sont pas parfaites : modification des données entraînant une erreur ;
 le réseau interconnecté n’est pas parfait : paquet perdu ou détruit.
? choix parmi différentes méthodes de contrôle d’erreur entre l’émetteur et le récepteur :
 le récepteur doit être capable de déterminer si un paquet reçu est correct ou non ;
 le récepteur doit disposer d’un moyen d’indiquer à l’émetteur quels paquets ont été correctement reçus ou non
(accusé de réception, mécanisme d’attente, . . . ) ;
 le récepteur doit pouvoir gérer des paquets n’arrivant pas dans l’ordre ou manquant (gestion de buffer de réception,
que faire si un paquet manquant n’arrive toujours pas ?
 l’émetteur doit-il renvoyer tout de suite un paquet ou attendre une notification du récepteur ?
Contrôle de flux
Un émetteur rapide peut saturer un récepteur lent.
Il faut éviter que les paquets ne pouvant pas être traité par le récepteur ne reste et finissent par congestionner le réseau
global.
? asservissement entre récepteur et émetteur ;
? accord sur la vitesse de transmission ;
? intervention du routeur avec les bits « ECN » (ICMP « Source Quench », RFC6633 de mai 2012−→ deprecated).

Choix des chemins entre émetteur et récepteur


a. déterminer un chemin possible ;
b. améliorer ce chemin par le choix du moindre coût en fonction du trafic (métrique de débit par exemple) ;
c. tenir compte de souhaits utilisateurs comme choix du passage ou non par un pays suivant sa législation, le coût de
communication, le débit possible. . . (utilisation de lignes louées à une TELCO, satellite, etc).
ResAvI
7.1 Circuit virtuel vs datagramme 148

? Dans un réseau point-à-point en mode « circuit virtuel » :


 le débit obtenu est très proche de celui offert en théorie par le réseau physique ;
 lors de l’établissement du circuit virtuel, on peut connaitre le débit prévisible ;
 le débit peut être garanti.

? Dans un réseau point-à-point en mode « datagramme » :


 La capacité de la ligne de transmission est partagée avec les autres utilisateurs et ne peut être garantie :
On ne peut pas savoir ce que font les autres utilisateurs !

 Le contrôle de flux augmente l’utilisation du réseau et diminue son débit (envoi d’accusé de réception,
retransmission, etc) ;

 Des pertes de paquets peuvent se produire (si le réseau est en congestion) ;

 Peu ou pas de QoS :


? uniquement sur des parties contrôlées : réseau de la même entreprise, passage par un FAI, . . .
? en général, on ne peut prévoir à l’avance le chemin emprunté par un datagramme et donc son temps
d’acheminement ;
? même si le chemin emprunté reste le même, le taux d’occupation de certaines parties de ce chemin varie
suivant les usages des autres utilisateurs
ResAvI
Contrôle de flux vs Congestion
Ivan Marsic • Rutgers University 148 149

Flow control Congestion control

Sender
Sender

Feedback:
“Not much
Feedback:
getting through”
“Receiver
overflowing”
Receiver

Receiver

Figure 2-5:
? La congestion dépend deFlow
l’étatcontrol compared
du réseau to congestion
global, control.
qui tient compte de toutes les communications entre tous
les matériels connectés ;
"#$%&%'$%(!&%)(%&!'*+,-(!.+#',-$!)#+$*%&!'+,&.%!/+&!0+&%!(%$)"-'1!%2321!45$%6%#'!7889:!;%$%&'+#!<!
=)6"%!>??@:!A,&+'%!<!B+''!>?7?C2!
? le contrôle de flux ne s’applique que sur une communication et entre deux interlocuteurs.
ResAvI

D*%!/"&'$!$*&%%!'%30%#$'!)&%!'E%.")-!"#!$*)$!$*%F!(+!#+$!.+#$)"#!()$)!G"2%21!$*%F!*)6%!+#-F!)!*%)(%&H1!
)#(!$*%!5IJ!/-)3!"#!$*%!*%)(%&!"'!'%$!GK"3,&%!>L>H2!M#!$*"'!%N)0E-%1!$*%!.-"%#$!+//%&'!RcvWindow!O!
>?9P!QF$%'1!)#(!$*%!'%&6%&!+//%&'! RcvWindow!O!9?8R!QF$%'2!M#!+,&!.)'%1!$*%!.-"%#$!*)EE%#'!$+!Q%!
the transport can issue a “not ready” indicator to the sender, or source, of the flood (as
shown in Figure 1.10). This mechanism works kind of like a stoplight, signaling the sending
device to stop transmitting segment traffic to its overwhelmed peer. After the peer receiver
processes the segments already in its memory reservoir—its buffer—it sends out a “ready”
Mise en oeuvre du contrôle de flux ou « flow control »
transport indicator. When the machine waiting to transmit the rest of its datagrams
receives this “go” indictor, it resumes its transmission.
150
F I G U R E 1 .1 0
qu’un émetteur rapide sature un récepteur lent » =⇒ le récepteur contrôle l’émetteur.
Transmitting segments with flow control
« Éviter
? lorsque le récepteur reçoit une « rafale » ou un « burst » de paquets : buffé-
Sender Receiver risation, le problème est résolu si l’afflux de paquets tient dans le buffer ;
Transmit
? lorsque le récepteur reçoit trop de paquets et que son buffer est plein : risque
Buffer full
de perte de paquets
Not ready—
STOP!
 le récepteur transmets à l’émetteur un indicateur « Not ready » pour stop-
Segments
processed
per son émission ;
GO!  le récepteur transmets ensuite un indicateur « Go » pour autoriser de nou-
veau l’émetteur ;
Transmit

In fundamental, reliable, connection-oriented data transfer, datagrams are delivered to


Exemple, le « Flow control » en technologie Ethernet :
the receiving host in exactly the same sequence they’re transmitted—and the transmission
fails if this order is breached! If any data segments are lost, duplicated, or damaged along
. « Half Duplex » : contrôle de flux implicite :
the way, a failure will occur. This problem is solved by having the receiving host acknowl-
edge that it has received each and every data segment.
 CSMA/CD contrôle de flux uniquement du point de vue du support partagé :
A service is considered connection-oriented if it has the following characteristics:
u A virtual circuit is set up (e.g., a three-way handshake).
u It uses sequencing. ? à la détection d’une collision attente d’un slot de temps choisi aléatoirement dans un intervalle agrandi à
u It uses acknowledgments. chaque collision (limité à 210 )
u It uses flow control.
? erreur sur l’émetteur au 16 ème essai (le récepteur ne détecte rien. . . bien sûr) ;
? Sur un switch : pour freiner un émetteur : créer des collisions, faire croire que le support est occupé ;
The types of flow control are buffering, windowing, and congestion
avoidance.

. « Full Duplex » : contrôle de flux explicite :


 utilisation de « trame de pause » :
? envoyé par le récepteur à l’émetteur pour le stopper ;
? contient un paramètre indiquant le temps d’attente avant d’envoyer de nouvelles trames ;
? une nouvelle trame de pause avec un temps d’attente nul pour déclencher l’émetteur.
ResAvI
7.4 ERROR CONTROL-DETECTION AND CORRECTION

Error Control
8 Contrôle d’erreur Error control refers to mechanisms to correct and detect errors that occur in the
151
transmission of frames. The model that we will use, can shown in Figure 7.5. As before, data
Le contrôle d’erreur sur une ligne de transmission
are sent as a sequence of frames:
Les « trames » sont envoyées de l’émetteur vers
le récepteur en séquence :
. elles peuvent être retardées par le support de
transmission ;
. elles peuvent être perdues : la trame est abî-
mée par des erreurs au point qu’on ne sache
plus que c’était une trame ;
. elles peuvent être endommagées : seuls quelques
bits ont été altérés mais la trame reste recon-
naissable.

Les techniques de contrôle d’erreur Fig. 7.5 Model of frame transmission

◦ la détection d’erreur : comment savoir si une erreur s’est produite. . .

◦ les acquittements positifs : le récepteur envoie un acquittement pour chaque trame reçue sans erreur ;

◦ la retransmission après expiration d’un délai d’attente, timed-out : l’émetteur renvoie une trame après avoir attendu
un acquittement positif sans succès ;

◦ un acquittement négatif : le récepteur renvoie un acquittement pour chaque trame reçue avec des erreurs et force la
retransmission depuis l’émetteur.
Contrôle d’erreur 152
Définition et localisation
? Une « erreur simple » correspond à l’inversion de la valeur d’un bit constituant le message.
? Une erreur peut intervenir n’importe où : sur les informations de contrôle ou sur les données.
? Une erreur est généralement détectée par le récepteur, plus rarement par l’émetteur.
Exemple, suivant les technologies utilisées et les algorithmes de MAC, « Medium Access Control », associés :
 CSMA/CD, « Carrier Sense, Multiple Access, with Collision Detection » : l’émetteur « écoute » le support de transmis-
sion pour détecter si une transmission simultanée a lieu ce qui entraîne une collision, qui est elle-même détectée par
le récepteur (exemple : Ethernet).
 MACA, « Multiple Access with Collision Avoidance » : l’émetteur ne peut pas savoir si une collision a lieu au niveau
du récepteur. L’algorithme essaye de les « éviter » par des techniques prévisionnelles (exemple : WiFi).
Gestion des erreurs et couches réseau
. couche 4, « transport » : une erreur correspond à la perte d’un datagramme ou à un datagramme endommagé
 TCP :
? récepteur : il n’y a pas d’acquittement du segment perdu ou contenant une erreur ;
? émetteur : réémission automatique du segment après expiration du délai d’attente de l’acquittement.
 UDP : le datagramme perdu ou endommagé est ignoré ;

. couche 3, « réseau » : une erreur correspond à un datagramme endommagé


vérification de l’absence d’erreur dans l’en-tête du datagramme IP, qui sert au routage : dans le cas d’une erreur, le
datagramme est ignoré.

. couche 2, « liaison de données » : une erreur correspond à une trame endommagée


 le récepteur vérifie la trame reçue :
? si elle est correcte, elle est traitée suivant le protocole contenu dedans et transmise à la couche supérieure ;
? sinon elle est ignorée ;
ResAvI
Taux d’erreur 153
Erreurs de transmission au niveau du support physique
Des erreurs de transmission peuvent apparaitre suivant différents facteurs :
◦ le type de codage utilisé pour transmettre les bits d’information sur le support physique ;
◦ le débit de la liaison ;
◦ la nature du support physique.
Elles sont dues à des parasites, des micro-coupures. . .
Le taux d’erreur
Le taux d’erreur correspond au nombre de bits qui s’inversent sur le nombre de bits transmis.
Exemple : un taux d’erreur de 10−9 signifie qu’un bit sur un milliard s’inverse.
Dans le cas d’Ethernet 10Mbps, cela se traduit par une erreur toutes les 2 minutes.
Pour un taux d’erreur de 10-12 cela fait une erreur toutes 27heures.

Le taux d’erreurs varie suivant le type de ligne de transmission :


 10−3 à 10−5 dans le cas d’une ligne téléphonique (réseau commuté) ou sans fil ;
 10−9 dans le cas d’une transmission par paire torsadée ;
 10−7 à 10−8 dans le cas d’un câble coaxial ;
 10−10 à 10−12 dans le cas d’une fibre optique ;
 10−15 dans le cas d’un bus de PC.
Il est maximal dans le cas de transmission analogique, encore présente dans les réseaux à l’échelle d’une ville ou
d’une région.
Ces réseaux sont composés de :
. commutateurs (numérique) ;
. de lignes de transmission inter-urbaines (numérique) ;
. de boucles locales (essentiellement analogiques pour des raisons de coût).
ResAvI
8.1 Code de détection et correction d’erreurs 154
Erreurs isolées ou « par rafale »
Dans le cas de la transmission sans fil, par exemple, les erreurs peuvent arrivées par rafale, et non de manière
isolée.
Rafale vs isolée : Exemple de technologie : l’information est transmise sous formes de blocs successifs et la
taille des blocs de données transmis est proche du taux d’erreur.
 dans le cas d’erreurs isolées, il y a un risque que la plupart des blocs échangés contiennent
une erreur ;
 dans la cas d’erreurs par rafale, ce risque diminue.
En effet, il peut arriver qu’un seul bloc soit affecté.
L’inconvénient des erreurs en rafale, est qu’elles sont plus difficiles à détecter.

Notion de codes correcteurs et de codes détecteur d’erreurs


Pour pouvoir déterminer si une erreur s’est glissée dans une transmission, il est nécessaire d’ajouter une infor-
mation supplémentaire.
Cette information permettra lors de la réception de gérer la présence d’erreur.
Il existe deux stratégies possibles :
a. Ajouter suffisamment d’information pour que le récepteur soit capable de corriger les erreurs à partir des
données reçues.
Dans ce cas là, on parlera de « correction d’erreur ».
b. Ajouter le minimum d’information pour que le récepteur détecte une erreur et demande la retransmission
des blocs de données.
Dans ce cas là, on parlera de « détection d’erreur ».
ResAvI
connections is that the bit error rate on a 64 Kbps channel should be less than 10 on
least 90% of observed 1 minute intervals. Suppose now that we have the rather modest us
requirement that at most one frame with an undetected bit error should occur per day o
a continuously used 64 Kbps channel, and let us assume a frame length of 1000 bits. Th
number of frames that can be transmitted in a day comes out to 5.529 ! 106, which yield
8.2 Détection d’erreur et Envoi/Réception des données a desired frame error rate of P2 = 1/(5.529 ! 106) = 0.18 ! 10–6. But, if we assume
155 a valu
of Pb of 10–6, then P1 = (0.999999)1000 = 0.999 and, therefore, P2 = 10–3, which is about thr
Mécanisme général pour détecter des erreurs de transmission
orders of magnitude too large to meet our requirement.

. Au niveau de l’émetteur :
 l’émetteur ajoute des données de contrôle aux données
à émettre.
Ces données de contrôles sont déterminées ou calculées
en fonction des données à émettre suivant une fonction
f , appelée « fonction de code détecteur d’erreur ».
Cette fonction est souvent associée à la technologie de
transmission, et surtout, elle doit être connue du récep-
teur.
 lors de la transmission effective, l’émetteur envoie les
données suivies des données de contrôle, appelées sur
le schéma E , ou « code de détection d’erreur ». Fig. 7.7 Error detection

This is the kind of result that motivates the use of error-detection techniques. All
these techniques operate on the following principle which is shown in Figure 7.7. For a give
. Au niveau du récepteur : frame of bits, additional bits that constitute an error-detecting code are added by th
 le récepteur reçoit les données et les données contrôle, E
detransmitter. This
; code is calculated as a function of the other transmitted bits. The receiv
performs the same calculation and compares the two results. A detected error occurs if an

 il calcule avec la même fonction f que celle utilisée par l’émetteur, ses propres données de contrôle ;

 il compare ses données de contrôle à celles reçues :

Si elles sont différentes alors il y a eu une erreur de transmission.


ResAvI
8.3 Caractéristique des code détecteur d’erreur : distance de Hamming 156
Définition du bloc de données transmis
Le bloc de données transmis est une séquence de n bits, décomposé en :
◦ m bits de données (les données à transmettre)
◦ k bits de contrôle (n = m + k ).
Une erreur se caractérise par l’inversion d’un bit dans les n bits transmis (dans les bits de données ou de contrôle).

Notion de « mot de code »


L’association des m bits de données et des k bits de contrôle est appelée un « mot de code ».
En effet, il existe :
◦ 2m possibilités pour la séquence de m bits de données. On peut transmettre n’importe quelle donnée.
◦ moins de 2k possibilités pour les bits de contrôle. Toutes les valeurs ne sont pas autorisées !
Pourquoi ? Cela dépend du code de détection d’erreurs utilisé !

Distance de Hamming
Le nombre de bits de différence entre deux séquences de n bits (celle transmise et celle reçue par exemple) est appelée
« distance de Hamming ».
Exemple : la séquence 10001001 et 10110001 sont différentes de 3 bits,
soit une distance de Hamming de 3.
Il est possible de calculer cette distance à l’aide d’un « ou exclusif » et de compter le nombre de bits à 1. Sur l’exemple
précédent : 10001001 xor 10110001 = 00111000 soient 3 bits à 1.

Cette distance correspond également au nombre d’erreurs simples nécessaires pour passer d’une séquence à l’autre
(le nombre de bit inversé entre les deux séquences).
ResAvI
8.4 Distance de Hamming d’un code détecteur d’erreur 157
Distance de Hamming d’un code
Ces codes de détection, ou de correction d’erreur, sont déterminés à partir d’un algorithme appliqué sur les
données appelé « code ».

Il est possible de caractériser le « code » en calculant sa distance de Hamming.

Pour cela il faut :


a. déterminer l’ensemble des « mots de code » possibles, c-à-d :
 construire l’ensemble des 2m possibilités de combinaison de bits pour les données ;
 appliquer l’algorithme sur chaque combinaison pour obtenir un « mot de code » (l’association des m bits
de données au k bits de contrôle) ;
 construire l’ensemble des 2m « mots de code » ;

b. pour chaque paire de « mot de code » possible, déterminer la distance de Hamming qui les sépare ;

c. sélectionner la distance de Hamming minimale calculée.


Cette distance de Hamming minimale est appelée distance de Hamming du code complet.

Elle indique le nombre d’erreurs maximales que le code peut détecter ou corriger.
ResAvI
8.5 Exemples de code 158

Distance de Hamming du code suivant


 0000000000 ;  0000011111 ;
 1111111111 ;  1111100000.

À quels informations utilisateurs on peut associer ce code ?

Est-il efficace ?
ResAvI
8.6 Détection ou Correction ? 159
Notion de détection et de correction d’erreurs
. La détection d’une erreur consiste à savoir si un bloc d’information (bits de données + bits de contrôle) correspond ou
non à un « mot de code » :
 si le bloc reçu n’est pas un « mot de code » alors il y a eu une ou plusieurs erreurs de transmission.
. La correction d’erreur consiste, une fois la détection d’erreur réalisée, à chercher le « mot de code » originellement transmis
qui a subit ces erreurs, c-à-d. :
 le « mot de code » qui se rapproche le plus du bloc d’information reçu.
Il faut alors que le nombre d’erreurs simples subies soit inférieur à un seuil !

Nombre d’erreurs gérables par un code de détection ou de correction


Ce nombre dépend de la distance de Hamming du code complet :
◦ une erreur correspond à la réception d’un bloc d’information qui n’est pas un « mot de code » ;
◦ pour qu’un « mot de code » transmis soit reçu comme n’étant plus un « mot de code », il faut qu’il ait subit moins d’erreurs
simples (inversion de bits) que la distance de Hamming qui le sépare d’un autre « mot de code ».
Sinon, il deviendrait un autre « mot de code » et rien ne permettrait de dire qu’il y a eu erreur de transmission.

Autrement dit
◦ d est la distance de Hamming du code complet, c-à-d la plus petite distance séparant deux « mots de code » ;
◦ le « mot de code » transmis subit p erreurs simples :
 Si p < d le « mot de code » n’a pas franchi la distance qui le sépare d’un autre « mot de code », il n’a pas pu devenir un
autre « mot de code » =⇒ Le récepteur détecte une erreur et peut éventuellement la corriger !
 Si p ≥ d le « mot de code » a franchi la distance qui le sépare d’un autre « mot de code », alors il a pu devenir :
? un autre « mot de code » donc plus d’erreur détectable avec p = d !
? un autre « mot de code » puis à partir de ce « mot de code » subir de nouvelles modifications vers autre chose qu’un
« mot de code » (ou pas) d’où plus de correction d’erreur possible avec p > d !
ResAvI
Quel code pour faire de la Correction et de la Détection ? 160
Distance de Hamming nécessaire
Lors d’une transmission, le bloc d’information (bits de données + bits de contrôle) est susceptible de subir p erreurs simples
(c-à-d p inversion de bits) suivant le taux d’erreurs de la ligne de transmission.

La distance de Hamming nécessaire pour un code pour gérer ces p erreurs est :
◦ p + 1 si on veut pouvoir détecter la présence d’erreurs.
Si les « mots de code » ont une distance de Hamming minimale de p + 1 entre eux, alors il est impossible qu’un « mot de
code » subissant p inversions ou erreurs se transforme en un autre « mot de code ».
◦ 2p + 1 si on veut pouvoir corriger la présence d’erreurs.
Dans ce cas là, on veut pouvoir retrouver le « mot de code » original, c-à-d celui qui se rapproche le plus du bloc d’information
reçu.

Le « mot de code » recherché est celui qui est :


? le plus proche, c-à-d situé à une distance de Hamming inférieure ou égale au nombre d’erreurs subies p (une inversion éloigne
du « mot de code » original) ;
? unique ! Il ne faut pas que l’on soit proche de deux « mots de code » simultanément.

Pour pouvoir faire de la correction, il faut que la distance de Hamming du code soit supérieure ou égale à 2p + 1 !
ResAvI
8.7 Exemple de code : le contrôle de parité 161
Le controle de parité
L’algorithme se décrit de la manière suivante :
. À l’émission :
 pour chaque séquence de i bits (i valant généralement 7 ou 8) on associe un bit de parité ;
 la valeur de ce bit de parité est choisie de telle manière que le nombre de bits à 1 dans la séquence des (i + 1) bits
soient toujours pair.

. À la réception :
 on fait la somme des bits valant 1 de la séquence des i + 1 bits reçus ;
 si la somme est paire alors on considère qu’il n’y a pas eu d’erreur de transmission ;
 si la somme est impaire alors il y a eut erreur de transmission et la séquence doit être retransmise.

Exemple : soit la séquence sur 7 bits 1100010 la somme est de 3 bits à 1,


la séquence transmise est 11000101
soit la séquence sur 7 bits 0100100
la séquence transmise est 01001000

Limitation de ce code de détection d’erreur


La distance de Hamming de ce code de détection d’erreur est de 2.
Il faut en effet deux erreurs simples (inversion de bit) pour passer d’un « mot de code » à un autre.

Ce code ne peut donc détecter qu’une seule erreur simple !


De plus, si un nombre pair d’erreurs simples survient, il est incapable de détecter une erreur !
ResAvI
8.8 Correction des erreurs : combien de bits sont suffisants ? 162
Nombre de bits nécessaires pour corriger une erreur
Pour transmettre m bits d’information, combien faut-il de bits de contrôle pour pouvoir corriger en cas d’erreur
le bloc d’information lors de la réception :
a. on transmet un « mot de code » contenant n bits, ce mot étant composé de m bits de données et de k bits de
contrôle n = m + k
b. pour les 2m combinaisons possibles pour les données à transmettre, on peut associer n bloc d’information
qui résultent chacun de la modification d’un bit du « mot de code » original.
L’ensemble de ces n blocs d’information sont situés à une distance de Hamming de 1.
c. on peut donc calculer qu’il y a au moins 2m (n+1) blocs d’information possible : les 2m combinaisons possibles
multiplié par (n + 1), c-à-d le « mot de code » plus ses n modifications ;
d. on sait que le nombre maximal de combinaisons possibles pour le bloc d’information est 2n ;

e. on obtient la relation suivante : 2m (n + 1) ≤ 2n

f. en utilisant la relation n = m + k , on obtient finalement :


2m (m + k + 1) ≤ 2m+k , d’où (m + k + 1) ≤ 2k .
À l’aide de cette inégalité, on peut avoir une idée du nombre minimal de bits de contrôle nécessaires pour
que l’erreur simple soit corrigée.

Exemple : m = 7 alors 8 + k ≤ 2k ce qui donne k = 4 car 8 + 4 ≤ 24


m = 10 alors 11 + k ≤ 2k ce qui donne k = 4 car 11 + 4 ≤ 24
m = 100 alors 101 + k ≤ 2k ce qui donne k = 7 car 101 + 7 ≤ 27
m = 1000 alors k = 10 car 1001 + 10 ≤ 210
ResAvI
8.9 Un code correcteur optimal pour une erreur simple 163
Construction d’un code de correction d’erreur par la méthode de Hamming
On considère une séquence de bits de données.
Exemple : des caractères ASCII sur 7bits,
? il faut 4 bits de contrôle ;
? les « mots de code » seront des séquences de 11 bits.
Pour cette séquence de bits :
a. on numérote de gauche à droite la séquence de bits, en partant du rang 1 ;
b. on réserve les bits ayant un rang correspondant à une puissance de 2 aux bits de contrôle (rang 1, 2, 4, 8, 16. . . ) ;
c. on réserve les autres bits de rang (3, 5, 6, 7, 9. . . ) aux bits de données.
Exemple : a vaut 1001000, il s’inscrit dans le « mot de code » en se répartissant sur les bits de rang réservés aux
données, soit xx1x001x000 (les x sont les bits réservés aux contrôle)

La valeur d’un bit de contrôle est choisie de manière à ce qu’elle vérifie la parité d’une séquence de bits.

Cette séquence de bits est déterminée de la manière suivante :


. pour chaque rang de bit (contrôle ou données), on décompose ce rang en somme de puissance de 2.
Exemple : 1 = 1, 2 = 2, 3 = 1 + 2, 4 = 4, 5 = 1 + 4, 6 = 2 + 4, 7 = 1 + 2 + 4, 8 = 8, 9 = 1 + 8, 10 = 2 + 8, 11 = 1 + 2 + 8.

. à partir de chaque décomposition obtenue, on détermine ce que chaque bit de contrôle vérifie, c-à-d quelle séquence
de bits il vérifie.

Cette séquence de bits est obtenue en sélectionnant le rang pour lequel le bit de contrôle apparait dans la décomposition.
ResAvI
La méthode de Hamming sur un exemple 164
Exemple de calcul de la valeur des bits de contrôle
a vaut 1001000, soit xx1x001x000 (les x sont les bits réservés aux contrôle)
? le bit de contrôle de rang 8 apparait dans la décomposition des rangs 8, 9, 10 et 11.
Pour le codage de a, on obtient xx1x001 0 000
? le bit de contrôle de rang 4 apparait dans la décomposition des rangs 4, 5, 6, 7.
Pour le codage de a, on obtient xx1 1 0010000
? le bit de contrôle de rang 2 apparait dans la décomposition des rangs 2, 3, 6, 7, 10 et 11.
Pour le codage de a, on obtient x 0 110010000
? le bit de contrôle de rang 1 apparait dans la décomposition des rangs 1, 3, 5, 7, 9, et 11.
Pour le codage de a, on obtient 0 0110010000.
Vérification et correction lors de la réception
a. le récepteur vérifie un bit de contrôle de rang k ;
b. si le bit est incorrect, il mémorise cette valeur k dans un compteur ;
c. le récepteur passe au bit de contrôle de rang suivant 2k ;
d. si de nouveau le bit est incorrect alors il additionne la valeur 2k au compteur.
e. etc.
Si à la fin du traitement de tous les bits de contrôle, le compteur n’est pas vide, alors il contient le rang du bit qui a été modifié
et on peut alors corriger la séquence.
Exemple :
. codage de a 00110010000, glissons une erreur : 00 0 10010000
. quand le récepteur vérifie :
 le bit de contrôle de rang 1 est incorrect ! On met son rang dans le compteur ! soit compteur = 1.
 le bit de contrôle de rang 2 est incorrect ! On ajoute son rang, compteur = 3.
 le bit de contrôle de rang 4 est correct.
 le bit de contrôle de rang 8 est correct.
. L’erreur s’est donc glissée dans le bit ayant pour rang la valeur du compteur 3 !
ResAvI
8.10 Le cas des erreurs en rafale 165
Utilisation de la méthode de correction d’erreur de Hamming
Il est possible d’utiliser la méthode de Hamming pour la correction des erreurs en rafale (altération d’une sé-
quence de bits).
On considère une séquence de caractères (ici, « Hamming Code »).
Cette séquence de caractères est interprétée comme une séquence de valeurs en ASCII.
Pour chaque séquence de bits de chacun de ces caractères, on calcule la séquence binaire avec la méthode de
Hamming.
On obtient alors une table de k lignes, pour k caractères encodés.

Cette table est transmise ensuite colonne par colonne.

Si une rafale d’au plus k bits se produit, alors au plus k


lignes de la table sont altérées (1 bit erroné).

En recomposant la table à l’arrivée, il est alors possible


de corriger la table s’il y a eu des erreurs.
ResAvI
8.11 Autre code de détection d’erreur : le CRC, « Cyclic Redundancy Check » 166

Le CRC :
◦ utilise une valeur de vérification : « check » ;
◦ introduit de la redondance, « redundancy » (augmentation de la taille du message sans ajout d’information) ;
◦ se base sur l’utilisation des codes cycliques, « cyclic codes » ;
◦ est facile à implémenter de manière matérielle (intégration dans la carte réseau pour du « offload ») ;
◦ est bien adapter à détecter des erreurs causées par du bruit lors de la transmission (erreurs en rafale).
Présentation de l’algorithme
? pour m-bits de données, l’émetteur calcule une séquence de k -bits appelées FCS, « Frame Check Sequence » ;
? l’émetteur transmet ensuite une trame composée des m + k bits ;
? ces m + k bits sont divisibles par un nombre de valeur prédeterminée connue de l’émetteur et du récepteur ;
? lorsque le récepteur reçoit la trame composée des m + k bits, il divise ces m + k bits par le même nombre :
 s’il n’y a pas de reste alors la trame n’a pas subie d’erreur !
Pour comprendre l’opérations de division utilisée, il est nécessaire de considérer l’arithmétique modulo 2.

Arithmétique modulo 2
Cette arithmétique utilise des opérations binaires sans retenue : l’addition et la 1111 11001
soustraction correspondent à la même opération : le xor, c-à-d le « ou exclusif » + 1010 * 11
=⇒ ---- -----
0101 11001
11001
------
101011

Règle : la division de deux séquences binaires est possible si et seulement si elles sont de même longueur.
Le reste est toujours de taille inférieure, en nombre de bits, à la taille du diviseur.
ResAvI
8.12 Les codes polynomiaux 167
Codes de détection d’erreurs à redondance cyclique (CRC)
Ce sont des codes « polynomiaux » : ils ajoutent des bits dont les valeurs sont des combinaisons linéaires des bits de
l’information à transmettre.
La séquence de bits b1 , b2 , b3 . . . bn est considérée comme un polynôme P (x) :
P (x) = b1 xn−1 + b2 xn−2 + b3 xn−3 + . . . bn . Exemple : 1001 est équivalent à P (x) = x3 + 1
Le degré d’un polynôme correspond à celui de son terme le plus élevé. Exemple : P (x) = x3 + 1, deg(P ) = 3.

À l’émission, on réalise la division par un polynôme générateur G de degré r (contenant r + 1 termes) :


a. on considère le polynôme M , correspondant au message à transmettre ;
b. on calcule xr ∗ M , le décalage à gauche du message de r = deg(G) positions (taille maximale du reste de la
division) ;
c. on calcule la division de xr ∗ M par G : on obtient alors les polynômes Q, polynôme quotient, et R, polynôme reste
de la division : xr ∗ M (x) = Q(x) ∗ G(x) + R(x) le polynôme R constitue la valeur du CRC.
r
d. on transmets x ∗ M (x) + R(x).

À la réception, on réalise la division par le même polynôme générateur G :


a. on divise le polynôme M 0 reçu (informations + CRC) par le polynôme générateur G :
 si le reste obtenu est non nul, alors une erreur s’est produite !
 si le reste obtenu est nul alors on est sûr qu’il n’y a pas eu d’erreur de transmission.
Dans le cas de la norme V41 du CCITT, pour une longueur de données de 260, 500, 980 ou 3860 bits, la probabilité
de bonne réception est de 99,975% pour le polynôme générateur x16 + x12 + x5 + 1.

Pour pouvoir employer cette méthode de détection des erreurs, l’émetteur et le récepteur doivent se mettre d’accord
sur le polynôme générateur G(x) à employer =⇒ il est associé à la technologie et intégré dans la carte réseau.
ResAvI
Codes polynomiaux 168

Pour la détection d’erreur à la réception, on divise de manière binaire la séquence de bits reçues par le même polynôme
générateur. Si le reste de la division est nulle, pas d’erreur de transmission.
Exemple : 1OO11O1O1111 divisé par 11001 donne 00000 !
Propriétés des codes polynomiaux
Soient les polynômes :
 M (x) : les données à transmettre ;  M 0 (x) : la trame reçue qui peut ou non contenir des er-
 T (x) : la trame à transmettre (les données + le FCS, reurs ;
« Frame check sequence ») ;  E(x) : les erreurs qui ont pu se produire.

. Lors de la transmission, l’émetteur calcule :


 xr M (x) = Q(x)G(x) + R(x)
 xr M (x) − R(x), ce polynôme est divisible par G(x), c-à-d que le reste de la division par G(x) est nul
Comme l’addition et la soustraction sont équivalente en base 2 sans retenue, on a que :
xr M (x) + R(x) = G(x)Q(x) = T (x).
. si des erreurs se sont produites lors de la transmission, alors M 0 (x) reçu est égale à T (x) + E(x), où E(x) est le
polynôme correspondant aux erreurs de transmission, c-à-d que dans E(x) une puissance de x correspond à l’inversion
du bit de même rang dans M (x).

. Lors de la réception, le récepteur calcule le reste de M 0 (x)/G(x), ou plutôt de (T (x) + E(x))/G(x) :


 Si T (x) est divisible par G(x), alors le récepteur calcule le reste de E(x)/G(x).
 Si le reste est non nul, alors E(x) est non nul, il y a donc eu des erreurs !
 Si le reste est nul, alors cela veut dire que soit E(x) est nul soit il est multiple de G(x) et que l’on ne peut pas
détecter des erreurs. . .
Mais, si l’on choisit correctement G(x) en fonction de la nature physique du support de transmission, on minimise
les risques !
ResAvI
8.13 Code polynomiaux : exemple d’application 169

Soient :
◦ M = 1010001101 sur 10 bits ;
◦ G = 110101 sur 6 bits ;
◦ FCS, « Frame check sequence », ou R sur 5 bits (rappel : la division de deux séquences binaires est possible ssi elles
sont de même longueur, donc le reste est au plus de dimension longeur(G) − 1).
Calcul du reste 182 COMPUTER NETWORK

a. on multiplie M par 25 , ce qui


3. réalise un décalage
This product à gauche
is divided by P.de 5 bits (on fait de la place pour le FCS) ;
b. on divise 101000110100000!par 110101 :
Equation
1 1 0 0 1 0 1 0 0 1 1 " Q

P ! 1 1 0 1 0 1 1 0 1 0 0 0 1 1 0 1 0 0 0 0 0 " 2n M
1 1 0 1 0 1
1 1 1 0 1 1
1 1 0 1 0 1
1 1 1 0 1 0
1 1 0 1 0 1
1 1 1 1 1 0
1 1 0 1 0 1
1 0 1 1 0 0
1 1 0 1 0 1
1 1 0 0 1 0
1 1 0 1 0 1
0 1 1 1 0 " R
4. The
c. on ajoute le reste R = 01110 à M∗2 5 , ce qui(R
remainder = 01110)
donne is added to 2nM to
: 101000110101110 lesgive T = 101000110101110,
données transmises. which is
ResAvI

transmitted
5. If there are no errors, the receiver receives T intact. The received frame is divided
by P.
1 1 0 1 0 1
0 1 1 1 0 " R
4. The remainder (R = 01110) is added to 2nM to give T = 101000110101110, which is
Code transmittedd’application
polynomiaux : exemple 170
5. If there are no errors, the receiver receives T intact. The received frame is divided
À la réception by P.
Equation
a. On divise les données reçues!par le polynôme générateur G = 110101 :
1 1 0 0 1 0 1 0 0 1 1 " Q

P ! 1 1 0 1 0 1 1 0 1 0 0 0 1 1 0 1 0 1 1 1 0 " 2n M + R
1 1 0 1 0 1
1 1 1 0 1 1
1 1 0 1 0 1
1 1 1 0 1 0
1 1 0 1 0 1
1 1 1 1 1 0
1 1 0 1 0 1
1 0 1 1 1 1
1 1 0 1 0 1
1 1 0 1 0 1
1 1 0 1 0 1
0 0 0 0 0 0 " R

b. on trouve que le reste vaut 0, il n’y a donc pas eu d’erreur lors de la transmission !
ResAvI
8.14 Les codes polynomiaux : exemple de codes utilisés 171
Exemples de polynômes générateurs
◦ la méthode du bit de parité correspond à l’utilisation du polynôme générateur x + 1 ;
◦ CRC-CCITT = x16 + x12 + x5 + 1
◦ CRC-12 = x12 + x11 + x3 + x2 + x + 1 pour un codage d’information sur 6bits,
◦ CRC-16 = x16 +x15 +x2 +1 pour un codage des informations sur 8 bits, utilisé par exemple dans le protocole
HDLC.

Dans le cas d’Ethernet, on utilise le CRC-32 :


G(x) = x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + 1.

Propriétés des codes polynômiaux CRC-16 et CRC-CCITT


Ils permettent de détecter les erreurs simples et doubles, mais également les erreurs en rafale de longueur
inférieur ou égale à 16.
Pour des erreurs en rafale supérieur ou égale à 17, la probabilité de détection est de 99,997% !
ResAvI
??
8.15 Capacité des codes polynomiaux 172

Pour pouvoir détecter une erreur il faut que le polynôme représentant cette erreur ne soit pas divisible par le
polynôme générateur.
Ou que le polynôme d’erreur ne soit pas un multiple du polynôme générateur.

Un code polynomial permet de :


. Détecter toutes les erreurs simples ? Oui, si. . .
 Le polynôme d’erreur est de la forme xi avec 1 < i < n (n le nombre de bits des données) ;
 Il faut donc que le polynôme générateur ne soit pas réduit à un seul terme (1 ou x ou xj ).
. Détecter les erreurs doubles ? Oui, si. . .
 Le polynôme générateur possède un facteur irréductible de 3 termes, comme par exemple : G(x) = x3 +
x+1
Autrement dit, il est composé au minimum de 3 termes.

. Détecter un nombre impair d’erreur ? Oui si. . .


 le polynôme générateur contient le facteur (x + 1)
. Détecter des rafales d’erreurs ? Oui. . .
 un code générateur de degré k , permet de détecter toutes les erreurs en rafale de longueur inférieure à k .
ResAvI
The architecture of this circuit is best explained by first considering an example, which
is illustrated in Figure 7.8. In this example, we have to use
Message M = 1010001101 M(X) = X9 + X7 + X3 + X2 + 1
Divisor P = 110101 P(X) = X5 + X4 + X2 + 1

8.16 Implémentation
which were used earlier in the discussion. 173
Part (a) of the figure shows the register implementation. The process begins with the
shiftIlregister
est possible d’implémenter
cleared (all de or
zeros). The message, manière
dividend,efficace les CRC
is then entered, : at a time,
one bit
starting with the most significant bit.
Exemple : M=1010001101, M (X) = x + x + x + x + 1 et G = 110101, G(X) = x5 + x4 + x2 + 1
9 7 3 2

. il y a autant de registres que la taille du FCS, ou le


degré de G ;
. il y a un « gate » pour chaque terme présent dans
G, qui réalise un xor.

Ce qui donne : DATA LINK LAYER 185


Fig. 7.8 (a) Shift-Register implementation
C4 C3 C2 C1 C0 C4 ! C3 C4 ! C1 C4 ! Input Input

Initial 0 0 0 0 0 0 0 1 1 "
Step 1 0 0 0 0 1 0 0 0 0 #
#
Step 2 0 0 0 1 0 0 1 1 1 # Message
Step 3 0 0 1 0 1 0 0 0 0 # to be
#
Step 4 0 1 0 1 0 1 1 0 0 # sent
$
Step 5 0 1 1 0 0 1 1 1 0 #
Step 6 1 1 1 0 1 0 1 0 1 #
#
Step 7 0 1 1 1 0 1 1 1 1 #
Step 8 1 1 1 0 1 0 1 1 0 #
#%
Step 9 0 1 1 1 1 1 1 1 1
Step 10 1 1 1 1 1 0 0 1 0 " Five
Step 11 0 1 0 1 1 1 1 0 0 # zeros
#
Step 12 1 0 1 1 0 1 0 1 0 # added
$
Step 13 1 1 0 0 1 0 1 1 0 #
#
Step 14 0 0 1 1 1 0 1 0 0 #
%
Step 15 0 1 1 1 0 1 1 0 —

Fig. 7.8 (b) Circuit with shift registers for dividing by polynomial X5 + X4 + X2 + 1
ResAvI

Part (b) is a table that shows the step-by-step operation as the input is applied one bit
at a time. Each row of the table shows the values currently stored in the five shift-register
elements. In addition, the row shows the values that appear at the outputs of the three
Quelques définitions utilisées dans la transmission numérique 174
Le BER, « Bit Error Rate »
N ombre de bits
BER = N ombre total de bits transmis mesuré pendant un intervalle de temps donné.

C’est une approximation de la probabilité d’erreur indiqué par le « Taux d’erreur » vu précédemment.

Le FEC, « Forward Error Checking »


Codage de l’information permettant au récepteur de corriger l’information reçue sans nécessiter de canal de
communication inverse vers l’émetteur (réception satellite par exemple) en ajoutant de l’information redondante
avec un ECC, « Error-Correcting Code ».

Exemple d’ECC utilisé :


◦ Hamming(7,4) : pour tout groupe de 4 bits, 3 bits de parités sont ajoutés d’où l’appellation (7,4) ;
C’est le codage que l’on a vu précédemment.
◦ Reed-Solomon : utilisé par exemple dans les CD-Roms, DVDs et disque dur (RAID 6) ;
◦ le codage (3,1) :
pour corriger une erreur simple : Triplet received Interpreted as
000 0 (error free)
001 0
010 0
100 0
111 1 (error free)
110 1
101 1
011 1
ResAvI
9 Protocole TCP, Transmission Control Protocol RFC 793 175

Du point de vue « Service » offert :


◦ service de transport fiable, en mode « connecté » ou « orienté connexion » :
 étapes d’initialisation, d’échanges et de terminaison ;
 garantie de remise des données au récepteur ;
 garantie de respect de l’ordre de ces données ;
◦ autorise la gestion des données en flots d’octets (flux, ou stream) ;
◦ échanges bidirectionnels simultanés (« Full duplex »).
Il offre un « mode connecté » simulé dans un réseau mode datagramme.
Du point de vue de la mise en œuvre
Une connexion correspond à :
? une paire de points ou d’extrémités de connexion ou « socket » :
 chaque extrémité de connexion correspond à un TSAP : (@IP, n◦ port) ;
 chaque connexion est identifiée par : [TSAP client(@IP client, n◦ port client), TSAP serveur(@IP serveur, n◦ port serveur)]
Il n’y a pas d’autre identifiant (pas de numéro de circuit virtuel).
? la création de deux flots de données inverses et indépendants : A → B et B ← A ;
? possibilité de terminer un flot dans un sens sans interrompre l’autre ;
? une mise en œuvre en deux étapes :
 une ouverture passive : elle accepte une connexion entrante ;
 une ouverture active : elle demande l’établissement de la connexion.
Mutliplexage de plusieurs communications grâce à la notion de numéro de port.
pef@solaris:~$ netstat -n –inet
Attention
Connexions Internet actives (sans serveurs) TCP ne permet pas :
Proto Recv-Q Send-Q Adresse locale Adresse distante Etat ◦ le multicasting (multi diffusion) ;
tcp 38 0 192.168.42.83:54598 107.20.249.140:443 CLOSE_WAIT
tcp 0 0 192.168.42.83:54760 199.47.217.147:80 ESTABLISHED
◦ le broadcasting (la diffusion générale).
ResAvI
The OSI Reference Model 21

Windows are used to control the amount of outstanding, unacknowledged


data segments.

In this simplified example, both the sending and receiving machines are workstations.
So, the size of the window controls how much information is transferred from one end
In reality, this is not done in simple, small numbers but in the amount of bytes that can
to the other. While some protocols quantify information by observing the number of pack-
be sent. Acheminement d’un flux de donnés découpé en segments numérotés
ets, TCP/IP measures it by counting the number of bytes. 176
As you can see in Figure 1.11, there are two window sizes—one set to 1 and one set to 3.
Le mécanisme defailsfenêtre
If a receiving host to receive all the bytes that it should acknowledge,
F I G U R E 1 .11 Windowing
the host can improve the communication session by decreasing the win-
dow size. ? ne pas attendre un acquittement avant de continuer à émettre ;
? optimiser le temps d’accès au réseau :
Acknowledgments
 la taille d’un paquet dépend de la technologie du réseau pas du récep-
Reliable data delivery ensures the integrity of a stream of data sent from one machine to the
other through a fully functional data link. It guarantees that the data won’t be duplicatedteur
or ;
lost. This is achieved through something called positive acknowledgment with retransmis-

sion—a technique that requires a receiving machine to communicate with the transmitting réseau est rapide (beaucoup plus rapide que lorsque la taille du pa-
le
source by sending an acknowledgment message back to the sender when it receives data. The
sender documents each segment it sends and waits for this acknowledgment before sending the
quet a été choisie) ;
next segment. When it sends a segment, the transmitting machine starts a timer and retrans- 
l’émetteur a remporté la compétition d’accès au support ;
mits if it expires before an acknowledgment is returned from the receiving end.
In Figure 1.12, the sending machine transmits segments 1, 2, and 3. The receiving node 
le réseau lui est alloué ;
acknowledges it has received them by requesting segment 4. When it receives the acknowl-

le temps d’allocation est supérieur au temps d’émission d’un paquet ;
edgment, the sender then transmits segments 4, 5, and 6. If segment 5 doesn’t make it to the
destination, the receiving node acknowledges that event with a request for the segment to ?
ne pas saturer le récepteur : le récepteur définit une taille de fenêtre ;
be resent. The sending machine will then resend the lost segment and wait for an acknowl-
edgment, which it must receive in order to move on to the transmission of segment 7.
When you’ve configured a window size of 1, the sending machine waits for an acknowl-
Le mécanisme d’acquittement positif avec retransmission
F I Gedgment
U R E 1for.1 each
2 Transport layer
data segment reliableindelivery
(measured bytes) it transmits before transmitting another.
If you’ve configured a window size of 3, it’s allowed to transmit three bytes of data before
an acknowledgment is received. ? garantie l’absence de perte et de duplication des segments ;
? le récepteur envoie un acquittement en retour à l’émetteur lorsqu’il reçoit
Sender Receiver

1 2 3 4 5 6 1 2 3 4 5 6
un segment ;
? l’émetteur :
Send 1
Send 2  envoie un segment et attend l’acquittement avant d’envoyer le suivant ;
Send 3  lors de l’envoi, un compte à rebours démarre : s’il expire avant la récep-
Ack 4
Send 4
tion de l’acquittement, le segment est renvoyé ;
Send 5 Connection lost! ? Si on combine avec le mécanisme de fenêtre :
Send 6
Ack 5
 l’émetteur envoie plusieurs segments suivant la taille de la fenêtre ;
Send 5  le récepteur envoie un acquittement demandant le segment suivant de
Ack 7
tous ceux de numéros consécutifs qu’il a bien reçu.
ResAvI
9.1 TCP : Segmentation 177
Segmentation
Les données transmises à TCP constituent un flot d’octets de longueur variable.
La transmission de ces données est bufférisée (mises dans un tampon) :
? les données courtes à envoyer et reçues sont bufférisée pour améliorer la communication :
 à l’envoi : améliorer le taux d’occupation du réseau ;
 à la réception : avertir/réveiller l’application que lorsqu’il y a un volume suffisant de données à traiter ;
? les données à envoyer, sont fractionnées en fragment de taille optimale pour TCP, appelés « segment » ;
Cette fragmentation peut être contrôlée ou indépendante de l’application.
? chaque segment est émis dans un datagramme IP :
From application: stream of bytes To application: stream of bytes
Application

Slice into
Concatenate to the byte stream
TCP segments
TCP TCP TCP TCP
OSI Layer 4/5: TCP hdr payload hdr payload

Packetize into Unwrap TCP segments


IP packets
IP TCP TCP IP TCP TCP
OSI Layer 3: IP hdr hdr payload hdr hdr payload

Network
Network

Du point de la programmation socket : application application


Les données de l’utilisateur passe au tra- writes data reads data
socket socket
vers de la socket et sont segmentées au- door door
TCP TCP
tomatiquement.
send buffer receive buffer
segment
ResAvI
Encapsulation du segment TCP 178
F I G U R E 1. 2 8 Data encapsulation
Pour généraliser le traitement des différentes couches, on parle de PDU, « Protocol Data Units ».

Application PDU

Presentation

Upper layer data Session

TCP header Upper layer data Transport Segment

IP header Data Network Packet

LLC header Data FCS


Data Link Frame

MAC header Data FCS

0101110101001000010 Physical Bits

Each segment is then handed to the Network layer for network addressing and routin
ResAvI

through the internetwork. Logical addressing (for example, IP) is used to get each segme
TCP : réémission & acquittement 179
Gestion des erreurs
TCP garantit l’arrivée des données, en cas de perte les deux extrémités sont prévenues :

? utilisation d’un mécanisme d’acquittement :


 lorsque la source S envoie un message Mi vers une destination D,
 S attend un acquittement Ai de D avant d’émettre le message Mi+1 .

? utilisation d’un mécanisme de réémission temporisée, timer ou compte à rebours :


 si l’acquittement Ai ne parvient pas à S ,
 S considère au bout d’un certain temps
que Mi est perdu et réémet Mi .

Dans la suite des transparents, le temps d’attente avant réémission automatique est appelé RTO, « Re-
transmission TimeOut », et il est calculé en fonction du RTT d’un segment (temps de transmission du
segment+temps de réception de l’acquittement).
ResAvI
TCP : la fenêtre glissante, sliding window 180
Contrôle de flux
TCP utilise un mécanisme de fenêtre pour faire du contrôle de flux :
Pourquoi ?
La technique basée sur l’acquittement simple pénalise les
performances en faisant baisser le taux d’occupation du
réseau :
 choisir la taille d’un segment adaptée à la MTU du réseau ;
 attendre la réception d’un acquittement avant d’émettre
un nouveau segment ;
 c-à-d l’envoi d’un seul segment par RTT !

Comment ?
La taille T de la fenêtre :
? correspond à une taille en octets et non à une taille en nombre de segments ;
? est variable au cours de la communication ;
? correspond à la capacité de la mémoire tampon de réception ;
? est défini pour chaque interlocuteur.
Une fenêtre de taille T autorise l’émission d’au plus n segments (dont la somme des tailles < T), sans attendre
l’acquittement de chaque segment envoyé, avant de ne plus pouvoir émettre.

Amélioration supplémentaire : acquitter plusieurs messages reçus en un seul acquittement.


On parle d’acquittement cumulatif ou d’acquittement retardés, « delayed ACKs ».
ResAvI
294 PART II Core Protocols
TCP : la fenêtre glissante vs bufférisation 181
Fenêtre glissante

Sliding Window Le récepteur contrôle :


− la taille de la fenêtre (> à un segment) :
plus petite ou plus grande suivant sa ca-
pacité de traitement ;
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
− l’acquittement des données reçues contigües :
il fait glisser la fenêtre.
L’émetteur est autorisé à envoyer de nou-
Data sent and Data sent and waiting Data to Data to veaux segments lorsque la fenêtre glisse.
acknowledged for acknowledgment be sent be sent
(Each integer represents a segment of
hundreds or thousands of bytes)

Bufférisation
FIGURE 11.5
TCP sliding window. Elle permet de :
Packet departs source 1 2 3 4 5 6 7 8  « lisser » le débit
en sortie ;
Flow Packet
Control andat Congestion
arrives buffer 1 Control
2 3 4 5 6 7 8  gérer les trous,
gaps.
When flow control is used as a form ofincongestion
Time buffer control for the whole network, the
Packet removed from buffer 1 2
network nodes themselves are the “receivers” and try to 3limit
4 5the
6 amount
7 8 of data that
senders dump into the network. Gap in playback
But now there is a problem.
0 How can
5 routers tell
10 the hosts using
15 TCP (which
20 is an
end-to-end protocol) that there is congestion Time on the
(sec)network? Routers are not sup-
posed to play around with the TCP headers in transit packets (routers have enough to
do), but they are allowed to play around with IP headers (and often have to).
ResAvI

Routers know when a network is congested (they are the first to know), so they can
Fig.fl5-31.
easily ip someSmoothing theand
bits in the IPv4 output streamofby
IPv6 headers thebuffering
packets theypackets.
route. These bits
are in the TOS (IPv4) and Flow (IPv6) fields, and the hosts can read these bits and react
Bufférisation vs Application 182

[ Sending Application ] [ Receiving Application ]

Increasing Increasing
Sent & Allowed to sequence num. Delivered to Gap in sequence num.
acked send application recv’d data

TCP TCP
sender’s receiver’s
byte stream byte stream

LastByteAcked LastByteSent NextByteExpected LastByteRecvd

FlightSize Buffered in RcvBuffer


(Buffered in send buffer)
? L’émetteur dispose d’un buffer d’envoi dans lequel il stocke les données envoyées par l’application (si le buffer est
plein, l’application est bloquée dans son ordre d’envoi) ;
? L’émetteur envoi des données entre le dernier octet acquitté, « LastByteAcked » et un octet, le « LastByteSent » (la
taille de l’envoi doit être inférieure à la taille de la fenêtre d’autorisation, indiquée par « Allowed to send ») ;
? On appelle les données transmises des « données en vol », « data in flight », c-à-d qu’elles sont en train de circuler
dans le réseau.
? Le récepteur dispose d’un buffer de réception dans lequel il range les données reçues depuis le réseau ;
? Le récepteur range les données qu’il reçoit dans le buffer aux emplacements indiqués par l’« offset » du segment
reçu : il peut y avoir des trous, « gap in received data ».
? Le récepteur ne transmet à l’application que les données sans trou, indiquées par le « NextByte Expected ». S’il n’y
a pas suffisamment de données, l’application est bloquée dans son ordre de réception.
ResAvI
??
TCP : fenêtre glissante 183
ResAvI
TCP : problème de la fenêtre stupide 184
Silly Window Syndrome

Observation Il faut des algorithmes empiriques pour gérer les mécanismes de contrôle
de TCP.
Solution de Clarke attendre que l’espace libre sur le récepteur soit suffisamment grand avant de
prévenir l ’émetteur...
ResAvI
TCP : cas d’exception 185
Transmission sans attente ou non bufférisées
? l’application peut demander que ses données soient transmises immédiatement même si le tampon
d’envoi n’est pas plein (traversée du tampon d’envoi).
Elles sont appelées données « poussées », Push, par exemple dans le cas des protocoles lignes par
lignes (SMTP par exemple).
? l’arrivée de ces données est notifiée sans attendre à l’application réceptrice (traversée du tampon de
réception).
Transmission de données urgentes et hors communication
Le protocole TCP permet l’envoi de contrôle et de données au travers de la même communication.
Ces données de contrôle :
? sont à prendre en compte immédiatement par l’application réceptrice Urgent ;
? ne correspondent pas à des données « normales » de la communication (des données de contrôle,
par exemple, comme celles utilisées pour avertir d’un problème sans nécessité d’établir une nouvelle
connexion pour les transmettre) ;
Elles sont appelées « Out of Band », elles génèrent un signal Unix sur l’application réceptrice.

Comment est-ce possible ?


En utilisant le réseau datagramme sous-jacent : les datagrammes arrivent en même temps, qu’ils
contiennent des données du flux ou bien des données « out-of-band » !
ResAvI
CHAPTER 11 Transmission Control Protocol 283
9.2 TCP : le format du segment 186
1 byte 1 byte 1 byte 1 byte ◦ Port source et destination :
Source Port Destination Port
 sur 16 bits
Sequence Number  identifie le processus associé et définie
H
e Acknowledgment Number
le TSAP.
a
d Header E E U A P R S F
◦ Sequence number :
e RESV C C R C S S Y I Window Size
r
Length N N G K H T N N  exprimé sur 32 bits,
TCP Checksum Urgent Pointer  déplacement ou offset en octet à par-
Options Field (variable length, maximum 40 bytes, 0 padded to 4-byte multiple) tir d’une valeur initiale, ISN, « Initial Se-
quence Number » ;
DATA (application message)  positionne le segment dans le flux à re-
composer ;
32 bits

◦ FIGURE 11.2
Acknowledgement number :
The TCP header fields. Note that some fields are a single bit wide, and others, like the options
fi numéro
eld, can be up to 40de séquence
bytes (320 bits) long. du prochain segment attendu ;

 acquitter les octets précédemment reçus (ceux de séquence < à celle du prochain segment
actual data in the received segment, the acknowledgment number increments
demandé) ;
by 1. (Every byte in TCP is still counted, but that’s not all that contributes to
the sequence numbercumulatif
acquittement field.) : il peut correspondre à plusieurs
segments déjà reçus.
Header length—The TCP header length in 4-byte units.
◦ Taille par défaut du segment : 536 octets de données + 20 octets d’en-tête : 556 octets.
Reserved—Four bits are reserved for future use.
ECN flags—The two explicit congestion notification (ECN) bits are used to tell
ResAvI

the host when the network is experiencing congestion and send windows
should be adjusted.
URG, ACK, PSH, RST, SYN, FIN—These six single-bit fields (Urgent, Acknowledg-
ment, Push, Reset, Sync, and Final) give the receiver more information on how
CHAPTER 11 Transmission Control Protocol 283
TCP : le format du segment 187

1 byte 1 byte 1 byte 1 byte ◦ header length ou « Data Offset » : sur


Source Port Destination Port
4bits, indique la taille en multiple de 4 oc-
Sequence Number tets.
H
e Acknowledgment Number
◦ RESV : réservé pour un usage ultérieur sur
a
d E E U A P R S F
4bit ;
Header
e RESV C C R C S S Y I Window Size
r
Length N N G K H T N N ◦ ECN, Explicit Congestion Notification : sur
TCP Checksum Urgent Pointer 2bits, avertir le récepteur d’un état de début
Options Field (variable length, maximum 40 bytes, 0 padded to 4-byte multiple) de congestion du réseau ;
◦ URG, ACK, PSH, RST, SYN, FIN : 6 bits
DATA (application message) ◦ TCP checksum : total de contrôle sur 16bits
pour assurer la validité de l’en-tête et des
32 bits
données.
LeFIGURE
rôle11.2
des différents bits :
The TCP header fields. Note that some fields are a single bit wide, and others, like the options
? fiURG indique des données urgentes indiquée par le « Urgent Pointer » ;
eld, can be up to 40 bytes (320 bits) long.
? ACK accusé de réception présent dans le « Acknowledgement Number » ;
? PSH cedata
actual segment doit segment,
in the received être pris the en compte sans
acknowledgment number bufférisation
increments ;
by 1. (Every byte in TCP is still counted, but that’s not all that contributes to
? RST réinitialiser
the sequence number lafield.)
connexion (problème de désynchronisation) ;
? Header
SYN synchronisation
length—The TCP header des numéros
length de séquence pour initialiser une connexion ;
in 4-byte units.
Reserved—Four bits are reserved for future use.
? FIN l’émetteur à fini d’émettre (permet de clore un sens de communication).
ECN flags—The two explicit congestion notification (ECN) bits are used to tell
ResAvI

the host when the network is experiencing congestion and send windows
should be adjusted.
URG, ACK, PSH, RST, SYN, FIN—These six single-bit fields (Urgent, Acknowledg-
ment, Push, Reset, Sync, and Final) give the receiver more information on how
TCP : le format du segment 188

◦ Window size : sur 16bits,


 utilisé pour le contrôle de flux par fenêtre glissante.
 il indique le nombre d’octets que l’émetteur de ce segment est prêt à recevoir, ce qui permet à son in-
terlocuteur d’augmenter ou de diminuer le nombre de segments qu’il peut transmettre (varie pendant la
communication).
◦ Urgent pointer :
 permet d’indiquer le rang du premier octet des données normales (les données urgentes sont en tête du
segment) ;
 ce rang est indiqué par rapport au segment courant (et pas du flux).
 l’utilisation de ce champ est conjointe à celle du bit URG.
Received byte stream, stored in Receive Buffer

Received TCP segment

urgent data non-urgent data


sequence number

seq. num + urg. ptr = Last Byte of Urgent Data

urgent data pointer

◦ options :
 la MSS, Maximum Segment Size est d’indiquer lors de l’établissement de la connexion, la taille maximale
du segment TCP que l’on peut envoyer.
Une bonne taille est choisie en accord avec le MTU du réseau employé.
 la WSF, Window Scaling Factor, sur 3 octets, définie un coefficient multiplicateur pour la donnée de la taille
de fenêtre > 65535,
 ...
ResAvI
TCP : Calcul de la somme de contrôle 189

Dans le segment TCP, un total de contrôle est calculé sur :


. entête du segment TCP ;
. données du segment ;
. pseudo entête du datagramme IP :

Méthode

a. on additionne en complément à 1 tous les mots de 16 bits (complété par un octet nul dans le cas où
le nombre d’octets total est impair)
b. on prend le complément à 1 de cette somme.
Lors de la réception le calcul est réalisé sur le segment entier (total de contrôle compris) et l’on doit
obtenir zéro si le segment est correct.
ResAvI
9.3 TCP : établissement d’une connexion 190
Technique du “Piggybacking” ou mode en superposition
L’acquittement d’un paquet paquet de A → B , peut être transmis dans un paquet allant de B → A.
La communication pouvant être bidirectionnel simultanée, elle peut nécessiter la transmission d’information de A →
B et de B → A simultanément.
L’établissement de la connexion, ou handshake
? se fait en 3 étapes ;
? correspond à une demande d’ouverture de la part de
chaque interlocuteur ;
? permet de synchroniser l’ISN, « Initial Sequence Num-
ber », la valeur initiale du numéro de séquence :
 pour le connect() SYN=1 & ACK=0 ;
 pour le accept() SYN=1 & ACK=1.
Un SYN unique indique une demande de connexion.

Avec l’outil « tcpdump » : pef@solaris:~$ sudo tcpdump -c 3 -n tcp and port 25

? [S] : indique un SYN ; listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes

? [S.] : indique un SYN/ACK ; 22:07:26.954500 IP 192.168.42.83.56149 > 164.81.1.45.25: Flags [S], seq 1249996154,
win 14600, options [mss 1460,sackOK,TS val 138100882 ecr 0], length 0
? [.] : indique un ACK.
? connexion de : 22:07:26.999157 IP 164.81.1.45.25 > 192.168.42.83.56149: Flags [S.], seq 4144328101, ack 1249996155,

192.168.42.83 port 56149win 5792, options [mss 1460,sackOK,TS val 1968359736 ecr 138100882], length 0
vers
22:07:26.999227 IP 192.168.42.83.56149 > 164.81.1.45.25: Flags [.], ack 1,
164.81.1.45 port 25. win 14600, options [nop,nop,TS val 138100893 ecr 1968359736], length 0
3 packets captured
0 packets dropped by kernel
ResAvI
TCP : la connexion classique vs simultanée 191
Connexion classique
N◦ TCP A TCP B
1. CLOSED LISTEN
2. SYN-SENT –> <SEQ=100><CTL=SYN> –> SYN-RECEIVED
3. ESTABLISHED <– <SEQ=300><ACK=101><CTL=SYN,ACK> <– SYN-RECEIVED
4. ESTABLISHED –> <SEQ=101><ACK=301><CTL=ACK> –> ESTABLISHED
5. ESTABLISHED –> <SEQ=101><ACK=301><CTL=ACK><DATA> –> ESTABLISHED

CTL, « contrôle », indique les bits du segment TCP sélectionnées.

Connexion simultanée
TCP A TCP B
1. CLOSED CLOSED
2. SYN-SENT –> <SEQ=100><CTL=SYN> ...
3. SYN-RECEIVED <– <SEQ=300><CTL=SYN> <– SYN-SENT
4. ... <SEQ=100><CTL=SYN> –> SYN-RECEIVED
5. SYN-RECEIVED –> <SEQ=100><ACK=301><CTL=SYN,ACK> ...
6. ESTABLISHED <– <SEQ=300><ACK=101><CTL=SYN,ACK> <– SYN-RECEIVED
7. ... <SEQ=101><ACK=301><CTL=ACK> –> ESTABLISHED

La connexion simultanée est difficile à mettre en œuvre, et elle est rarement implémentée dans
les piles TCP/IP.
ResAvI
9.4 TCP : la fermeture 192
Déconnexion
Client Server
TCP A TCP B
Client State Server State
ESTABLISHED
1. ESTABLISHED ESTABLISHED
ESTABLISHED #1
Normal Operation
Receive Close 2. (Close)
signal from App, FIN
Send FIN Receive FIN, FIN-WAIT-1 –> <SEQ=100><ACK=300><CTL=FIN,ACK> –> CLOSE-WAIT
Send ACK,
FIN-WAIT-1 #2 Tell App to Close 3. FIN-WAIT-2 <– <SEQ=300><ACK=101><CTL=ACK> <– CLOSE-WAIT
CLOSE-WAIT
Wait for ACK and ACK 4. (Close)
FIN from Server
(Wait for App)
TIME-WAIT <– <SEQ=300><ACK=101><CTL=FIN,ACK> <– LAST-ACK
Receive ACK
FIN-WAIT-2
App is ready to 5. TIME-WAIT –> <SEQ=101><ACK=301><CTL=ACK> –> CLOSED
#1
Close, Send FIN LAST-ACK
Wait for Server FIN 6. (2 Maximum Segment Lifetime)
FIN
Wait for ACK
Receive FIN, to FIN CLOSED
#2
Send ACK
TIME-WAIT
ACK Receive ACK
CLOSED

Wait for Double


Maximum Segment Even when the 2nd
Life (MSL) time
ACK is lost, the
connection will be
closed
CLOSED

Le MSL, « Maximum Segment Lifetime » :


. est choisie en fonction de l’expérimentation,
. permet d’éviter de prendre en compte des segments d’une ancienne connexion dans une nouvelle connexion (segment
retardés dans le réseau).
. en général choisie à 30s.

Déconnexion rapide
On utilise une connexion « abrupte » avec le RST :
 le serveur envoie un FIN au client ;
 le client envoie un ACK, puis un RST : on évite le temps d’attente de fin de connexion.
ResAvI
9.5 TCP : l’automate de fonctionnement 193
Timeout after two maximum
segment lifetimes (2*MSL)

CLOSED

Passive open Close Active open/SYN


Timeout/RST
Close

LISTEN

SYN/SYN + ACK Send/SYN

SYN/SYN + ACK
SYN RCVD SYN SENT

ACK SYN + ACK/ACK

ACK
Close/FIN ESTABLISHED

Close/FIN FIN/ACK

FIN WAIT 1 CLOSE WAIT


ACK

ACK Close/FIN
FIN +
ACK/ACK
CLOSING
FIN WAIT 2 LAST ACK

ACK

FIN/ACK
TIME WAIT
ResAvI
TCP : l’automate de communication expliqué 194
CLOSED
timeout / send:RST
normal transition for client
Ap
Appl:passive open / pl
close se :a normal transition for server
send:<nothing> nd c
: S tive Appl -- state transition take when
YN op
Ap en application issues operation
CK LISTEN pl:
YN,A Se se /
d:S nd nd
/ sen passive open :S data
N; YN /
:SY T / ing>
rcv :RS oth
rcv d:<n
sen
Appl:close
rcv: SYN /
SYN_RCVD or timeout /
rcv send:SYN, ACK SYN_SENT
:A reset
CK simultaneous open
Se active open
nd / /
:< CK
no
thi N,A Server
SY
Appl: close / ng
> r cv: K
:AC
send: FIN s end rcv: FIN /
ESTABLISHED CLOSE_WAIT
s e/ send: ACK
clo
pl:
Ap IN data transfer state
nd:F
Client se
AppL:close /
rcv: ACK /
send:FIN
rcv: FIN /
FIN_WAIT_1 CLOSING send: <nothing>
send: ACK

rcv rcv: ACK / LAST_ACK


rcv: ACK / :FI
se N,A passive close
nd CK send: <nothing>
send: <nothing> :AC /
K
Timeout after 2 MSL

FIN_WAIT_2 rcv: FIN / TIME_WAIT


send: ACK
2MSL timeout
active close
MSL (Maximum Segment Lifetime) 2 minutes
recommended—typically 30 seconds used
ResAvI
9.6 TCP : le RST 195
Gestion de la réception d’un ancien datagramme avec SYN

TCP A TCP B
1. CLOSED LISTEN
2. SYN-SENT –> <SEQ=100><CTL=SYN> ... pas encore reçu
3. (duplication) ... <SEQ=90><CTL=SYN> –> SYN-RECEIVED
4. SYN-SENT <– <SEQ=300><ACK=91><CTL=SYN,ACK> <– SYN-RECEIVED
5. SYN-SENT –> <SEQ=91><CTL=RST> –> LISTEN
6. ... <SEQ=100><CTL=SYN> –> SYN-RECEIVED
7. SYN-SENT <– <SEQ=400><ACK=101><CTL=SYN,ACK> <– SYN-RECEIVED
8. ESTABLISHED –> <SEQ=101><ACK=401><CTL=ACK> –> ESTABLISHED

Gestion du RST
Le bit RST demande la réinitialisation de la communication.
Il est émis lors de la réception d’un segment qui ne correspond pas à celui attendu par une connexion ouverte :
 Si la connexion n’existe pas, alors un RST est envoyé lors de la réception de tout segment sur la connexion
(sauf si ce segment est déjà un RST).
Les paquets SYN envoyés à une connexion inexistante sont rejetés par ce moyen.
Cela permet de gérer le cas ou la machine a rebooté alors que le correspondant continue a communiquer.
 Si la connexion n’est pas synchronisée (LISTEN, SYN-
SENT, SYN-RECEIVED) et le segment entrant acquitte
quelque chose qui n’a pas été envoyé (ACK mauvais) un
segment RST est envoyé.
ResAvI
9.7 TCP : Améliorations par l’utilisation d’options 196

? MSS, Maximum Segment Size : la taille maximale des données contenues dans un segment (sans tenir compte de
l’entête du segment).
Cette option est transmise lors de l’établissement de la connexion Il peut y avoir une différence entre la valeur
utilisée pour les deux sens de communication.
? Window Scale Factor, qui permet de définir un coefficient multiplicateur pour la fenêtre glissante.
Cette option permet de définir des tailles de fenêtre supérieure à 16bits : on décale à gauche du coef. indiqué (on
multiplie par 2coef ) :
Cette option est très utile pour les connexions très rapide (Gbits).
Pour la désactiver sous GNU/Linux :
$ sudo sysctl -w net.ipv4.tcp_window_scaling=0

? Selective Acknowledgment Permitted, ou SACK, qui permet d’acquitter des segments non contigües (RFC 2018)
Cette option est négociée à l’établissement de la connexion Dans le champs options peut être indiqué une liste de
(adresse début, adresse fin) de données reçues mais non encore acquittées
? Timestamp : permet de calculer le RTT d’un segment (RFC1072) :
 il existe deux champs contenant un timestamp : « Echo », « Echo reply » :
 l’émetteur envoie un segment avec un timestamp par rapport à sa propre horloge ;
 le récepteur lui renvoie ce timestamp dans le segment réponse : l’émetteur connait le RTT.
Autres améliorations
Keep-Alive, correspond à l’envoi de plusieurs segments de taille nulle ou déjà acquitté.
Cela permet pour les connexions inactives où aucun échange n’a lieu.
 « garder en vie » la connexion en évitant qu’un routeur réalisant du filtrage, « firewall » supprime la connexion du
fait de son inactivité ;
 de tester la présence de l’interlocuteur : sans réponse, on mettra fin à la connexion.
ResAvI
bytes back to the client) using 1000-byte segments, but only to make the sequence
numbers and acknowledgments easier to follow. The whole file is smaller than the

TCP : une communication complète 197

Client–Server File Transfer Using


CLIENT 1000-byte Segments SERVER
Passive OPEN
SYN SEQ (ISN) 2000 WIN 5840
Active OPEN
MSS (OPT)1460
SYN SEQ (ISN) 4000 WIN 8760
OPEN
MSS (OPT)1460
OPEN ACK SEQ 2001 WIN 5840 3-way Handshake
ACK 4001 Complete

Data Transfer SEQ 2001 ACK 4001


SEQ and ACK
SEQ 4001 ACK 3001 (sends 1000
bytes back)
SEQ 3001 ACK 4001

SEQ 4001 ACK 4001 (3000 bytes of


window full)
SEQ 5001 ACK 4001
(no data) ACK 6001
(Transfer
continues...) ..

Connection FIN SEQ 4001 ACK 10001


Release CLOSING
ACK SEQ 10001 ACK 4002
FIN SEQ 10001 ACK 4002
CLOSING
ACK SEQ 4002 ACK 10002
WAIT! WAIT!
ResAvI

FIGURE 11.3
Client–server interaction with TCP, showing the three connection phases of setup, data transfer,
and release (disconnect).
TCP : mode interactif 198

Le transfert de données de TCP est de deux types :


◦ interactif dans lequel chaque segment transporte très peu d’octets, voire un seul ;
◦ en masse où chaque segment transporte un maximum d’octets.
Exemple du protocole telnet, remplacé par le protocole SSH

L’utilisateur dans une session telnet envoie la commande date :


a. chaque caractère est transmis puis acquitté :c’est son acquittement qui est affiché à l’utilisateur,
« echo »
b. en réalité TCP transmet l’écho en même temps que l’acquittement.
c. on utilise l’algorithme de Nagle (RFC 896) utilisant une bufférisation légère : si l’utilisateur tape vite
on mémorise avant d’envoyer jusqu’à un retour à la ligne \n (utile pour ne pas saturer le réseau avec
des segments ne contenant qu’un seul octet).
ResAvI
TCP : calcul des timers de retransmission 199
Comment choisir la durée du « timeout » ?
? plus long qu’un RTT, mais le RTT varie dynami- A B A B
segmen
t0 segmen
quement ; t0

? si trop court : risque de retransmettre des seg- timeout


pkt0 ack1 ack1
ments pour rien ; Duplicate, X
segment
? si trop long : réaction trop lente aux pertes de RTT dupliqué RTT lost
ignoré
segments.
timeout
segmen
t0

Timeout trop
court se
traduit par un Timeout
timeout trop long
prématuré Utilisation
insuffisante de
Transmission
Temps non nécessaire la capacité
! Gaspillage de (bandwidth)
la capacité
(bandwidth)

Comment évaluer le RTT ?


. le « sampleRTT » ou « RTT échantillonné » : temps mesuré entre l’envoi d’un segment et la réception de son acquittement ;
. le « sampleRTT » varie : il faut « lisser » la mesure :
 faire la moyenne, RTT moyen ou EstimatedRT T , sur plusieurs mesures et pas seulement utiliser la dernière :
EstimatedRT T = (1 − α) ∗ EstimatedRT T + α ∗ SampleRT T avec 0 < α < 1
? α proche de 0 : insensible aux variations rapides
? α proche de 1 : très sensible aux variations rapides
ResAvI
TCP : calcul des timers 200
La mesure du RTT
RTT: gaia.cs.umass.edu to fantasia.eurecom.fr
EstimatedRT T = (1 − α) ∗ EstimatedRT T + α ∗ SampleRT T
350
Exemple :
EstimatedRT T = 250ms
SampleRT T = 70ms 300

α = 0.125
250

RTT (milliseconds)
Calcul :
EstimatedRT T = (1 − 0.125) ∗ 250
+0.125 ∗ 70 = 218.75 + 8.75 = 227.5ms 200

87, 5% de poids au EstimatedRT T


12, 5% de poids au SampleRT T 150

Ce calcul permet de 100


1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
? « lisser » les mesures ; time (seconnds)

? obtenir un graphe similaire à celui donné à droite. SampleRTT Estimated RTT

Calcul du temporisateur, timeout


? calcule la valeur du temporisateur en fonction de EstimatedRT T plus une marge de protection :
 forte variation de EstimatedRT T =⇒ marge de protection plus grande ;
 mesurer la déviation entre le SampleRT T et le EstimatedRT T : le DevRT T :
DevRT T = (1 − β) ∗ DevRT T + β ∗ bSampleRT T − EstimatedRT T c, où β = 0, 25

? Ce qui donne au final : T imeoutInterval = EstimatedRT T + 4 ∗ DevRT T


ResAvI
TCP : calcul des timers 201
Calcul du RTO, « Retransmission Timeout », RFC 2988
◦ Chaque fois qu’un segment contenant des données est envoyé (y compris pour une retransmission), un timer
doit être déclenché d’une durée égale au RTO calculé ;
◦ lorsqu’un ACK est reçu demandant l’envoi de nouvelles données :
 redémarrer le timer sur la durée du RTO ;
◦ lorsqu’un timer expire :
 retransmettre les premiers segments qui n’ont pas été acquittés par le récepteur ;
 augmenter le RTO : RT O = RT O ∗ 2, on appelle cette opération : timer backoff ;
 redémarrer le timer avec la nouvelle valeur de RTO.

En résumé :
 quand un ACK est reçu, on calcul le RTO avec T imeoutInterval = EstimatedRT T + 4 ∗ DevRT T
 quand un timeout se produit, on modifie le RTO : RT O = RT O ∗ 2
◦ lorsque toutes les données envoyées ont été acquittées, il faut arrêter le timer ;

◦ Pour le calcul des SampleRT T :


 Constat : en cas de retransmission d’un segment, l’émetteur ne peut savoir si l’acquittement s’adresse au
segment initial ou retransmis (acquittements ambigüs)
? ⇒ RTT ne peut donc être calculé correctement
? ⇒ TCP ne doit pas mettre à jour le RTT pour les segments retransmis
Sauf si l’option Timestamp a été utilisée dans le segment.
ResAvI
TCP : les scenarii de retransmission 202
Host A Host B Host A Host B
Host A Host B
Seq=9
2, 8 b
ytes d Seq=9 Seq=9
ata 2, 8 b 2, 8 b
ytes d ytes d
Seq= ata ata

Seq=92 timeout
100,
20 by
timeout

=1 0 0
=100 tes d

timeout
ata
ACK Seq=1
00, 20 ACK
bytes
X 10
0 data
loss K=
AC ACK=
120 X
loss
Seq=9
2, 8 b Seq=9
ytes d 2, 8 b
ata Offset ytes d
ata
= 100 Offset =120
ACK

Seq=92 timeout
Offset = 120 Offset
100 = 120 2 0 = 120
C K= K=1
A AC

Offset
= 100 Offset
= 120 time
premature timeout t
time time Cumulative ACK scenario
lost ACK scenario

? le ACK se perd et le RTO expire ;


? le RTO expire avant la réception des ACKs ;
? un ACK se perd mais il devient inutile car un nouveau ACK est envoyé et englobe celui perdu.

Implémentation des timers de retransmission


 En théorie, il est plus simple de gérer un timer de retransmission par segment envoyé.
 En pratique, la plupart des implémentations utilise un seul timer par connexion TCP (RFC
2988).
ResAvI
9.8 TCP : détection de l’entrée en congestion du réseau 203
Rapport avec le contrôle de flux ?
Le contrôle de flux ne gère que la capacité du récepteur à traiter les segments reçus.
Ce contrôle de flux utilise un mécanisme de fenêtre.
Problème
? le réseau peut être en situation de congestion indépendamment de la situation de l’émetteur
et du récepteur ;
? le récepteur et l’émetteur doivent détecter cette situation :
 la perte d’un paquet due à une erreur matérielle est rare ;
 elle doit être due à une congestion du réseau ⇒ connaissance !
 des timers servent à réémettre un paquet perdu ⇒ un timer expiré indique une congestion !
Image du seau d’eau :
le contrôle de flux sert à adapter le débit du ro-
binet à la taille du seau, mais la congestion fait
déborder l’entonnoir (perte de paquets) même si
la taille du seau est grande !
ResAvI
TCP : contrôle de la congestion 204
Comment gérer une situation de congestion ?
. découvrir la congestion : prendre en compte les pertes de segments
 situation de congestion faible : réception de 3 ACKs dupliqués (des paquets arrivent encore à circuler) ;
 situation de congestion forte : expiration d’un timer, « timeout »

. limiter le débit :
 utiliser une nouvelle fenêtre d’autorisation d’émission : la fenêtre de congestion, « congestion window » ;
 la taille de cette fenêtre : CongW in = w ∗ M SS octets, où w varie en fonction de l’état perçu du réseau.
 fonctionnement :
? La fenêtre réception, RcvW indow, & la fenêtre congestion déterminent la quantité d’octets à émettre ;
? L’émetteur envoie au plus une taille t de données, telle que t < min(CongW in, RcvW indow)
Exemple :
? Le récepteur indique « Autorisation d’envoyer 8ko »,RcvW indow = 8ko
. Si l’émetteur dispose d’une CongW in = 4ko, il envoie au plus 4ko de données ;
. Si l’émetteur dispose d’une CongW in = 32ko, il envoie au plus 8ko de données :
En contrôle de flux, c’est le récepteur qui contrôle, en contrôle de congestion, c’est l’émetteur.

. choisir un algorithme pour faire évoluer la taille de la CongW indow :


 AIMD, « Additive-Increase, Multiplicative-Decrease » ;
 « Slow Start » ;
 gestion des pertes de segments :
? TCP Tahoe ;
? TCP Reno ;
? Autres ;
ResAvI
TCP : contrôle de la congestion 205
AIMD, « Additive-Increase, Multiplicative-Decrease »
? incrémenter le débit de transmission, c-à-d la taille de la
CongW indow, de manière linéaire jusqu’à une perte ;
? « additive increase » : augmenter la taille de CongW indow de
1 MSS à chaque RTT, jusqu’à une perte ou que l’on atteigne la
taille de la RcvW indow ;
? « multiplicative decrease » : diviser par deux la taille de la
CongW indow à chaque perte (parce que l’effet de la conges-
tion est exponentiel) ;
On « probe » la capacité de la ligne de transmission et on obtient un graphe en dent de scie.

Le débit initial est faible au démarrage :


Exemple :
. À l’établissement de la connexion : CongW indow = 1M SS
. M SS = 500 octets, RT T = 200ms
CongW indow
. débit = RT T octets/seconde, débit initial = 25Ko par seconde.
Le débit initial est trop faible, il faut changer la manière d’augmenter la taille de la fenêtre.

Nouvelle propostion : le « Slow Start » avec accélération rapide


Deux phases : a. démarrer lentement, « slow start » et augmenter exponentiellement la CongW indow ;
b. éviter la congestion, « congestion avoidance » et augmenter la CongW indow linéairement.
ResAvI
TCP : contrôle de la congestion 206
Fonctionnement du mode « Slow Start »
Hôte A Hôte B ? on envoie le premier segment : s’il est acquitté avant expiration du timer,
un segmen
t
CongW in = CongW in + 1M SS ;
RTT

? on envoie le second segment : s’il est acquitté, on incrémente la taille de 1,


deux segm
ents ce qui équivaut à doubler la taille de CongW in à chaque RTT.
? on continue, ainsi, à doubler la taille de CongW in à chaque RTT, jusqu’à :
quatre segm
 avoir une perte de segment (on réagira comme en mode « congestion
ents
avoidance ») ;
 atteindre une taille de n segments, seuil appelé ssthresh ;
? on passe en mode « congestion avoidance » (on cherche à « éviter » la
temps congestion).
Résumé : aussi longtemps que l’émetteur reçoit des ACKs non dupliqués on
continue à incrémenter la taille de la fenêtre de congestion jusqu’à la limite
ssthresh et on passe en mode « congestion avoidance »
Fonctionnement du mode « congestion avoidance »
L’idée de ce mode est de repasser à l’AIMD et de choisir un comportement lors de la perte d’un segment :
? Il existe différentes méthodes pour réagir à la perte d’un segment :
 TCP Tahoe :
? pas de distinction entre situation de congestion faible ou forte (3 ACKs dupliqués ou timeout) ;
? ssthresh =CongWindow/2 (« Slow Start threshold ») ;
? CongW indow = 1M SS ;
? on effectue un « fast-retransmit » : on renvoie le segment sans attendre la fin du RTO ;
? on recommence le mode « slow-start », c-à-d on augmente exponentiellement jusqu’à ssthresh puis linéai-
ResAvI

rement au-delà.
TCP : contrôle de la congestion 207
Fonctionnement du mode « congestion avoidance »
? Il existe différentes méthodes pour réagir à la perte d’un segment :
 TCP Reno :
? on distingue situation de congestion faible et de congestion forte :
. congestion faible (3 ACKs dupliqués) :
◦ ssthresh = CongW indow/2 ;
◦ mode « fast-recovery » : CongW indow = CongW indow/2 ;
◦ mode « fast-retransmit » : envoi immédiat du segment « perdu » sans attendre le RTO ;
. congestion forte (timeout) : fonctionnement à la Tahoe
◦ ssthresh = CongW indow/2
◦ CongW indow = 1M SS ;
◦ on effectue un « fast-retransmit » ;
◦ on recommence le mode « slow-start » ;
 TCP Vegas : détecte la congestion sur l’allongement progressif de la RTT de chaque segment ;
 New Reno : adapte Reno à l’utilisation de l’option SACK.
Résumé : ◦ quand CongW indow < ssthresh augmentation exponentielle de la taille de CongW indow (∗2) ;
◦ quand CongW indow ≥ ssthresh augmentation linéaire de la taille de CongW indow (+1).
Les modes :
? « fast-retransmit » : l’émetteur étant persuadé que le segment demandé plusieurs fois dans les ACKs dupliquées
est perdu, il le retransmet sans attendre l’expiration du timer (« Retransmit TimeOut » ou RTO) ;
? « fast-recovery » : divise par deux la CongW indow et attend l’acquittement complet de la fenêtre d’autorisation
d’envoi, avant de repasser en mode « congestion avoidance » ;
? la différence entre Tahoe & Reno : l’ajout de la notion de « congestion faible » et du « fast-recovery ».
ResAvI
TCP : contrôle de la congestion 208
Comportement de Tahoe vs Reno

? initialement, le ssthresh = 8 ∗ M SS
? le pic correspond à une perte de segment :
 CongW indow = 12 au moment du pic ;
 ssthresh = CongW indow/2 = 6M SS ;
 Tahoe repart en « slow start » avec CongW indow = 1M SS ;
 Reno utilise mieux la capacité du support : il repart de CongW indow/2 = ssthresh ;
Et finalement le débit moyen d’une connexion TCP ?
(CgW ∗M SS) (CgW ∗M SS) .75∗CgW ∗M SS
Le débit en « dent de scie » passe de (2RT T ) à RT T , d’où : throughputaverage = RT T
ResAvI
TCP : contrôle de congestion 209
Est-ce que TCP est un protocole « équitable »
TCP connexion 1 Objectif de l’équité, fairness :
− Si K connexions utilisent la même ligne de transmis-
sion de capacité R ;
Bottleneck − chaque connexion doit obtenir un débit de R/K .
TCP
“goulot d’étranglement”
connexion 2
routeur
capacité R

On observe que les deux connexions vont se répartir la capa- Débit souhaité

R Partage équitable de la
cité de la ligne de transmission : capacité
 en A : les deux connexions atteignent un débit inférieur à
R, pas de pertes, la taille de CongW in augmente de 1 à D
Débit
chaque RTT et la courbe évolue à 45◦ ; Connexion 2 B
throughput
 en B : le débit des connexions dépasse R et les deux
C Ligne d’utilisation
connexions perdent des segments et reviennent en C ; A complète de la capacité
Débit Connexion 1 R
 en D : ça recommence. . . throughput
Mais la répartition se fait entre toutes les connexions TCP et non entre celles des différentes applications.
Équité dans UDP
. TCP possède un mécanisme de contrôle de congestion : il offre un traitement équitable en répartissant la capacité entre
les différentes connexions :
. UDP ne possède pas ce mécanisme :
 les applications multimédia utilise plutôt UDP (VoIP, « Voice over IP », Vidéo) :
? elles ne veulent pas voir leur débit modifié par le contrôle de congestion ;
? elles ne veulent pas le surcoût de TCP (gestion de fenêtres d’envoi et de réception, gestion d’erreurs) ;
 la transmission par UDP est faite suivant un débit constant où la perte de paquets est tolérée.
 le trafic UDP peut entraîner une congestion du réseau.
ResAvI
Un autre mécanisme de contrôle de congestion pour TCP et IP 210
ECN, « Explicit Congestion Notification », RFC 3168
. Habituellement, la découverte de la congestion passe par la perte de datagramme :
un routeur jette un paquet qu’il ne peut gérer.

. ECN permet de notifier les extrémités d’un que le réseau entre en congestion sans jeter le datagramme :
 il est géré dans le datagramme IP (mais en rapport avec un protocole supérieur) ou le segment TCP ;
 l’ECN a été négocié lors de l’établissement de la connexion (utilisation du bit associé dans l’entête IP) ;
 le routeur gérant l’ECN positionne un bit dans l’entête du datagramme IP ou du segment TCP, au lieu de
jeter le datagramme pour informer, notifier, le récepteur de l’entrée en congestion du routeur.
 le récepteur fait écho de cette indication (au niveau approprié) et réagit comme lors lors d’une perte de
datagramme (ou du segment encapsulé).

Le mécanisme utilise deux bits :


? du champ « Differentiated Services » ou TOS, « Type Of Service » de l’en-tête IPv4 ;
? du champ « Traffic Class » de l’en-tête IPv6 ;
? du champ « flags » de len-tête du segment TCP.

Les différentes valeurs des bits et le sens associé :


 00: Non ECN-Capable Transport — Non-ECT
 10: ECN Capable Transport — ECT(0)
 01: ECN Capable Transport — ECT(1)
 11: Congestion Encountered — CE
ResAvI
TCP : l’acquittement sélectif, SACK 211
ResAvI
FIN If set, the sender had finished sending data and initiated a close of the connection.

TCPTable
: les options
11.2 TCP Option Types, Showing Abbreviation (Meaning), Length, and RFC 212
in Which Established
Type Meaning Total Length and Description RFC Les options 11,12&13 : RFC 1644 proposait de
0 EOL 1 byte, indicates end of option list (only used if end of 793 mettre des données dans le SYN et SYN/ACK. . .
options is not end of header)
abandonnées !
1 NOP 1 byte, no option (used as padding to align header with 793
CHAPTER
Header-Length Field)11 Transmission Control Protocol 285
2 MSS 4 bytes, the last 2 of which indicate the maximum payload 793 Les options 6&7 : RFC 1072 abandonnées !
that one host will try to send another. Can only appear in 879
SYN and does not change.
Table 11.2 (continued)
Les options 9&10 : RFC 1693 abandonnées !
Type Meaning Total Length and Description RFC
3 WSCALE 3 bytes, the last establishing a multiplicative (scaling) factor. 1072
Supports bit-shifted window values above 65,535.
4 SACKOK 2 bytes, indicating that selective ACKs are permitted. 2018
5 SACK Of variable length, these are the selective ACKs. 1072
6 Echo 6 bytes, the last 4 of which are to be echoed. 1072
7 Echo reply 6 bytes, the last 4 of which echo the above. 1072
8 Timestamp 10 bytes, the last 8 of which are used to compute the retrans- 1323
mission timer through the RTT calculation. Makes sure that an
old sequence number is not accepted by the current connection.
9 POC perm 2 bytes, indicating that the partial order service is permitted. 1693
10 POC profile 3 bytes, the last carrying 2-bit flags. 1693
11 CC 6 bytes, the last 4 providing a segment connection count. 1644
12 CCNEW 6 bytes, the last 4 providing new connection count. 1644
13 CCECHO 6 bytes, the last 4 echoing previous connection count. 1644

Certaines de ces options ne sont négociées que lors de l’établissement de la connexion, pour des questions de
rétro-compatibilité : leur présence dans les segments des deux interlocuteurs permet leur utilisation.
TCP MECHANISMS
L’option 8 : permet de calculer le RTT d’un segment, « RTT measurement » (RFC1323) :
It might not be obvious why TCP connections should be such a complication. One of
? the
l’émetteur envoie
reasons is that unmore
TCP adds segment avec unIPtimestamp
to connectionless than connectionpar rapport
capability. Theà sa propre horloge ;
TCP service also provides aspects of what the ISO-RM defines as Session Layer services,
? le récepteur lui renvoie ce timestamp dans le segment réponse : l’émetteur connait le RTT.
ResAvI

services that include the history (a popular term is “state variables”) of the connection
progress. Connections also provide a convenient structure with which to associate
QoS parameters, although every layer of any protocol stack always has some QoS duties
to perform, even if it is only error checking.
TCP : calcul initial de la taille de la fenêtre de réception 213
Taille de fenêtre proposée par le récepteur
? dépend de la capacité, « bandwidth », du réseau ;
? dépend du temps d’aller-retour d’un paquet, le « RTT » ;
? est calculée par :
T aille f enetre = capacité ∗ RT T
? Exemple :
 Sur un réseau Ethernet 100M bps, avec un RTT de 5ms :
T aille f enetre = 100.106 ∗ 5.10−3 = 500kbits
 On choisit une taille en puissance de 2 : 512kbits, soit 64Ko.
? ainsi on adapte la taille de la fenêtre à la capacité du réseau, afin d’optimiser son utilisation : l’émetteur recevra
un ACK pour l’envoi d’une fenêtre complète juste à temps pour recommencer.

Sélection de la taille de la fenêtre de réception en programmation Socket


Sous Python :
1 ma_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
2 ma_socket.setsockopt(socket.SOL_SOCKET,socket.SO_RCVBUF, taille)
3 print ’Taille buffer utilisee:’,ma_socket.getsockopt(socket.SOL_SOCKET,socket.SO_RCVBUF)
Pour le transfert d’un fichier de 10 Mo :
pef@solaris:~$ time python test_option_tcip.py pef@solaris:~$ time python test_option_tcip.py
Connexion : 164.81.60.6 Connexion : 164.81.60.6
Taille buffer initial: 87380 Taille buffer initial: 87380
Taille buffer utilisee: 200000 Taille buffer utilisee: 2240

real 0m8.213s real 5m16.549s


user 0m0.080s user 0m0.244s
sys 0m0.620s sys 0m3.912s
ResAvI
TCP : le calcul de débit 214
Débit maximal d’une connexion TCP
Le débit d’une connexion TCP dépend du temps d’acheminement des données et de leur acquittement, et de la
taille du buffer de réception :
débit ≤ RW IN
RT T  RT T est le « round trip time »
 RW IN est la taille de la fenêtre de réception.
Exemple avec la création d’un flux avec iperf
? On mesure le RTT avec la commande ping :
pef@darkstar:~$ ping -c 1 msi.unilim.fr
PING msi.unilim.fr (164.81.60.6): 56 data bytes
64 bytes from 164.81.60.6: icmp_seq=0 ttl=50 time=44.537 ms

? On intercepte la communication avec tcpdump


pef@darkstar:~$ tcpdump -c 2 -nnvvX tcp and port 5011
reading from file capture_connexion_tcp_msi.pcap, link-type EN10MB (Ethernet)
11:51:34.142682 IP (tos 0x0, ttl 64, id 19178, offset 0, flags [DF], proto TCP (6), length 64, bad cksum 0 (->2454)!)
192.168.42.122.55350 > 164.81.60.6.5001: Flags [S], cksum 0xcbac (incorrect -> 0x0979), seq 3553494331, win 65535,
options [mss 1460,nop,wscale 3,nop,nop,TS val 65182048 ecr 0,sackOK,eol], length 0

11:51:34.185676 IP (tos 0x0, ttl 50, id 0, offset 0, flags [DF], proto TCP (6), length 60)
164.81.60.6.5001 > 192.168.42.122.55350: Flags [S.], cksum 0xb687 (correct), seq 4127531836, ack 3553494332, win 5792,
options [mss 1460,sackOK,TS val 61550677 ecr 65182048,nop,wscale 6], length 0

? On apprend que :
 le serveur msi.unilim.fr propose un « WindowScale » de 6, ce qui indique que il faut multiplier la taille
de la fenêtre par 26 = 64, soit une taille de fenêtre de réception 5792 ∗ 64 = 370688 ;
 le débit maximal : 370688/0.0445 = 8M bps si la taille de la fenêtre ne diminue pas au cours de la commu-
nication (débit inférieur à la capacité d’un lien Ethernet 10M bps).
ResAvI
TCP : le calcul de débit 215

? on utilise la commande « iperf » en mode serveur sur ? en mode client sur « darkstar » (le client envoie un flux
msi.unilim.fr vers le serveur) :
bonnefoi@msi:~$ ./bin/iperf -s pef@darkstar:~/iperf-2.0.5/src$ ./iperf -c msi.unilim.fr
–––––––––––––––––––––––––––––– ––––––––––––––––––––––––––––––
Server listening on TCP port 5001 Client connecting to msi.unilim.fr, TCP port 5001
TCP window size: 85.3 KByte (default) TCP window size: 129 KByte (default)
–––––––––––––––––––––––––––––– ––––––––––––––––––––––––––––––
[ 4] local 164.81.60.6 port 5001 connected with xxx port 55350 [ 3] local 192.168.42.122 port 55350 connected with 164.81.60.6
[ 4] 0.0-12.2 sec 1.25 MBytes 860 Kbits/sec port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-11.0 sec 1.25 MBytes 951 Kbits/sec

? on observe avec la commande tcptrace :


ResAvI
TCP : des mesures sur la connexion 216

Il existe un certain nombre de serveurs permettant de mesurer :


? les caractériques de la connexion (type de ligne de transmission, modifications réalisées par le FAI, etc)
? l’influence sur le protocole TCP :
 de la configuration du système ;
 de la connexion.
Sur http://npad.onenet.net/toolkit/gui/perfAdmin/directory.cgi, une liste de serveurs répartis dans le monde.

Dans l’option « more details », on apprend :


? MSS : 1448 octets, modifié par le FAI. . .
ResAvI
TCP : RFC 1323 ou TCP pour les liaisons « hautes performances » 217
Problèmatique des réseaux à débit haute performance
Ces réseaux sont appelés des LFN, « Long Fat Network », ils ont un grand BDP, « Bandwidth Delay Product ».

Les améliorations pour gérer ces « éléphants » sont :


? « window scale factor » : qui permet d’agrandir la taille de la fenêtre de réception en la multipliant par un coefficient
taille ∗ 2coef f icient ;
? « fast-restransmit »&« fast-recovery » : conserver au mieux le débit ;
? « Selective Acknowledge » : éviter de gaspiller du débit ;

? « Timestamps » : de 1seconde à 1ms qui permettent :


 « RTTM », Round Trip Time Measurement : une meilleur mesure du RTT calculable sur chaque échange y
compris les segments retransmis ;
 « PAWS », Protect Against Wrapped Sequence Numbers :
? la taille du numéro de séquence est de 32bits, il faut donc pour « cycler » :
Network B*8 B Twrap Scénario :
bits/sec bytes/sec secs . un segment perdu S perdu avec un numéro de séquence
_______ _______ ______ ______
y arrive sur le récepteur ;
ARPANET 56kbps 7KBps 3*10**5 (~3.6 days)
DS1 1.5Mbps 190KBps 10**4 (~3 hours) . ce segment perdu a été retransmis depuis longtemps ;
Ethernet 10Mbps 1.25MBps 1700 (~30 mins) . la communication à « cyclé » et se trouve au numéro de
DS3 45Mbps 5.6MBps 380 séquence x ;
FDDI 100Mbps 12.5MBps 170
. y est proche de x et fait partie de la RcvW indow ⇒
Gigabit 1Gbps 125MBps 17
S perdu peut s’insérer de nouveau dans la connexion !
? On utilise alors le Timestamp pour identifier S perdu, comme étant un vieux segment à ne plus utiliser :
Timestamp(S perdu) < Timestamp(courant)
ResAvI
TCP : la configuration, le « tuning » 218

La configuration du comportement du protocole TCP sous GNU/Linux :


pef@solaris:/proc/sys/net/ipv4$ ls tcp*
tcp_abc tcp_fin_timeout tcp_mtu_probing tcp_syncookies
tcp_abort_on_overflow tcp_frto tcp_no_metrics_save tcp_syn_retries
tcp_adv_win_scale tcp_frto_response tcp_orphan_retries tcp_thin_dupack
tcp_allowed_congestion_control tcp_keepalive_intvl tcp_reordering tcp_thin_linear_timeouts
tcp_app_win tcp_keepalive_probes tcp_retrans_collapse tcp_timestamps
tcp_available_congestion_control tcp_keepalive_time tcp_retries1 tcp_tso_win_divisor
tcp_base_mss tcp_low_latency tcp_retries2 tcp_tw_recycle
tcp_congestion_control tcp_max_orphans tcp_rfc1337 tcp_tw_reuse
tcp_cookie_size tcp_max_ssthresh tcp_rmem tcp_window_scaling
tcp_dma_copybreak tcp_max_syn_backlog tcp_sack tcp_wmem
tcp_dsack tcp_max_tw_buckets tcp_slow_start_after_idle tcp_workaround_signed_windows
tcp_ecn tcp_mem tcp_stdurg
tcp_fack tcp_moderate_rcvbuf tcp_synack_retries

? tcp_moderate_rcvbuf vaut 1 : active le mode « autotuning », c-à-d la taille de la fenêtre de réception est
adaptée automatiquement pour chaque connexion ;
? tcp_rmem&tcp_wmem :l’espace mémoire d’une connexion donné sous 3 valeurs :
 tcp_rmem 4096 87380 2027520 minimal, initial, maximum pour la réception
 tcp_wmem 4096 16384 2027520 minimal, initial, maximum pour l’émission
? les tailles demandées par l’utilisateur avec SO_SNDBUF et SO_RCVBUF sont limitées par :
/proc/sys/net/core/rmem_max - maximum receive window
/proc/sys/net/core/wmem_max - maximum send window

? les options les plus importantes sont activées :


cat /proc/sys/net/ipv4/tcp_timestamps echo 1 > /proc/sys/net/ipv4/tcp_moderate_rcvbuf
cat /proc/sys/net/ipv4/tcp_window_scaling echo 108544 > /proc/sys/net/core/wmem_max
cat /proc/sys/net/ipv4/tcp_sack echo 108544 > /proc/sys/net/core/rmem_max
echo "4096 87380 4194304" > /proc/sys/net/ipv4/tcp_rmem
Les paramètres à changer pour 4Mo en BDP echo "4096 16384 4194304" > /proc/sys/net/ipv4/tcp_wmem
élevé « Bandwidth Delay Product », ou RTT*capacité
ResAvI
9.9 L’identification de système d’exploitation « OS fingerprinting » 219

D’après Wikipedia
La prise d’empreinte de la pile TCP/IP (en anglais : TCP/IP stack fingerprinting ou OS fingerprinting) est un procédé permettant de déterminer
l’identité du système d’exploitation utilisé sur une machine distante en analysant les paquets provenant de cet hôte.
Il y a deux types différents de fingerprinting :
? L’OS fingerprinting passif : identifier le système d’exploitation uniquement à l’aide des paquets qu’il reçoit ;
? L’OS fingerprinting actif : envoie des paquets et attend les réponses (ou l’absence de réponses). Ces paquets sont parfois formés de
manière étrange car les différentes implémentations des piles TCP/IP répondent différemment face à de telles erreurs.
Quelques outils de détection d’OS :
. Actif : Nmap, xprobe [1], Scapy,
. Passif : p0f (basé sur ouvertures de connexion TCP, paquets TCP SYN), Scapy, Ettercap, le pare-feu Netfilter de noyau >2.6.31 de Linux.

Comment faire de l’OS fingerprint ?


? en utilisant les protocoles applicatif (IMAP, POP, SMTP, SSH, FTP etc.) :
 le « banner grabbing » : en se connectant au service et en récupérant la bannière d’accueil qui contient des infos
sur l’hôte. Le principe du « Security by Obscurity » : changer les bannières pour dissimuler le système ;
 le « banner grabbing » passif : dans l’en-tête d’un courrier, dans celui de la réponse du serveur HTTP, dans la
récupération d’une commande du système au travers d’un FTP pour voir comment elle a été compilé etc
? en utilisant les particularités des protocoles TCP :
 les réponses à des paquets inattendus, le temps de réponse, les valeurs des options etc.
? en utilisant le protocole SNMP, « Simple Network Management » : s’il est installé et configuré par défaut, il peut informer
sur la nature du matériel ;
? en identifiant les ports ouverts pour détecter les services présents sur l’hôte :
 le balayage de ports, « port scanning » : passer en revue les différents ports pour trouver ceux ouverts, c-à-d où
un serveur attend (listen) : windows : port 137, netbios-ns, NetBIOS Name Service, le mDNS etc.
ResAvI
OS fingerprinting 220
Méthodologie
Pour effectuer un « fingerprinting », on mesure des comportements de la machine cible que l’on compare avec des
comportements pré-enregistrés dans une BD : la comparaison de plusieurs comportements (valeurs prises, temps mis
pour répondre etc.) permet d’identifier avec plus ou moins de précision la cible.
« Port scanning » : trouver les ports ouverts, fermés ou filtrés
Pour le comportement de la pile TCP/IP, au niveau TCP :
? envoyer un segment avec le bit FIN : d’après la RFC 793, la réception d’un segment FIN sans connexion préalable
doit être ignoré, mais certaines piles TCP/IP renvoie un RST =⇒ fingerprint ;
? « TCP ISN sampling » : tester l’évolution des numéros de séquence lors de l’établissement de connexion TCP et
déterminer comment il évolue : de manière incrémentale, par rapport à une horloge, de manière aléatoire etc.
? les options TCP : quelles sont les options présentes, leur valeur, leur ordre dans le segment ;
? le Timestamp de TCP : comment évolue-t-til ?
? le timeout de TCP : envoyer un simple SYN, ignorer le SYN/ACK et mesurer le temps pris pour l’hôte pour réenvoyer
ce SYN/ACK (à l’aide de l’option TimeStamp on évite les erreurs dues aux délais du réseau).
Cette mesure est très efficace et est mise en œuvre par l’outil RING, « Remote Identification Next Generation ».
Pour le comportement de la pile TCP/IP, au niveau IP :
 l’IPID, ou l’identifiant du datagramme IP : souvent à zéro mais pouvant valoir une valeur aléatoire ou incrémenter de
un à chaque transmission ;
 la gestion de la fragmentation : est-ce qu’un fragment qui « overlap », c-à-d recouvre, un segment précédent est rpis
en compte ou non ;
Pour le comportement de la pile TCP/IP, au niveau ICMP :
? leur TOS (différent de zéro sous GNU/Linux),
? leur contenu dans le cas d’erreur :
 une partie du datagramme IP qui a entraîné l’erreur « ICMP Error Quoting » ;
 le message ICMP reçu dans le cas d’une erreur dans ce message ICMP « ICMP Error MEssage Echo Integrity » ;
ResAvI
Un outil d’audit : nmap 221

? déterminer si la cible est sur le réseau : envoie un ICMP ping request, et essaye de se connecter sur le port 80 (HTTP) ;
? balayer les ports ouverts pour trouver au moins un port ouvert (une application est en écoute et attend une connexion) et
un port fermé (pas d’application attachée à ce port) ;
? déclencher l’OS fingerprint :
 envoyer un paquet unique SYN : initier une connexion TCP ;
 envoyer un second paquet sans drapeaux (pas de SYN, ACK, PSH etc.). Ce paquet est appelé « null scan »
 envoyer un troisième paquet avec les drapeaux : URG, PSH, SYN et FIN
Ces paquets sont appelées dans la RFC 1025 : nastygram, kamikaze, christmas tree
 en cas de service connu ouvert : faire du « banner grabbing » :
pef@darkstar:~/$ nmap -A 192.168.42.83
Starting Nmap 5.51 ( http://nmap.org ) at 2011-10-09 17:25 CEST
Nmap scan report for 192.168.42.83
Host is up (0.0023s latency).
Not shown: 996 closed ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 5.8p1 Debian 1ubuntu3 (protocol 2.0)
| ssh-hostkey: 1024 8c:02:1e:99:51:e6:29:21:46:95:6e:95:a5:ed:b7:50 (DSA)
|_2048 cc:1b:0d:e8:36:65:fe:ac:61:10:50:35:98:18:81:f9 (RSA)
53/tcp open domain dnsmasq 2.57
80/tcp open http Apache httpd 2.2.17 ((Ubuntu))
|_http-title: Site doesn’t have a title (text/html).
8080/tcp filtered http-proxy
Service Info: OS: Linux

Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .


Nmap done: 1 IP address (1 host up) scanned in 22.11 seconds
ResAvI
remote stack on behalf of the client. Before any application layer data is
transmitted, the two stacks must negotiate the parameters that govern the
Un outil conversation
d’audit : nmapthat is about to take place between the client and server. This
222

− les options de nmapthe


negotiation is : standard TCP three-way handshake and requires three
packets, as shown in Figure
 TCP connect() scan—(Nmap 3-4.
-sT) : envoi un SYN et ACK (connexion normale) ;
(1) SYN pef@darkstar:~$ nmap -sT -p80 192.168.42.83
(2) SYN + ACK
Ici, le port ciblé est le port 80.
(3) ACK

TCP Client TCP Server

Figure 3-4: TCP


pef@darkstar:~$ three-way
nmap -sT -p80 handshake
192.168.42.83
Starting Nmap 5.51 ( http://nmap.org ) at 2011-10-09 18:30 CEST
Nmap scan report for 192.168.42.83
Host isThe first packet,
up (0.0016s SYN (short for synchronize), is sent by the client to the
latency).
server.
PORT This
STATE packet advertises the desired initial sequence number (among
SERVICE
other things, such as the TCP window size and options such as whether
80/tcp open http

Selective
La Acknowledgment
trace recueillie is: permissible) used for tracking data trans-
avec tcpdump
mission across
pef@solaris:~$ sudo the TCP
tcpdump session
-i eth0 -nvvXtohost
the192.168.42.122
server. If theandSYN
host packet reaches
192.168.42.83 an
open port, the
18:26:35.987561 server
IP (tos 0x0, TCP stack
ttl 255, responds
id 33680, offsetwith a SYN/ACK
0, flags [DF], prototo
TCPacknowledge
(6), length 64)

the receipt of the initial


192.168.42.122.56733 sequence value
> 192.168.42.83.80: fromcksum
Flags [S], the0xb01e,
client seq
and604272313,
to declare its
win 65535,

own sequence number back to the client. The client receives the SYN/ACK
options [mss 1460,nop,wscale 3,nop,nop,TS val 71119834 ecr 0,sackOK,eol], length 0

and responds with an acknowledgment to the server. At this point, both sides
18:26:35.987666 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 56)
have agreed on the connection parameters (including the initial sequence
192.168.42.83.80 > 192.168.42.122.56733: Flags [S.], cksum 0xd648, seq 832218517, ack 604272314, win 14480,
numbers), and the connection state is defined as established and ready to
options [mss 1460,sackOK,TS val 212522325 ecr 71119834], length 0
transfer data.
In the context
18:26:35.987892 of the
IP (tos 0x0, ttl TCP connect()
255, id scan,
37505, offset 0, the scanner
flags sends
[DF], proto TCP both the SYN
(6), length 52)
and the ending ACK packet for each scanned port. Any normal user can
192.168.42.122.56733 > 192.168.42.83.80: Flags [.], cksum 0x36ab, seq 1, ack 1, win scan
65535,
a remote system inval
options [nop,nop,TS this modeecr
71119834 with Nmap; length
212522325], no special
0 privileges are required.
Below are some of the iptables log messages displayed from a SYN scan
along with the Nmap output. You can see that the http and https ports are
18:26:35.987900 IP (tos 0x0, ttl 255, id 48576, offset 0, flags [DF], proto TCP (6), length 40)

open, and the options portion of the SYN packet contains a substantial
192.168.42.122.56733 > 192.168.42.83.80: Flags [R.], cksum 0x89d5, seq 1, ack 1, win 65535, length 0
ResAvI

number of options:
A SYN or half-open scan is similar to a connect() scan in that the scanner sends
a SYN packet to each TCP port in an effort to elicit a SYN/ACK or RST/ACK
response that will show if the targeted port is open or closed. However, the
scanning system never completes the three-way handshake because it deliber-
Un outilately fails to:return
d’audit nmap the ACK packet to any open port that responds with a 223
SYN/ACK. Therefore, a SYN scan is also known as a half-open scan because
three-way
 TCP SYN or handshakes
half-openare never given -sS)
scan—(Nmap a chance to un
: envoi gracefully
seul SYNcomplete,
(pas deaslog sur la cible, mais attention à la réception
depicted in Figure 3-5.
d’un SYN/ACK ou RST/ACK) ;
(1) SYN
pef@darkstar:~$ sudo nmap -sS -p80 192.168.42.83
(2) SYN + ACK
Ici, le port ciblé est le port 80.
(ACK is never sent)
TCP Client TCP Server

Figure 3-5: TCP half-open


pef@darkstar:~$ sudoscan
nmap -sS -p80 192.168.42.83
A SYNNmap
Starting scan cannot
5.51 (behttp://nmap.org
accomplished with)the
atconnect() system18:39
2011-10-09 call because
CEST
that call
Nmap scaninvokes
reportthefor
vanilla TCP stack code, which will respond with an ACK
192.168.42.83
for each SYN/ACK received from the target. Hence, every SYN packet sent
Host is up.
in a SYN scan must be crafted by a mechanism that bypasses the TCP stack
PORT STATE
altogether. SERVICE accomplished by using a raw socket to build a data
This is commonly
structurefiltered
80/tcp that mimics a SYN packet when placed on the wire by the OS kernel.
http

Nmap done: 1 IP address (1 host up) scanned in 15.06 seconds


R AW S O C KE T S A N D U N S O LI C I T ED S Y N / AC K S
La trace recueillie avec tcpdump :
Using a raw socket to craft a TCP SYN packet toward a remote system instead of
using the connect()
pef@solaris:~$ system-icall
sudo tcpdump brings
eth0 -nvvXup host
an interesting issue. If the
192.168.42.122 and remote host
host 192.168.42.83
responds
tcpdump: with a on
listening SYN/ACK, then the local
eth0, link-type TCP (Ethernet),
EN10MB stack on the scanning
capturesystem
size receives
65535 bytes
the SYN/ACK,
18:40:08.795967 but the
IP (tos outbound
0x0, ttl 42, SYNid packet
64924,did not come
offset from the
0, flags local stack
[none], proto TCP (6), length 44)
(because we manually crafted it via the raw socket), so the SYN/ACK is not part of
192.168.42.122.62082 > 192.168.42.83.80: Flags [S], cksum 0x50d4, seq 1064973031, win 3072,
a legitimate TCP handshake as far as the stack is concerned. Hence, the scanner’s
local stack
options sends
[mss a RSTlength
1460], back to0 the target system, because the SYN/ACK appears to
be unsolicited. You can stop this behavior on the scanning system by adding the
following iptables
18:40:08.796043 rule 0x0,
IP (tos to thettl 64,chain
OUTPUT id 0,before starting
offset a scan [DF],
0, flags with theproto
command:
TCP (6), length 44)
192.168.42.83.80 > 192.168.42.122.62082: Flags [S.], cksum 0xd63c, seq 707071997, ack 1064973032, win 14600,
[ext_scanner]# iptables -I OUTPUT 1 -d target -p tcp --tcp-flags RST RST -j
DROP
options [mss 1460], length 0
ResAvI

Nmap uses a raw socket to manually build the TCP SYN packets used
within its SYN scan mode (-sS ), the default scanning mode for privileged
users. Because the characteristics of these packets are determined by Nmap
Un outil d’audit : nmap 224

 TCP FIN, XMAS, and NULL scans—(Nmap -sF, -sX, -sN) : envoi de segments avec les drapeaux choisis ;
pef@darkstar:~$ sudo nmap -sF -p80 192.168.42.83
Starting Nmap 5.51 ( http://nmap.org ) at 2011-10-09 18:54 CEST
Nmap scan report for 192.168.42.83
Host is up.
PORT STATE SERVICE
80/tcp open|filtered http

pef@solaris:~$ sudo tcpdump -i eth0 -nvvX host 192.168.42.122 and host 192.168.42.83
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
18:54:43.662791 IP (tos 0x0, ttl 53, id 25131, offset 0, flags [none], proto TCP (6), length 40)
192.168.42.122.47432 > 192.168.42.83.80: Flags [F], cksum 0xcc21, seq 1638066792, win 2048, length 0

18:54:44.662309 IP (tos 0x0, ttl 43, id 33275, offset 0, flags [none], proto TCP (6), length 40)
192.168.42.122.47433 > 192.168.42.83.80: Flags [F], cksum 0xc41e, seq 1638132329, win 4096, length 0

 TCP ACK scan—(Nmap -sA) : envoi un ACK et attend un RST en retour ;


pef@darkstar:~$ sudo nmap -P0 -e en0 -sA -p80 192.168.42.83
Starting Nmap 5.51 ( http://nmap.org ) at 2011-10-09 19:03 CEST
Nmap scan report for 192.168.42.83
Host is up.
PORT STATE SERVICE
80/tcp filtered http

pef@solaris:~$ sudo tcpdump -i eth0 -nvvX host 192.168.42.122 and host 192.168.42.83
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
19:03:45.471095 IP (tos 0x0, ttl 39, id 55545, offset 0, flags [none], proto TCP (6), length 40)
192.168.42.122.55365 > 192.168.42.83.80: Flags [.], cksum 0xba54 (correct), seq 0, ack 3429526113, win 4096, length 0

19:03:45.472226 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 40)
192.168.42.83.80 > 192.168.42.122.55365: Flags [R], cksum 0xca60 (correct), seq 3429526113, win 0, length 0
ResAvI
TCP Idle Scans
Un outil The
d’audit
TCP idle scan is:annmap
advanced scanning mode that requires three systems: 225
a system to launch the scan, a scan target, and a zombie host running a TCP
server that is not heavily utilized (hence the “idle” part of the scan’s name).
 TCP idle scan—(Nmap -sI) :
The idle scan is illustrated in Figure 3-6.

? on se sert d’un intermédiaire sur lequel on est connec-


SYN/ACK for Open Port
FTP Session RST/ACK for Closed Port té en TCP ;
Zombie
FTP Server ? on spoofe l’@IP de l’intermédiaire pour scanner la
cible ;
? on surveille les IP ID de la connexion avec l’intermé-
Scanner
Spoofed SYN Packets from Zombie Hosts’s IP Address
Scan Target
diaire pour voir s’ils sont modifiés (l’intermédiaire en-
[

Figure 3-6: TCP idle scan voie un RST à la cible et incrèmente cet IPID).
 UDP The idle scan exploits the fact that IP increments the IP ID value by one
scan—(Nmap -sU) : envoi d’un datagramme
for every packet that is sent through the IP stack. The scan combines this
UDP et attente d’un ICMP de type « Port unreachable »
fact with the requirement that a TCP stack send a SYN/ACK in response to a
pour savoir si le port est ouvert ou fermé.
SYN packet to an open port, or a RST/ACK packet in response to a SYN packet
to a closed port. In addition, all TCP stacks are required to ignore unsolicited
RST/ACK packets. Taken together, these facts allow the scanner to watch
how the zombie host increments the IP ID values during a TCP session that
. les valeurs retournées sont :
is maintained from scanner to the zombie host, while the scanner spoofs SYN
packets with the zombie host’s IP address at the target system. As a result, the
 « open » : il y a une application accessible associée à ce port ;
scanner is able to monitor IP ID values in the IP header of packets coming from
the zombie system, and from this information it is able to extrapolate
 « closed » : il n’y a pas d’application attachée ;
whether ports are open or closed on the target.
When a SYN packet is sent from the scanner to an open port on the target
 « filtered » : il peut y avoir une application attachée à ce port, mais les communication sont bloquées.
(see Figure 3-6) with the source IP address spoofed as the zombie’s IP address,
the target responds with a SYN/ACK (to the zombie system). Because the
Il n’y a pas de « RST » envoyé, en le bloquant avec le firewall « netfilter » sous GNU/Linux :
SYN packet that the zombie receives is actually unsolicited (it was spoofed
from the scanner), it responds with a RST5 to the target system, thereby
incrementing the IP ID counter by one. If a SYN packet is sent from the
$ sudo iptables -A OUTPUT -p tcp –sport 80 –tcp-flags RST RST -j DROP
scanner to a closed port on the target (again with the source IP address spoofed),
the target responds to the zombie with a RST/ACK, and the zombie ignores
this unsolicited packet. Because in this case no packet is sent from the zombie,
the IP ID value is not incremented.
Les règles du RST : RST ou RST/ACK ?
By monitoring how the IP ID values are incremented (by one for open
ports on the target, and not at all for closed ports), the scanner can infer

? à la réception d’un SYN sur un port fermé on renvoie un RST/ACK ;


5
The RST packet from the zombie does not contain the ACK bit in this case because the
? à la réception
SYN/ACK from the target does have the ACK bit set. More material on the circumstances
under which an ACKd’un
bit is set SYN/ACK surinun
on a RST packet is included “RST port fermé,
vs. RST/ACK” on renvoie un RST.
on page 63.

T ra n s por t La y er At t ac ks an d D efe ns e 59
ResAvI
10 UDP, User Datagram Protocol, RFC 768 226

Il est :
? différent de TCP : pas de connexion, pas d’accusé de réception, pas de tri des datagrammes à la réception,
pas de contrôle de flux, pas de garantie contre les pertes ;
? identifié par le numéro de protocole 17 (11 en hexa) dans le datagramme IP ;
? associé au bit DF du datagramme IP (en général) ;
? « stateless », contrairement à TCP : il n’y a pas d’état conservé par les hôtes l’utilisant pour communiquer (pas
de TCB, « transmission control block » contenant les TSAPs, les numéros de séquence&acquittement, les
buffers de réception/envoi, les fenêtres d’envoi/congestion etc.) ;
? capable de faire du « multicast » (envoyer simultanément à plusieurs destinataires) ;
? capable d’être multiplexé grâce au numéro de port :
 Well-kown ports : de 0 à 1023, sont associés à des protocoles « système » ;
 registered ports : de 1024 à 49151 peuvent être enregistrés auprès de l’ICANN ;
 dynamic : 49152 à 65535 ;
 ephemeral vs persistent : celui d’un client par rapport à celui d’un serveur ;
La liste des associations ports/services est indiquée dans le fichier /etc/services, sous GNU/Linux et dans
C:\%SystemRoot%\system32\ drivers\etc\SERVICES sous Windows.

Ce protocole est utilisé pour les applications :


? de type « demande-réponse », où l’établissement d’une connexion serait trop coûteuse : la requête et la ré-
ponse peuvent être contenues dans un seul datagramme.
? « temps réels » : celles dans lesquelles le plus important est d’avoir les données à temps, comme la transmis-
sion du son et de l’image.
ResAvI
Les ports et les protocoles UDP & TCP 227

Pour obtenir la liste des ports en attente de connexion pour TCP et de datagramme pour UDP, sous GNU/Linux,
à l’aide de la commande netstat :
$ sudo netstat -lp –inet
Connexions Internet actives (seulement serveurs)
Proto Recv-Q Send-Q Adresse locale Adresse distante Etat PID/Program name
tcp 0 0 *:https *:* LISTEN 2403/apache2
tcp 0 0 *:17500 *:* LISTEN 1979/dropbox
tcp 0 0 localhost:mysql *:* LISTEN 3535/mysqld
tcp 0 0 *:www *:* LISTEN 2403/apache2
tcp 0 0 *:domain *:* LISTEN 1677/dnsmasq
tcp 0 0 *:ssh *:* LISTEN 1706/sshd
tcp 0 0 localhost:ipp *:* LISTEN 1561/cupsd
udp 0 0 *:52906 *:* 470/avahi-daemon
udp 0 0 *:domain *:* 1677/dnsmasq
udp 0 0 *:bootpc *:* 393/dhclient
udp 0 0 *:bootpc *:* 21932/dhclient
udp 0 0 *:17500 *:* 1979/dropbox
udp 0 0 *:mdns *:* 470/avahi-daemon
udp 0 0 *:radius *:* 2328/freeradius
Des protocoles utilisant UDP :
− NTP permet de mettre les ordinateurs à l’heure par internet à 500 millisecondes près ;
− DNS permet de retrouver une adresse IP en fonction d’un nom symbolique (comme un annuaire) ;
− VoIP permet de communiquer vocalement par Internet ;
− IPTv pour la télé sur Internet (quelle idée !) ;
−. . .
ResAvI
16-bit result placed in the field before transmission. If the checksum computes to zero,
an all-1s value is sent, and all-1s is not a computable checksum. The pseudo-header
fields are not sent with the datagram.
UDP 228
Le format du datagramme UDP
1 byte 1 byte 1 byte 1 byte

Source Port Destination Port

Length (including header) Checksum

Datagram Data (optional)

FIGURE
◦ la taille du datagramme UDP10.2
inclue celle de l’entête : elle varie de 8, juste l’entête, à 65 353 (il dépend de la
taille du buffer d’envoiThe
et four UDP header
de réception fields.limité
souvent Technically,
à 8000use of the; checksum is optional, but it is often used
octets)
today.
◦ il est encapsulé dans un datagramme IP de taille minimale à supporter par les routeurs de 576 octets, soit 556
octets sans l’entête IP (certains protocoles268
le limitait à 512 octets comme le protocole DNS, Domain Name
PART II Core Protocols
Server, dans la RFC1035, mais cette limitation a été levée dans la RFC2671) ;
Calcul du Checksum
1 byte 1 byte 1 byte 1 byte

Source IPv4 Address

Destination IPv4 Address

All 0 byte Protocol (517) UDP Length


? il est calculé avec une pseudo-entête :
FIGURE 10.3
? il n’est pas obligatoire mais conseillé (obligatoire dans IPv6) : si le client envoie avec un checksum, le serveur
The UDP IPv4 pseudo-header. These fields are used for checksum computation and include
répond avec un checksum ; fields in the IP header.
? s’il est mauvais le datagramme est éliminé silently : pas de message d’erreur.
ResAvI

At the receiver, the value of the Checksum is copied and the field again set to zero.
The checksum is again computed on the pseudo-header and compared to the received
value. If they match, the datagram is processed by the receiving application indicated
by the destination port number. If they do not match, the datagram is silently discarded
274 PART II Core Protocols
UDP : les différents cas de réponses 229

Certains envois de datagramme UDP peuvent générer une réponse d’erreur de type ICMP :
Action Condition Outcome

UDP request Server Sender gets


sent to server available UDP reply from
server
UDP request Port is closed Sender gets ICMP
sent to server on server “Port unreachable”
message
UDP request Server host Sender gets ICMP
sent to server does not exist “Host unreachable”
message
UDP request Port is blocked by Sender gets ICMP
sent to server firewall/router “Port unreachable —
Administrative
prohibited”message
UDP request Port is blocked (timeout)
sent to server by silent
firewall/router
UDP request Reply is lost on (timeout)
sent to server way back

FIGURE 10.6
ResAvI

UDP protocol actions, showing the request–reply outcomes.


pointed at it or not. The Web server process issues a passive open to TCP/IP an
tially remains idle on the network side until some client requests content. H
the Web browser (the client) process issues an active open to TCP/IP and atte
10.1 UDP vs TCP 230

Other Other
FTP SMTP SSH NFS* SNMP DNS* UDP
TCP
Client– Client–
Remote Network Name Server
Server
File Remote File Manage- Lookup
Applica- Applica-
Transfer Email Access Access ment Service
tions tions

TCP UDP
Connection-Oriented, Reliable Connectionless, Best-Effort

Some
Routing IP (Best-effort) ICMP ARPs
Protocols

Network Access and Physical Layer


(Etherent LANs or other)

*In some instances, NFS and DNS use TCP.


ResAvI

FIGURE 2.4
The TCP/IP protocol stack in detail. The many possible applications on top and many pos
11 Conception de réseaux : la segmentation 231

Lors de la conception d’un réseau pour une organisation (une société, un campus universitaire
etc.) répartie entre un ou plusieurs sites (salles, bureaux, bâtiments, etc.), il est possible d’utiliser :
◦ l’interconnexion de différents réseaux locaux par routage ;
◦ la commutation au sein d’un même réseau local.
Interconnexion de différents réseaux
Elle utilise les capacités de la couche 3, « la couche réseau », pour :
? définir des @IPs de sous-réseaux (en utilisant VLSM et CIDR) ;
? affecter ces @IPs à différents réseaux locaux mis en œuvre dans l’organisation ;
? interconnecter ces réseaux à l’aide de routeur(s) ;
? définir des tables de routage :
 pour un poste de travail : au minimum, la route par défaut, ou passerelle ;
 pour un routeur : au minimum, la connaissance des différents réseaux interconnectés joi-
gnables à un saut. Plus tard, on verra l’utilisation de protocole de construction de table de
routage comme IGP, OSPF ou RIP.
Commutation au sein d’un même réseau local
Elle utilise les capacités de la couche 2, « la couche liaison de données », pour :
. décomposer un réseau local en plusieurs parties indépendantes ;
. créer différents domaines de collisions dans un même domaine de diffusion.
ResAvI
??
11.1 Problème de croissance d’Internet 232
Croissance du réseau Internet
Le protocole IP a été utilisé intensivement depuis des dizaines d’années. Son succès s’est accompagné d’une crois-
sance exponentielle du réseau Internet.
Problème du manque d’adresses
Le réseau basé sur IP ne peut plus s’agrandir par épuisement du nombre d’adresses disponibles :
− 1987 : 100 000 réseaux prévues après plusieurs décennies ;
− 1996 : 100 000 réseaux effectifs ;
− 2012 : épuisement des adresses IPv4 disponibles.
L’adressage sur 32 bits permet de définir 2 milliards d’adresses potentielles.
L’organisation de l’espace d’adressage en classes en consomme des millions :
. les réseaux de classe A sont beaucoup trop grands (16 millions d’adresses) ;
. les réseaux de classe C sont trop petits (256 adresses) ;
. les réseaux de classe B sont trop grands (65536 machines).
Problème de la taille des tables de routage pour aller d’un réseau à l’autre
L’espace des adresses IP est une hiérarchie à deux niveaux :
<identifiant réseaux>.<identifiant machine>
Les routeurs doivent connaître l’identifiant de tous les réseaux !
La taille des tables de routage devient énorme et difficile à gérer :
◦ occupation mémoire trop importante dans les routeurs ;
◦ complexité des algorithmes de gestion de ces tables de routage ;
◦ routeur conçu dans la perspective d’un réseau Internet contenant 10 000 réseaux, et où les 100 000 réseaux étaient
un avenir lointain (limitation du protocole de routage RIP) ;
◦ transmission des tables de routage entre routeurs propice aux erreurs, et aux pertes. . .
ResAvI
Les Solutions 233
Le « subnetting »
Où comment partitionner un réseau d’une classe donnée en différents sous-réseaux.
Fonctionnement : Une structure obtient un seul réseau de classe A, B ou C :
◦ elle décompose ce réseau en différents sous-réseaux qu’elle peut répartir géographiquement ;
◦ elle peut faire du routage entre ces différents sous-réseau ;
◦ Pas de différence vu de l’extérieur du réseau !
Le « supernetting »
Où comment supprimer le concept de classe réseau et optimiser l’usage des adresses restantes.
Fonctionnement : Une structure obtient des « tranches de réseau » :
◦ par exemple : pour disposer d’au plus 500 machines elle obtient deux réseaux de classe C (2*256) ;
◦ pour simplifier le routage, on considère que cette tranche ne désigne qu’un seul et même réseau, ce qui
oblige à dispose de certaines propriétés sur les adresses de ces réseaux ;
◦ Pas de différence vu de l’extérieur du réseau !
Le NAT, Network Address Translation
Où comment partager une ou plusieurs adresses entre différentes machines.
Fonctionnement : Une structure obtient une ou plusieurs adresses fixes :
◦ ces adresses sont partagées entre différentes machines connectées dans un réseau privé ou Intranet
(192.168.x.Y, 172.16.x.y ou 10.x.y.z).
◦ Attention : différence vu de l’extérieur du réseau !
IPv6
Où comment passer à Internet NextGen ! Avec des adresses sur 128 bits entre autre. . .
ResAvI
192.168.15.1 192.168.15.2 192.168.15.129 192.168.15.253 192.168.15.254

192.168.15.0
network
192.168.15.255 Router

Subnetting
130 : Protocols
PART II Core RFC 950 255.255.255.0
broadcast
234
mask Internet
Before Subnetting
Avant
Defining the Subnet Mask / Extended-Prefix Length Après
Hosts Hosts
The first step is to determine the number of bits required to define the six subnets. Since
a192.168.15.1
network address can only 192.168.15.129
192.168.15.2 192.168.15.253 192.168.15.254
be subnetted along binary boundaries, subnets must192.168.15.1
be 192.168.15.126 192.168.15.129 192.168.15.253 192.168.15.254

created in blocks of powers of two [ 2 (21), 4 (22), 8 (23), 16 (24), etc. ]. Thus, it is
impossible to 192.168.15.0
define an IP address block such that it contains exactly six subnets. For 192.168.15.0 192.168.15.128
network administrator must define a block of 8 (23) and have two
this example, thenetwork network network
192.168.15.255 Router for future growth. 192.168.15.127 Router 192.168.15.255
unused subnets that can be reserved broadcast broadcast
broadcast

255.255.255.0 255.255.255.128
Since 8 = 23, three bits are required to enumerate the eight subnets in the block. In this
mask mask
Internet Internet
example, the organization is subnetting
Before Subnetting a /24 so it will need three more bits, or a After
/27,Subnetting
as
the extended-network-prefix. A 27-bit extended-network-prefix can be expressed in
Exemple
dotted-decimal notation as 255.255.255.224.
Hosts This is illustrated in Figure 11. FIGURE 4.4
Subnetting a LAN, showing how the value of the initial bits determines the subnet. Host addresses,
192.168.15.1 192.168.15.126 192.168.15.129 192.168.15.253 192.168.15.254
if assigned manually, must follow the subnet mask convention.
subnet- host- Découpage du réseau 193.1.1.0/24 en 8 sous-
number number
192.168.15.0 192.168.15.128 bits
A
réseaux : sometimes tricky subnet issue is determining exactly what the subnet address (all
bits
network network 0 bits after the mask) and broadcast address (all 1 bits after the mask) are for a given IP
192.168.15.127 Router 192.168.15.255
network-prefix ? 193.1.1.0/27
address and subnet mask. This can be difficult because subnet masks do not always fall
broadcast broadcast on byte boundaries as do classful addresses. An IP address like 172.31.0.128 might not
193.1.1.0/24
255.255.255.128
= 11000001.00000001.00000001.00000000 ? 193.1.1.32/27
look like the address of the network itself, but it might be. A network address, in some
mask
After Subnetting
extended-network-prefix
Internet ? .implementations of TCP/IP, cannot be assigned to a host. (172.31.0.128 with a subnet
. . of 255.255.255.128
mask is a network address.)
255.255.255.224 = 11111111.11111111.11111111.11100000
? Consider the address 172.18.0.126 with a subnet mask of 255.255.255.192. What
193.1.1.224/27
FIGURE 4.4 27-bits is the subnet and broadcast address for this subnet? What range of host addresses can
Subnetting a LAN, showing how the value of the initial bits determines the subnet. Host addresses, be assigned to this subnet? These questions come up all the time, and there are utilities
Figure 11: Example #1 - Defining the Subnet Mask/Extended-Prefix Length
Pourif assigned
décider dumust
manually, nombre de bits
follow the subnet à affecter aux sous-réseaux
mask convention. available on the Internet that do this quickly. But here’s one way to do it by hand.
The first thing to do is to mask out the network portion of the IP address with the
A 27-bit extended-network-prefix leaves 5 bits to define host addresses on each subnet.
deA combien
−This sometimes tricky
de subnet
réseauxissue isl’organisation
determining exactlyawhat the subnet
besoin address (all
aetcontiguous
dans le futur of?mask by writing down the mask bits. Then the subnet portion of the address
subnet
0 bitsmeans that
after the each
mask) subnetwork
and with a (all
broadcast address 27-bit prefix
1 bits after represents
the mask) are for a given IPblock
can be easily marked off by “turning on” the masked bits. Next, it is easy to form the sub-
5 (32) individual
− combien de machines au maximum dans un des sous-réseaux,
2address and subnet IP addresses.
mask. This can However,
be difficult since
because the all-0s
subnet and
masks all-1s
do not host
always addresses
fall dans leaddress
net and broadcast futurfor? the subnet by setting the rest of the bits in the address
on bytebe
cannot boundaries
allocated,asthere
do classful
are 30addresses. An IP address
(25 -2) assignable likeaddresses
host 172.31.0.128 mightsubnet.
on each not (the host bits) first to all 0 bits (network) and then to all 1 bits (broadcast). The result-
look like the address of the network itself, but it might be. A network address, in some ing address range forms the limits of the subnet.
Attention
implementations
Defining Each ofof TCP/IP, cannotNumbers
the Subnet be assigned to a host. (172.31.0.128 with a subnet
mask of 255.255.255.128 is a network address.)
◦ Consider
La pour le subnetting dans une même structure.
The eightRFC 950
subnets willautorise
the address be numbered
172.18.0.126
unwith
0seul
through masque
7. mask
a subnet Throughoutde sous-réseau
the remainder
of 255.255.255.192 . Whatof this
◦ Sur de vieux routeurs, classful, on évite d’utiliser le sous réseau
paper,
is the the XXX
subnet and2 notation
broadcast indicates
address forthe binary
this subnet? representation
What range of of the
host number.
addresses The
can 3-bit « tout à zéro » et « tout à 1 ».
be assigned
binary to this subnet?
representation These
of the questions
decimal come
values up all the7time,
0 through are:and there
0 (000 2),are utilities
1 (001 2), 2 (0102),
3available
(0112),on the Internet
4 (100 that2),do6this
2), 5 (101 (110 quickly.
2), and But7 here’s
(1112).one way to do it by hand.
ResAvI

The first thing to do is to mask out the network portion of the IP address with the
subnet mask by writing down the mask bits. Then the subnet portion of the address
In general, to define Subnet #n, the network administrator places the binary
can be easily marked off by “turning on” the masked bits. Next, it is easy to form the sub-
representation of n into the bits of the subnet-number field. For example, to define
net and broadcast address for the subnet by setting the rest of the bits in the address
Subnet #6, the network administrator simply places the binary representation of 6 (110 )
- Multiple subnet masks permit more efficient use of an organization's assigned IP
address space.
- Multiple subnet masks permit route aggregation which can significantly reduce the
amount of routing information at the "backbone" level within an organization's
routing domain.
VLSM : Variable Length Subnet Masks RFC 1009 235
Efficient Use of the Organization's Assigned IP Address Space
But : Permettre d’utiliser plusieurs VLSM
masques supports
de more efficient use pour
sous-réseaux of an organization's
le subnetting,assigned
d’oùIPlaaddress
notionspace.
de One
of the major problems with the earlier limitation of supporting only a single subnet
« variable length ». mask across a given network-prefix was that once the mask was selected, it locked the
organization into a fixed-number of fixed-sized subnets. For example, assume that a
Exemple network administrator decided to configure the 130.5.0.0/16 network with a /22
extended-network-prefix.
On dispose du réseau 130.5.0.0/16 à décomposer :
En /22, ce qui donne 64 sous-réseaux, pour subnet-number host-number
bits bits
1022 machines chacun :
network-prefix
Si un réseau ne contient que 30 machines, on
130.5.0.0/22 = 10000010.00000101.00000000.00000000
perd énormément d’adresses !
extended-network-
prefix
Figure 15: 130.5.0.0/16 with a /22 Extended-Network Prefix
En /26, ce qui donne 1024 sous-réseaux, subnet-number host-number
bits bits
pour 62 machines chacun : Please refer to Figure 15. A /16 network with a /22 extended-network prefix permits 64
C’est mieux, mais l’idéal serait de disposer du subnets (26), each of whichnetwork-prefix
supports a maximum of 1,022 hosts (2 10-2). This is fine if
the organization wants
130.5.0.0/26 = to deploy a number of large subnets, but what about the
10000010.00000101.00000000.00000000
/22 et du /26 simultanément. occasional small subnet containing only 20 or 30 hosts? Since a subnetted network
could have only a single mask,extended-network-prefix
the network administrator was still required to assign the
20 or 30 hosts to a subnet with a 22-bit prefix. This assignment would waste
Figure 16: 130.5.0.0/16 with a /26 Extended-Network Prefix
Contraintes approximately 1,000 IP host addresses for each small subnet deployed! Limiting the
association of a network number with a single mask did not encourage the flexible and
. plusieurs masques de sous-réseau
Route
efficient Aggregation
use compatibles
of an organization's addresshiérarchiquement
space. ;
. l’utilisation de routeurs qui emploient :
VLSM also allows the recursive division of an organization's address space so that it can
One solution to this
be reassembled andproblem
aggregatedwas to
to reduce
allow athesubnetted
amountnetwork to be
of routing assigned more
information at thethan
top
 des protocoles de oneconstruction
subnet
level. Conceptually,deatable
mask. Assume thatde
network routage
inisthe previous
first dividedqui transmettent
example,
into somele
the network
subnets, masque
ofadministrator
the subnets is
are
also allowed to configure the 130.5.0.0/16 network with a /26 extended-network-prefix.
de sous-réseau pour
furtherchaque
Please divided
refer
réseau
into
to Figure
destination
sub-subnets,
16. A /16 networkand some;address
of the sub-subnets
with are divided into
a /26 extended-network sub2-
prefix
subnets. This allows the detailed structure of routing information for one subnet group
 un algorithme depermits
« forwarding » qui
1024 subnets
to be hidden (210utilise
from routers ), each le « longest
of which
in another subnet
matching » ;
supports
group.a maximum of 62 hosts (2 -2).
6
The /26 prefix would be ideal for small subnets with less than 60 hosts, while the /22
 une affectation des sous-réseaux qui soit topologiquement adapté.
prefix is well suited for larger subnets containing up to 1000 hosts.
11.1.1.0/24
11.1.2.0/24 11.1.253.32/27
ResAvI

11.1.0.0/16 11.1.253.64/27

11.2.0.0/16 11.1.253.0/24
11.1.254.0/24 11.1.253.160/27
extended-network-prefix is said to be "more specific" while a route with a shorter
extended-network-prefix is said to be "less specific." Routers must use the route with
the longest matching extended-network-prefix (most specific matching route) when
forwarding traffic.

For example, if a packet's destination IP address is 11.1.2.5 and there are three network
VLSM subnet-number host-number
prefixes in the routing table (11.1.2.0/24, 11.1.0.0/16, and 11.0.0.0/8), the router would
select the route to 11.1.2.0/24. The 11.1.2.0/24 route is selected because its prefix has
236
bits bits the greatest number of corresponding bits in the Destination IP address of the packet.
Algorithme de forwarding basé sur le « longest
network-prefix
match
This»is illustrated in Figure 19.
130.5.0.0/26 = 10000010.00000101.00000000.00000000
Pour un datagramme à destination de l’adresse Destination 11.1.2.5 = 00001011.00000001.00000010.00000101
extended-network-prefix
11.1.2.5, on sélectionne la route qui correspond Route #1 11.1.2.0/24 = 00001011.00000001.00000010.00000000
Figure 16: 130.5.0.0/16 with a /26 Extended-Network Prefix
avec le plus grand nombre de bits d’un des sous- * Route #2 11.1.0.0/16 = 00001011.00000001.00000000.00000000
Route Aggregation
réseaux, ici, 11.1.2.0/24 Route #3 11.0.0.0/8 = 00001011.00000000.00000000.00000000
VLSM also allows the recursive division of an organization's address space so that it can
be reassembled
Attention : laandmachine
aggregated to reduce the amount
11.1.2.5 of routing
doit bien information at Figure
être connectée the top 19:
dansBest Match is with the Route Having the Longest Prefix (Most Specific)
le réseau 11.1.2.0/24. Dans le réseau 11.1.0.0/16
level. Conceptually, a network is first divided into subnets, some of the subnets are
elle ne serait pas accessible !
further divided into sub-subnets, and some of the sub-subnets are divided into There
sub 2- is a very subtle but extremely important issue here. Since the destination address
subnets. This allows the detailed structure of routing information for one subnetmatches
group all three routes, it must be assigned to a host which is attached to the
Aggrégation derouters
to be hidden from routesin another subnet group. 11.1.2.0/24 subnet. If the 11.1.2.5 address is assigned to a host that is attached to the
11.1.0.0/16 or 11.0.0.0/8 subnet, the routing system will never route traffic to the host
11.1.1.0/24 L’aggrégation permet deassumes
simplifier lehost
routage : le
since the "longest match algorithm" that the is part of the réseaux
11.1.2.0/24
11.1.2.0/24 11.1.253.32/27
subnet. This means that great care must be taken when assigning host addresses to
11.1.0.0/16 11.1.253.64/27 11.0.0.0/8 est décomposé
make sure that every host is reachable! en /16 , puis le sous-
11.1.253.0/24
11.2.0.0/16 réseau 11.1.0.0/16 est décomposé en /24.
11.1.253.160/27 Topologically
11.3.0.0/16 11.1.254.0/24 Significant Address Assignment
11.1.253.192/27 LeOSPF
Since processus est
and I-IS-IS récursif,
convey mais n’impose pas
the extended-network-prefix que lawith
information taille
each
11.0.0.0./8
11.253.32.0/19 route,
duthepréfixe
VLSM subnets
soit lacan be scattered
même throughout
à chaque an organization's
niveau de l’arbre. topology.
11.252.0.0/16 11.253.64.0/19
However, to support hierarchical routing and reduce the size of an organization's routing
11.253.0.0/16 tables, addresses should be assigned so that they are topologically significant.
11.254.0.0/16 11.253.160.0/19
Hierarchical routing requires that addresses be assigned to reflect the actual network
11.253.192.0/19
topology. This reduces the amount of routing information by taking the set of addresses
Figure 17: VLSM Permits the Recursive Division of a Network Prefix assigned to a particular region of the topology, and aggregating them into a single
On diminue la taille des tables de routage nécessaires : 11.1.0.0/16
routing advertisement for the entire set. Hierarchical
11.2.0.0/16 routing allows this to be done
11.1.1.0/24
−In
leFigure 17, the 11.0.0.0/8 network is first configured with a /16 extended-network-
routeur D « cache » 6 sous-réseaux derrière 11.1.253.0/24 ;
recursively at various
prefix. The 11.1.0.0/16 subnet is then configured with a /24 extended-network-prefix
points withinRouter the
A hierarchy
11.3.0.0/16 of the routing
Router B topology.
11.1.2.0/24 If addresses
doNote
not have a topological significance, aggregation cannot be performed and the size of
−and
le the 11.253.0.0/16
routeur C cachesubnet is6configured with a /19 extended-network-prefix.
sous-réseaux avec 11.253.0.0/16
that the recursive process does not require that the same extended-network-prefix
; 11.0.0.0/8 11.252.0.0/16 11.1.252.0/24
theberouting tables cannotorbe11/8reduced. Remember this point when we discuss CIDR
11.254.0.0/16 11.1.254.0/24
−assigned
la structure des
at each level sous-réseaux
of the est
recursion. Also, the cachée
recursive of the aggregation
de l’extérieur
sub-division avec later in this paper.
organization's address space can be carried out as far as the network administrator needs
to11.0.0.0/8
take it. . Internet 11.253.0.0/16 11.1.253.0/24

Router C Router D

11.253.32.0/19 11.1.253.32/27
11.1.253.64/27
11.253.64.0/19
11.1.253.96/27
11.1.253.128/27
11.253.160.0/19 11.1.253.160/27
11.253.192.0/19 11.1.253.192/27
ResAvI

Figure 18: VLSM Permits Route Aggregation - Reducing Routing Table Size

Figure 18 illustrates how a planned and thoughtful allocation of VLSM can reduce the
size of an organization's routing tables. Notice how Router D is able to summarize the
six subnets behind it into a single advertisement (11.1.253.0/24) and how Router B is
CIDR : routage sans classe, RFC 1519 237
La technique du CIDR “Classless InterDomain Routing” RFC 1519
Allouer des adresses de classe C (2 millions disponibles) sous forme de blocs de taille variable.
Exemple :
. si un site a besoin de 2000 adresses, on lui alloue un bloc de 2048 adresses (8 réseaux de classe C contigus).
. si un site a besoin de 8000 adresses on lui alloue un bloc de 8192 adresses (32 réseaux de classe C contigus).
Ce principe est étendu vers les réseaux de classe A et B également.
Distribution des adresses de manière régionale, RFC 1174
Les règles d’attribution d’adresses de classe C sont changées, le monde est partagé en 4 zones :
? 194.0.0.0 à 195.255.255.255 sont attribuées à l’Europe, RIPE NCC et à l’Afrique, AfriNIC ;
? 198.0.0.0 à 199.255.255.255 sont attribuées à l’Amérique du Nord, ARIN ;
? 200.0.0.0 à 201.255.255.255 sont attribuées à l’Amérique du Sud & Centrale, LACNIC ;
? 202.0.0.0 à 203.255.255.255 sont attribuées à l’Asie et au Pacifique, APNIC ;
? 204.0.0.0 à 223.255.255.255 sont conservées en réserve.
? 64.0.0.0 à 127.0.0.0 sont conservés pour la « fin d’IPv4 ». . .
Chaque région dispose ainsi de 32 millions d’adresses de classe C.
Les organismes chargés d’allouer les adresses sont des RIRs,
Regional Internet Registries.

Simplification du routage
Quand un routeur hors d’Europe reçoit une adresse à destina-
tion de 194.x.y.z ou 195.x.y.z, il doit l’expédier vers un routeur
européen.
ResAvI
and prefix length in Chapter 8. All possible mask lengths are shown for /1 to /32. The
/0 mask matches the whole Internet and is discussed in the routing chapters.
Even when CIDR was used, all bits after the IP network address had to be zero, an
aspect of IP addressing that did not change. For example, 192.168.64.0/18 was a valid 134 PART II Core Protocols
IP network address, but 192.168.64.0/17 was not (due to the presence of the “1” bit
for the “64” in the 17th bit position). This aspect of CIDR is shown in Figure 4.6. The IP
CIDR
network 192.168.64.0/18 is a CIDR “supernet” because the mask contained fewer bits
than the natural mask in classful IP addressing. Table 4.5 CIDR Prefixes and Addressing* (Continued)
238
Les différents préfixes possibles Prefix Length Dotted Decimal Number of Classful Number of Usable IPv4
Table 4.5 CIDR Prefixes and Addressing* Netmask Networks Addresses
Prefix Length Dotted Decimal Number of Classful Number of Usable IPv4 /18 255.255.192.0 64 Class C’s 16,382
Netmask Networks Addresses
/19 255.255.224.0 32 Class C’s 8,190
/1 128.0.0.0 128 Class A’s 2,147,483,646
/20 255.255.240 16 Class C’s 4,094
/2 192.0.0.0 64 Class A’s 1,073,741,822
/21 255.255.248.0 8 Class C’s 2,046
/3 224.0.0.0 32 Class A’s 536,870,910
/22 255.255.252.0 4 Class C’s 1,022
/4 240.0.0.0 16 Class A’s 268,435,454
/23 255.255.254.0 2 Class C’s 510
/5 248.0.0.0 8 Class A’s 134,217,726
/24 255.255.255.0 1 Class C 254
/6 252.0.0.0 4 Class A’s 67,108,862
/25 255.255.255.128 1/2 Class C 126
/7 254.0.0.0 2 Class A’s 33,554,430
/26 255.255.255.192 1/4 Class C 62
/8 255.0.0.0 1 Class A or 256 Class B’s 16,777,214
/27 255.255.255.224 1/8 Class C 30
/9 255.128.0.0 128 Class B’s 8,388,606
/28 255.255.255.240 1/16 Class C 14
/10 255.192.0.0 64 Class B’s 4,194,302
/29 255.255.255.248 1/32 Class C 6
/11 255.224.0.0 32 Class B’s 2,097,150
/30 255.255.255.252 1/64 Class C 2
/12 255.240.0.0 16 Class B’s 1,048,574
/31 255.255.255.254 1/128 Class C 0
/13 255.248.0.0 8 Class B’s 524,286
/32 255.255.255.255 1/256 Class C (1 host) – (1 host route)
/14 255.252.0.0 4 Class B’s 262,142
*All possible mask lengths are shown, for /1 to /32. The /0 mask matches the whole Internet and will be
/15 255.254.0.0 2 Class B’s 131,070 discussed in the routing chapters.
/16 255.255.0.0 1 Class B or 256 Class C’s 65,534
/17 255.255.128.0 128 Class C’s 32,766

(Continued) The /31 Prefix


Attention In many cases, a /31 prefix that allows only two IPv4 addresses on a subnet is use-
less. Hosts are not normally assigned addresses that indicate the network itself (the
Le préfixe \31 est réservé aux connexions « point à point » entre
lowest routeurs : avec
address on the subnet)unor identifiant machine
the directed broadcast (the réduit à 0 ou
highest address on
the subnet). Because a /31 prefix only allows the final bit to be 0 or 1, this prefix is
à 1. not useful for a subnet with hosts. Most subnets normally use a /30 prefix at most,
Avec des routeurs CISCO, il est également possible d’utiliser which
des «yields
unnumbered
two useful hostinterfaces » : to the low and high addresses.
addresses in addition
However, many router networks employ the /31 prefix to address the end-
interface Serial0 points of a point-to-point link such as SONET/SDH. There are no hosts to worry
about, and only the router network need worry about the use of internal address
ip unnumbered Ethernet0 spaces. With /31 prefixes, a single Class C address space can be used to provide
addresses for 128 (256 divided by 2) point-to-point inter-router links, not just 64
(256 divided by 4).
ResAvI
CIDR : Exemple & Conclusion 239

Gestion de l’affectation de sous-réseau par un FAI


Soit le réseau 200.25.0.0/16 géré par un FAI, « Fournisseur d’accès internet » ou ISP, « Internet service provider ».
Il veut décomposer le réseau 200.25.16.0/20 suivant :
ISP’s Block 200.25.16.0/20
200.25.30.0/23
Org A: 200.25.16.0/21
D
Reserved: 200.25.24.0/21
200.25.28.0/23 C Puis :
A 200.25.16.0/21 Reserved 200.25.24.0/21
Org B: 200.25.24.0/22
B Reserved 200.25.28.0/22
200.25.24.0/22
et enfin :
Reserved 200.25.28.0/22
Figure 30: Slicing the Pie - Classless Environment Org C: 200.25.28.0/23
Org D: 200.25.30.0/23
Stepest
Le CIDR #1:similaire
Divide the address block 200.25.16.0/20 into two equal size slices. Each block
au VLSM
represents one-half of the address space or 2,048 (211) IP addresses.
◦ le VLSM est réalisé à l’intérieur du réseau de l’organisation et il est caché de l’extérieur ;
ISP's
◦ le CIDR Block 11001000.00011001.0001
est réalisé 0000.00000000
par les différents organismes, FAI, et il est visible 200.25.16.0/20
de l’extérieur.
Org A: 11001000.00011001.00010000.00000000 200.25.16.0/21
LaReserved:
configuration des11001000.00011001.0001
tables de routages n’est pas1la
000.00000000
même, car le CIDR200.25.24.0/21
soit être communiqué à toutes les autres organi-
sations.
Step #2: Divide the reserved block (200.25.24.0/21) into two equal size slices. Each
block represents one-fourth of the address space or 1,024 (210) IP addresses.
Reserved 11001000.00011001.00011000.00000000 200.25.24.0/21
Org B: 11001000.00011001.00011000.00000000 200.25.24.0/22
ResAvI

Reserved 11001000.00011001.00011100.00000000 200.25.28.0/22

Step #3: Divide the reserved address block (200.25.28.0/22) into two equal size blocks.
CIDR : une méthodologie 240
Chapter 1 • Introduction to Computer Networking 75
Une abstraction du réseau et sa configuration en CIDR
Une première abstraction du réseau indépendam- A Subnet-1
C
ment de• Rutgers
Ivan Marsic l’adresse
University réseau de l’organisation : 54 R1 Subnet-2

Network 1: B
A Ethernet
C
C
Interfaces on
D
R1 A Network 2
Subnet-3
D
B Network 2:
Wi-Fi
D
Interfaces on R1
Network 3:
Network 1
Interfaces on
R2
Point- to-point Subnet-4
Network 3
B
R2 Interfaces on
Subnet-5
Network 4: Network 4
Point-to-point Network 5: Ethernet R2

Interfaces on
Network 5 A,B E F
9*: E F 9A: E F

Figure 1-35: Example internetwork: (a) The physical networks include 2 Ethernets, 2 point-
to-point links, and 1 Wi-Fi network. (b) Topology of the internetwork and interfaces.
Organization’s address subspace: Subnet-1: C
w.x.y.z/28 204.6.96.176/30
"#$%&'()! *$! (+*,-.(! &$/()$(/0#)1! &$! 2&34)(! 56789*:;! 0<&=<! =#$%&%/%! #>! >&?(! -<@%&=*.! $(/0#)1%! 204.6.94.180
&$/()=#$$(=/('! A@! /0#! )#4/()%B! C<(! 4$'().@&$3! $(/0#)1! /<*/! *! '(?&=(! 4%(%! /#! =#$$(=/! /#! #/<()! A Subnet-2:

81
Ivan '(?&=(%!
Marsic =#4.'! A(! *! DEF!
• Rutgers =#$$(=/&#$! .&1(! G/<()$(/! #)! C#1($! H&$3;! *! 0&)(.(%%! DEF! .&$1! %4=<! *%!
Une seconde abstraction du réseau avec la notion
University 76 204.6.94.176 204.6.96.180/30

.1
94
IJKB55! 91$#0$! *%! L&62&:! #)! M.4(/##/<;! #)! *! '&*.4-;! NOD;! #)! *! C65! =#$$(=/&#$B! G*=<! -<@%&=*.!

6.
4.
$(/0#)1!0&..!3($()*..@!4%(!&/%!#0$!>)*,(!>#),*/;!*$'!(*=<!>#),*/!<*%!*!.&,&/!#$!<#0!,4=<!'*/*! D

20
de « sub-net » et l’adresse réseau : 204.6.96.176/28
Table=*$!A(!%($/!&$!*!%&$3.(!>)*,(!9.&$1!PCQ;!O(=/&#$!5B5B7:B!
1-3: CIDR hierarchical address assignment for the internetwork in Figure
1-47.
204.6.94.177
204.6.94.182
Subnet-1: Subnet-2: Subnets-3&4: Subnet-5:
C0#!/@-(%!#>!$(/0#)1!$#'(%!*)(!'&%/&$34&%<('R!<#%/%!?%B!)#4/()%B!G*=<!!"#$!4%4*..@!<*%!*!%&$3.(! w.x.y.z/30 w.x.y.z+4/30 w.x.y.z+8/30 w.x.y.z+12/30 R1
Subnet Subnet mask Network prefix Interface addresses

Su 04.
$(/0#)1!*//*=<,($/!-#&$/;!1$#0$!*%! network interface;!*$'!/<()(>#)(!&/!=*$$#/!)(.*@!-*=1(/%!>#)!

2
bn 6.9
UH!!!!!!!204.6.94.176!

et 6.1
#/<()!$#'(%B!G?($!&>!*!<#%/!<*%!/0#!#)!,#)(!$(/0#)1!&$/()>*=(%;!%4=<!*%!$#'(!M!&$!2&34)(!56789*:;!

20

-3 8
&/! &%!(!$#/! &$/($'('!
204.6.94.176/30 11001100 00000110 01011110 101100-- [(A(H!!204.6.94.177!

: 4/
4.
/#! A(! 4%('! >#)! /)*$%&/! /)*>>&=B! S#%/%! 4%4*..@! '#! $#/! -*)/&=&-*/(! &$! /<(! )#4/&$3!

6.
204.6.94.178

94
*.3#)&/<,B!Q$.&1(!<#%/%;! %"&$'%#!<*?(!/<(!-)&,*)@!>4$=/&#$!#>!)(.*@&$3!/)*$%&/!/)*>>&=!>)#,! XA(H!!!!#/<()!
204.6.94.178!

.1

31
B 204.6.94.185

84
$#'(%B!G*=<!)#4/()!<*%!*!,&$&,4,!#>!/0#;!A4/!4%4*..@!,*$@!,#)(;!$(/0#)1!&$/()>*=(%B!T$!2&34)(! \H!!!!!!!204.6.94.180!
56789*:;!
"! A#/<! 204.6.94.180/30 ! <*?(!
)#4/()%! H5! *$'! HK! /<)((! $(/0#)1!
11001100 00000110 *//*=<,($/!
01011110 -#&$/%! 9&$/()>*=(%:!
101101-- (*=<B! G*=<!
[(A"H!! 204.6.94.181! Subnet-3: Subnet-4: 204.6.94.187 204.6.94.186
&$/()>*=(!#$!(?()@!<#%/!*$'!)#4/()!,4%/!<*?(!*!$(/0#)1!*'')(%%!/<*/!&%!3.#A*..@!4$&U4(B 8
!E!$#'(! w.x.y.z+8/31 w.x.y.z+10/31 R2
]H!!!!!!! 204.6.94.182! Subnet-4:
0&/<!/0#!#)!,#)(!$(/0#)1!&$/()>*=(%!&%!%*&'!/#!A(! multihomedV!9#);!,4./&=#$$(=/(':B!F#/&=(!/<*/! 204.6.94.188
204.6.94.184/31! 11001100 00000110 01011110 1011100-
[(ABH!!204.6.94.184! 204.6.96.186/31 204.6.94.189
B!
,4./&<#,('!<#%/%!'#!("$!-*)/&=&-*/(!&$!)#4/&$3!#)!>#)0*)'&$3!#>!/)*$%&/!/)*>>&=B!P4./&<#,('!<#%/%!
*=/! *%! *$@! #/<()! ($'! <#%/;! (+=(-/! /<(@! ,*@! 4%(! '&>>()($/! &$/()>*=(%! >#)! '&>>()($/!["A(H!! 204.6.94.185!
'(%/&$*/&#$%;! 204.6.94.190
'(-($'&$3!#$!/<(!'(%/&$*/&#$!'&%/*$=(B!
$! 204.6.94.186/31! 11001100 00000110 01011110 1011101-
["A"H!!204.6.94.186! AHB A>B Subnet-5:
204.6.96.188/30 E F
XA"H!!!!
C<(! 0<#.(! &'(*! A(<&$'! *! $(/0#)1! .*@()! -)#/#=#.! &%! /#! &,-.(,($/! /<(! =#$=(-/! #>! *! W?&)/4*.!
204.6.94.187!

$(/0#)1X!0<()(!'(?&=(%!/*.1!(?($!/<#43<!/<(@!*)(!>*)!*0*@;!=#$$(=/('!4%&$3!'&>>()($/!-<@%&=*.! ["ABH!!204.6.94.188!
I! 204.6.94.188/30! 11001100 00000110 01011110 101111-- TH!!!!!!!204.6.94.189!
$(/0#)1!/(=<$#.#3&(%B!C<&%!,(*$%!/<*/!/<(!.*@()%!*A#?(!/<(!$(/0#)1!.*@()!'#!$#/!$(('!/#!0#))@!
Figure 1-47: (a) Example internetwork with five physical networks reproduced from Figure
*A#4/! '(/*&.%;! %4=<! *%! '&>>()($=(%! &$! -*=1(/! >#),*/%! #)! %&Y(! .&,&/%! #>! 4$'().@&$3! CH!!!!!!! 204.6.94.190!
.&$16.*@()! 1-35 above. (b) Desired hierarchical address assignment under the CIDR scheme. (c)
"#$%&%'$%()&*"+%! ,-./! 012! 31245! 67789/! :-.! 8/58;85264! 655<.77.7! :1! :-.! /.:=1<>! 8/:.<?63.7! 67! Example of an actual address assignment.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!
7-1=/!8/!,6@4.!(AB!67!=.44!67!8/!C892<.!(A$)D3E%!
8
!C<&%!&%!$#/!$(=(%%*)&.@!/)4(!>#)!&$/()>*=(%!/<*/!*)(!A(<&$'!FEC%;!*%!'&%=4%%('!.*/()B!
V
!P#%/!$#/(A##1!=#,-4/()%!$#0*'*@%!=#,(!0&/<!/0#!#)!,#)(!$(/0#)1!&$/()>*=(%;!%4=<!*%!G/<()$(/;!L&62&;! !"##$%&' ($)' *+&' %,-&' $(' .//"%*),*.$0' *+,*' 1$"' ,)&' ,23.0.%*&).04' 1$")' $)4,0.5,*.$06%' 0&*7$)-' ,%'
M.4(/##/<;! (/=B! S#0(?();! /<(! <#%/! A(=#,(%! W,4./&<#,('X! #$.@! &>! /0#! #)! ,#)(! &$/()>*=(%! *)(! *%%&3$('!
1.4.5 Autonomous Systems and Path Vector Routing
4$&U4(!$(/0#)1!*'')(%%(%!*$'!/<(@!*)(!%&,4./*$(#4%.@!*=/&?(!#$!/<(&)!)(%-(=/&?(!-<@%&=*.!$(/0#)1%B! %+$70' .0' 8.4")&' 9:;<=' )&#)$2">&2' +&)&' .0' 8.4")&' 9:?@A,BC' D%%"3&' *+,*' 1$"' -0$7' *+,*' *+.%'
0&*7$)-' 7.//' )&3,.0' (.E&2' .0' %.5&=' ,02' 1$")' *,%-' .%' *$' ,>F".)&' ,' %&*' $(' 0&*7$)-' ,22)&%%&%' ,02'
ResAvI

F<1@4.G7!<.46:.5!:1!:-87!7.3:81/H!F<1@4.G!(%BI!→!J!
! ,%%.40'*+&3'$#*.3,//1'*$'*+&'+$%*%C'G$")'(.)%*'*,%-'.%'*$'2&*&)3.0&'+$7'3,01',22)&%%&%'*$')&F"&%*C'
C892<.! (ABI! K<.7./:7! 6! /6L;.! ;8.=! 1?! :-.! M/:.</.:N! =-.<.! G6/0! -17:7! 6<.! G2:26440! D%'%&&0'.0'!&>*.$0'9C?C9='H$*+')$"*&)%'I9',02'IJ'+,K&';'0&*7$)-'.0*&)(,>&%'&,>+C'L&>,"%&'1$")'
31//.3:.5! ;86! 8/:.<G.586<0! /15.7! D<12:.<7! 1<! 7=8:3-.7E! :-6:! 48;.! 8/785.! :-.! O/.:=1<>!
34125%P! ,-87! =1245! 8GK40! :-6:! :-.! 34125! 87! G6/69.5! @0! 6! 78/94.! 65G8/87:<6:8;.!
.0*&)0&*7$)-'+,%','*$*,/'$('9;'.0*&)(,>&%'A;'+';'($)')$"*&)%='J'($)'+$%*'L',02'<'×'9'($)'$*+&)'+$%*%B='
1<96/8Q6:81/!6/5!644!/15.7!311K.<6:.!:1!K<1;85.!:-.!@.7:!7.<;83.!:1!:-.!31/72G.<7R!-17:7%! 1$"' 0&&2' 9;' "0.F"&' MN' ,22)&%%&%C' O$7&K&)=' 1$"' 7$"/2' /.-&' *$' %*)">*")&' 1$")' $)4,0.5,*.$06%'
11.2 La segmentation : les commandes « classiques » 241
Pour configurer une interface réseau sous Gnu/Linux

$ ifconfig - a permet d’afficher toutes les interfaces réseaux présentes sur la machine qu’elle soit
ou non activée.
$ sudo ifconfig eth0 up Active l’interface réseau (down pour la désactiver).

$ sudo ifconfig eth0 192.168.1.1/24 permet de définir l’@IP d’une interface réseau.

$ sudo ifconfig eth0 0.0.0.0/0 supprime l’@IP associée à l’interface.

Pour configurer une interface avec DHCP, « Dynamic Host Configuration Protocol »

$ sudo dhclient eth0 lance la configuration de l’interface par DHCP (@IP + @IP passerelle + @IP DNS
+ etc.).
$ sudo dhclient eth0 - r dé-configure l’interface en « libérant » la configuration IP

Pour configurer la table de routage

$ sudo route Affiche la table de routage du système.

$ sudo route add default gw 192.168.1.254 eth0 ajoute la passerelle « par défaut » vers le routeur 192.168.1.254.

$ sudo route add -net 172.16.10.10/24 gw 192.168.1.254 ajoute un chemin de routage vers le réseau indiqué (l’op-
tion del au lieu de add permet la suppression de la route).
sudo route add -host 98.76.54.32 gw 12.34.56.1 ajoute un chemin pour un « host » donné.
ResAvI
La segmentation : les commandes « modernes » 242

Il vaut mieux utiliser la commande « ip », du package iproute2.

Afficher le configuration réseau

$ ip addr afficher la liste des interfaces qu’elles soient ou non activées.


$ ip link

$ ip route affiche la table de routage.

Configuration d’une interface

$ sudo ip addr add 172.16.0.1/24 dev tap0 configurer l’interface et l’activer.


$ sudo ip link set tap0 up

$ ip link set eth0 promisc on passer l’interface en mode « promiscuous » pour laisser passer les trames qui ne
sont pas à destination de cette interface.
$ ip link set eth0 mtu 1500 configure la MTU de l’interface.

Configuration de la table de routage

$ ip route add 10.0.0.0/24 via 193.233.7.65 ajouter une route vers un réseau en passant par un routeur. On utilisera
del pour enlever cette route.
$ ip route add default via 192.168.0.254 ajouter la route par défaut.
ResAvI
La segmentation : les commandes 243
Exemples
$ ip link list
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
link/ether 00:0c:29:9d:ea:19 brd ff:ff:ff:ff:ff:ff

$ ip address show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
link/ether 00:0c:29:9d:ea:19 brd ff:ff:ff:ff:ff:ff
inet 192.168.127.133/24 brd 192.168.127.255 scope global eth0
inet6 fe80::20c:29ff:fe9d:ea19/64 scope link valid_lft forever preferred_lft forever

$ ip route show
192.168.127.0/24 dev eth0 proto kernel scope link src 192.168.127.131 metric 1
default via 192.168.127.2 dev eth0 proto static
ResAvI
La segmentation : la configuration du noyau GNU/Linux 244
Déclencher les fonctions de routage sous GNU/Linux
À l’aide de la commande sysctl :
1 sudo sysctl net.ipv4.ip_forward=1
2 sysctl net.ipv4.ip_forward
La ligne 1 active le « forwarding » et la ligne 2 vérifie l’activation.

Pour le rendre permanent, c-à-d activé lors du prochain redémarrage, il faut ajouter la ligne
suivante dans le fichier /etc/sysctl.conf
1 net.ipv4.ip_forward = 1
Pour prendre en compte la modification du fichier :
1 sudo sysctl -p /etc/sysctl.conf

Il est également possible d’utiliser les fichiers spéciaux du répertoire /proc :


1 echo 1 > /proc/sys/net/ipv4/ip_forward

Le routage aura lieu entre les différentes interfaces présentes sur le système, en accord avec la
table de routage du système.
ResAvI
11.3 Segmentation : domaine de diffusion et de collision 245
Domaine de diffusion
Pour un réseau à diffusion, on définit le « domaine de diffusion » comme étant la zone de taille maximale où il est possible
de recevoir un message envoyé dans la zone.

Par exemple dans Ethernet, un domaine de diffusion définie la limite de la transmission d’une trame (qu’elle soit transmise
vers l’@MAC d’une machine, ou bien l’@MAC de diffusion FF:FF:FF:FF:FF:FF) : en dehors de cette zone de diffusion, il
n’est pas possible de recevoir la trame envoyée.

La taille de la zone de diffusion est limitée :


− par des contraintes techniques : limitation de la transmission physique (WiFi, câbles Ethernet trop long), choix technolo-
giques, etc.
− pour des décisions administratives :
 limitation des transmissions à un ensemble choisi de matériels,
 augmentation le nombre de machines connectées à un même réseau ;
 amélioration les débits (moins de partage du réseau), application de QoS, « Quality of Service » ;
 prise en compte de la sécurité (isoler les postes) ;
 etc.
Domaine de collision
Dans un réseau à diffusion, lorsqu’au moins deux messages sont diffusés par deux entités autonomes sans contrôle
centralisé d’une entité d’arbitrage, il existe un risque de collision.
Cela est vrai dans Ethernet 10/100 Mbps, faux dans Ethernet Gigabit, WiFi par exemple.

Un domaine de collision est une zone du réseau où il existe une compétition pour l’accès à cette zone.
Le résultat de cette compétition peut être la création de collision et une baisse de débit par rapport à la capacité du réseau.
ResAvI
browser applications are based on the Hypertext Transfer Protocol (HTTP). Some of
these applications are defined to run on TCP and others are defined to run on UDP, and
in many cases can run on either.

Segmentation des
BRIDGES, ROUTERS, AND réseaux locaux : commutation
SWITCHES 246
The TCP/IP protocol stack establishes an architecture for internetworking. These
protocols can be used :to une
La commutation connect LANs in the
affaire desame building, on a campus, or around
matériel
the world. Not all internetworking devices are the same. Generally, network architects
seeking to extend the reach of a LAN can choose from one of four major interconnec-
Letionmatériel utilisé
devices: repeaters, pour
bridges, réaliser
routers, cette commutation :
and switches.
Not long ago, the network configuration and the available devices determined
◦ le répéteur, « repeater », pour allonger les distances physiques de transmission ;
which type of internetworking device should be used. Today, network configurations
are growing more and more complex, and the devices available often combine the fea-
◦ le pont, « bridge », pour connecter des domaines de diffusion avec intelligence ;
tures of several of these devices. For example, the routers on the Illustrated Network
◦have
le «allconcentrateur
the features of traditional routers, plus»
commuté some
ouswitching
« switch capabilities.
», pour connecter et isoler surtout.
In their simplest forms, repeaters, bridges, and routers operate at different layers of
the TCP/IP protocol stack, as shown in Figure 2.5. Roughly, repeaters forward bits from
one LAN segment to another, bridges forward frames, and routers forward packets.
Couches, commutation & routage
Host Host
? Le routeur intervient sur la couche 3.
Layer 5 Application Layer Application Layer Il retransmet, « forward », des datagrammes ;
Il réalise du routage.
Layer 4 Transport Layer Transport Layer
Router ? Le pont intervient sur la couche 2.
Layer 3 Network Layer Network Layer

Layer 2 Data Link Layer


Bridge
Data Link Layer
Il retransmet, « forward », des trames ;
Repeater
Layer 1 Physical Layer Physical Layer Il réalise de la commutation.
FIGURE 2.5 ? Le répéteur intervient sur la couche 1.
Repeater, bridge, and router. A repeater “spits bits,” while a bridge deals with complete frames.
A router operates at the packet level and is the main mode of the Internet.
Il ne commute pas mais allonge les distances.
Il est équivalent à un « hub ».
Il retransmet des bits à 1 ou à 0.
ResAvI
??
Le fonctionnement illustré d’un routeur 247

? une ligne de transmission correspond à un tuyau


Network Layer
3 dans lequel s’écoule les données (des bits) ;
2
? un paquet correspond à une « portion » de ces don-
nées : il est matérialisé par un seau.
? un paquet entre dans le routeur par l’« input » et
sort par l’« output » ;
? au milieu se trouve un « switch », un commutateur
Link & Physical
Layers sélectionnant la sortie du paquet sur une ligne de
transmission.
4
Services offered to incoming packets:
1 Receiving and storing packets
1 2 Forwarding decision for packets

3 Moving packets from input to output port

4 Transmission of packets

1. récupérer les paquets (datagramme ou circuit virtuel) ; 1


Receiving and storing packets
2. décider de la manière de « faire suivre » le paquet : for-
warding decision ;
Forwarding decision for packets
3. commuter un circuit d’acheminement interne reliant 2
l’entrée à la sortie choisie ; 3
4. transmettre le paquet sur ce circuit interne. Moving packets from input to output port

Transmission of packets
ResAvI
Le fonctionnement d’un routeur 248

“Forwarding table” Le routeur décide en fonction du contenu de sa table de routage,


« forwarding table », de l’aiguillage des paquets.

“Interface 2”
(a) “Interface 1”

“Interface 3” Input ports Switch fabric Output ports


“Packets”
“Interface 4”

Forwarding table

(b) Destination Output Interface


ece.rutgers.edu
msi.unilim.fr Interface 3
xlim.fr
cs.rutgers.edu Interface 2
e ts
P ack Router
Arbiter

Il possède des circuits électroniques spécialisés, des NFE, « Network Flow Engine » :
Input port Output port Routing processor CPU Forwarding & Routing
Input port processor
NFE processor NFE processor CPU Memory
Network layer Memory Network layer Output port

packets
Link layer
Link layer
Line card Line card
Line card Line card

packets

System bus System bus


Cette architecture matérielle :
. permet d’atteindre des débits très élevés : délais de traversé des paquets, gestion de table de routage importante, gestion
de la QoS, gestion de « circuit-virtuel », gestion de Firewall etc ;
. fait la différence avec des architectures non dédiées comme un matériel générique sous GNU/Linux : plus de port de
connexion pour ligne de transmission, support de la fibre optique, alimentation protégée etc.
. quelques sociétés sont présentes : CISCO System, Juniper Networks, Hewlett-Packard, Huawei.
ResAvI
??
Switch vs Hub 249

Computer Computer

Ethernet hub / bridge / switch

Computer

Ethernet Hub
Twisted pair
cable Network
port

 un hub ou répéteur transmet la trame sur


une sortie pendant qu’elle est reçue sur
une entrée : on parle de « cut-through swit-
ching » ;
 un switch ou bridge reçoit d’abord toute la
Ethernet Switch
trame et la stocke ; il attend alors que le ré-
seau auquel est connecté le port de sortie
soit libre pour la transmettre : on parle de
« store-and-forward switching ».

Sur le schéma, on constate que différents ports peuvent communiquer simultanément (indiqués en rouge) dans
le cas d’un switch : on comprend qu’il y a une forme de commutation et d’établissement de « circuit » physique.
ResAvI
11.4 Segmentation des réseaux locaux : le pont ou « bridge » 250
Le pont
◦ connecte au moins deux domaines de collision ;
◦ ne crée qu’un seul domaine de diffusion ;
◦ commute une trame d’une ligne de transmission à une autre.

Fonctionnement :
Pour chaque trame, suivant l’@MAC de destination :
◦ « forwarded » : la trame est envoyée uniquement dans le seg-
ment où se trouve la destination ;
◦ « filtered » : la trame est détruite par le pont sans en informer
la source ;
◦ « flooded » : la trame est envoyée à chaque segment attaché
au pont (cas d’une @MAC de destination de broadcast ou de
multicast).

Pour connaitre les domaines de collision, où les matériels entrent en compétition pour l’accès au support de transmission,
le pont écoute les trames qui circulent et apprennent les @MAC utilisées dans ces trames.

Il peut y avoir des problèmes :


? le trafic multicast peut encombrer inutilement le réseau (vidéoconférence par ex.) ;
? la présence de plusieurs ponts peut crée des boucles.
Pour la découvrir et désactiver les ponts inutiles, on utilise le SPT, « Spanning Tree Protocol ».
ResAvI
Segmentation des réseaux locaux : le pont 251
Le pont
Le pont :
− dispose de deux « ports » de connexion réseau (prise Ethernet) ;
− apprend les @MAC des matériels connectés sur chacun de ces ports (au travers d’un « hub »), en surveillant
la destination des trames qui y circulent.

Exemple :
1. le pont établit une table où les entrées associent
un port avec une @MAC (les entrées ont une durée
de vie limitée) ;
2. une trame est envoyée :
 de l’@MAC 00:00:0C:DD:DD:DD ;
 vers l’@MAC 00:00:0C:CC:CC:CC ;
3. le pont :
 vérifie les entrées de sa table : les deux @MAC
sont sur le port 2 ;
 l’@MAC de destination n’est pas une adresse
de diffusion ni de multicast ;
 ne « forward » pas la trame sur le port 1.
4. on évite de diffuser la trame sur une partie du LAN.

Sur l’exemple, les 4 machines sont configurées dans le même réseau IP.
ResAvI
Segmentation des réseaux locaux : le pont 252
Le STP, « Spanning Tree Protocol »
La présence de deux ponts crée une boucle dans le LAN :
a. les deux ponts reçoivent une trame émise par le Host1 à destination
du Host6 dans le segment du haut ;
b. bridge1 retransmet la trame vers le segment du bas ;
c. bridge2 reçoit du trafic dans le segment du bas de Host1 à Host6 et
modifie sa table pour mettre Host1 dans le segment du bas ;
d. bridge2 retransmet la trame dans le segment du haut ;
e. etc.

Le STP permet de désactiver les ponts pour éviter les boucles :


. les ponts étant accessibles les uns des autres par un « port », un pont
identifie un autre pont par le port qu’il doit employer pour l’atteindre ;
. chaque pont existant conserve un unique pont qui doit lui permettre d’at-
teindre l’intégralité du réseau : le pont racine, ou « root port » parce qu’on
l’atteint uniquement par un certain port.
. le choix du pont racine à conserver pour, le « root port », se fait à l’aide
de trame diffusée au format STP, suivant :
 la sélection du chemin le plus court pour l’atteindre, en nombre de
pont à franchir ;
 un identifiant numérique qui peut être choisi, le « port ID » lorsqu’il y
a plusieurs chemins possibles ;
 des intervalles de temps régulier afin d’éviter la rupture du réseau en
cas de panne d’un pont.
ResAvI
Le pont : les commandes sous GNU/Linux 253

Il est nécessaire d’installer le paquetage de gestion des ponts : $ sudo apt-get install bridge-utils
Puis de configurer le pont sur le système disposant d’au moins deux interfaces réseaux :
1 sudo bash En ligne 7 et 8, on configure les interfaces sans adresse IP et en mode « promis-
2 ifconfig eth0 down cuous », car ses interfaces vont recevoir des trames ethernet qui devront franchir le
3 ifconfig eth1 down pont et qui ne sont pas destinées au pont lui-même.
4 brctl addbr monpont
5 brctl addif monpont eth0 La ligne 10, qui permet la configuration du pont est nécessaire si on prévoit d’accéder
6 brctl addif monpont eth1 depuis le réseau à la machine mettant en œuvre le pont.
7 ifconfig eth0 0.0.0.0 promisc up
8 ifconfig eth1 0.0.0.0 promisc up
9 ifconfig monpont up
10 dhclient monpont

On peut ensuite vérifier la configuration à l’aide de la commande brctl show :


bridge name bridge.id STP enabled interfaces
pont 8000.000c2922ca2f no eth0
eth1

On peut regarder ce que le pont à « appris » comme adresse MAC connectées à ces différentes interfaces à l’aide de la commande
brctl showmacs :
port no mac addr is local? ageing timer
1 00:0c:29:22:ca:2f yes 0.00
2 00:0c:29:22:ca:39 yes 0.00
2 00:0c:29:22:ea:19 no 6.87
1 00:50:56:fa:2c:a8 no 12.95
1 00:50:56:fe:7d:70 no 13.62
ResAvI
Le pont : les risques 254

Attention !
Un pont sert d’intermédiaire de communication, c’est une sorte de « routeur » de niveau 2,
il faut donc faire attention à des attaques de type MiTM, « Man in The Middle », où :

 un attaquant se fait désigner comme pont racine par les autres ponts et peut ainsi inter-
cepter le trafic réseau. On parle « d’attaque sur le STP » ;

 un attaquant transmets des trames sous l’identité, adresse MAC, d’un autre poste pour se
faire retransmettre les trames à destination de cet autre poste en corrompant les tables
d’association (MAC spoofing) ;

 un attaquant transmets « énormément » de trame sous des identités différentes pour sa-
turer la mémoire cache de la table associative du pont associée au port.
Il arrive que dans ce cas le switch passe en mode concentrateur uniquement, « hub », et
diffuse toute trame sur tous les ports (il arrête de travailler !).
ResAvI
Le pont : le filtrage 255

Il est possible d’établir des règles de firewall sur les ponts, c-à-d sur les trames ethernet de niveau 2, à l’aide d’une extension
de NetFilter les « ebtables ».
Pour pouvoir les utiliser, il faut installer le paquetage suivant :
$ sudo apt-get install ebtables
Il est ainsi possible :
− de faire du filtrage en tenant compte que l’on travaille au niveau des trames :
1 ebtables -P FORWARD DROP
2 ebtables -A FORWARD -p Ipv4 -j ACCEPT
3 ebtables -A FORWARD -p ARP -j ACCEPT
Comme pour le firewall de niveau 3, basé sur iptables, on peut définir une « policy », puis autorisé le trafic IP et ARP
seulement.

Les options « -P », pour « policy », « -A » pour « Add », « p » pour « protocol » sont similaires à celles utilisées pour
netfilter qui sera vu plus loin.
ResAvI
Le pont : le filtrage 256

Il est possible de faire :


− du filtrage :
1 ebtables -A FORWARD -p IPV4 –ip-protocol 1 -j DROP
Ici, on utilise la table par défaut, « filter », et on met une règle sur la section « FORWARD » afin de filtrer les trames
contenant un datagramme IP et un contenu de protocole numéro 1, c-à-d ICMP.

− faire de la protection anti-spoofing :


1 ebtables -A FORWARD -p Ipv4 –ip-src 172.16.2.5 -s ! 00:11:22:33:44:55 -j DROP
Ici, la trame ne traversera le pont que si l’adresse MAC et l’adresse IP correspondent.

Remarque
Cette règle peut également s’écrire avec iptables :
1 iptables -A FORWARD -s 172.16.1.4 -m mac –mac-source ! 00:11:22:33:44:55 -j DROP
Le traitement est moins rapide car ebtables intervient en amont d’iptables.

On peut également traiter plusieurs associations, en utilisant une policy basée sur DROP :
1 ebtables -A FORWARD -p IPv4 –among-dst 00:11:22:33:44:55=172.16.1.4,00:11:33:44:22:55=172.16.1.5
2 -j ACCEPT
ResAvI
Le pont : le filtrage 257

− faire de la « traduction » d’adresse, « NAT », sur les adresses MAC, seulement pour des adresses qui existent sur des
interfaces différentes (si la trame est réécrite avec une adresse MAC destination qui est sur l’interface d’où elle est venue
intialement, elle ne sera pas retransmise) :
1 ebtables -t nat -A PREROUTING -d 00:11:22:33:44:55 -i eth0 -j dnat –to-destination 54:44:33:22:11:00
Ici, on utilise la table « nat » pour réécrire des adresses MAC dans les trames au passage dans le pont.
1 ebtables -t nat -A POSTROUTING -s 00:11:22:33:44:55 -i eth0
2 -j snat –to-source 54:44:33:22:11:00 –snat-target ACCEPT
Ici, on change l’adresse MAC source.
− répondre automatiquement à des requêtes arp :
1 ebtables -t nat -A PREROUTING -p arp –arp-opcode Request –arp-ip-dst 192.168.127.2 -
2 j arpreply –arpreply-mac de:ad:be:ef:ca:fe
Ici, on peut répondre automatiquement à une requête ARP, par exemple en donnant une adresse MAC différente pour
une adresse IP connue et faire du MiTM. . .
ResAvI
external device, such as a router, is always required to internetwork the domains.
When LAN switches define multiple broadcast domains they are creating virtual
LANs (VLANs). Not all LAN switches can define VLANs, especially smaller ones, but
many can. A VLAN defines membership to a LAN logically, through configuration, not
physically by sharing media or devices.
11.5 Segmentation des réseaux locaux : commutation et switch, les VLANs
On a WAN, the term “switch” means a class of network nodes that behave very differ- 258
ently than routers. We’ll look more closely at how “fast packet network” devices, such as
Le switch
Frame Relay and ATM switches as network nodes, differ from routers in a later chapter.
Il permet :
−Virtual LANs
de segmenter un domaine de diffusion entre plusieurs domaines de collisions, avec plus de deux ports de
A VLAN, according to the official IEEE definition, defines broadcast domains at Layer 2.
connexion
VLANs, à la 2manière
as a Layer d’un
entity, really pont
have ; to do with the TCP/IP protocol stack,
little
− de créer plusieurs domaines de diffusion and
but VLANs make a huge difference in how switches routers operate
segmentés : on a TCP/IP
network.
 Routers
en associant un oubroadcasts
do not propagate plusieurs as ports
bridgesàdo, un
so domaine de diffusion
a router automatically ;
defines
broadcast domains on
 en assurant uneach interface.
travail Layer entre
de pont 2 LAN switches logically create
ces différents portsbroadcast
;
domains based on configuration of the switch. The configuration tells the LAN switch
 en
what permettant
to do l’utilisation
with a broadcast receiveddeson aautres portsoflibres
port in terms pour ports
what other définir un ou plusieurs autres domaines de diffusion.
should
receive it (or if it should even be flooded to all other ports).
Dans ce cas, on dira que le switch créé des LANs virtuels, appelés VLANs.
When LAN switches are used to connect LAN segments, the broadcast domains
cannot be determined just by looking at the network diagram. Systems can belong to
Les different,
VLANsthe same, or even multiple, broadcast domains. The configuration files in the
Les domaines de diffusion, « broadcast domain »,
LAN Switch
VLAN1 et VLAN2 sont des « entités logiques » dont
les matériels sont connectés par des pont virtuels.

Cli Cli Cli Svr Cli Cli Cli Svr


VLAN 1 VLAN 2 VLAN 1 VLAN 2 VLAN 2 VLAN 1 VLAN 2 VLAN 1
Broadcast messages from VLAN 1 Broadcast messages from VLAN 2
devices are sent only to the devices are sent only to the
VLAN 1 broadcast domain. VLAN 2 broadcast domain.

FIGURE 2.6
VLANs in a LAN switch. Broadcast domains are now logical entities connected by “virtual bridges”
ResAvI

in the device.
Segmentation des réseaux locaux : commutation et routage, les VLANs 259

La segmentation du réseau de l’organisation peut être réa-


lisée avec :
? une approche « traditionnelle » :
 différents LAN utilisant des ponts, switch ou répé-
teurs ;
 un routeur interconnectant ces différents LANs ;
? une approche « VLAN » :
 un ou plusieurs switch en mode VLAN ;
 un routeur interconnectant ces différents VLANs.

L’avantage du VLAN est sa flexibilité :


◦ il est possible d’associer un port à un VLAN particu-
lier ;
◦ chacun de ses ports peut être connecté à un site par-
ticulier ;
◦ une personne peut rester dans le même bureau tout
en migrant dans un VLAN différent ;
◦ son usage se combine avec celui d’un routeur :
 le routeur reste nécessaire aux échanges entre
VLANs
ResAvI
Les VLANs 260
Les trames de VLAN
La gestion des VLANs se fait au travers de l’affectation d’un port d’un switch à un domaine de diffusion particulier, c-à-d à
un VLAN particulier.

Lorsque plusieurs switchs doivent être reliés afin de créer les différents
VLANs, il est nécessaire d’échanger entre ces switchs des trames ap-
partenant à différents VLANs, il est nécessaire de savoir à quel VLAN
appartient une trame.

− on doit « noter » à quel VLAN chaque trame appartient ;


− on utilise la norme IEEE 802.1Q, qui étend la trame 802.3 :
 elle utilise le « frame tagging », c-à-d de l’étiquetage de trame ;
 les étiquettes permettent de savoir à quel domaine de diffusion appartient la trame ;
 il est possible de mettre plusieurs tags dans une trame

Le Trunk ou le multiplexage de VLAN


On appelle « Trunk » la liaison où cir-
cule les trames des différents VLANs.
ResAvI
rapide ; le MSTP (Multiple Spanning Tree), décrit dans le standard IEEE 802.1Q, permet
de créer des arbres couvrants multiples pour les différents VLAN.

Arbre couvrant multiple dans les VLAN (802.1Q)


L’idée sous-jacente au concept de STP multiple est de proposer un algorithme qui tienne
Switch
compte de & VLANde: lales
la complexité améliorations
circulation des flux des différents VLAN dans les trunks. 261
Dans l’exemple de la figure 5.16a, deux commutateurs reliés par deux trunks transportent
Amélioration desVLAN
les données de deux protocoles « anti-boucles
(l’un des deux » plein, l’autre en pointillé). La
VLAN est en trait
mise en œuvre d’un seul arbre couvrant conduit à bloquer un port dans chaque commu-
Le protocole STP, « Spanning Tree Protocol » à été modifié :
tateur pour éviter les boucles. La figure 5.16b montre que l’utilisation de deux arbres
?couvrants
RSTP,évite ce problème.
« Rapid Spanning Tree », « 802.1w » : amélioration de l’arbre de recouvrement tenant compte des VLANs ;
?Pour permettre
MSTP, une configuration
« Multiple Spanning dynamique
Tree », «des différents
802.1Q » :VLAN,
permetles de
trunks doivent
créer des abres de recouvrement multiples pour les différents
transporter les données de tous les VLAN.
VLANS :
gure 5.16 Configuration avec deux VLAN véhiculés sur deux
emple de deux Trunk 1 Trunk 1
trunks distincts entre les commutateurs SW1 et
mmutateurs reliés
r deux trunks VLAN 2 SW2.
VLAN 2
ur véhiculer les
nnées de deux Un gros trait signifie qu’un port est bloqué.
AN. Trunk 2 Trunk 2

SW1 VLAN 1 SW2 SW1 VLAN 1 SW2


(a) (b)
Configuration avec deux VLAN véhiculés sur deux trunks distincts entre les
a. Configuration
commutateurs SW1 utilisant
et SW2.un seul
Un gros traitarbre couvrant
signifie qu’un port est :bloqué.
pour éviter la création d’une boucle entre SW1 et SW2, on ne peut pas
(a) : Configuration utilisant un seul arbre couvrant. Pour éviter la création d’une boucle
se servir d’un des deux liens pour écouler le trafic normal des VLAN.
entre SW1 et SW2, on ne peut pas se servir d’un des deux liens pour écouler le
Ici, SW2 trafic
a normal des VLAN.
ses deux Ici, SW2
ports a ses deux
bloqués : leports bloqués :lien
second le second
sertlienuniquement
sert de secours en cas de panne du premier.
uniquement de secours en cas de panne du premier.
b. Configuration utilisant deux arbres couvrants : dans
(b) : Configuration utilisant deux arbres couvrants. Dans ce cas, un des trunks ce cas, un des trunks transporte les données d’un VLAN, tandis que
transporte les données d’un VLAN, tandis que l’autre véhicule les données
l’autre véhicule lesEndonnées
de l’autre VLAN. cas de pannede d’unl’autre
trunk, le VLAN.
lien survivant peut transporter
En cas les dedonnées
panne des deux VLAN.
d’un trunk, le lien survivant peut transporter les données des deux VLAN.
Création de « commutateur-routeur »
Nous voyons bien que la contrepartie de la multiplication des VLAN dans le réseau de
l’entreprise est la multiplication du nombre d’arbres couvrants à maintenir. Cette prolifé-
Ilration
combine les fonctionnalités d’un commutateur avec un routeur :
risque d’entraîner une gestion complexe de l’algorithme et provoquer une baisse

desroutage interVLAN
performances en fonction de l’adressage IP ;
des commutateurs.

Pour rendre ladynamique
routage circulation entre
avecVLAN
desplus efficace, il de
protocoles s’estroutage
développécomme
des techniques de
RIP, OSPF et BGP ;
routage interVLAN, naturellement assumées par les commutateurs, qui sont ainsi devenus

desprotocole VRRP, « Virtual Router Redundancy Protocol », RFC 2338 : permet d’introduire de la redondance de routeur
commutateurs-routeurs.
pour le choix du routeur par défaut ;
Commutateurs-routeurs
− du contrôle d’accès, « Access Control List » : bloquer l’accès d’un sous-réseau à un autre sous-réseau.
ResAvI

Les fonctionnalités de plus en plus étendues des commutateurs empiètent sur les fonctions
classiquement dévolues aux routeurs. De ce fait, les commutateurs les plus sophistiqués
sont souvent appelés des commutateurs-routeurs. Désormais, en plus des fonctions tradi-
tionnelles de commutation d’un port à l’autre, les commutateurs-routeurs sont capables
Les VLANs et le trunking
CHAPTER 2 TCP/IP Protocols and Devices 67 262
La norme 802.1Q
Ethernet Frame Structure Elle ajoute :
Destination Source
Address Address
Tag
4 bytes
Type
2 bytes
Information
46–1500 bytes
FCS
4 bytes
− 4 octets au format de la trame, entre l’@MAC source et le
6 bytes 6 bytes
champs type contenu dans la trame ;
La taille maximale de la trame passe de 1518 octets à 1522
Tag Protocol ID Priority CFI VLAN ID
16 bits 3 bits 1 bit 12 bits octets.
TPID: 802.1p VID (unique): − un identifiant de VLAN qui peut aller de 0 à 4095.
0 3 8100 (defaut), priority levels 0 to 4095
0 3 9100, (027)
0 3 9200
(Canonical Format Indicator: 0 5 canonical MAC, 1 5 noncanonical MAC) Il est possible d’utiliser un double étiquetage, appelé « q in q »
Ethernet q-in-q VLAN tags
pour permettre à un FAI d’avoir ses propres VLANs an plus de
DA SA Type Data FCS Original Ethernet Frame ceux du client (dans le cas ou les sites du client sont dispersés
et doivent communiquer entre eux par l’intermédiaire du FAI).
DA SA Tag Type Data FCS 802.1q Tagged Frame

DA SA Tag Tag Type Data FCS Doubly-Tagged Frame

LaFIGURE
norme2.7 802.1p intègre des notions de priorités pour favoriser le trafic d’un VLAN et faire de la QoS.
VLAN tags
Description and frames.
: Note that frames can contain more than one tag, and often do.

. le TPID, « Tag Protocol Identifier » : prend la place du type dans une trame 802.3 et identifie la trame comme étant une
trame de VLAN (valeur 0x8100) ;
Cutting down on broadcasts—Some network protocols are much worse than
. PCP, « Priority
others CodetoPoint
when it comes » : champ
broadcasts. Thesesur 3 bitsframes
broadcast allantcan de be
la an
priorité
issue 1 la plus faible à 7 la plus forte (la valeur 0 indique pas
because they rarely carry user data and each and every system on the segment
demust
priorité).
process the content of a broadcast frame. VLANs can isolate protocol
broadcasts
Ces priorités so that they arrive
peuvent êtreonly at the systems
associées à des that need to hear
classes voix, vidéo, données. . . ;
them.:Also,
de trafic
a number of hosts that might otherwise make up a very large logical network
. CFI,
(e.g., Page 19 what we will call later a “/19-sized wireless subnet”) could useRing : une trame dont le CFI est à 1, c-à-d non canonical,
« Canonical Format Indicator » : compatibilité avec les Token
VLANs
alors la because
trame ne theydoit
can pas
be just plain
être noisy. vers un port non tagé, non associé à un VLAN ;
relayée
Router delay—Older routers can
. VID, « VLAN Identifier » : identifie lebe much slower
VLAN, than le
LAN switches.
numéro 1VLANs can
est associé à un VLAN de gestion administrative, et la valeur 0
be used to establish logical boundaries that do not need to employ a router to
ResAvI

indique que
get traffic la one
from trameLANn’appartient à aucun
segment to another. VLAN.many routers today
(In fairness,
route at “wire speed” and do not introduce much latency into a network.)

The Illustrated Network uses Gigabit Ethernet links to connect the customer-edge
Les VLANs : la gestion sous GNU/Linux 263

Création d’interface de connexion à un VLAN


Il faut installer la prise en charge des VLANs :
$ sudo apt-get install vlan

Pour créer une interface virtuelle vers un VLAN, de numéro 10, connectée à une interface réelle
donnée :
sudo vconfig add eth0 10

Puis, on peut associer une adresse à cette interface de VLAN :


sudo ifconfig eth0.10 10.0.0.1/24
En utilisant une adresse dans le réseau 10.0.0.0/24 on empreinte l’interface eth0 et on modifie
la trame pour qu’elle soit en 802.1Q.
Ce fonctionnement équivaut à faire du « trunking ».
ResAvI
??
11.6 Les « containers » Linux 264
La virtualisation
Sous Linux, il est possible de créer des machines virtuelles suivant différentes méthodes :
? l’émulation hardware : où il est possible de faire tourner des OS différents par émulation, c-à-d. en émulant
l’intégralité du hardware mis à disposition de l’OS.
C’est une solution très lente. Exemple : qemu, bochs

? la « full virtualization » ou la virtualisation complète : on utilise un « Hyperviseur », et un point d’accès commun


aux ressources matérielles que l’on met à disposition des différents OS ;
On obtient de bonnes performances, mais il faut disposer d’un mode hyperviseur dans le processeur. Exemple :
VMWare, VirtualBox, IBM z/VM, KVM.

? la « paravirtualisation » : on utilise également un mode hyperviseur, mais on utilise uniquement des OS qui ont
été modifiés pour tenir compte de cette virtualisation.
On obtient les meilleurs performances, mais on ne peut l’exploiter que pour certains OS modifiables.
Exemple : Xen.

? la « virtualisation d’OS » : qui est également appelé « containerization » ou « zoning » qui permet de définir
différents « espaces utilisateurs » en utilisant un seul noyau.
Les performances sont excellentes, et le container ne s’applique que sur les éléments que l’on veut mettre
dans un container.
Exemple : OpenVZ, Linux-Vserver LXC.
ResAvI
??
Les containers Linux 265

Dans notre cas, nous allons virtualiser une pile TCP/IP afin de disposer de plusieurs machines reliées par diffé-
rents types de liens, etc.
La configuration d’un container
Exemple : on va définir :
− un pont mon_pont ;
− deux containers possédant chacun une interface connectée à ce pont :
1 # fichier lxc-ishtar1.cfg 1 # fichier lxc-ishtar2.cfg
2 lxc.utsname = ishtar1 2 lxc.utsname = ishtar2
3 lxc.tty = 3 3 lxc.tty = 3
4 lxc.pts = 1024 4 lxc.pts = 1024
5 lxc.network.type = veth 5 lxc.network.type = veth
6 lxc.network.flags = up 6 lxc.network.flags = up
7 lxc.network.link = mon_pont 7 lxc.network.link = mon_pont
8 lxc.network.name = eth0 8 lxc.network.name = eth0
9 lxc.network.ipv4 = 192.168.0.100/24 9 lxc.network.ipv4 = 192.168.0.200/24
Pour les exécuter et les arrêter :
$ sudo lxc-execute -f lxc-ishtar1.cfg -n Ishtar1 bash
$ sudo lxc-execute -f lxc-ishtar2.cfg -n Ishtar2 bash
$ sudo lxc-stop -n Ishtar1
Ici, on crée un container disposant d’une interface réseau et qui ne « confine » qu’un shell bash.
Attention : utiliser Ubuntu 10.10, avec la version de LXC > 0.7.2 !
ResAvI
??
Définition d’interface virtuelles sous GNU/Linux 266
Création d’une interface réseau virtuelle
Pour pouvoir créer une interface réseau virtuelle, de deux types :
− appelée TUN : pour le niveau 3, c-à-d. IP, qui permettra de faire du routage, par exemple à
travers un tunnel ;
− appelée TAP : pour le niveau 2, c-à-d. Ethernet, qui permettra de mettre en place un pont, ou
« bridge », c-à-d. la possibilité de faire passer une trame Ethernet d’une interface à une autre.

Vous devrez installer le paquetage uml-utilities pour pouvoir les utiliser :


$ sudo apt-get install uml-utilities

Ensuite, vous pourrez :


− créez une interface TAP : sudo tunctl -t ecoute (l’interface s’appelle, ici, « ecoute ») ;
− détruire une interface TAP : sudo tunctl -d ecoute ;
− activer l’interface virtuelle : sudo ipconfig ecoute up.
ResAvI
??
Connexion de container par VLAN 267

Pour connecter un container par un VLAN, on va d’abord créer une nouvelle interface virtuelle
sur la machine hôte :
$ sudo tunctl -t vers_net1
Puis configurer le container afin de s’accrocher à cette interface virtuelle :
1 lxc.utsname = ishtar1
2 lxc.network.type = vlan
3 lxc.network.vlan.id = 128
4 lxc.network.flags = up
5 lxc.network.link = vers_net1
6 lxc.network.name = eth0
7 lxc.network.ipv4 = 192.168.0.100/24
− à la ligne 2, on indique que la connexion du container sera faite au travers d’un VLAN ;
− en ligne 3, on choisit le VLAN d’identifiant 128 ;
− en ligne 5, on relie l’interface eth0 du container à l’interface virtuelle vers_net1 du container.
ResAvI
??
Utilisation de VLAN dans un container 268

On peut configurer un container pour que ses communications soient encapsulés dans un VLAN
en utilisant le type « vlan » pour définir son interface dans le fichier de configuration du container :
1 lxc.utsname = ishtar1
2 lxc.network.type = vlan
3 lxc.network.vlan.id = 128
4 lxc.network.flags = up
5 lxc.network.link = vers_net1
6 lxc.network.name = eth0
7 lxc.network.ipv4 = 192.168.0.100/24

On définira une interface virtuelle à laquelle le container s’accrochera, de type TUN avec la
commande :
$ sudo tunctl -t vers_net1

Ensuite, on peut « sniffer » l’interface « vers_net1 » avec tcpdump ou « wireshark ».


ResAvI
12 Le Firewall : la décision d’autoriser ou non le traitement du datagramme 269
Fonctionnement d’un Firewall sur un système
Lorsqu’un datagramme arrive sur une interface par l’intermédiaire de la couche de niveau 2, c-à-d ethernet, une
décision de routage doit être prise, en « amont » de la couche de niveau 3 du système :
il est possible d’analyser le paquet avant de l’introduire dans la pile TCP/IP locale
a. si le système n’assure pas les fonctions de rou-
(QWUpH
'pFLVLRQ 6RUWLH teur :
GH )25:$5'
URXWDJH  le paquet est à destination du système :
il est considéré comme en « Entrée », INPUT,
du système :
? il est filtré et/ou éventuellement modifié par
,1387 287387 le Firewall ;
7UDLWHPHQWORFDOPRGLILFDWLRQ
? s’il est accepté, il est dirigé vers un processus
ILOWUDJHHWF
s’il en existe un capable de le gérer ;
 le paquet n’est pas à destination du système : il
est ignoré.
b. si le système assure les fonctions de routeur :
 le paquet est à destination du système : il est considéré comme en « Entrée », INPUT, du système :
? il est filtré et/ou éventuellement modifié par le Firewall ;
? s’il est accepté, il est dirigé vers un processus s’il en existe un capable de le gérer ;
 le paquet n’est pas à destination du système :
? choix de « forwarder » le paquet vers une interface de sortie en fonction des règles de routage ;
? modifier le datagramme en sortie : intégration de la QoS, traduction d’@IP, etc.
La « Sortie », OUTPUT, correspond à des datagrammes créés et émis par le système lui-même.
ResAvI
Le Firewall : la reconnaissance du trafic TCP entrant ou sortant 270
Stateless vs Stateful
Exemple de scenario :
Bloquer le trafic Web
? On veut bloquer les communications web entrantes
? On veut autoriser les communications web sortantes
Comment faire ?
. Le « web » indique des communications TCP vers le port 80 ; Autoriser le trafic Web 172.16.42.24

. Qelle différence entre « sortantes » en « entrantes » ?


 les paquets « sortants » vont de 172.16.42.24 vers In-
ternet ;
 les paquets « entrants » vont d’Internet vers 172.16.42.24 ;
 Première proposition :
 on bloque les paquets « entrants » et on autorise ceux « sortants » : ça ne marche pas !
 Car... une communication TCP est composée de paquets « entrants » et sortants :
? des segments TCP sortent avec la requête utilisateur GET / HTTP/1.0. . .
? des segments TCP entrent avec la réponse du serveur HTTP/1.1 200 ok. . .
? il y a des ACKs, des PUSH etc.
 Seconde proposition :
 on laisse passer les segments de données dans les deux sens ;
 on contrôle l’établissement des connexions TCP :
? on autorise seulement les segments contenant un SYN en provenance ou à destination du port 80 :
 Problème : un vilain hacker choisit le port source 80 pour établir sa connexion depuis Internet vers
172.16.42.24 : le segment contient un SYN et provient du port 80 : Bingo !
 On est pas arrivé à bloquer le trafic interdit !
ResAvI
Le Firewall : la reconnaissance du trafic TCP entrant ou sortant 271

Exemple de scenario (suite) :


? On veut bloquer les communications web entrantes Bloquer le trafic Web

? On veut autoriser les communications web sortantes

Autoriser le trafic Web 172.16.42.24

 Troisième proposition : on utilise le « handshake TCP » et on mémorise un état


1. on autorise uniquement les paquets SYN depuis 172.16.42.24 vers Internet ;
2. lorsque l’on voit passer un segment SYN autorisé, on mémorise l’établissement de la connexion (état NEW) ;
3. si une connexion a été initiée en (2) alors on autorise le segment SYN/ACK a traversé depuis Internet ;
4. si un ACK correspondant à cette connexion est envoyé depuis 172.16.42.24, la connexion est considérée comme
ESTABLISHED et on autorise tous les segments associés ;
5. lorsqu’il n’y a plus d’activité ou lorsque l’on intercepte l’envoi réciproque de FIN, on oublie l’état mémorisé et plus au-
cun segments associés ne peuvent traversés (pour éviter de confondre une connexion sans échange d’une connexion
terminée sans échange mutuel de FIN, on peut utiliser le TCP Keep-Alive).
Cette troisième proposition repose sur la mémorisation d’un état :« stateful », correspondant de l’automate TCP :
ResAvI
Le firewall sous GNU/Linux : NetFilter 272
L’outil de firewall sous Linux : Netfilter NAT and Packet Mangling with iptables

« Give me your invitation, Sir »


« Ken Sent Me. . . »

On parle de : SPI, « Stateful Packet Inspection ».

La commande permettant de contrôler le firewall


netfilter est :
? iptables sous IPv4
? ip6tables sous IPv6.

La table à apprendre −→
ResAvI

7KH rules in the PREROUTING chain of the mangle table are analyzed by the kernel
when a packet comes in, before the routing process takes place.
Le Firewall Netfilter : trajet du datagramme 273

La création d’un règle de firewall, se fait à l’aide de la commande iptables en choisissant la table ainsi que la
chaîne en faisant partie dans laquelle on veut entrer la règle.
Chacune de ses tables correspond à différentes opérations sur les paquets traversant la pile TCP/IP du système :
on a jouté des « hooks » ou crochets, dans les différentes étapes du routage, où l’on peut faire intervenir des
règles afin de laisser ou non le paquet transiter (éventuellement après modification).

Il existe différentes tables, et pour chacune de ces tables il existe différentes chaînes :
. filter : celle utilisée par défaut lorsque l’on indique pas explicitement la table ;
 INPUT : traite les paquets à destination de la machine locale ;
 FORWARD : traite les paquets qui traverseront par routage la machine locale (ne pas oublier d’activer l’option
de « forwarding » du système) ;
 OUTPUT : traite les paquets créés sur la machine locale et à destination de l’extérieur ;

. nat : pour effectuer de la traduction d’adresse source et/ou destination du datagramme (peut impacter les
ports dans le cas d’UDP et de TCP)
 PREROUTING : traite les paquets tout juste entrés et avant qu’ils ne soient éventuellement « forwardés » ;
 OUTPUT : traite les paquets créés localement avant qu’il ne soient routés ;
 POSTROUTING : traite les paquets modifiés avant qu’ils ne quittent la machine mais après avoir été routés ;

. mangle : pour effectuer des transformations sur certains champs du datagramme et de son contenu.
 PREROUTING, INPUT, OUTPUT, POSTROUTING, FORWARD.
ResAvI
Le Firewall Netfilter : trajet du datagramme 274

Le parkour du datagramme
Quand un paquet se présente sur une interface, il circule de la manière suivante :

Chaque table intervient à une étape du parcours du datagramme dans ce circuit et peut intervenir sur ce parcours :
? modifier le datagramme ;
? bloquer le datagramme.
Un datagramme peut être traité en amont de la décision de routage dans la chaîne PREROUTING, ou après dans
la chaîne POSTROUTING.
ResAvI
Le Firewall Netfilter : la commande iptables 275
Gestion des règles : définition & application à l’aide de la commande iptables
Avec iptables, on peut réaliser les différentes opérations pour une règle :
? -A ou : ajouter
? -D ou –delete : effacer
? -I ou –insert : insérer
? -R ou –replace : remplacer
Il faut spécifier la table, indiquer l’opération suivie de la chaîne concernée.

Ainsi, avec iptables -t filter -A INPUT , on peut ajouter une règle pour la table de filtrage et dans la chaîne INPUT
correspondant aux paquets en entrée d’interface réseau.

Enfin une chaîne doit finir par une « cible » ou « target » afin de faire circuler le paquet.
Cette cible est indiquée avec l’option -j pour « jump ».
Ainsi, la règle iptables -t filter -A INPUT -j DROP va rejeter tous les paquets en entrée.

Dans le cas de plusieurs interfaces, on peut préciser avec -i l’interface d’entrée et -o l’interface de sortie.
Il faut être cohérent : un -i eth0 s’applique sur la chaîne INPUT mais peut-être pas sur la chaîne OUTPUT.

Quand un paquet entre dans une chaîne, il parcours les règles dans l’ordre de leur définition :
? jusqu’à en trouver une qui s’applique sur lui : il poursuit son chemin dans la « cible » indiquée (éventuellement une autre
chaine lorsqu’elle a été définie par l’utilisateur) ;

? jusqu’à ce qu’il n’y en est plus : la règle générale ou « policy » s’applique : soit ACCEPT ou DROP (on définie la policy
associée à un chaîne avec l’option -P et en indiquant une « cible » qui doit être non définie par l’utilisateur).
Exemple : iptables -t filter -P FORWARD DROP .
ResAvI
Le Firewall Netfilter : le parcours des chaînes 276

Le datagramme parcours les règles en cherchant la première qui lui correspond, « match ».
‘INPUT’ ‘test’ Pour définir ses propres chaînes et pouvoir faire des sé-
---------------------------- ---------------------------- lections complexes avec l’option :
| Règle1: -p ICMP -j DROP | | Règle1: -s 192.168.1.1 |
iptables -N nom_chaine
|--------------------------| |--------------------------|
| Règle2: -p TCP -j test | | Règle2: -d 192.168.1.1 |
(sur l’exemple ci-contre, la chaîne « test » a été ajoutée)
|--------------------------| ----------------------------
| Règle3: -p UDP -j DROP |
----------------------------

On sort de la chaine utilisateur : v __________________________


? avec la « cible » RETURN qui permet de retourner ‘INPUT’ | / ‘test’ v
------------------------|--/ -----------------------|----
dans la chaîne d’où l’on a été envoyé
| Règle1 | /| | Règle1 | |
? par épuisement des règles sans concordance (circu- |-----------------------|/-| |----------------------|---|
lation ci-contre). | Règle2 / | | Règle2 | |
|--------------------------| -----------------------v----
| Règle3 /--+___________________________/
------------------------|---
v

Faire la concordance entre le datagramme (ou même la trame qui l’a contenu) et une règle :
 avec des options de la commande iptables : -p ou –protocol : qui permet de spécifier le protocole que doit contenir
le paquet (tcp, udp ou icmp), -s pour l’@IP source, -d pour l’@IP destination ;
 avec de nombreux modules et l’option -m ou -match : cette option est suivie du nom du module à utiliser, ainsi que des
options spécifiques à ce module préfixée avec –-

De même, il existe différentes cibles, target, qui sont également paramètrable avec des options.
ResAvI
Le Firewall Netfilter : les protocoles 277
Par protocole
? tcp : permet de traiter les connexions TCP et les options présentes dans les segments :
 –-syn : indique que le segment doit avoir le bit SYN à 1 à l’exclusion des autres.
Cela permet de désigner les demandes d’établissement connexions ;
 –-tcp-flags : permet d’indiquer les drapeaux qui doivent être présents : SYN, RST, ACK, FIN, URG, PSH et
ALL et NONE. Il est nécessaire de donner une liste des drapeaux que l’on veut surveiller sous forme d’une liste
de valeurs séparées par des virgules puis après un espace des drapeaux qui doivent être à 1.
Par exemple : –-tcp-flags SYN,RST,ACK,FIN (uniquement SYN est équivalent à –-syn) ;
 –-mss : permet de prendre en compte la taille maximale du segment.
 –-source-port ou –-sport : on peut éventuellement indiquer un intervalle avec la notation 80:90 ;
 –-destination-port ou –-dport : idem.
iptables -t filter -A OUTPUT -p tcp –-syn –-sport 80 -j DROP

? udp : permet de traiter le protocole UDP


 –-source-port ou –-sport : on peut éventuellement indiquer un intervalle avec la notation 80:90 ;
 –-destination-port ou –-dport : idem.
iptables -A INPUT -i eth0 -p udp –-dport 67:68 –-sport 67:68 -j ACCEPT

Cette règle permet de laisser passer les paquets DHCP.

? icmp : pour la gestion du protocole icmp :


 –-icmp-type : permet de spécifier le type du paquet icmp
iptables -A INPUT -p icmp –-icmp-type 8 -j DROP

Cette règle supprime les messages ICMP d’« echo request »


ResAvI
Le Firewall Netfilter : les modules 278
Par état ou « state » : Permet de tenir compte de l’état d’une connexion pour disposer d’un firewall « statefull »
? –-state : où l’état est indiqué par une liste d’états de connexion séparés par des virgules
? NEW : correspond à l’établissement d’une nouvelle connexion ;
? ESTABLISHED : correspond aux paquets d’une connexion déjà établie ;
? RELATED : le paquet est en rapport avec une connexion déjà existante (un message ICMP d’erreur ou par exemple, le
protocole FTP, où deux connexions sont liées, l’une de contrôle et l’autre de données) ;
? INVALID : le datagramme ne peut être identifié ou ne correspond pas à un état attendu.
La configuration initiale du firewall : verrouillage maximal
# Vide toutes les chaînes On autorise les datagrammes associés à
/sbin/iptables –flush une connexion établie, ESTABLISHED,RELATED
# Autorise tout le trafic possible sur l’interface réseau interne de boucle (loopback)
(autorisée par une règle utilisant NEW).
/sbin/iptables -A INPUT -i lo -j ACCEPT
/sbin/iptables -A OUTPUT -o lo -j ACCEPT Ensuite, viendront les règles autorisant ex-
plicitement l’établissement d’une connexion,
# Positionne les Policies par défaut : on bloque tout
/sbin/iptables -P INPUT DROP
–-syn , suivant une concordance précise.
/sbin/iptables -P OUTPUT DROP
Par exemple, pour les connexions SSH :
/sbin/iptables -P FORWARD DROP
iptables -t filter -D INPUT -p tcp –-dport
# Autorise le trafic déjà établie à passer à travers le routeur 22 –-syn -j ACCEPT
/sbin/iptables -A INPUT -m state –-state ESTABLISHED,RELATED -j ACCEPT ou de manière équivalente :
# Autorise tout trafic en sortie (outbound)
iptables -t filter -D INPUT -p tcp –-dport
/sbin/iptables -A OUTPUT -m state –-state NEW,ESTABLISHED -j ACCEPT
22 -m state –-state NEW -j ACCEPT
On peut vérifier dans /proc/net/ip_conntrack, l’autorisation du port 22, « SSH » :
tcp 6 431264 ESTABLISHED src=192.168.42.122 dst=192.168.42.83 sport=58143 dport=22 src=192.168.42.83
dst=192.168.42.122 sport=22 dport=58143 [ASSURED] mark=0 use=2
ResAvI
Le Firewall Netfilter : généralisation de la notion de connexion 279
Gestion des datagrammes UDP et ICMP
Pour permettre au Firewall d’accepter les datagrammes en retour, la partie « connection tracking » de netfilter :
. enregistre les datagrammes en sortie ;
. autorise pendant une certaine durée un datagramme en retour :
 de TSAP inverse à celui envoyé dans le cas du protocole UDP ;
Dans /proc/net/ip_conntrack :
udp 17 30 src=192.168.1.2 dst=192.168.1.5 sport=137
dport=1025 [UNREPLIED] src=192.168.1.5 dst=192.168.1.2
sport=1025 dport=137 use=1
La valeur 30 indique un temps d’attente de 30 secondes.
[UNREPLIED] indique que le paquet réponse n’a pas été reçu.
 de réponse ICMP dans le cas de l’envoi d’un « echo request » (pour un ping) ;
Pour le protocole ICMP, on a une notion de :
? « NEW, ESTABLISHED » : lors d’un « ICMP Echo Request » ;
? « NEW, RELATED » : lorsque les protocoles UDP et TCP sont susceptibles
d’échouer, on autorise le paquet ICMP d’erreur à traverser le firewall en retour.

Ne pas oublier d’autoriser le trafic


« RELATED » :
ResAvI
Le Firewall Netfilter : les commandes utiles 280
Commandes utiles pour la gestion de l’ensemble des règles du firewall
En utilisant l’option supplémentaire -h on peut obtenir de l’aide sur l’utilisation d’un module donné :
iptables -m limit -h .

L’utilisation d’un « ! » devant une sélection permet de faire le contraire (c’est la négation de l’option de sélection).

Pour nettoyer une table des chaînes définies, il faut utiliser l’option -F pour « flush » :
$ iptables -t nat -F PREROUTING

Pour afficher l’ensemble des règles du firewall :


$ sudo iptables -t filter -L
Seul l’administrateur peut afficher le contenu des règles de firewall, pour des raisons de sécurité.
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp – anywhere anywhere tcp dpt:ssh flags:FIN,SYN,RST,ACK/SYN limit: avg 3/min burst 1
DROP tcp – anywhere anywhere tcp dpt:ssh flags:FIN,SYN,RST,ACK/SYN

Chain FORWARD (policy ACCEPT)


target prot opt source destination

Chain OUTPUT (policy ACCEPT)


target prot opt source destination
ResAvI
??
Le Firewall Netfilter : les commandes utiles 281
Commandes utiles pour la gestion de l’ensemble des règles du firewall
Pour surveiller, l’application des règles et voir si elles se déclenchent :
1 watch ebtables -L –Lc 1 watch iptables -t nat -nvL

Pour sauvegarder/restaurer ce que l’on a définit dans iptables :


◦ iptables-save
? -c : permet de conserver les valeurs de compteurs à fin de statistiques ;
? -t : permet de sélectionner la table à sauvegarder (si l’option est omise, toutes les tables sont
sauvegardées).
◦ iptables-restore
? -c : permet de restaurer les valeurs de compteur ;
? -n : permet de ne pas effacer les règles existantes avant restauration.

Pour réinitialiser les compteurs de concordance de règles du firewall :


iptables -Z FORWARD

Pour suivre l’activité des transmissions de trames du protocole TCP sous shell avec tcpdump :
1 tcpdump -ev -i eth0 tcp and port 80
Ici, on ne s’intéresse qu’au trafic TCP, de port source ou destination 80.
ResAvI
12.1 Firewall : le plan de la présentation des usages 282

. le « filtrage » : autoriser ou non des connexions :


 sur le poste local (où tourne le Firewall) ;
 sur les machines du réseau situées derrière le routeur/firewall ;
. le « NAT » : faire de la traduction d’@IP lors du routage des datagrammes :
 partage d’@IP globale ;
 protection des postes du réseau situés derrière le routeur/firewall ;
 mise en place de « proxy transparent » ;
 faire du « port forwarding » ;
. la « QoS » : faire du « trafic shaping », c-à-d adapter les datagrammes en sortie du routeur/firewall à la QoS :
 classifier le trafic : reconnaître les différents flux (services TCP, RTP, « Real-Time-Protocol » basé sur UDP,
VoIP, IPtv, p2p, etc.). On parle de « Deep Packet Inspection », car on s’intéresse à son contenu.
 marquer les datagrammes pour adapter leur prise en charge lors de leur acheminement suivant de la QoS :
? en sortie du routeur : en contrôlant le débit ;
? lors de l’acheminement du datagramme : en fixant les champs TOS/DSCP pour les autres routeurs ;
 faire de l’équilibrage de charge ;
 tenir compte de quota, des heures de bureau etc.
. la protection contre les attaques :
 contre les attaques « brute force » :
? ralentir les accès en général ;
? ralentir les accès suivant leur origine ;
 protéger contre les paquets surdimensionnés (le « ping of death », les « buffer overflow », etc.),
 protéger contre des tentatives de réseaux connus (par exemple de Chine ou de Fédération de Russie. . . )
. la programmation en collaboration avec le firewall.
ResAvI
NAT & PAT : traduction d’adresse et de port 283
Rappel du contexte
. pour communiquer sur Internet, il faut une @IP unique et publique (pas privée) ;
. du fait d’un manque d’@IP publiques, il est nécessaire de partager une même @IP avec plusieurs postes ;

La solution du NAT
Le NAT, « Network Address Translation » permet de traduire une @IP en une autre : réécrire l’@IP source ou destination
d’une machine située derrière un routeur réalisant du NAT (c’est le cas des « box ADSL »).

Autre avantage du NAT : dissimuler des postes : il ne sont accessibles qu’au travers du routeur et non directement.
Pour
NAT and Packet Manglingcommuniquer
with iptables depuis l’extérieur vers une machine située à l’intérieur, il faut configurer explicitement le routeur NAT.
7RH[SODLQ1$7LQPRUHGHWDLOOHW
VWDNHDORRNDWWKHIROORZLQJGLDJUDP

On utilise les réseaux dits privés, réseaux non « routables », (RFC 1918) :
? 172.16.0.0/16
? 192.168.0.0/16
? 10.0.0.0/8
Pour qu’une machine du réseau privé communique sur Internet, le routeur NAT :
 réécrit dans les datagrammes l’@IP privée de la machine avec sa propre @IP
publique ;
 doit différencier ses datagrammes de ceux des machines du réseau privé ;
 doit garder une trace de toutes les connexions TCP et UDP (!!!) qui le traverse ;
On parle de « connection tracking ».
C’est le principe des « stateful firewalls ».
We have a Linux router with one Internet connection and a public IP address—1.1.1.1.
We can use whatever IP addresses we want from the private IP segments we presented
LQ&KDSWHUVRZHFKRRVHIRUWKLVQHWZRUNDVDVXEQHWIRURXUSULYDWH
QHWZRUN7KHSULYDWH,3VHJPHQWVDUHGHVFULEHGLQ5)&DQGDUH
ResAvI

x  SUHÀ[
x  SUHÀ[
x  SUHÀ[

1RZVLQFHLVDSULYDWHQHWZRUNWKRVH,3DGGUHVVHVDUHQRWURXWHG
anywhere in the Internet, meaning that no host on the Internet can access the devices
NAT & PAT : traduction d’adresse et de port 284
Le « connection tracking »
◦ pour UDP, on mémorise l’envoi d’un datagramme UDP et on autorise le retour d’un datagramme UDP
(d’où le terme impropre de « connexion » !!!)
pef@solaris:~$ sudo modprobe ip_conntrack
pef@solaris:~$ sudo more /proc/net/ip_conntrack
tcp 6 431996 ESTABLISHED src=199.47.217.147 dst=192.168.42.83 sport=80 dport=51911 src=192.168.42.83
dst=199.47.217.147 sport=51911 dport=80 [ASSURED] mark=0 use=2
udp 17 3 src=192.168.42.59 dst=192.168.42.255 sport=138 dport=138 [UNREPLIED] src=192.168.42.255
dst=192.168.42.59 sport=138 dport=138 mark=0 use=2

◦ pour UDP & TCP, on mémorise les @IPs, les numéros de port, le protocole, l’état de la connexion et les
timeouts.

Différents scénarios de réécriture d’adresse


? un vers un, one-to-one, 1:1 : une seule @IP privée est traduite en une @IP publique ;
? un vers plusieurs, one-to-many, 1:many : une @IP privée est réécrite en différentes @IP publiques : pour
chaque connexion le routeur NAT choisie une @IP publique parmi un ensemble disponible (utile pour le respect
de vie privée ou privacy) ;

? plusieurs vers une, many-to-one, many:1 : plusieurs @IP privées sont réécrites en une même @IP publique.
Si l’@IP appartient au routeur NAT, on parle de « masquerading ».

? plusieurs vers plusieurs, many-to-many, many:many : plusieurs @IP privées sont réécrites vers un ensemble
d’@IP publiques.
ResAvI
NAT & PAT : l’utilisation de netfilter et de la table nat 285
SNAT, « Source NAT » & Masquerade
. le SNAT correspond à la réécriture de l’@IP source du paquet ;
. en absence de configuration, une connexion initiée depuis Internet à destination d’une machine du réseau
privée est impossible ;
C’est une bonne protection pour les machines du réseau privé.
. il existe deux formes :
 le « static SNAT » : une ou plusieurs @IP privées sont réécrites vers la même @IP publique ;
 le « dynamic SNAT » : une ou plusieurs @IP privées sont réécrites vers un ensemble d’@IP publiques.
Netfilter utilise pour chaque nouvelle connexion l’@IP publique la moins récemment utilisée ou une @IP
aléatoire.
 le « masquerading » ou MASQ fonctionne Chapter 4
comme le « static NAT », mais on ne spécifie pas l’@IP à utiliser :
c’est celle de l’interface de sortie du routeur.
7KHIROORZLQJGLDJUDPSUHVHQWVDQH[DPSOHRIKRZ61$7RU0DVTXHUDGHZRUNV

Exemple :
? la machine 192.168.1.3 veut communiquer
avec 2.2.2.2 ;

? le routeur effectue du SNAT et réécrit l’@IP source


privée en 1.1.1.1, son @IP publique de sortie ;

? le routeur mémorise la connexion (les informations


sont consultables dans /proc/net/ip_conntrack) ;

? au retour le routeur réécrit l’@IP destination du pa-


quet vers 192.168.1.3.
ResAvI

In this diagram, the computer with the IP address 192.168.1.3 tries to initiate a
FRQQHFWLRQWR7KHSDFNHWLVSDVVHGWRWKH/LQX[URXWHUZLWKWKHVRXUFH,3
address 192.168.1.3 and destination IP address 2.2.2.2.
NAT and Packet Mangling with iptables

NAT & PAT : l’utilisation de netfilter et de la table nat


8VLQJ61$7RU0DVTXHUDGHFDQLQLWLDWHD
connection to 2.2.2.2, but 2.2.2.2 can't initiate a connection to
286
192.168.1.3, because this is a private IP address.
DNAT, « Destination NAT »
.DNATle DNAT permet de faire correspondre une @IP publique à une @IP privée ;
DN$7RU'HVWLQDWLRQ1HWZRUN$GGUHVV7UDQVODWLRQVPDSVDSXEOLF,3DGGUHVVWR
DSULYDWH,3DGGUHVV'1$7LVWKHUHYHUVHRI61$7VRLI\RX61$7WRWUDQVODWHD
.SULYDWH,3DGGUHVVLQWRDSXEOLF,3DGGUHVVDQG'1$7WRWUDQVODWHWKHVDPHSXEOLF,3
le DNAT est le contraire du SNAT (si on utilise le SNAT pour traduire une @IP privée en une @IP publique et
address into the same private IP address, the result will be IXOO1$7.
le DNAT pour faire l’opération inverse sur les mêmes @IP publique et privée, alors on parle de « full NAT »).
'1$7LVXVXDOO\XVHGZKHQ\RXKDYHVHUYHUVEHKLQG1$7VRWKHVDPHSXEOLF,3
address is mapped to different private IP addresses depending on ports or protocols.
Le DNAT est utilisé dans le cas de serveurs situés derrière le routeur NAT : la même @IP publique est traduite
7KLVSURFHVVLVDOVRFDOOHGport forwarding.

en différentes
Let's take privées en fonction du numéro ou du protocole. On parle de « port forwarding ».
@IPdiagram:
a look at the following

Exemple :
? une connexion est initiée de 2.2.2.2 vers 1.1.1.1 ;
? le routeur NAT détecte que la connexion ne
concerne pas lui-même mais un serveur du réseau
privé ;

? le routeur réécrit l’@IP destination en l’@IP privée


du serveur 192.168.1.3, capable de traiter cette
connexion ;

? les réponses en provenance de 192.168.1.3


sont réécrites depuis la source 1.1.1.1
[ 94 ]
Sur certaines box ADSL, on parle de DMZ, « Demilitarized Zone » pour la fonction de DNAT : il redirige tout le
trafic en provenance de l’extérieur vers une machine du réseau privé en plus de faire du masquerading en sortie.
Ce n’est pas tout à fait la même notion, dans la mesure où une machine en DMZ n’est pas du tout filtrée que ce
soit en trafic entrant ou sortant.
ResAvI
NAT & PAT : le « Full NAT » 287
Le « Full NAT » ou « Full Cone NAT »
? Le SNAT permet de faire de la traduction d’adresse uniquement lorsqu’une connexion est réalisée depuis le
réseau privé vers l’extérieur.
 la connexion est mémorisée ;
 les paquets en retour subissent automatiquement le DNAT associé ;
? le DNAT permet de réécrire l’@IP destination d’une connexion initiée depuis l’extérieur vers un port ou protocole
choisie :
 on change l’@IP destination vers une @IP du réseau privée.
 les paquets en retour subissent automatiquement le SNAT associé.
? Le « Full NAT » correspond à
 effectuer le DNAT d’une @IP publique toujours vers la même @IP privée ;
 effectuer le SNAT d’une @IP privée toujours vers la même @IP privée ;
 ce fonctionnement est appelé « DMZ » par les box ADSL : toute connexion non initiée depuis le réseau
privée (donc non référencée dans la table du « connection tracking ») est redirigée vers la même @IP
privée et ce sans autorisation supplémentaire (pas de DNAT à configurer explicitement ni de SNAT non
plus).

Le PAT, « Port Address Translation »


Il correspond à :
 permettre au routeur de faire du SNAT en mode masquerading (many-to-one) en changeant au besoin le
port d’origine ;
 faire du DNAT en fonction d’un numéro de port choisi qui peut être différent du port de destination final.
ResAvI
the modules iptable_nat and ip_conntrack when issuing any commands with
iptables –t natVRWKHUHLVQRQHHGWRXVH/LQX[XWLOLWLHVLQVPRGRUPRGSUREHIRU
1$7WRZRUN
NAT 7KH
: netfilter
OUTPUTet la table
chain is notnat
fully supported, so we will have to ignore that for now. 288
Les chaînes associées
7KHPREROUTING and POSTROUTINGFKDLQVKDYHPHDQLQJIXOQDPHV7KHPREROUTING
chain is aQDO\]HGE\WKHNHUQHOEHIRUHDQ\URXWLQJGHFLVLRQLVPDGH7KHUHIRUHZKDW
pef@solaris:~$ sudo iptables -t nat -nvL
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts we should
bytes target doprot
in the
opt PREROUTING
in out chain is to change
source the address of the destination
destination
,3DQGWKHQOHDYHLWWRWKHURXWLQJSURFHVVWRÀQGWKHGHVWLQDWLRQWKDWZHMXVW
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts FKDQJHG '1$7 
bytes target prot opt in out source destination

Chain 7KH (policy ACCEPT 0 chain


POSTROUTING
OUTPUT contains
packets, 0 bytes) rulesthat the kernel analyzes after a routing
pkts bytes target prot opt in out source destination
GHFLVLRQLVPDGH7KLVPHDQVWKDWZHKDYHDSDWKWRWKHGHVWLQDWLRQDQGVRZHFDQ
Chain FKDQJHWKHVRXUFH,3DGGUHVVLIWKDWSDWKLVRXWVLGHRXUQHWZRUN 61$7 
POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination

 la chaîne PREROUTING : elle est traitée avant toute[décision


100 ] de routage : c’est dans cette chaîne que l’on effec-
tue le DNAT : on changera l’@IP de destination du datagramme et on laissera le routage trouver la destination
que l’on vient de changer ;

 la chaîne POSTROUTING : elle est traitée après la décision de routage : c’est dans cette chaîne que l’on le
SNAT : on a une destination pour le datagramme après le routage et maintenant on peut changer l’origine du
datagramme en l’@IP correspondant à l’interface de sortie (c-à-d l’@IP du routeur qui permet d’être joint en
retour sur cette interface de sortie).
ResAvI
61$7LVRQHRIWKHPRVWFRPPRQO\XVHGW\SHVRI1$7ZLWKLSWDEOHVEHFDXVHRIWKH
topology used.
Let's see, for example, the following scenario:
1HWZRUNLVLQRXURIÀFH:HKDYHDQ(WKHUQHWFRQQHFWLRQIURP
RXUSURYLGHUZKLFKDVVLJQHGXVWKH,3DGGUHVVDQGWKHGHIDXOW
NAT : les commandes iptables de netfilter et la table nat
gateway 1.2.3.2. 289
$OOWKHFRPSXWHUVLQWKHQHWZRUNKDYHWKHGHIDXOWJDWHZD\VHWWR
SNAT
192.168.1.1.

iptables –t nat –A POSTROUTING –s 192.168.1.0/24


–j SNAT –-to 1.2.3.1

Ou dans le cas où l’@IP du routeur est configurée dynamique-


ment (par exemple en DHCP)
iptables –t nat –A POSTROUTING –s 192.168.1.0/24
–j MASQUERADE
Pour donner un ensemble d’@IP :
Our Linux router has two Ethernet interfaces: iptables –t nat –A POSTROUTING –s 192.168.1.0/24
x
Eth0, with the IP address 192.168.1.1 and netmask 255.255.255.0, is connected –j SNAT –-to 1.2.4.0- 1.2.4.32
WRDVZLWFKWKDWFRQQHFWVRWKHUGHYLFHVLQWKHQHWZRUN
x Eth1, with the IP address 1.2.3.1 and netmask 255.255.255.252, is connected
DNATto the provider's CPE (Customer Premises Equipment), which can be a DSL
modem, cable modem, media converter, etc.
iptables –t nat –A PREROUTING –d 1.2.4.1 –j DNAT
WHFDQVHWXS61$7VRWKDWDOOGHYLFHVLQWKHQHWZRUNDFFHVVWKH –-to 192.168.1.50
Internet with only one rule:
Redirection
iptables –t nat vers une machine
–A POSTROUTING sur le port
–s 192.168.1.0/24 SSH,
–j SNAT lorsque la connexion vient sur le routeur sur le port 65521 :
–-to 1.2.3.1

7KLVFRPPDQGKDVWKHVDPHHIIHFWDVWKHIROORZLQJFRPPDQGZKLFKZHZRXOGXVH
iptables –t nat –A PREROUTING –d 1.2.4.2 –p tcp
if the IP address of Eth1 were dynamically assigned, or if we used a dial-up modem
–-dport 65521 –j DNAT –-to 192.168.1.100:22
instead of an Ethernet card:
Proxy transparent [ 102 ]

Un proxy transparent est un moyen de forcer les utilisateurs à utiliser un proxy, c-à-d un intermédiaire de connexion, même
si leur navigateur n’est pas configuré pour le faire :
iptables –t nat –A PREROUTING –s 192.168.1.0/24 –p tcp –-dport 80 –j REDIRECT –-to-port 3128
Le proxy est installé sur le routeur et le « REDIRECT » effectue un DNAT vers l’@IP du routeur lui-même.
Le proxy peut être utilisé pour servir de cache Web, ou pour filtrer les contenus dangereux.
ResAvI
Z#$%,5#*.$=$Y#./$*22,+#%$*.$0*:($#/$*.$[#W$\
Z#$%,5#*.$O$Y#./$*22,+#%$*.$0*:($0*:5$)*5$*.$]#W
Z#$%,5#*.$O$)#./A:($;,W#%'#%$(#$5:/#$[#W$+#$(1#"/%#)%:5#$^
W$U$T"+:6.#%$(*$23"-:'.%*/:3"$)3.%$2;*6.#$%3./#.%$+#5$-:%#[*((5$)%,5#"/$5.%$#.97
Description rapide de STUN, « Session Traversal Utilities for (NAT) », RFC 5389
!"$5#%Y#.%$V_M$*$,/,$:"5/*((,$+*"5$(#$%,5#*.$>$)3.%$-3"2/:3""#%$.":6.#0#"/$)3.%$(#5$ 290
%,5#*.9$=N$O$#/$>7$
Ce protocole sert à savoir si l’utilisateur est « derrière » un NAT, comment est configuré le NAT et si un flux UDP entrant
?*%$53.2:5$+#$5,2.%:/,N$:($+3:/$`/%#$:0)355:W(#$+#$23"/*2/#%$."$5#%Y#.%$V_M$#9/,%:#.%7$
est possible (par exemple pour faire de la VoIP).
2$U$a3+:-:#%$(#5$-:2;:#%5$+#$-:(/%*'#$#"$23"5,6.#"2#7

http://www.bortzmeyer.org/5389.html
ResAvI
--set-tos value Set Type of Service field to one of the
following numeric or descriptive values:
Minimize-Delay 16 (0x10)
Maximize-Throughput 8 (0x08)
Maximize-Reliability 4 (0x04)
Minimize-Cost 2 (0x02)
Netfilter : modifier les paquets, la table mangle Normal-Service 0 (0x00) 291
([DPSOHVHW726WRMaximize-ThroughputIRURXWJRLQJ)73GDWD
L’utilisation de cette table permet de modifier le contenu de certains champs du datagramme IP :
iptables -t mangle -A POSTROUTING -p tcp --sport 20 -j TOS --set-tos 8
? le champs TOS, « Type Of Service »/DSCP, « Differentiated Services field » : modifier la priorité du datagramme
7KHUHDUHRQO\ÀYH726YDOXHVZHFDQVHWVRWKH726WDUJHWGRHVQ
WPRGLI\WKH
ZKROH726E\WH+RZHYHUWKLVFDQEHGRQHZLWK'6&3(Differentiated Services
IP en fonction de son origine, de son contenu etc. )LHOG&RGHSRLQWV 7KH'6&3ELWVDUHWKHÀUVWVL[ELWVLQWKH726E\WHDVVKRZQLQ
WKHIROORZLQJÀJXUH
Cette modification permet de faire de la QoS entre routeurs capables de gérer ces priorités (RFC 2474, 2475).
Precedence Level Description
7 Stays the same (link layer and routing protocol keep alive)
6 Stays the same (used for IP routing protocols)
5 Express Forwarding (EF)
4 Class 4
3 Class 3
2 Class 2
LSWDEOHVKDVWKH'6&3WDUJHWWKDWFDQEHXVHGWRDOWHUWKH'6&3ELWV7KHRSWLRQVFDQ
1 Class 1 be found using --help with the DSCP target.
0 Best effort root@router:~# iptables -j DSCP --help
… some lines missing…
DSCP target options
? le champs TTL : pour le diminuer : empêcher la sortie de certains datagrammes, ou au contraire l’augmenter :
--set-dscp value Set DSCP field in packet header to value
masquer le passage par le routeur ; [ 114 ]

? marquer le datagramme : permet ensuite d’appliquer de la QoS sur le paquet en collaboration avec l’outil traffic
control, tc.
iptables -t mangle -A FORWARD -p tcp –-dport 80 -j DSCP –-set-dscp 1
iptables -t mangle -A FORWARD -p tcp –-dport 80 -j DSCP –-set-dscp-class EF
TTL : permet de modifier la valeur du champ de TTL :
 –-ttl-set : positionne la valeur ;
 –-ttl-dec et –-ttl-inc : incrémente la valeur du TTL.
iptables -t mangle -A PREROUTING -i eth0 -j TTL –-ttl-inc 1
ResAvI
Le P2P : identification et classification 292

Les protocoles d’échanges en « peer-to-peer », c-à-d d’égal à égal :


? sont difficiles à découvrir : les numéros de port varient, les interlocuteurs ont des adresses IP changeante (non
connues à l’avance), pas de centralisation (différents serveurs possibles) ;
? consomment beaucoup de débit : de nombreuses connexions peuvent s’établir simultanément rendant difficile
le partage de la capacité du support, bandwidth, entre les différents utilisateurs du réseau aux dépens des
communications prioritaires de l’organisation.
Il est donc souhaitable de les contrôler pour soit les interdire, soit leur affecter des débits contraints.
Comment les identifier ? Avec du « Deep Packet Inspection », c-à-d en analysant le contenu du datagramme
. par le contenu des paquets échangés : Problème : et si un courrier contient « announce » ?
1 iptables -N LOGDROP
2 iptables -F LOGDROP
3 iptables -A LOGDROP -j LOG –-log-prefix "LOGDROP "
4 iptables -A LOGDROP -j DROP
5 iptables -A FORWARD -m string –-algo bm –-string "BitTorrent" -j LOGDROP
6 iptables -A FORWARD -m string –-algo bm –-string "BitTorrent protocol" -j LOGDROP
7 iptables -A FORWARD -m string –-algo bm –-string "peer_id=" -j LOGDROP
8 iptables -A FORWARD -m string –-algo bm –-string ".torrent" -j LOGDROP
9 iptables -A FORWARD -m string –-algo bm –-string "announce.php?passkey=" -j LOGDROP
10 iptables -A FORWARD -m string –-algo bm –-string "torrent" -j LOGDROP
11 iptables -A FORWARD -m string –-algo bm –-string "announce" -j LOGDROP
12 iptables -A FORWARD -m string –-algo bm –-string "info_hash" -j LOGDROP
13 # DHT keyword
14 iptables -A FORWARD -m string –-string "get_peers" –-algo bm -j LOGDROP
15 iptables -A FORWARD -m string –-string "announce_peer" –-algo bm -j LOGDROP
16 iptables -A FORWARD -m string –-string "find_node" –-algo bm -j LOGDROP
ResAvI
Layer 7 Filtering
,Q&KDSWHURIWKLVERRNZHSUHVHQWHGWKH26,DQG7&3,3QHWZRUNLQJPRGHOV
Le P2P : identification et classification
$VZHVDZWKHUHHYHQLIWKH7&3,3PRGHOKDVWKHZLGHVWXVDJHWKHUHIHUHQFH 293
model is OSI.
Le « Layer-7 filter »
/HW
VKDYHDORRNDWWKH7&3,3DQG26,PRGHOVDJDLQ

− des patchs à appliquer au noyau : http://l7-filter.sourceforge.net/


− utilise le module ip_conntrack −→ à réserver à des
machines avec un CPU suffisant permettant une ges-
tion à plus de 5000 pps, « packet per second » ;
− permet d’identifier Kazaa, HTTP, Jabber, Citrix, Bittor-
rent, FTP, Gnucleus, eDonkey2000, etc., quelque soit
le port utilisé.

Installation et utilisation
$W/D\HURIWKH26,PRGHOZHÀQG$SSOLFDWLRQ +773)7366+HWF $V
\RXFDQVHHIURPWKHSLFWXUHDERYH7&3,3FRPSDFWHG26,/D\HUVDQG
LQWRRQH/D\HU7&3,3/D\HU $SSOLFDWLRQ ZKLFKKDVWKHVDPHQDPHEXW
Il utilise un répertoire contenant des fichiers de définitions de protocoles disponible sur le site
different functionality.
http://sourceforge.net/projects/l7-filter/.
FLOWHULQJDQGSULRULWL]LQJWUDIÀFIURPVRPHDSSOLFDWLRQVFDQEHYHU\HDV\DQG
YHU\KDUGDWWKHVDPHWLPH1RUPDOO\ZHZRXOGÀOWHUSULRULWL]HZHEWUDIÀFE\
Exemple de fichier utilisé pour la détection de bittorent :
PDWFKLQJ7&3SDFNHWVZLWKVRXUFHRUGHVWLQDWLRQSRUWZKLFKLVWKHVWDQGDUG
+773SRUW+RZHYHUZHEVHUYHUVFDQEHFRQÀJXUHGWRXVHDQ\SRUWVRRXU
# Bittorrent - P2P filesharing / publishing tool - http://www.bittorrent.com Des EXPRESSIONS RÉGULIÈRES !!!
ÀOWHUVSULRULWL]DWLRQVZRQ
WZRUNIRUWKDWSDUWLFXODUWUDIÀF
# This pattern has been tested and is believed to work well.
# It will, however, not work on bittorrent streams that are encrypted, since
# it’s impossible to match (well) encrypted data.

bittorrent

# Does not attempt to match the HTTP download of the tracker


# 0x13 is the length of "bittorrent protocol"
# Second two bits match UDP wierdness
# Next bit matches something Azureus does

# This is not a valid GNU basic regular expression (but that’s ok).
^(\x13bittorrent protocol|azver\x01$|get /scrape\?info_hash=get /announce\?info_hash=
|get /client/bitcomet/|GET /data\?fid=)|d1:ad2:id20:|\x08’7P\)[RP]
# This pattern is "fast", but won’t catch as much
#^(\x13bittorrent protocol|azver\x01$|get /scrape\?info_hash=)
ResAvI
Le P2P : identification et classification 294
Le « Layer-7 filter »

routeur:~# iptables -Z
Chapter 5
routeur:~# iptables -A OUTPUT -m layer7 --l7proto http
router:~/ipp2p-0.8.0# cp ipt_ipp2p.ko /lib/modules/2.6.12.5-home.made/
routeur:~# iptables -L OUTPUT -n -v kernel/net/ipv4/
Chain OUTPUT (policy ACCEPT 10168 packets, 3433K bytes)router:~# depmod -a
router:~# modinfo ipt_ipp2p
pkts bytes target prot opt in out source filename:
destination/lib/modules/2.6.12.5-home.made/kernel/net/ipv4/
ipt_ipp2p.ko
0 0 all -- * * 0.0.0.0/0 0.0.0.0/0 LAYER7 l7proto http
author: Eicke Friedrich/Klaus Degner <ipp2p@ipp2p.org>
routeur:~# description: An extension to iptables to identify P2P traffic.
license: GPL
Pour filtrer : vermagic: 2.6.12.5-home.made preempt PENTIUMIII gcc-3.3
depends: ip_tables
routeur:~# iptables -A FORWARD -m layer7 –-l7proto edonkey -j DROP
Next, we need to load the module, and it's all set.

On peut également faire de la limitation de débit en marquant les paquets


router:~/ipp2p-0.8.0# avant la phase de routage (table
modprobe ipt_ipp2p

mangle en PREROUTING).
Using IPP2P
,333SURYLGHVDQRWKHUPDWFKRSWLRQIRULSWDEOHVVRWKHV\QWD[LV
Alternative : IPP2P iptables … -m ipp2p –-option ...

C’est un autre module qui est orienté where


uniquement suroption can be:
le trafic P2P.
Option P2P network 3URWRFRO 4XDOLW\
iptables ... -m ipp2p –-option ...
--edk H'RQNH\H0XOH.DGHPOLD 7&3DQG8'3 YHU\JRRG
--kazaa .D=D$)DVW7UDFN 7&3DQG8'3 good
--gnu Gnutella 7&3DQG8'3 good
--dc Direct Connect 7&3RQO\ good
--bit %LW7RUUHQWH[WHQGHG%7 7&3DQG8'3 good
--apple $SSOH-XLFH 7&3RQO\ QHHGIHHGEDFN 
--winmx :LQ0; 7&3RQO\ QHHGIHHGEDFN 
--soul SoulSeek 7&3RQO\ JRRG QHHGIHHGEDFN 
--ares $UHV$UHV/LWH 7&3RQO\ PRGHUDWH '523RQO\
ResAvI

Another possibility is to use as option --ipp2p, which matches all the protocols
stated earlier.

7KLVQHZPDWFKRSWLRQKDVWKHVDPHUXOHVDVWKH/ÀOWHUSURMHFWDQGLW
VEDVLFDOO\
netfilter : L’administration des usagers 295
D’autres modules
? time :
iptables A FORWARD -p tcp -m multiport –-dport http,https -o eth0 -i eth1
-m time –-timestart 12:30 –-timestop 13:30 –-days Mon,Tue,Wed,Thu,Fri -j ACCEPT

? quota :
iptables -A INPUT -p tcp -m quota –-quota 2147483648 -j ACCEPT
iptables -A INPUT -j DROP

Dans ce cas là, on préférera faire de la QoS, comme diminuer la priorité que de jeter les datagrammes. . .
? nth : pour faire de l’équilibrage de charge, c-à-d rediriger des connexions vers différents serveurs (round robin)
iptables -A PREROUTING -i eth0 -p tcp –-dport 80 -m state –-state NEW -m nth –-counter 0 –-every 4 –-packet 0
-j DNAT –-to-destination 192.168.0.5:80
iptables -A PREROUTING -i eth0 -p tcp –-dport 80 -m state –-state NEW -m nth –-counter 0 –-every 4 –-packet 1
-j DNAT –-to-destination 192.168.0.6:80
iptables -A PREROUTING -i eth0 -p tcp –-dport 80 -m state –-state NEW -m nth –-counter 0 –-every 4 –-packet 2
-j DNAT –-to-destination 192.168.0.7:80
iptables -A PREROUTING -i eth0 -p tcp –-dport 80 -m state –-state NEW -m nth –-counter 0 –-every 4 –-packet 3
-j DNAT –-to-destination 192.168.0.8:80

iptables -A PREROUTING -i eth0 -p tcp –-dport 80 -m state –-state NEW -m random –-average 25
-j DNAT –-to-destination 192.168.0.5:80
iptables -A PREROUTING -i eth0 -p tcp –-dport 80 -m state –-state NEW -m random –-average 25
-j DNAT –-to-destination 192.168.0.6:80
iptables -A PREROUTING -i eth0 -p tcp –-dport 80 -m state –-state NEW -m random –-average 25
-j DNAT –-to-destination 192.168.0.7:80
iptables -A PREROUTING -i eth0 -p tcp –-dport 80 -m state –-state NEW
-j DNAT –-to-destination 192.168.0.8:80
ResAvI
La protection avec netfilter : contre les accès abusifs (rapide et nombreux) 296
L’utilisation du module limit et connlimit
◦ protection contre les attaques en déni de service, « DoS », « Denial of Service » : par exemple, limiter le nombre de
connexions vers un serveur web (flooding) tout en assurant à tous les clients un accès illimité ;
◦ empêcher les attaques « brute force » pour deviner les mots de passe ;
◦ etc.
iptables -t filter -A FORWARD -m state –-state NEW -p tcp -m multiport –-dport http,https -o eth0
-i eth1 -m limit –-limit 50/hour –-limit-burst 5 -j ACCEPT

Explications :
. le module multiport permet de donner une liste de protocoles basés sur TCP ;
. le module limit :
 la règle n’autorise la connexion que lorsqu’un jeton d’autorisation est disponible ;
 –-limit 50/hour : permet de limiter à l’obtention de 50 jetons par heure
 –-limit-burst : définit la taille maximale du stock de jetons.
Le limit indique le rythme de récupération de jeton d’autorisation, alors que le limit-burst indique combien
de jetons d’autorisation on peut conserver à la fois.
iptables -A INPUT -p tcp –-syn –-dport 22 -m limit –-limit 3/min –-limit-burst 1 -j ACCEPT
iptables -A INPUT -p tcp –-syn –-dport 22 -j DROP

Ce module permet de limiter le nombre de connexion réalisée en parallèle depuis le même hôte.
Ici, la règle 1 autorise le passage d’une demande de connexion au serveur SSH, une fois toutes les 20 secondes, et
la règle 2 filtre toutes les autres tentatives.
# allow 2 ssh connections per client host
iptables -p tcp –-syn –-dport 22 -m connlimit –-connlimit-above 2 -j REJECT
ResAvI
La protection avec netfilter : contre les accès abusifs (rapide et nombreux) 297
Le module hashlimit
permet de limiter le nombre paquets pouvant être traités par unité de temps.
iptables -I INPUT -m hashlimit -m tcp -p tcp –-dport 22 –-hashlimit 1/min –-hashlimit-mode srcip
–-hashlimit-name ssh -m state –-state NEW -j ACCEPT
Ici, on interdit plus d’une connexion par utilisateur et par minute afin d’éviter les tentatives d’attaques de type
« bruteforce » sur le serveur ssh (découverte du mot de passe d’un utilisateur par essai des différentes combi-
naisons possibles).

Le module length
limiter les paquets à une certaine taille
iptables -A INPUT -p icmp –-icmp-type echo-request -m length –-length 86:0xffff -j DROP
Cela permet d’éviter les « ping of death » qui plantaient la pile TCP/IP de l’ordinateur le recevant (ici, ce sont les
paquets de taille supérieure à 85 octets).

Le module owner
permet de tenir compte pour les paquets créés localement du processus et de son propriétaire :
iptables -A OUTPUT -p tcp –-dport 3306 -d localhost -m owner ! –-uid-owner www-data -j REJECT
Ici, le port 3306 est associé à MySQL, et on interdit les accès autres que ceux réalisés par l’utilisateur associé
au serveur Apache.
ResAvI
La protection avec netfilter : contre les accès abusifs (rapide et nombreux) 298
Illustration du module limit et de l’option burst
Les règles de firewall suivantes sont ajoutées :
iptables -t filter -A FORWARD -s 192.168.10.21 -d 192.168.11.50 -p udp -m limit –-limit 30/m –-limit-burst 5
-j ACCEPT
iptables -t filter -A FORWARD -s 192.168.10.21 -d 192.168.11.50 -p udp -j DROP
Explications :
◦ on crée un jeton d’autorisation toutes les 2 sec. (30 par minute), et on autorise à en stocker au plus 5.
◦ on filtre tous les paquets qui arrivent et qui ne trouvent pas de jeton d’autorisation.
◦ on envoie 1000 paquets UDP avec un paquet toutes les 20ms ;
◦ seuls 16 paquets arrivent à traverser :
Le temps est indiqué en ordonnée et le nu-
méro du paquet reçu est en abscisse.
Les 5 premiers paquets passent immédiate-
ment, « burst », puis un seul paquet passe
toute les 2 sec.
ResAvI
Netfilter : bloquer des connexions en fonction de la provenance 299
le module recent
permet de créer une liste dynamique d’adresses IP, et de comparer de différentes façons les paquets avec le
contenu de cette liste :
iptables -A INPUT -i eth0 -m recent --name badguys --update --seconds 3600 -j DROP
iptables -A INPUT -t filter -i eth0 -j DROP -m recent --set --name badguys

Explication
 La ligne 1, doit être mise en premier dans les règles du firewall : elle indique que si l’adresse IP du paquet fait
partie de la liste alors on le supprime.
 la ligne 2, définie une liste des « bad guys », par exemple en la mettant à la fin de toutes les règles du firewall,
c-à-d qu’aucune règle ACCEPT n’a pu être trouvée pour un firewall qui filtre par défaut (l’adresse IP de la
machine est ajoutée à la liste).

Un classique concernant le protocole SSH, « Secure SHell » :


iptables -A INPUT -i eth0 -p tcp –-syn –-dport ssh -m recent –-name ssh –-set
iptables -A INPUT -i eth0 -p tcp –-syn –-dport ssh -m recent –-name ssh –-rcheck –-seconds 30
–-hitcount 2 -j DROP
Ici, on protège contre une tentative d’attaque de type « brute force ».
ResAvI
Netfilter : bloquer des connexions en fonction de la provenance 300
Le module set
Il est possible :
a. de construire une liste avec la commande ipset :
 de bloc ou d’@ IP ;
 de ports ;
 d’@MACs.
b. d’utiliser cette liste dans une règle de la commande iptables.
Pour construire l’ensemble :
ipset create indesirables nethash
ipset add indesirables 164.81.0.0/16
ipset add indesirables 192.168.0.0/16
Pour l’utiliser :
iptables -t filter -A INPUT -m set –-match-set indesirables src -j DROP
L’intérêt réside dans le fait qu’il est moins coûteux de contrôler des datagrammes par rapport à un set plutôt que
par rapport à une liste de règles.

Autres listes :
? nethash : une liste d’@IP ;
? macipmap : pour des @MAC ;
? portmap : pour des numéros de port ;

Pour bloquer les accès par pays : http://www.ipdeny.com/ipblocks/.


ResAvI
netfilter : des usages plus avancés 301
La journalisation ou « logging »
LOG : permet de garder une trace du paquet.
Il faut également répéter la même règle avec une target comme DROP pour jeter le paquet.
iptables -t nat -I PREROUTING -p tcp –-destination-port 80 -j LOG
Cette information peut être consultée à l’aide de la commande demsg :
[34985.564466] IN=eth0 OUT= MAC=00:0c:29:9d:ea:19:00:0c:29:22:ca:2f:08:00 SRC=192.168.127.128
DST=164.81.1.9 LEN=60 TOS=0x10 PREC=0x00 TTL=64 ID=28737 DF PROTO=TCP SPT=37925 DPT=80
WINDOW=5840 RES=0x00 SYN URGP=0
 –-log-prefix : permet d’ajouter un préfixe pour faciliter la recherche (avec la commande grep par exemple)
iptables -A INPUT -p tcp -j LOG –-log-prefix "INPUT packets"

Le module u32
Ce module permet de tester les valeurs d’octets particuliers du datagramme IP.
La syntaxe est iptables -m u32 –-u32 "Start&Mask=Range" où :
? il travaille sur des mots de 32 bits ;
? « start » indique la position des octets à étudier à partir duquel on récupère les 32 bits (commence à zéro).
? « Mask » permet d’appliquer un masque binaire à partir de cet octet.
? il faut se positionner à la frontière de mots de 32bits (4 octets).
Exemple
. chercher si le drapeau MF est à 1 :
iptables -m u32 –-u32 "3&0xE0=0x20"
. etc.
Une adresse intéressante http://www.stearns.org/doc/iptables-u32.v0.1.7.html
ResAvI
Netfilter : revenir sur les paquets rejetés 302
REJECT & TARPIT
. REJECT : rejette le paquet comme DROP mais renvoi une erreur avec un paquet ICMP
 –-reject-with : avec une valeur parmi :
? icmp-net-unreachable ? icmp-proto-unreachable ? icmp-admin-prohibited
? icmp-host-unreachable ? icmp-net-prohibited
? icmp-port-unreachable ? icmp-host-prohibited

. TARPIT : permet de « capturer » une connexion TCP sans consommer de ressource et sans répondre aux
demandes de terminaison.
C’est une protection efficace contre certain vers qui devront attendre longtemps avant de pouvoir établir une
nouvelle connexion
iptables -A INPUT -p tcp -m tcp –-dport 80 -j TARPIT
ResAvI
NFQUEUE : passer les paquets en « espace utilisateur », userspace 303
NFQUEUE : permet de faire passer les paquets dans un programme utilisateur

$ sudo iptables -t filter -i bridge_dmz -A FORWARD -p tcp –-sport 5001 -j NFQUEUE –-queue-num 0
1 #!/usr/bin/python

3 import nfqueue, socket


4 from scapy.all import *

6 def traite_paquet(dummy, payload):


7 data = payload.get_data()
8 pkt = IP(data)
9 # accepte
10 #payload.set_verdict(nfqueue.NF_ACCEPT)
11 # si modifie
12 #payload.set_verdict_modified(nfqueue.NF_ACCEPT, str(pkt), len(pkt))
13 # si rejete
14 #payload.set_verdict(nfqueue.NF_DROP)

16 q = nfqueue.queue()
17 q.open()
18 q.unbind(socket.AF_INET)
19 q.bind(socket.AF_INET)
20 q.set_callback(traite_paquet)
21 q.create_queue(0)

23 try:
24 q.try_run()
25 except KeyboardInterrupt, e:
26 print "interrupted"

28 q.unbind(socket.AF_INET)
29 q.close()
ResAvI
NFQUEUE : passer les paquets en « espace utilisateur », userspace 304

En utilisant la règle suivante :


sudo iptables -t filter -i bridge_dmz -A FORWARD -p tcp –-sport 5001 -j NFQUEUE –-queue-num 0
On fait passer à travers NFQUEUE les segments TCP en provenance de l’outil iperf (outil permettant d’évaluer
le débit d’une connexion TCP).
Ainsi, à l’aide de l’outil Scapy, on modifie la taille des paquets à l’intérieur des segments pour la rendre inférieure
à une taille choisie (notée ici throughput ou débit).
1 if pkt[TCP].window > throughput :
2 pkt[TCP].window = throughput
3 del pkt[TCP].chksum
4 payload.set_verdict_modified(nfqueue.NF_ACCEPT, str(pkt), len(pkt))
Ce qui donne pour une valeur de throughput = 250 :
pef@solaris:~$ sudo iptables -nvL
Chain FORWARD (policy ACCEPT 17320 packets, 815K bytes)
pkts bytes target prot opt in out source destination
304K 16M NFQUEUE tcp –- bridge_dmz * 0.0.0.0/0 0.0.0.0/0 tcp spt:5001 NFQUEUE num 0

root@INTERNAL_HOSTA:~/RESEAUX_I/FIREWALL# iperf -c 137.204.212.208


––––––––––––––––––––––––––––––
Client connecting to 137.204.212.208, TCP port 5001
TCP window size: 16.0 KByte (default)
––––––––––––––––––––––––––––––
[ 3] local 137.204.212.11 port 45352 connected with 137.204.212.208 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.5 sec 1.50 MBytes 1.20 Mbits/sec
ResAvI
NFQUEUE : passer les paquets en « espace utilisateur », userspace 305

Pour une valeur de throughput = 1 000 :


root@INTERNAL_HOSTA:~/RESEAUX_I/FIREWALL# iperf -c 137.204.212.208
––––––––––––––––––––––––––––––
Client connecting to 137.204.212.208, TCP port 5001
TCP window size: 16.0 KByte (default)
––––––––––––––––––––––––––––––
[ 3] local 137.204.212.11 port 45349 connected with 137.204.212.208 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.1 sec 5.62 MBytes 4.65 Mbits/sec

Pour une valeur de throughput = 5 000 :


root@INTERNAL_HOSTA:~/RESEAUX_I/FIREWALL# iperf -c 137.204.212.208
––––––––––––––––––––––––––––––
Client connecting to 137.204.212.208, TCP port 5001
TCP window size: 16.0 KByte (default)
––––––––––––––––––––––––––––––
[ 3] local 137.204.212.11 port 45348 connected with 137.204.212.208 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 16.2 MBytes 13.6 Mbits/sec

Pour une valeur de throughput = 50 000 :


root@INTERNAL_HOSTA:~/RESEAUX_I/FIREWALL# iperf -c 137.204.212.208
––––––––––––––––––––––––––––––
Client connecting to 137.204.212.208, TCP port 5001
TCP window size: 16.0 KByte (default)
––––––––––––––––––––––––––––––
[ 3] local 137.204.212.11 port 45347 connected with 137.204.212.208 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 16.5 MBytes 13.8 Mbits/sec
ResAvI
Firewall & IPv6 306
En attendant Ipv6. . .
Pour IPv6 : On bloquera tout trafic IPv6 jusqu’à nouvel ordre !
# configuration
PUBIF="eth0"
# nettoyage des tables
ip6tables -F
ip6tables -X
ip6tables -t mangle -F
ip6tables -t mangle -X

# on autorise sur l’interface loopback


ip6tables -A INPUT -i lo -j ACCEPT
ip6tables -A OUTPUT -o lo -j ACCEPT

# on met en place la policy


ip6tables -P INPUT DROP
ip6tables -P OUTPUT DROP
ip6tables -P FORWARD DROP

# on autorise la poursuite des communications autorisées à s’établir


ip6tables -A INPUT -i $PUBIF -m state –state ESTABLISHED,RELATED -j ACCEPT

# on autorise le trafic sortant


ip6tables -A OUTPUT -o $PUBIF -m state –state NEW,ESTABLISHED,RELATED -j ACCEPT

# on autorise l’utilisation du ping en IPv6 (Neighbour Discovery)


ip6tables -A INPUT -i $PUBIF -p ipv6-icmp -j ACCEPT
ip6tables -A OUTPUT -o $PUBIF -p ipv6-icmp -j ACCEPT
ResAvI
Le durcissement, « hardening, » de la pile TCP/IP 307

1 #!/bin/sh

3 # Désactive la fonction de routage automatique du système


4 sysctl net.ipv4.ip_forward = 0

6 # Désactive le traitement des paquets ICMP echo-request envoyés en broadcast ou multicast


7 # Utile pour éviter les Smurf Attacks
8 sysctl net.ipv4.icmp_echo_ignore_broadcasts = 1

10 # Désactive le traitement des paquets routés par la source


11 # où le chemin de routage est explicitement donné
12 sysctl net.ipv4.conf.all.accept_source_route = 0

14 # Active la protection de type Syn cookie et protège contre les Syn Flood
15 sysctl net.ipv4.tcp_syncookies = 1

17 # Désactive le traitement des paquets ICMP de redéfinition de route pour détourner le trafic
18 sysctl net.ipv4.conf.all.accept_redirects = 0

20 # Ne pas autoriser l’envoi des paquets ICMP de redéfinition de route


21 sysctl net.ipv4.conf.all.send_redirects = 0

23 # Active la protection contre les IP Spoofing


24 # attention à la contradiction avec la fonction de routage...
25 sysctl net.ipv4.conf.default.rp_filter = 1
26 sysctl net.ipv4.conf.all.rp_filter = 1

28 # Journalise les paquets avec des adresses impossibles


29 net.ipv4.conf.all.log_martians = 1
30 net.ipv4.conf.default.log_martians = 1
ResAvI
Le durcissement, « hardening, » de la pile TCP/IP 308
Explications
? la ligne « 25 » permet de se protéger de paquets qui ne pourraient pas arriver par l’interface où ils arrivent. . .
C-à-d, par exemple, un paquet arrivant par l’interface eth0 mais avec une adresse qui ne correspondrait qu’à
l’interface « eth1 » doit être rejeté.
Cette protection est mise en œuvre par les FAIs ce qui empêche d’envoyer des datagrammes avec une adresse
source différente de celle qu’il fournit à son client.

? la ligne « 29 » permet d’enregistrer les paquets provenant d’adresses impossibles : adresses de groupe, de
classe E réservée, adresse locale, de diffusion, etc.
C’est pour cela qu’on les appelle des paquets « martiens ». . .

? on peut également, dans la cas où le serveur sert de routeur, obliger le serveur à effectuer la défragmentation
avant de servir de relais avec les options :
sysctl net.ipv4.conf.all.ip_always_defrag = 1
sysctl net.ipv4.conf.default.ip_always_defrag = 1

? On peut également bloquer les accès extérieurs à la base de données MySQL :


iptables -A INPUT -p tcp –-dport 3306 -j DROP
On pourrait également utiliser le module « owner » de NetFilter pour n’autoriser que l’utilisateur « Web » du
système.
ResAvI
13 QoS, « Quality of Service » 309
Les besoins en QoS
• utilisation grandissante de protocoles « temps-réels » : appels téléphoniques, IPTv :
 problèmes de délais et de pertes de paquets plus visibles pour ces protocoles :
? pertes dues à la congestion ou à des corruptions de données ;
? variations dans les délais, jitter, de remise des paquets (dégradation du son et/ou de la vidéo) ;
? mélanges des paquets provoquant la suppression de ces paquets et encore plus de délai.

• utilisation de réseaux « sans-fil » : ce sont dans ces réseaux que les manques sont les plus importants
Les réseaux « filaires » Les réseaux « sans-fil », « wireless »
 gèrent des milliers de flux : pas raisonnable de vouloir  gèrent des dizaines de flux : c’est possible de
tous les contrôler ; les contrôler ;
 sont-ils le « goulot d’étranglement », bottleneck ? non  le réseau est le goulot d’étranglement !
 facile d’augmenter la capacité ;  difficile d’augmenter la capacité ;
 temps pour organiser le trafic : ∼ 1µs  temps pour organiser le trafic : ∼ 1ms
Plus de temps pour prendre une décision !

• garantir une répartition équitables de la capacité, « fair use » :


 « Network Neutrality » : un FAI ne doit pas bloquer ou dégrader le trafic Internet de ses concurrents dans
le but d’accélérer le sien.
 éviter la sur-consommation des utilisateurs qui téléchargent le plus : vidéo et p2p.
Dans ce cas là, il est nécessaire de faire du « deep packet inspection » pour analyser le contenu des
datagrammes.
ResAvI
QoS : plan de la section 310

Définition Wikipedia
La qualité de service (QdS) ou Quality of service (QoS) est la capacité à véhiculer dans
de bonnes conditions un type de trafic donné, en termes de disponibilité, débit, délais de
transmission, gigue, taux de perte de paquets. . .

? Présentation du trafic « temps réél » avec RTP et comment corriger le « jitter » ;


? La proposition « Integrated Services » : c’est le réseau d’interconnexion en mode « circuit-
virtuel » simulé ou non, qui assure la QoS :
 réservation de ressource sur les routeurs ;
 mémorisation de chemins dans chaque routeur ;
 le paquet traverse le routeur au plus vite ;
? La proposition « Differentiated Services » : c’est le routeur qui favorise l’envoi de tel ou tel
paquet :
 les paquets sont classifiés ;
 les paquets sont mis dans des files d’attente, des « queues » ;
 chaque routeur doit gérer des files d’attentes ;
 le contenu des files d’attente est envoyé sur le réseau suivant la hiérarchie définie entre
ces queues.
ResAvI
13.1 Les flux « temps réel » 311

Network
Network

signals packets

Les débits :
. constants, CBR, « Constant Bit Rate » : pour transmettre la voix ou une vidéo, on la convertit en un flux binaire avec un
débit constan: :
 MPEG-1 : standard de compression à flux à débit constant. Le débit du flux dépend des paramètres sélectionnés pour
l’algorithme de compression, tels que la dimension écran de la vidéo, le nombre d’images par seconde et la qualité
de la « quantization », c-à-d la quantité d’information conservée en numérique par rapport à la version originale.
MPEG-1 de mauvaise qualité à 1, 15M bps (en Méga-bits par seconde) et de bonne qualité à 3M bps.
 pour un signal vocal, on va d’un débit de 4kbps pour une très forte compression à un débit de 64Kbps (un débit de
8Kbps à 1, 3M bps proche de la qualité d’un CD audio).
. variables, VBR, « Variable Bit Rate » : le débit peut varier pour s’adapter au mieux au contenu à transmettre.
 MPEG-2 : autorise le VBR : le débit est plus important quand il y a des scènes du film compressé qui bougent rapi-
dement, que lorsque les scènes bougent peu.
Les transmissions satellites et la TNT SD (MPEG-4 pour la HD).
D’autres normes :
◦ pour la voix :
 G.711 à 64Kbps ;
 G.729 à 8Kbps ;
◦ pour la vidéo :
 H.263 à 64Kbps, c-à-d 8000octets par seconde ;
 MPEG-2 à 19, 2M bps, ou en VBR de 6M bps en moyenne, à 24M bps au maximum.
ResAvI
Le protocole RTP, « Real-time Transport Protocol » 312

. protocole « fourre-tout » qui permet le transport de différents types de flux, il est facilement adaptable ;
. basé sur UDP avec un numéro de port recommandé par l’IETF de 6970 < port < 6999.
Choix du numéro de port : par le protocole d’établissement de session comme SIP, « Session Initiation Protocol », ou
H245 (utilisés pour la VoIP).
0 2 3 4 7 8 15 16 31
? P : padding ;
2-bit 4-bit
ver. P X contrib. M 7-bit payload type 16-bit sequence number ? X : indique la présence d’un en-tête d’extension dé-
num src count
finie par l’application (rarement utilisé : les données
12
32-bit timestamp
bytes contiennent les en-têtes si nécessaire) ;
? contributing source : indique le nombre d’identi-
32-bit synchronization source (SSRC) identifier
fiants de source si plusieurs incluses dans l’en-tête ;
contributing source (CSRC) identifiers (if any) ? M : indicateur si les données sont particulières (par ex.
des « frames boundaries ») ;
32-bit extension header (if any) ? Payload type : indique le format du contenu (G722,
G711 etc.) ;
data ? Sequence number : permet au récepteur de suppri-
mer le « jitter », de détecter la perte de paquet et de les
padding (if any)
8-bit pad count réordonner ; incrémenté de 1 à chaque paquet ; valeur
(in bytes)
de départ choisie aléatoirement (protection contre les
attaques par injection sur des données de paquet chif-
frées).
? timestamp : combiné au numéro de séquence pour détecter les trous, « gap », dans la transmission ; permet de réor-
donner des paquets provenant de différentes sources ; dépend de l’horloge de l’émetteur et de l’intervalle d’évolution de
cette horloge : plusieurs paquets peuvent avoir le même timestamp.
? SSRC& CSRC : permet d’identifier la ou les sources des flux (les identifiants sont aléatoires) qui sont « mixés » au niveau
du récepteur.
ResAvI
Le streaming 313

Pour un même flux de 1, 5M bps, reçu simultané-


ment par trois récepteurs différents :
(a)
Unicast • « unicast » : gaspillage de capacité :
2
Source
×
1. 3 ∗ 1, 5 = 4, 5M bps (a) ;
5
M
3 × 1.5 Mbps bp
s
• « multicast » : mutualisation :
1, 5M bps seulement (b) ;

(b)
Multicast
1
×
Source 1 × 1.5 Mbps 1.
5
M
bp
s

En multicast, les routeurs relaient les datagrammes envoyés sur une adresse de groupe 224.x.y.z de classe D :
. chaque récepteur indique qu’il veut entrer/sortir du groupe, en envoyant :
 un message au format IGMP, « Internet Group Management Protocol », avec l’entrée/sortie et l’@IP du groupe ;
 encapsulé dans un datagramme :
 protocole : 2 ;  TTL de 1 ;
 options : RA, « routeur alert » : indique au routeur de  transmis à destination du groupe associé à IGMP :
traiter le paquet même s’il ne lui est pas adressé ; 224.0.0.22 ;

. le routeur reçoit le message IGMP :


 si c’est une entrée pour le groupe 224.x.y.z, il relais les paquets qu’il reçoit d’une entrée vers le segment où il a
reçu le message ;
 si c’est une sortie, il arrête le relais.
. pour optimiser la diffusion et éviter les boucle : un protocole de « spanning tree », appelé CBT, « Core Based Tree ».
ResAvI
Streaming vs Jitter 314

Rappel : le Jitter ou « gigue » correspond à la variation du temps de transmission d’un paquet.


Les délais de transmission de chaque paquet in-
Network

Source
8 7 6 5 4 3 2 1 8 6 7 5 3 4 2 1
Receiver
duisent des retards, voire des ré-ordonnancements
Packets departing source Packets arriving at receiver
des paquets sur le récepteur.
8 8 8
Si les délais sont très variables, on parle de fort
7 7 7
6 6 6
jitter.
Packet number

5 5 5
4 4 4
Un fort jitter est mauvais pour les transmissions
3
2
3
2
3
2
« temps-réel ».
1 1 1

0 20 40 60 80 100 120 140 160 0 20 40 60 80 100 120 0 20 40 60 80 100 120 140 160 180 200 220 240 260

Time when packet departed (ms) Transit delay experienced (ms) Time when packet arrived (ms)
Playout Packets
Pour annuler le jitter : arrived schedule
Packet arrives at receiver
at receiver 1 2 4 3 5 7 6 8
? t1 le temps de départ du paquet ; 8

? d1 le délai de transmission ;
Packet number

7 Time spent
Packets Packet removed from buffer
in buffer
? on mesure r1 , r1 = t1 + d1 , 6 created
at source 1 2 3 4 5 7 8
5
le temps d’arrivée du premier pa- Missed
4 playout Time Missed
quet ; 3 playout

? on détermine p1 le temps auquel 2


q = 100 ms
le contenu du paquet est « joué » 1

(audio/vidéo) ;
0

80
20

0
40

60

0
0

0
24
10

12

18

26
14

16

20

22
Time [ms]
? on choisit q avec pi = ti + q , et Talk starts r = 58 p = 120 1 1

q > jitter. First packet sent: t = 20 1

L’émetteur construit et envoie chaque paquet suivant un rythme régulier.


Si pour un paquet reçu i, ri > (ti + q) alors le paquet est ignoré (6), sinon il est « bufferisé » et joué suivant le même
rythme régulier mais avec le retard q .
ResAvI
13.2 QoS : Integrated Services vs Differentiated Services 315
Integrated Services et Réservation de ressource
◦ fournie de la QoS à « grain fin », « fine-grained » ;
◦ utilise un mode « circuit virtuel » simulé par les routeurs.
 utilisation de protocoles dédiés :
? RSVP, « Resource ReSerVation Protocol » pour établir un chemin le plus court et le libérer ;
? MPLS, « Multiprotocol Label Switching » pour faire de la commutation au niveau routeur ;
 chaque routeur :
? conserve un état des flux le traversant ;
? réserve une partie de ses ressources au traitement d’un flux ;
◦ beaucoup d’états doivent être mémorisés dans chaque routeur pour la réservation des ressources :
 fonctionne bien à échelle réduite (réseau d’entreprise) ;
 fonctionne mal à grande échelle (pas pour Internet) ;
Differentiated Services et Classes de trafic
◦ fournie de la QoS à « gros grain », « coarse-grained » ;
◦ rajoute seulement « un peu » de complexité au mode « best-effort » :
 reste en mode « datagramme » ;
 rajoute une priorité à chaque datagramme, mark, éventuellement suivant seulement deux classes de trafic :
? une classe normale ;
? une classe EF, « Expedited Forwarding » : le routeur doit faire passer le paquet avec un délai minimal et sans
perte.
 utilise des mécanismes de « queues » ou file d’attente pour traiter les paquets : les retarder, garantir un débit de
traversé throughput ;
 chaque queue correspond à une classe de trafic ;
ResAvI

 le trafic est marqué, marked, mesuré, metered, régulé, policed, et mis en forme, shaped.
13.3 QoS : « packet switching » avec MPLS 316
Le protocole MPLS, « Multi-Protocol Label Switching », RFC 3031 & 3032
• il combine :
 le « packet switching » de technologie comme ATM ;
 le routage IP ;
• le routeur :
 peut ainsi passer :
? du routage « hop by hop » ;
? au « switching » de ATM, c-à-d où les datagrammes empruntent une « sorte » de circuit virtuel ;
 ce qui évite :
? d’analyser les en-têtes du datagrammes en mode « switching », ce qui diminue la latence ;
? de faire de la fragmentation ;
• cette approche est appelée « tag switching » ;
• aux bases de données de routage sont intégrées dans des « label information base », où certains flux de datagrammes
peuvent être étiquetés :
 une fois étiqueté, un datagramme passe directement en mode switching sans passer par le routage ;
 les étiquettes doivent être gérées entre les différents routeurs à l’aide du « label distribution protocol » ou LDP ;
 le réseau d’interconnexion est décomposé en :
? LER, « Label Edge Routers » : qui sont situés en bordure et qui sont chargés de classifier et d’étiqueter les flux de
donnéees ;
? LSR, « Label Switching Routers » : qui sont dans le noyau du réseau d’interconnexion et qui « switchent » les
datagrammes en fonction de leur étiquettes ;
? le protocole LDP est utilisé entre ces différents routeurs pour maintenir la table des étiquettes et faire également la
réservation d’un circuit virtuel, « label-switched Path », ou LSP, entre les routeurs : ils envoient des « LDP requests ».
Il est également possible d’employer le protocole RSVP-TE, « RSVP - Traffic Engineering » RFC 3209.
ResAvI
carry IP traffic over an Ethernet network is shown in Fig. 8.14.
When an LER realizes that a new packet flow must be label-switched, it forwards an
LDP request to the following routers along the path toward the destination, to trigger
the association between outgoing and incoming labels for that flow. When this request
QoS : « packet switching » avec MPLS reaches the egress edge router, this router chooses a label value for identifying the flow 317
Le réseau d’interconnexion avec MPLS
Label switch
(ATM switch/router)

IP network
IP

IP network
IP
IP
IP network

Label edge routers IP


IP
IP network

Fig. 8.12 Label-switched network


L’utilisation de MPLS est limité au8.7réseau
Practice: MPLS router configuration 239
d’interconnexion contrôlé par une même organisation.
Un LSP, « label-switched path »
Intf Label Dest Intf
in in out
3 0.30 52.11
Intf Label Dest Intf Label
in in out out
3 0.70 52.1 1 0.30
IP 52 .1 .1 .1
Intf Dest Intf Label
in out out 1
3 52.1 1 0.70 3
52.1
3 2
1
2
52.3 3 52.2
1

IP 52 .1 .1 .1 2

Fig. 8.15
Les datagrammes empruntent le Label-switched
même chemin path
suivant l’étiquette MPLS qu’ils ont reçus.
ResAvI

In recent years, MPLS has been extended to generalized multi-protocol label switching
(GMPLS) [118], which is a multipurpose control plane paradigm able to manage not only
packet switching devices, but also devices that perform switching in time, wavelength
and space domains. Generalized multi-protocol label switching aims at extending the
Label Stacking
FR
Header
... DLCI ...

Of all the MPLS terms outlined in the previous section, the one that is essential to
Label
understand is the concept of “nested” LSPs; that is, LSPs which include one or more
Fig. 8.13
QoS :
other « packet
LSPs switching
along their » avec
path from ingress MPLS
to egress.
MPLS label encapsulation in existing WAN environments
When this happens, there will be 318
more than one label in front of the IP packet for at least part of its journey.
Integration dans TCP/IP
It is common for many : modification de three
large ISPs to stack la trame
labelsEthernet
in front of802.3
an IP packet. Often,
the end of two LSPs is at the same router and two labels are pushed or popped at once.
20 bits 3 1 8 On insère une « étiquette MPLS » entre l’en-tête de la
The current limit is eight labels.
There are several instances where this stacking ability comes in handy. trame Ethernet
A larger ISP 802.3 avec un type 0x8847, et le data-
Label value Exp S TTL
can buy a smaller ISP and simply “add” their own LSPs onto (outside) thegramme existing ones.
IP :
In addition, when different signaling protocols are used in core routers and border
routers, these domains can be nested instead of discarding one or the other.
◦ Label : 20bits identifie les paquets comme étant inclus
The general idea of nested MPLS domains with label stacking is shown in dans Figureun flux au travers d’un « tunnel » MPLS ;
17.7.
There are five MPLS domains, each with its own way of setting up LSPs: static,
◦ Exp RSVP, « Class of Service » : 3bits utilisés pour clas-
: CoS,
and LDP. The figure shows the number of labels stacked at each point and the le
sifier order
flux parmi une des 8 catégories ;
MAC MPLS IP Data
Similaire au TOS du datagramme IP.
Fig. 8.14 MPLS label encapsulation in IP/LAN environments ◦ S, « Stack bit » : permet d’avertir le routeur qu’une autre
MPLS Domain 1 étiquette est empilée après les 32bits de l’étiquette cou-
on its incoming link and returns it to the upstream router along the path. The upstreamrante ;
LSR gets this label, stores it in its table for identifying the flow on its outgoing link,◦ TTL, « Time to Live » : 8bits utilisés de la même manière
assigns another label to the same flow for identification on its3 incoming link, stores it inque le TTL de l’entête du datagramme IP ;
MPLS Domain
the table associated to the2outgoing label and forwards it backward to the next upstream
MPLS Domain
MPLS MPLS Cette valeur peut être copiée depuis ou vers celle du
router.
R When a label is finally returnedR toDomain
the ingress
4 edge Domain
R router who
5 sent
R the request,
an edge-to-edge path is established and it isLDP LDP path (LSP). All thedatagramme IP.
called a label-switched
following packets Static
of the same flow will then followRSVPthis path. One of the main results is
then to provide connection-oriented functionalities to IP-based networks, as illustrated
by the example in Fig. 8.15.
Les étiquettes peuvent être empilées ou « stackées »,
Recent advances in hardware-based processing and ultra-fast random access memories entre différents domaines, qui peuvent être combinés de
have boosted the evolution of IP router architectures to the point that the fast IP switching
différentes manières.
RSVP
paradigm behind the original motivations for deploying MPLS networks is not critical
anymore. However,
Two stacked networkThree
labels operators arelabels
stacked still very keen on adopting
Three stackedMPLS
labels in their
core(MPLS2,
infrastructures
MPLS1,because
IP) of(MPLS4,
the enormous
MPLS3,advantages offered by such
(MPLS5, a technology
MPLS3,
MPLS1,
that integrates the flexibility of the IP) with the traffic control
IP world MPLS1,andIP)management
capability
Remarque achievable
FIGURE 17.7 through a connection-oriented
: les avancées en terme de puissanceswitching paradigm.
de routeur In fact,
netoday
rend plus la solution MPLS incontournable, néanmoins
MPLS is mainly used to implement quality of service, traffic engineering and virtual
elle permet
MPLS de showing
domains, faire dehowla QoS, de manière
the domains très or
can be nested efficace
chained,: and
fournit
how des garanties
multiple labels sur la QoS.
private network solutions.
ResAvI

are used.
QoS : « packet switching » avec MPLS 319
Chapter 5 • Mechanisms for Quality-of-Service 275
Illustration

A G
F
Egress LSR
MPLS domain

Flow of IP
datagrams
D
(denoted
by FEC)
C

B
E
MPLS label
Link-layer hdr
IP header
LSR = Label switching router
IP payload FEC = Forwarding equivalence class
LFIB LSP = Label switched path H
LIFB = Label forwarding information base

Figure 5-14: MPLS operation.


On peut considérer • Rutgers
Ivan MarsicMPLS comme un mécanisme permettant de créer et d’utiliser des « chemins276
University », path, sortes
de « tunnels » : !"#$% &'()'*% +,% -"% .//&'**'*% .,/% -"% &+01),2% 3&+1+4+(*% 1+% *'1% 03% 15'% 3.15*610,,'(*7% 8,% !"#$9
',.:('/%&+01'&%)*%;,+<,%.*%.% Label Switching Router (LSR)7%8%*'1%+=%#$>*%<5'&'%'.45%#$>%)*%
segment 2 segment 3
&'.45.:('%=&+?%.,@%+15'&%#$>%A).%*+?'%+15'&%#$>*%),%15'%*.?'%*'1%)*%4.(('/%.,%
segment 1 MPLS domain7%
label = 17 label = 6
-,% +15'&% <+&/*B% .,% !"#$% /+?.),%label = 5 :@% .% 4+,1)20+0*% ,'1<+&;7% 8% (.:'(% *<)145),2% &+01'&%
)*% =+&?'/%
=+&<.&/*% 3.4;'1*% :@% 'C.?),),2% .% *5+&1B% =)C'/9(',215% !"#$% (.:'(% DE)20&'% F9GHI7% J5'% (.:'(%
packets belonging
&'3&'*',1*% .% 2)A',% 1&.==)4% =(+<B% .,/% .((% 15'% 3.4;'1*% :'(+,2),2% 1+% 15)*% =(+<% *5+0(/% :'% =+&<.&/'/%
to the same FEC
.(+,2% 15'% 3.156&+01'610,,'(% .**+4).1'/% <)15% 15)*% (.:'(7% 8% 1&.==)4% =(+<% )*% 4.(('/% .% Forwarding
Equivalence Class (FEC)B%.(*+%.%E0,41)+,.(%KL0)A.(',4'%M(.**B%.,/%15)*%)*%.%2&+03%+=%-"%3.4;'1*%
15.1%Equivalence
(Forwarding .&'% =+&<.&/'/% LSP
),% 15'% *.?'% ?.,,'&% D)7'7B% .(+,2% 15'%
Class) (Label
*.?'% 3.15B%Switched Path,=+&<.&/),2%
<)15% 15'% *.?'% tunnel)
1&'.1?',1I7%-,%+15'&%<+&/*B%8,%EKM%)*%.%*'1%+=%3.4;'1%=(+<*%<)15%4+??+,%4&+**94+&'%=+&<.&/),29
!
"#$!%&'()! 3.15% &'L0)&'?',1*7% 8% *'L0',4'% +=% &+01'&*% 15.1% =+&?% .% 3.15% .(+,2% <5)45% .% 2)A',% EKM% =(+<% )*%
Attention : le « tunnel » MPLS est plus efficace qu’un « tunnel » VPN, mais se comporte de manière similaire (le
=+&<.&/'/%=+&?*%.%10,,'(B%<5)45%)*%;,+<,%.*%.% Label Switched Path (LSP)7%E+&%'C.?3('B%+,'%
« packet switching » est plus efficace
)*% =+&?'/%que
•!*+,!+-./0#.12!.1+/,34!56!758/.12!!
*045% 3.15% le «Bpacket
:@% &+01'&*% B% CB% .,/% Drouting
% ),% E)20&'%».
F9GH7% K.45% #$"% 10,,'(% )*% 0,)/)&'41)+,.(%
ResAvI

D+,'9<.@IB% *1.&1),2% <)15% .,% ),2&'**% #$>B% 2+),2% 15&+025% ),1'&?'/).1'% #$>*B% )=% .,@B% .,/% ',/),2%
•!9&!:7366.0!;12.1,,7.12!<:;=)!3>.?./$!/5!+@,0.6$!758/,+!>3+,4!51!7,+5870,!051+/73.1/+A!73/#,7!/#31!
<)15%.,%'2&'**%#$>7%-=%/.1.%,''/*%1+%1&.A'(%),%15'%+33+*)1'%/)&'41)+,%.*%<'((B%<5)45%)*%0*0.((@%1&0'B%
15',%.%*'3.&.1'%+,'9<.@%10,,'(%?0*1%:'%:0)(1%),%15'%+33+*)1'%/)&'41)+,7%J+%*0??.&)N'B%.,%EKM%)*%
51!4.+/310,!<+#57/,+/!@3/#=!51?$!<(,0/.51!BCDCE=C!%&'(!344+!/#,!3>.?./$!/5!657-374!@30F,/+!5G,7!
0,)L0'(@% .**+4).1'/% <)15% .,% #$"7% K.45% 3.)&% +=% &+01'&*% .2&''*% +,% .% (.:'(% ),/'3',/',1(@%+=% +15'&%
« Switching » vs « routing » : les performances 320
Time
First bit received

Reception delay = t xI

Fwd decision Last bit received


Input port queuing delay
Forwarding decision delay = tf
Fabric traversal
queuing delay

Switch fabric Switch fabric traversal delay = ts

Transmission
queuing delay
First bit transmitted
Output port
Transmission delay = t xO

Last bit transmitted

Pour le switching :
? on consulte le « circuit-virtuel » auquel appartient le paquet en entrée ;
? on supprime le temps de décision, « Forwarding decision delay » tf ;
? on réduit le temps de « switching », le « Switch Fabric traversal dealy » ts
ResAvI
13.4 Qos & GNU/Linux : Les queuing disciplines 321
« Queuing discipline » : algorithme de gestion de file d’attente
Cet algorithme permet de contrôler :
• le volume données envoyées (traffic shaping) ;
• la priorité de ces envois en fonction de critères auxquels correspondent ces données.
Il existe deux types d’algorithmes de gestion de files d’attente :
◦ ceux « classless » ;
◦ ceux « classful ».

Classless Queuing Disciplines (Classless qdiscs)


Ils correspondent au modèle le plus simple, parce qu’elles ne peuvent que :
. accepter ; . retarder ;
. rejeter ; . ré-ordonnancer (re-scheduling) ;

Ils implémentent différents algorithmes :


? pfifo & bfifo, FIFO : le plus simple des « qdisc » qui correspond au « First In First Out ».
Cet algorithme utilise un buffer de taille limité, défini en nombre de paquets, pfifo, ou en octets, bfifo.
? pfifo_fast : l’algorithme par défaut sur toutes les interfaces sous GNU/Linux ;

? tbf, « Token Bucket Filter » : un algorithme simple à mettre en oeuvre et peu coûteux en CPU, qui permet de ralentir
une interface tout en autorisant des courtes rafales d’envoi ;
? SFQ, « Stochastic Fair Queuing » : un des algorithmes les plus utilisés qui permet de répartir de manière équitable les
envois de données entre différents flux (EFSQ, « Enhanced SFQ », permet d’avoir un contrôle plus fin) ;

? RED & GRED, « Random Early Detection » et « Generic RED » : un algorithme utilisable dans le contexte d’un « backbone »
avec des débits supérieurs à 100Mbps, pour les paquets en entrée.
ResAvI
QoS & GNU/Linux 322
Quelques termes
? « ingress router » : le routeur qui permet l’entrée dans le réseau d’interconnexion ;
? « egress router » : le routeur qui est à la sortie du réseau d’interconnexion.

Les termes ingress et egress sont aussi utilisés pour désigner le trafic en entrée et en sortie, respectivement.

Traffic shaping et routing policy

Attention
. Il est seulement possible de modifier le trafic des données en sortie.

Cela s’appelle du « traffic shaping » : introduire des délais ou jeter des paquets.

. Il n’est pas possible de contrôler le trafic en entrée : elles dépendent de l’activité de matériels que l’on
ne contrôle pas.
Néanmoins, il est possible de limiter le trafic en entrée et d’influencer les émetteurs (ralentissement
possible du trafic TCP en utilisant les mécanismes de protection contre la congestion : perte de paquet,
utilisation d’ECN).

Cela s’appelle du « policing » : jeter des paquets avant qu’ils ne soient pris en charge par la partie routage
du noyau GNU/Linux (les retarder nécessiterait une ou plusieurs file d’attente importante).
L’outil utilisé est le RED, « Random Early Detection ».
ResAvI
x Packets in the 2 band have the lowest priority and are sent out only if there
aren't any packets in the 0 and 1 bands.

It's important to know this because this can be a way to optimize how packets travel
13.5 Qos & GNU/Linux : Classless WKURXJKWKHQHWZRUNLQWHUIDFHVRIRXU/LQX[URXWHUV7KH726E\WHORRNVOLNHWKLV
qdiscs 323
L’algorithme pfifo_fast 0 1 2 3 4 5 6 7
PRECEDENCE 7\SHRI6HUYLFH³726 MBZ
? il est proche du fifo ;
? il est « classless », car il réalise une répartition7KH726ELWVDUHGHÀQHGDVIROORZV
fixe des paquets suivant un critère ;
? il dispose de 3 canaux de données, ou « band », dans lesquels les paquets
x 0000 se répartissent suivant leur TOS :
Normal Service
 canal 0 : les paquets ont la plus haute priorité ; x 0001 Minimize Monetary Cost (MMC)
 canal 1 : les paquets sont envoyés uniquement xlorsqu’il 0010 n’y a pas de paquets
Maximize dans le(MR)
Reliability canal 0 ;
 canal 2 : les paquets ont la plus basse priorité : xils ne sont envoyés
 que lorsqu’il n’y a pas de paquet dans le canal 0
0D[LPL]HWKURXJKSXW 07
et 1. x 1000 Minimize Delay (MD)

%DVHGRQWKH726E\WHWKHSDFNHWVDUHSODFHGLQRQHRIWKHWKUHHEDQGVDVIROORZV
Les valeurs de l’octet TOS dans l’en-tête du datagramme IP :
les différentes valeurs des bits :
012 3456 7
PRECEDENCE Type of Service Unused

◦ 0000 : service normal ;


◦ 0001 : MMC, « Minimize Monetary Cost » ;
◦ 0010 : MR, « Maximize Reliability » ;
◦ 0100 : MT, « Maximize Throughput » ;
◦ 1000 : MD, « Minimize Delay ».
ResAvI
Binary Decimcal Meaning
-----------------------------------------
1000 8 Minimize delay (md)
0100 4 Maximize throughput (mt)
Chapter 9. Queueing Disciplines f
0010 2 Maximize reliability (mr)
Qos & GNU/Linux : Les différents Type de Services,
0001 1 Minimize monetary cost (mmc)
0
TOS
1 2 3 4 5 6 7
324
0000 0 Normal Service +-----+-----+-----+-----+-----+-----+-----+-----+
Afficher les différents types de service | | | |
| PRECEDENCE | TOS | MBZ |
À l’aide de la commande : | | | |
As there is 1 bit to the right of these four bits, the actual value of the TOS field is double+-----+-----+-----+-----+-----+-----+-----+-----+
$ sudo tcpdump -vv -i eth0 the value
of the TOS bits. Tcpdump -v -v shows you the value of the entire TOS field, not just the four bits. It
is the value you see in the first column of this table:
Calculer les priorités The four TOS bits (the ’TOS field’) are defined as:
TOS Bits Means Linux Priority Band Binary Decimcal Meaning
------------------------------------------------------------ -----------------------------------------
0x0 0 Normal Service 0 Best Effort 1 1000 8 Minimize delay (md)
0x2 1 Minimize Monetary Cost 1 Filler 2 0100 4 Maximize throughput (mt)
0x4 2 Maximize Reliability 0 Best Effort 1 0010 2 Maximize reliability (mr)
0x6 3 mmc+mr 0 Best Effort 1 0001 1 Minimize monetary cost (mmc)
0x8 4 Maximize Throughput 2 Bulk 2 0000 0 Normal Service
0xa 5 mmc+mt 2 Bulk 2
0xc 6 mr+mt 2 Bulk 2 Le « dutch packet » :
0xe 7 mmc+mr+mt 2 Bulk 2
0x10 8 Minimize Delay 6 Interactive 0 MMC + isMT
As there 1 bit+toMD + MR
the right = 8+4+2+1
of these four bits, the actual value of the TOS
0x12 9 mmc+md 6 Interactive 0 of the TOS bits. Tcpdump -v -v shows you the value of the entire TOS fi
0x14 10 mr+md 6 Interactive 0 is the value you see in the first column of this table:
0x16 11 mmc+mr+md 6 Interactive 0
0x18 12 mt+md 4 Int. Bulk 1
0x1a 13 mmc+mt+md 4 Int. Bulk 1 TOS Bits Means Linux Priority
0x1c 14 mr+mt+md 4 Int. Bulk 1 ------------------------------------------------------
0x1e 15 mmc+mr+mt+md 4 Int. Bulk 1 0x0 0 Normal Service 0 Best Effort
0x2 1 Minimize Monetary Cost 1 Filler
La dernière colonne indique la « priomap », c-à-d dans quel canal 0x4 est envoyé2 leMaximize
paquet deReliability 0 Best
chaque valeur de Effort
0x6 3 mmc+mr 0 Best Effort
priorité. 0x8 4 Maximize Throughput 2 Bulk
Lots of numbers. The second column contains the value of the relevant four TOS bits, followed
0xa by5 mmc+mt 2 Bulk
their translated meaning. For example, 15 stands for a packet wanting Minimal Monetary Cost, 6
0xc mr+mt 2 Bulk
Exemple
Maximum :Reliability,
le paquet de priorité
Maximum 4 est AND
Throughput envoyé dansDelay.
Minimum le canal 1 (la
I would call priorité
this a0xe commence
’Dutch 7 à zéro).
mmc+mr+mt 2 Bulk
ResAvI

Packet’. 0x10 8 Minimize Delay 6 Interactive


0x12 9 mmc+md 6 Interactive
0x14 10 mr+md 6 Interactive
0x16 11 mmc+mr+md 6 Interactive
This means that priority 4, for example, gets mapped to band number 1. The priomap also allows
you to list higher priorities (> 7) which do not correspond to TOS mappings, but which are set by
other means.

Qos & GNU/LinuxThis


: Les différents Type de Services, TOS
table from RFC 1349 (read it for more details) tells you how applications might very well set
325
« Type of Service in thetheir TOS bits:
Internet Protocol », RFC 1349
TELNET 1000 (minimize delay)
FTP
Control 1000 (minimize delay)
Data 0100 (maximize throughput)

TFTP 1000 (minimize delay)

SMTP
Command phase 1000 (minimize delay)
DATA phase 0100 (maximize throughput)

Domain Name Service


UDP Query 1000 (minimize delay)
TCP Query 0000
Zone Transfer 0100 (maximize throughput)

NNTP 0001 (minimize monetary cost)

ICMP
Errors 0000
Requests 0000 (mostly)
Responses <same as request> (mostly)

La configuration des interfaces

$ ip link
txqueuelen
1: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
The length of thisbrd
link/ether 00:11:de:ad:be:ef queue is gleaned from the interface configuration, which you can see and set with
ff:ff:ff:ff:ff:ff
ifconfig and ip. To set the queue length to 10, execute: ifconfig eth0 txqueuelen 10
C’est du pfifo_fast par défaut.
ResAvI

You can’t set this parameter with tc!


Qos & GNU/Linux : Classless qdiscs 326
« Token Bucket Filter »
Cet algorithme correspond à :
? une configuration :
 un seau, le bucket : qui se remplit de jetons, tokens, à une fréquence choisie, token rate ;
 une capacité pour le seau en nombre de jetons ;
? l’association d’un paquet et d’un jeton :
 le jeton est associé à un paquet ;
 le jeton est supprimé du seau ;
? deux flux : un pour les jetons et l’autre pour les paquets.

Il existe 3 cas possibles :


1. les paquets arrivent au même rythme que les jetons : chaque paquet est associé à un jeton et traverse la file d’attente
sans délai ;

2. les paquets arrivent à un rythme inférieur à celui des jetons : une partie seulement des jetons est utilisée, et le reste
s’accumule jusqu’à remplir le seau en fonction de sa taille choisie.
Les jetons non utilisés permettent d’envoyer des paquets à un débit supérieur à celui d’arrivée des jetons et pour une
courte durée : envoi d’un groupe de paquets en rafale, data burst.
Si le débit continue à dépasser celui des jetons on bascule dans le cas suivant.

3. les paquets arrivent à un rythme supérieur à celui d’arrivée des jetons.


Les jetons vont s’épuiser et la file d’attente va ralentir le débit des paquets jusqu’à en éliminer, situation appelée overlimit.

Remarque : L’implémentation dans GNU/Linux correspond à assimiler les jetons à des octets.
ResAvI
QoS & GNU/Linux : le Tocken Bucket filter 327
Illustration du seau

tokens generated
at rate r [tokens/sec]

bucket holds
up to b tokens

1 token dispensed Token


for each packet generator

r tokens/sec
Token dispenser
(bucket)
b = bucket capacity

Token
waiting area
to network

arriving
token-operated packets
turnstile Turnstile
packet
(a) (b)
La différence entre le « leaky bucket », (a), et le « token bucket », (b) : la possibilité d’un mode
« burst » dans le « token bucket ».
ResAvI
Qos & GNU/Linux : Classless qdiscs 328
« Stochastic Fairness Queuing »
Ce comportement permet de répartir l’utilisation de l’interface entre différents flux, ou conversations :
• connexions TCP ;
• stream UDP (vidéo+son par exemple).

Fonctionnement :
 le trafic est décomposé en différentes files d’attente, une pour chaque conversation ;
 l’envoi de paquet est ensuite réalisé à tour de rôle depuis chaque file, « round robin » ;
ce qui donne un chance de progresser à chaque conversation, chacune suivant son tour.
On évite ainsi qu’une conversation très active entraîne l’interruption des autres.

Réalisation :
? on définit un certain nombre de files d’attentes ;
? on utilise une fonction de hashage permettant d’associer une conversation à une de ces files d’attentes (par
exemple en appliquant la fonction de hashage sur le couple de TSAPs des échanges) ;
? en cas de collision, c-à-d où deux conversations seraient affectées à la même file d’attente, on a un débit divisé
par deux.
Pour éviter cette situation, on change régulièrement les paramètres de la fonction de hashage, ce qui permet
de ne pas avoir de collision, pour une même conversation, que durant un court moment (quelques secondes).

Remarque : l’intérêt de cet algorithme intervient quand l’interface de sortie est saturée.
ResAvI
Qos & GNU/Linux : Stochastic Fairness Queuing 329
Illustration
Class 1 queue (Waiting line)

Transmitter
Class 2 queue (Server)
Arriving packets

Classifier Scheduler

Class n queue

Scheduling
discipline
Packet drop
when queue full

Ici, le « round robin » est réalisé par le « scheduler ».


ResAvI
RED : « Random Early Detection » 330
Exposé du problème
Une « file d’attente », queue, est FIFO :
◦ les paquets de tête traversent le routeur ;
◦ les paquets entrants se placent en queue, tail ;
◦ lorsqu’un problème de débit arrive, c-à-d que des paquets arrivent avec un débit plus grand que celui géré ou
autorisé, ces paquets entrants sont rejetés, on parle de « DropTail » ;
◦ ces rejets vont entraîner des perturbations sur les flux affectés :
 pour un flux TCP, il y aura un « backoff » du à l’algorithme de protection contre la congestion ;
 en affectant plusieurs flux simultanément, tous ces flux vont faire un « backoff » : résultat le trafic en entrée va
fortement diminuer et la capacité de la ligne de transmission va être sous-employée.
Présentation d’une solution
L’idée de l’algorithme RED est de :
? détecter le passage en saturation ;
? prévenir les flux de cette saturation en marquant le paquet :
 avec l’ECN s’il est géré (marquer le paquet comme overlimit) ;
 en le rejetant ;
? marquer les paquets de manière aléatoire : suivant une probabilité proportionnelle à la situation de congestion ;
? favoriser TCP au dépens d’UDP qui ne dispose pas de mécanisme de contrôle de congestion ;
L’algorithme RED :
. le fonctionnement est « probabiliste », on définit :
 une limite min où le paquet a une faible probabilité d’être marqué (cela correspond à une taille de la queue,
puisque pour un paquet arrivant trop vite, il n’est pas traité tout de suite et il est donc mis dans la queue) ;
 on définit une limite max à partir de laquelle les paquets sont sûrement marqués (probabilité forte) ;
. tout paquet de la file d’entrée situé après le min a une « chance » d’être marqué.
ResAvI
Chapter 3

7KLVPHDQVWKDWE\GHIDXOW/LQX[LVVPDUWHQRXJKWRSULRULWL]HWUDIÀFDFFRUGLQJWR
WKH726E\WHV8VXDOO\DSSOLFDWLRQVOLNH7HOQHW)736073PRGLI\WKH726E\WH
13.6 Qos & GNU/Linux : Classful qdiscs
to work in an optimal way. We will see later in this book how to optimize the
WUDIÀFRXUVHOYHV
331
Classful Queuing Disciplines (Classful qdiscs)
Classful Queuing Disciplines
? une classe est une catégorie de trafic ;
7KHVHTGLVFVDUHXVHGIRUVKDSLQJGLIIHUHQWW\SHVRIGDWD7KHFRPPRQO\XVHG
classful qdiscs are CBQ (CODVV%DVHG4XHXLQJ DQG+7% +LHUDUFKLFDO7RNHQ%XFNHW 
? une qdisc « classful » est un algorithme de gestion de file d’attente basé sur l’utilisation d’un partitionnement du trafic en
FirVWRIDOOZHQHHGWROHDUQKRZFODVVIXOTXHXLQJGLVFLSOLQHVZRUN7KHZKROH
différentes classes :
SURFHVVLVQRWGLIÀFXOWVR,
OOWU\WRH[SODLQLWDVVLPSO\DVSRVVLEOH
 pour savoir à quelle classe appartient un paquet il faut utiliser un « classifier » ;
Everything is based on a hierarchy. First, every interface has one root qdisc that
 la classification peut être réalisée à l’aide de filtres : un filtre s’applique s’il y a une correspondance entre sa définition
WDONVWRWKHNHUQHO6HFRQGWKHUHLVDFKLOGFODVVDWWDFKHGWRWKHURRWTGLVF7KHFKLOG
class further has child classes that have qdiscs attached to schedule the data and leaf
et le paquet à traiter.
classes, which are child classes of the child classes.
? après classification, il est nécessaire de définir l’ordre d’envoi des différents paquets, « scheduling ».
$OOFRQIXVHG"+DYHDORRNDWWKHIROORZLQJLPDJHZKLFKZLOOH[SODLQDZD\
the confusion:
L’organisation est hiérarchique :
. chaque interface dispose d’une qdisc racine à laquelle
est associée une catégorie ;

. une catégorie peut avoir :


 une qdisc parent pour envoyer son trafic (par défaut
c’est du pfifo_fast) ;
 une catégorie parent ;
 une ou plusieurs catégories filles ;
 aucun enfant : c’est une catégorie feuille ou « leaf » ;

. l’identification de ces éléments est faite à l’aide de la notation <major>:<minor> :


6REDVLFDOO\&%4RU+7%TGLVFVDOORZXVWRFUHDWHFKLOG&%4RU+7%FODVVHVZKLFK
we can setup tolashape
racine estkind
some identifiée par
of data. For ou class,
1:child
each 1:0,weicican
par « 10:
attach »;
a qdisc
for scheduling packets within that child class. Next, we can create leaf classes, which
 les catégories doivent avoir le même « major » que leur parent, qui doit être unique pour une même interface :
are child classes of the qdiscs we attached to the child classes, or we can create leaf
 leclasses'
classes as child « minor
child»classes
doit être unique
attached to the dans le même qdisc et les catégories associées.
root qdisc.
ResAvI

[ 79 ]
Qos & GNU/Linux : Classful qdiscs 332

Les algorithmes les plus utilisés sont :

. PRIO, « Priority » : un algorithme dérivé de pfifo_fast, avec la possibilité d’augmenter le nombre de canaux et per-
mettant d’utiliser des filtres basés sur plus d’information que le TOS ;

. CBQ, « Class Based Queuing » : c’est l’algorithme le plus complexe et aussi le plus utilisé qui utilise également les
informations du TOS ;

. HTB, « Hierarchical Token Bucket » : permet d’aller au-delà des limitations de CBQ.

CBQ
Cet algorithme a pour but de contrôler les débits de sortie d’une interface sans réaliser de calculs complexes :
− il utilise le temps d’inactivité, « idle time », de l’interface pour déduire son débit effectif :
 pour réduire le débit d’une interface de 100Mbps à 10Mbps, il faut qu’elle reste inutilisée à 90% ;
 pour mesurer ce temps d’inactivité, l’algorithme mesure le délai en micro-secondes entre les appels matériels à la
carte réseau :
? problème matériel : la carte réseau n’obtient pas toujours le débit réseau maximum par rapport à la technologie de
la carte (mauvais pilote ou mauvaise qualité des composants) ;
? l’évaluation finale peut être très différente de la valeur réelle.
− il permet de répartir le débit de la carte entre différentes catégories de trafic :
 chaque catégorie reçoit l’allocation d’un débit maximum ;
 une catégorie peut ou non prendre le débit associé à une autre classe si celle-ci est inactive :
? du point de vue du « préteur » : « isolated » ou « sharing » ;
? du point de vue de « l’emprunteur » : « bounded » ou non.
− il permet également de classifier suivant « chaque bit » du TOS pour effectuer une prise de décision rapide.
ResAvI
13.7 Qos & GNU/Linux : La commande tc, ou « traffic control » 333
Afficher et supprimer une configuration
Afficher l’algorithme qdisc associé à une interface :
$ tc -s qdisc ls dev eth1
qdisc pfifo_fast 0: root refcnt 2 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
Sent 1654333 bytes 21160 pkt (dropped 0, overlimits 0 requeues 0)
backlog 0b 0p requeues 0

Supprimer la configuration d’un algorithme qdisc, c-à-d. revenir à la configuration par défaut :
$ sudo tc qdisc del dev DEV root

Réaliser la classification à l’aide de filtre


Trafic de source Web et de destination SSH en priorité 1, trafic autre en priorité basse :
# tc filter add dev eth0 protocol ip parent 10: prio 1 u32 match ip dport 22 0xffff flowid 10:1
# tc filter add dev eth0 protocol ip parent 10: prio 1 u32 match ip sport 80 0xffff flowid 10:1
# tc filter add dev eth0 protocol ip parent 10: prio 2 flowid 10:2

Le 80 0xffff indique configuration binaire égale à la valeur sur deux octets 80 uniquement.
Trafic identifié par la source ou la destination :
# tc filter add dev eth0 parent 10:0 protocol ip prio 1 u32 match ip dst 4.3.2.1/32 flowid 10:1
# tc filter add dev eth0 parent 10:0 protocol ip prio 1 u32 match ip src 1.2.3.4/32 flowid 10:1

Trafic identifié par la source et par un port :


# tc filter add dev eth0 parent 10:0 protocol ip prio 1 u32 match ip src 4.3.2.1/32 match ip sport 80 0xffff flowid
10:1
Trafic identifié par le TOS, (ici, le trafic dit interactif) :
# tc filter add dev eth0 parent 1:0 protocol ip prio 10 u32 match ip tos 0x10 0xff flowid 1:4
ResAvI
13.8 Qos & GNU/Linux : un exemple avec HTB 334
HTB
Exemple :
1: On veut limiter :
|
1:1 ◦ le trafic Web à 5 Mbps ;
/ | \ ◦ le trafic SMTP à 3 Mbps ;
/ | \ ◦ le trafic restant dispose d’un petit débit ou de tout le débit si les deux autres sont absents.
1:10 1:20 1:30
| | | ◦ les deux ensemble ne doivent pas dépasser 6 Mbps.
10: 20: 30:
sfq sfq sfq

On configure les qdisc :


# tc qdisc add dev eth0 root handle 1: htb default 30
# tc class add dev eth0 parent 1: classid 1:1 htb rate 6mbit burst 15k
# tc class add dev eth0 parent 1:1 classid 1:10 htb rate 5mbit burst 15k
# tc class add dev eth0 parent 1:1 classid 1:20 htb rate 3mbit ceil 6mbit burst 15k
# tc class add dev eth0 parent 1:1 classid 1:30 htb rate 1kbit ceil 6mbit burst 15k
# tc qdisc add dev eth0 parent 1:10 handle 10: sfq perturb 10
# tc qdisc add dev eth0 parent 1:20 handle 20: sfq perturb 10
# tc qdisc add dev eth0 parent 1:30 handle 30: sfq perturb 10

Puis le trafic vers les catégories, avec tc filter :


# tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 80 0xffff flowid 1:10
# tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip sport 25 0xffff flowid 1:20
ResAvI
Reiterating, band 0 goes to minor number 1! Band 1 to minor number 2, etc.

Qos & GNU/Linux


9.5.3.2. : un exemple avec PRIO
Sample configuration 335
Classful qdiscs : PRIO
We will:create this tree:
Exemple
1: root qdisc # tc qdisc add dev eth0 root handle 1: prio
/ | \ ## This *instantly* creates classes 1:1, 1:2, 1:3
/ | \
# tc qdisc add dev eth0 parent 1:1 handle 10: sfq
/ | \
1:1 1:2 1:3 classes # tc qdisc add dev eth0 parent 1:2 handle 20: tbf rate 20kbit buffer
| | | 1600 limit 3000
10: 20: 30: qdiscs qdiscs # tc qdisc add dev eth0 parent 1:3 handle 30: sfq
sfq tbf sfq
band 0 1 2

Ce qui donne :
# tc -s qdisc ls dev eth0qdisc prio 1: root refcnt 2 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
backlog 0b 0p requeues 0 55
qdisc sfq 10: parent 1:1 limit 127p quantum 1514b
Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
backlog 0b 0p requeues 0
qdisc tbf 20: parent 1:2 rate 20000bit burst 1600b lat 560.0ms
Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
backlog 0b 0p requeues 0
qdisc sfq 30: parent 1:3 limit 127p quantum 1514b
Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
backlog 0b 0p requeues 0
ResAvI
13.9 Qos & GNU/Linux : combiner qdisc et iptables 336
Méthodologie : marquer les paquets
Il est possible de « marquer » un paquet à l’aide d’iptables et ensuite de le traiter dans un qdisc :
a. on utilise le fwmark, c-à-d une marque utilisée pour le « forwarding » ;
b. on place la marque dans la table « mangle » et dans la chaîne PREROUTING ;
c. on utilise tc filter pour tenir compte de cette marque.

# iptables -A PREROUTING -t mangle -i eth0 -j MARK –-set-mark 6


# iptables -A PREROUTING -i eth0 -t mangle -p tcp –-dport 25 -j MARK –-set-mark 1
# tc filter add dev eth1 protocol ip parent 1:0 prio 1 handle 6 fw flowid 1:1
Ici, la valeur de la marque est 6, mais elle peut être choisie librement.

Avantages
. on n’apprend pas la syntaxe de tc filter mais seulement celle de iptables !
ResAvI
Qos & GNU/Linux : combiner qdisc et iptables 337
Les limites de l’utilisation d’iptables
Pour pouvoir tenir compte de protocoles de la couche « application » (couche 5 du modèle TCP/IP ou 7 du modèle OSI), il
est nécessaire de pouvoir identifier ces protocoles :
− en général :
 ils sont basés sur les protocoles de transport UDP ou TCP :
 ils utilisent un numéro de port connu en destination ou en source ;
− mais :
 ils n’utilisent pas toujours le port associé au service : service « non officiel », déplacement volontaire pour dissimuler
l’accès au service. . .
 ils utilisent parfois des numéros de port variables : FTP, « File Transfert Protocole », P2P, « peer-to-peer », VoIP,
« Voice over IP », . . .
 ils utilisent les mêmes numéros de port que d’autres protocoles : le port 80 peut être utilisé en p2p.
Il est nécessaire d’analyser le contenu des échanges pour pouvoir les identifier !
Le module L7-filter
◦ il permet de classifier le trafic disponible à http://l7-filter.clearfoundation.com/ ;
◦ il se présente comme un module d’extension pour netfilter (iptables) ;
◦ il utilise beaucoup de ressources CPU :
 il introduit de la latence qui peut se traduire par la perte de paquet ;
 il n’est pas recommandé pour une solution de routage à débit élevé ;
 cette latence dépend de la nature des données plus que du volume :
? du trafic Web à 20Mbps ne sera pas ralenti : analyse simple ;
? du trafic VoIP à 2Mbps sera ralenti de manière importante : analyse complexe.
◦ il est bien adapté dans un contexte SOHO, « small office, home office » : détection de virus, limitation des téléchargements
par p2p, etc. ;
◦ il est associé au module de suivi de connexion ip_conntrack qui consomme des ressources.
ResAvI
Chapter 5

RTNETLINK answers: No such file or directory


router:~#

7KHHUURUZHJRWZKHQUXQQLQJWKHlimits script was generated because no limits


Qos & GNU/Linux : combiner qdisc et iptables
existed on that interface, meaning that no root class was present. If we will run 338
it
again, we will not get any errors.
Le module L7-filter
Now, the commands iptables –t mangle –L POSTROUTING –n –v and tc –s class
◦ il utilise des expressions régulières pour analyser le contenu
show devdu should generate
protocole
eth1 ; the same number of bytes and packets matched for
each rule and corresponding class.
◦ l’ensemble de ces expressions régulières correspondent aux « protocols definition » (certaines sont communes à diffé-
rents protocoles) ;
◦ une fois le module L7-filter installé dans GNU/Linux, il $FFRXQWLQJZLWK/¿OWHU
est nécessaire de les récupérer :
$FFRXQWLQJLVWKHHDVLHVWDSSOLFDWLRQWKDW\RXFDQGRZLWK/ÀOWHU<RXFDQVHW
http://sourceforge.net/projects/l7-filter/files/Protocol%20definitions/
up accounting scripts to see how many bytes are consumed by applications in
your network.
Exemple