You are on page 1of 282

Cours d’introduction ` a TCP/IP

Fran¸ cois Laissus <fr . laissus [at] laissus . fr> Version du 20 f´ evrier 2005

ii Copyright (c) 1999 - 2005 — Fran¸ cois Laissus <fr.laissus[at]laissus.fr>

Les sources de ce document sont ´ edit´ ees sous Unix (FreeBSD) ` a l’aide de l’´ editeur de texte vi, et g´ er´ es avec cvs. L’ensemble du processus de fabrication est d´ ecrit dans un fichier Makefile (commande make). A La mise en forme s’effectue grˆ ace au logiciel L TEX. Les figures sont dessin´ ees sous X Window (X11) ` a l’aide du logiciel xfig et int´ egr´ ees directement dans le document final sous forme de PostScript encapsul´ e. Les listings des exemples de code C ont ´ et´ e fabriqu´ es ` a l’aide du logiciel a2ps et inclus dans le document final ´ egalement en PostScript encapsul´ e. La sortie papier a ´ et´ e imprim´ ee en PostScript sur une imprimante de type laser, avec dvips. La version pdf est une transformation du format PostScript ` a l’aide du logiciel pspdfm, enfin la version HTML est traduite directement A en HTML ` a partir du format L TEX ` a l’aide du logiciel latex2html. Tous les outils ou formats cit´ es dans ce paragraphe sont en acc` es ou usage libre, sans versement de droit ` a leurs auteurs respectifs. Qu’ils en soient remerci´ es ! Je remercie ´ egalement Jean-Jacques Dh´ enin et les nombreux lecteurs que je ne connais qu’au travers de leur e-mails, d’avoir bien voulu prendre le temps de relire l’int´ egralit´ e de ce cours et de me faire part des innombrables erreurs et coquilles typographiques qu’il comportait, merci encore !

Ce support de cours est en acc` es libre au format HTML ` a l’url : http ://www.laissus.fr/cours/cours.html O` u encore au format dvi, compress´ e avec gzip : ftp ://ftp.laissus.fr/pub/cours/cours.dvi.gz O` u encore au format PostScript (600 dpi), compress´ e avec gzip : ftp ://ftp.laissus.fr/pub/cours/cours.ps.gz Le mˆ eme, mais compress´ e avec bzip2 : ftp ://ftp.laissus.fr/pub/cours/cours.ps.bz2 O` u encore au format pdf : ftp ://ftp.laissus.fr/pub/cours/cours.pdf Le mˆ eme, mais compress´ e avec zip : ftp ://ftp.laissus.fr/pub/cours/cours.pdf.zip
$Revision: 1.9 $ --- $Date: 2005/02/11 17:27:28 $ --- $Author: fla $

Table des mati` eres
Pr´ eface xv

A
I

Introduction ` a la pile ARPA
R´ eseaux locaux 1 Pr´ eambule . . . . . . . . . . . . . . . . . 2 G´ en´ eralit´ es - LANs . . . . . . . . . . . . 2.1 G´ en´ eralit´ es . . . . . . . . . . . . 2.2 Mod` ele de communication ISO . 3 R´ eseaux locaux . . . . . . . . . . . . . . 3.1 Qu’est-ce qu’un LAN ? . . . . . . 3.2 WAN - MAN . . . . . . . . . . . 3.3 Communications inter-r´ eseaux . . 4 Couche 2 - Liaison (Data Link) . . . . . 4.1 Caract´ eristiques d’Ethernet . . . 4.2 Diff´ erences Ethernet - 802.2/802.3 5 Interconnexion - Technologie ´ el´ ementaire 5.1 Raccordement . . . . . . . . . . . 5.2 R´ ep´ eteur . . . . . . . . . . . . . . 5.3 Concentrateur . . . . . . . . . . . 5.4 Ponts . . . . . . . . . . . . . . . 5.5 Commutateurs . . . . . . . . . . 5.6 Passerelles — Routeurs . . . . . . 6 Bibliographie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1
3 3 3 3 4 7 7 8 8 9 9 12 13 13 16 17 18 19 20 22 23 23 25 26 27 27 27 28 28 29

II Introduction ` a IP 1 TCP/IP et l’Internet - Un peu d’histoire 2 Caract´ eristiques de TCP/IP . . . . . . . 3 Comparaison TCP/IP — ISO . . . . . . 3.1 Couche “ Application Layer ” . . 3.2 Couche “ Transport Layer ” . . . 3.3 Couche “ Internet Layer ” . . . . 3.4 Couche “ Network Access ” . . . 4 Encapsulation d’IP . . . . . . . . . . . . 5 Bibliographie . . . . . . . . . . . . . . .

iv

` TABLE DES MATIERES III Anatomie d’une adresse IP 1 Adressage IP . . . . . . . . . . . . . . . . 1.1 Unicit´ e de l’adresse . . . . . . . . . 1.2 D´ elivrance des adresses IPv4 . . . . 2 Anatomie d’une adresse IP . . . . . . . . . 2.1 D´ ecomposition en classes . . . . . . 2.2 Adresses particuli` eres . . . . . . . . 2.3 Sous-r´ eseaux . . . . . . . . . . . . . 2.4 CIDR . . . . . . . . . . . . . . . . 2.5 Pr´ ecisions sur le broadcast . . . . . 3 Adressage multicast . . . . . . . . . . . . . 3.1 Adresse de groupe multicast . . . . 3.2 Adresse multicast et adresse MAC . 4 Conclusion et bibliographie . . . . . . . . . 31 31 31 32 33 33 34 35 37 38 39 39 40 41 43 43 44 47 50 50 52 53 53 54 54 55 56 58 58 59 60 61 62 64 66 68 69 70 71 73

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

IV Protocole IP 1 Datagramme IP . . . . . . . . . . . . . . . . 1.1 Description de l’en-tˆ ete . . . . . . . . 1.2 Fragmentation IP . . . . . . . . . . . 2 Protocole ARP . . . . . . . . . . . . . . . . 2.1 Fonctionnement . . . . . . . . . . . . 2.2 Format du datagramme . . . . . . . 2.3 Proxy ARP . . . . . . . . . . . . . . . 3 Protocole RARP . . . . . . . . . . . . . . . 4 Protocole ICMP . . . . . . . . . . . . . . . . 4.1 Le syst` eme de messages d’erreur . . . 4.2 Format des messages ICMP . . . . . 4.3 Quelques types de messages ICMP . . 5 Protocole IGMP . . . . . . . . . . . . . . . . 5.1 Description de l’en-tˆ ete . . . . . . . . 5.2 Fonctionnement du protocole . . . . 5.3 Fonctionnement du Mbone . . . . . . 6 Routage IP . . . . . . . . . . . . . . . . . . 6.1 Table de routage . . . . . . . . . . . 6.2 Routage statique . . . . . . . . . . . 6.3 Routage dynamique . . . . . . . . . . 6.4 D´ ecouverte de routeur et propagation 6.5 Message ICMP “ redirect ” . . . . . 6.6 Interface de “ loopback ” . . . . . . 7 Finalement, comment ¸ ca marche ? . . . . . . 8 Bibliographie . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . de routes . . . . . . . . . . . . . . . . . . . . . . . .

V Protocole UDP 75 1 UDP – User Datagram Protocol . . . . . . . . . . . . . . . . . 75 1.1 Identification de la destination . . . . . . . . . . . . . . 75

` TABLE DES MATIERES 1.2 Description de l’en-tˆ ete . . . . . . . . . . . . . . . . . . 77 1.3 Ports r´ eserv´ es — ports disponibles . . . . . . . . . . . 79 Bibliographie . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 83 83 85 88 88 89 91 91 92 95 95 96 96 97 100

v

2

VI Protocole TCP 1 TCP – Transport Control Protocol . . . . 1.1 Caract´ eristiques de TCP . . . . . . 1.2 Description de l’en-tˆ ete . . . . . . . 2 D´ ebut et clˆ oture d’une connexion . . . . . ´ 2.1 Etablissement d’une connexion . . 2.2 Clˆ oture d’une connexion . . . . . . 3 Contrˆ ole du transport . . . . . . . . . . . 3.1 M´ ecanisme de l’acquittement . . . 3.2 Fenˆ etres glissantes . . . . . . . . . 4 Compl´ ements sur le fonctionnement de TCP 4.1 Algorithme de Nagle . . . . . . . . 4.2 D´ epart lent . . . . . . . . . . . . . ´ 4.3 Evitement de congestion . . . . . . 5 Paquets captur´ es, comment´ es . . . . . . . 6 Bibliographie . . . . . . . . . . . . . . . .

B

Protocoles applicatifs
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

101
103 . 103 . 103 . 104 . 107 . 107 . 108 . 109 . 112 . 112 . 114 . 114 . 115 . 116 . 116 . 117 . 118 . 118 . 119 . 119 . 119 . 120

VII Serveur de noms - DNS 1 G´ en´ eralit´ es sur le serveur de noms . . . . . . . . . 1.1 Bref historique . . . . . . . . . . . . . . . 1.2 Syst` eme hi´ erarchis´ e de nommage . . . . . 2 Fonctionnement du DNS . . . . . . . . . . . . . . 2.1 Convention de nommage . . . . . . . . . . 2.2 Le “ Resolver ” . . . . . . . . . . . . . . . 2.3 Strat´ egie de fonctionnement . . . . . . . . 2.4 Hi´ erarchie de serveurs . . . . . . . . . . . 2.5 Conversion d’adresses IP en noms . . . . . 2.6 Conclusion . . . . . . . . . . . . . . . . . . 3 S´ ecurisation du DNS . . . . . . . . . . . . . . . . 3.1 TSIG/TKEY pour s´ ecuriser les transferts . 3.2 DNSSEC pour s´ ecuriser les interrogations 4 Mise ` a jour dynamique . . . . . . . . . . . . . . . 5 Format des “ Resource Record ” . . . . . . . . . . 5.1 RR de type SOA . . . . . . . . . . . . . . . 5.2 RR de type NS . . . . . . . . . . . . . . . 5.3 RR de type A . . . . . . . . . . . . . . . . 5.4 RR de type PTR . . . . . . . . . . . . . . . 5.5 RR de type MX . . . . . . . . . . . . . . . 5.6 RR de type CNAME . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 . .1 Environnement d’utilisation . . . . 5. . . . . . . . . . 4 Exemple de MTA . . . . . . . . . . .1 Architecture du daemon “ named ” Bibliographie . . 170 . . . . . . . . . . . . . . . . . . 169 . . . .3 Propagation du courrier ´ electronique . . . . . . . . . . . . . . . . . . . 175 175 176 177 180 . 4. . 149 .2 CGI — M´ ethode GET. . . . . . . . . . . .2 Adresse ´ electronique . . . . 5 Conclusion – Bibliographie . . . . . . . . . . . . . . .2 Relations avec l’OS . . . . . . . 169 . . . . . 3. . . . . . .4 Courriers ind´ esirables . . . . . . . . . . .3 CGI — M´ ethode POST . . . . . . . . . . . . . 6 Bibliographie . . . . . . . . . . . . . . . . . 156 . . . . . 1. . . . . . 150 . . . . . . . . . . . . . . . . . . . . . . . . . . . .1 Exemple d’´ echange avec http . . 172 . . . . . . . . . . . . . . 1. . . . . . . . . . . . . 120 121 121 122 125 125 125 126 127 129 129 131 133 135 137 137 139 142 143 143 143 146 147 6 7 VIII Courrier ´ electronique 1 G´ en´ eralit´ es sur le courrier ´ electronique . . . . . . . . . . . . . . . . . . . . . . 4. 154 . . . . . . . . . . . .4 Ecriture d’une CGI en Perl . . . . 4. . . . . . .RFC 822 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4. . . . . . . 4 Principe de fonctionnement des CGIs . . . . . 149 . . . . 2 Format d’un “E-mail” . . . . . . . . . . . . 2. . . . . . . . . . . . .RFC 821 . . . . 5 Configuration du Sendmail . . . . . . . . . . . . . . . . . . . . . . . . . .2 Architecture interne . . . . . . . 3. . . . . . . . . . . . . . . 158 . . . . . . . . . . . .1 M´ etaphore du courrier postal . . . . . . . . . . . . . . . 3 Protocole SMTP . . .2 Principales commandes de SMTP . . 5. . . sans argument 4. . .3 Le cas de POP . . . .1 Relations avec le DNS . . . . ´ ements de r´ X El´ eseaux 1 Hˆ otes ou services virtuels . . . . . . . . . . . . . . . . . . . . . . . . . 154 . . 6. . . 2 Tunnel IP . . . . . . BIND de l’ISC . 173 . . . . . 2 URIs et URLs . . . . . . . . . . . . 3. . . . 3 Architecture interne du serveur Apache . . . . . . . . 1. . . . .1 R` egles de re´ ecriture . . . . . . . . .1 CGI — M´ ethode GET. . . . . . . . . . . . . . 2. . . 171 . . . . . . . . . . . . . . . . . . . IX Anatomie d’un serveur Web 1 Le protocole HTTP . . . . . . avec arguments 4. . . . . . . .vi ` TABLE DES MATIERES 5. . . . . . .2 Structure d’un ´ echange . .“Sendmail” et son environnement 4. . . . 3. . 3. . . . . . . . 1. . . . . . . . . . . 150 . . . . . . . . . .1 Tunnel IP avec l’interface gif 2. . . . . . 4. . . . . . 3.Le spam . . . . . . . . . . . .2 Exemple de sortie de debug . . . . . . . . . . . . . . . . . . . . . . . .1 Protocole SMTP . . . . . . . . . .7 Autres RR. .1 Scheme http . . . . . .4 Le cas de IMAP . . . . . . . . .2 IPsec et VPN . . . . . . . . . . . . . . . . .

. . . . . . . 5 Sp´ ecification d’une adresse . . . . . . . . . . . . . . . . . . . 9 Sp´ ecifier une file d’attente . . . . . . . . . . . . . . 10 Conclusion et bibliographie . . . . . . . . 4. . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Accepter une connexion . . . . . . . 5. . . . . . . .1 Le cas d’ipfw de FreeBSD Exemple complet . . . . . . . . . 220 . . . . . . . . . . . 236 . . . . . . . . . 7 Envoyer des donn´ ees . . . . . . . . . . . . . . . . . . 13. XII Compl´ ements sur les sockets Berkeley 1 R´ eservation des ports . . . . . . . 5. . . . . . . . . . 8 Recevoir des donn´ ees . . . . 219 . . . . . . . . . 6. . . . . . . 226 . . . . . . . 3 Op´ erations sur les octets . . . . . . . . . . . . . 225 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 185 187 189 189 192 195 vii C Programmation des sockets de Berkeley . . . . . . . . . . . . . . . . . . 219 . . . . . . . . . . . . . . . . . . . . . . . . . . 222 . . . . . . 197 . . . . . . . 221 . . . . . 223 . 5. . . . . . 6 Connexion ` a une adresse distante . . . . 5 Conversion hˆ ote – adresse IP . . . . 7 Conversion nom de protocole – N◦ de protocole . . . .2 Un nom d’hˆ ote ` a partir d’une adresse IP . . . . . . . . . . . . . . . . 223 . . . .` TABLE DES MATIERES 3 4 5 6 7 Proxy . . . . . . . . . 6 Conversion N◦ de port – service . . . . . . . . . . . 2 Ordre des octets sur le r´ eseau . . . . . . . . . . . . . 229 . 220 . . . . . . . . . . . . . . . . . . . . . . . . .2 R´ eservation de port — Nouvelle m´ ethode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1 Cas de NATD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Bibliographie . . . . . . . . . . . . . . 11 Terminer une connexion . . . . . . . . . . . . . . . . . . . . . . . . . . . .1 Client TCP “ DTCPcli ” . . . . . . . 231 . . . . . . . . . . 12 Sch´ ema g´ en´ eral d’une connexion . . . . . . . . . . . . . . . . . . . . . . . . Translation d’adresses . . . . . . . . . . . . . . . . 6. . . . 13. . . . . . . . . . . . 4 Cr´ eation d’une socket . . 9 Exemples de mise en application . . . . . . . 14 Conclusion et Bibliographie . . . . . . . . . . . . . . . . . . . . . . 227 . .1 Une adresse IP ` a partir d’un nom d’hˆ ote . . . . . . . . . . . . . . . . . . . . . .1 R´ eservation de port — Ancienne m´ ethode 1. . . . . . . . 1. . . 2 Pr´ esentation des sockets . . . . . . . . ´ 3 Etude des primitives . . . . . . . . . . . . . . 8 Diagnostic . . . . . . . 226 . . . . . . . . . 228 .2 Client UDP “ DUDPcli ” . . . . . . . . 13 Exemples de code “ client ” . . . . . . . . . . . . . . . . . . . . 199 199 200 202 202 204 205 206 208 209 209 210 211 212 212 215 217 XI G´ en´ eralit´ es sur les sockets de Berkeley 1 G´ en´ eralit´ es . . . . . . . . . .1 Le num´ ero ` a partir du nom . 4 Conversion d’adresses . . . . . . . . . . . . . . . . . . . . . .2 Le nom ` a partir du num´ ero . . . . . . . . . . . . 223 . . . . . . . . . Filtrage IP . . .

243 . . . . 2. . . . . . . . . . . . . . 255 . 246 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1. . . . . . .4 Fonctions syslog . . . 242 . 4 Exemple de “ daemon ” inetd . . . . . . . 258 . .1 Pr´ esentation de inetd . . . . . . . . . . . . . . 244 . . . . . . . 3. 253 . . 2. . . . . . . 242 . .2 Daemon syslogd . . . . 239 . . . . . . . . . . . . . . . . . 3 Fonctionnement des daemons . . . . . .3 Quatre mod` eles de serveurs . 250 . . . .6 La primitive poll . .3 Processus l´ egers. . 251 . . 2 Technologie ´ el´ ementaire . . . . . . . . . . . .viii ` TABLE DES MATIERES ´ ements de serveurs XIII El´ 1 Type de serveurs . . . . . . . 2. . . . 1. . . . . . . . . . . . . . 1. . . . . . . . . . . 3. . 255 . . . 237 . . .5 La primitive select . . . . . . . . . . . . . . . . . . . . . . . . les “ threads ” 2.1 Programmation d’un daemon . . . . . . vfork et rfork . . . . . . . .2 Le choix d’un protocole . 247 . . . . . . . . . .4 Programmation asynchrone . .1 Gestion des “ taches esclaves ” . 249 . . . . . . . . 3. . . . . . . . . . 2. . . . . . . .conf . . 237 . . .1 Serveurs it´ eratif et concourant . . . . . . . . . . 253 . . . 3. . . . . . . . . . 4. . . . . . 2. 5 Bibliographie . . . . . 250 . . . . . . 238 . . . . . . .3 Fichier syslog. . 237 . . . . . . . . . . . . . . . . .2 fork. . . . . . . . . . . .

.01 Comparaison ISO-ARPA . .“ Little endian IV. . . . . . . . . . . . Commutateur . . . . Exemple de LANs . . . . . . . . . .04 Adresses de multicast . . . IV. . . III. 26 II. . . . . . . . . . . . . . . . . . . . ” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . IV. . . . . Diff´ erences Ethernet 802. . . . . .13 I. IV. . . . . . . . . . . . . . . . . . . . . . . . . .“ Echo reply . . . . . .05 I. . . . . . . . . .06 Question ARP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . IV. . . . . . . .10 Format d’un message ICMP . . . . . . . . . . . . . . . . . .03 Encapsulation d’IP . . . . . . . . . . . . . .08 Datagramme ARP . . . . . . . . . . . . . . . . . .06 Usage combin´ e des Adresses logique et IV. . . . . . . . . . . . . . . . .14 Mod` ele en 7 couche de l’OSI . . . Technologie de liaison . . . .Technologie ´ el´ ementaire Prise vampire . . . . . . . . . . . . .04 Fragment ` a transmettre . . . . . . . . . . . . . . . . 6 7 10 12 13 13 16 16 17 18 18 20 21 21 II. . . . . . . ” . . . . . . . .01 Structure du datagramme IP . . . . . III. . . 28 III. . . 26 II. IV. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Table des figures I. . . . . . . . . . . . . . . . . . . . .07 R´ eponse ARP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . III. . . . . . . . . . . . . .09 I. . . . . . . . . . . . . . . . . . . . . . . IV. . . . . . . .3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .02 I. . . . . . . . . . . . . . .03 I. . . . . . . . . R´ ep´ eteur . . . . . . . . . . . . . . . . . . . . . . . . . . . .05 Adresse physique de multicast . .03 Puissances de 2 . .01 D´ ecomposition en classes . . .02 Sous-r´ eseaux . . . Concentrateur . . . . . . . . IV. . . . physique . . . . Interconnexion . . . . . . . . . . . . . . . . . . . .01 I.11 “ Echo request ” . . III. . . . . . . . . . .12 I. .07 I. III. . . . . .06 I. . . . . . . . . . . . . . . . . .05 R´ esum´ e de la fragmentation . . . . . . . .04 I. . . . . . . . . . . . . . . Traduction de protocoles . . . .10 I. . . 33 35 35 39 40 41 43 44 47 48 49 50 51 52 55 55 56 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Dialogue avec pont . . . . . . . . . . . . . . . trame Ethernet . . . . . . . . . . . IV. . . . . . IV. . . . . .02 “ Big endian ” . . . . . . . . . .02 Architecture logicielle .08 I. . . . . .2/802. . . . . . . . . . . . . . Dialogue sans pont . . .03 Fragmentation IP . . .11 I. .09 Message ICMP . . . . . . . Fonction routage . . . . . .

IV. . . . . . .01 V. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .03 V. . . . . . . VIII. . . . . . . . . . . . . . IV. . . . . . . . . . . . . . . . . .13 Fonctionnement IGMP . . . . . . . . . . . . . . . . .01 IX. . . . . . . . . . . . . . .05 Relation entre Sendmail et l’OS VIII. . . VI. . . . . . IV. . . . . . . . .18 Topologie pour routage dynamique . . VI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .06 Le cas de POP . . . . . . .03 Subdivision hi´ erarchique des domaines VII. . .05 Emission d’un rst . . . . . . . . . . . . . . . . . . .08 D´ etail de la fenˆ etre glissante . Algorithme de gestion des processus Usage de la “score board” . . . . . . . . . . Environnement syst` eme . . . .02 IX. . . . . . . . . . . . . IV. . . . . . . . . . . . . . . . . . . .01 Format d’un e-mail . . VIII. . . . . . . . . . . . . . . . .16 Exemple pour routage statique . . . . . . . . . . . VIII. . . . . . VI. . . . . . . . . . . . . . . .02 Structure de l’en-tˆ ete TCP . . . . . . . Quelques exemples de services . . . . . . . . . . . . IV. . . . .02 V. . . . . . . . . . . . . . .01 TCP encapsul´ e dans IP . . . . . . . . . .x TABLE DES FIGURES IV. . . . . . . . . . . . . . Cas du checksum non nul . . 58 59 62 64 65 66 67 69 70 71 76 77 78 78 79 83 85 88 89 90 91 92 93 99 106 109 109 110 111 121 127 133 134 137 139 142 144 151 156 162 164 165 service . . . . . . . . . . ´ VI. . . . . . . . . . . . . . . . . . . . . . . . . . . Deux type de CGIs .OS . . . . . . . . . VII. . . . Structure d’un message HTTP . . . . . . . . . . . . . . . . . . VII. . . . .03 Etablissement d’une connexion VI. . . . . . . IX. .01 Organisation hi´ erarchique des domaines VII. . . . . VII. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .03 IX. . ´ VI. . . . . . . . . .21 ICMP “ redirect ” . . . VIII.03 Trajet d’un mail . . . .05 Interrogation distante . . . .05 Num´ ero de port comme num´ ero de UDP encapsul´ e dans IP . . . . . . . . . . . . . . . . . . . . . VIII. . . . . . . .04 IX. . . . . . IV. . .15 Situation r´ eseau lors du netstat . VII. . . IV. . . . . . . . .17 Exemple pour routage dynamique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Structure de l’en-tˆ ete UDP . . . . . . . .MTA . . . . . . . . .09 Exemple de fenˆ etre glissante . .02 MUA . . . . . . IV. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . VI. . . . . . . . . . . . . .14 Table de routage . . . . . . . . . . . . . . . . .07 Principe de la fenˆ etre glissante VI. . . . . .23 Illustration du routage direct et indirect V. . . . . . . . . . . . . . . . . . .02 Le “ resolver ” .04 MX primaire et secondaires . . . . . . . . . . . . . . . . . .05 . . . . . . . . . VIII. . . . .22 Interface de “ loopback ” . . . . . . . . . . . .06 BIND de l’ISC . . . . . . . . .03 Interrogation locale .04 Clˆ oture d’une connexion . . .04 V. . . . . . . . . . . . . . . . . . . .06 M´ ecanisme de l’acquittement .07 R` egles de re´ ecriture . . . . . IV. . . . . VI. . . .12 En-tˆ ete IGMP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . .06 X.11 X. . . . . . . . . .13 X. . . . . . . . . . . .12 X. . . . . . . . . . . . . . . . . . . .cas concrˆ et . IP . . . . . . . . .Principe . . . . . . . . . . . . . Tunnel IP . . . .02 Ex´ ecution avec et sans threads XIII. . .03 X. . . . . . . . . . . Configuration simple de filtrage Translation d’adresse et filtrage . . . . . 175 176 178 182 182 183 183 183 185 185 187 188 188 190 192 199 200 205 211 211 xi Les sockets une famille de primitives . . . . . . . . . num´ ero de port et process ID Structure d’adresse . . . . . . . . . . . . . . . . . . .03 XI. . . . . . . XIII. . .08 X. XIII. . . . . . Relation stack IP. . . .05 X. .TABLE DES FIGURES X.02 X. . . . . . . . . . . . . . . . . . . . . . . . . . . .01 Ordre des octets sur le r´ eseau . . . . . . . . . . . . . . . . . . . . . . . Association 1 . . Static Nat .04 X. . . . . . Association 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Relation client–serveur en mode non connect´ e . . . . . . . . .04 X. . . . . . . . . . . . . . . .02 XI. . . . . . . . . .10 X. . . . . . . .15 XI. . . . . . Configuration multiservices . . . . . . . . . . Machine NAT en routeur . . . . . . . . . . . . . . . Tunnel IP . . . . . . . . . . . . . . . . . Natd sous FreeBSD . . . . . . . . . . . . . . . . . . . . . . . . . . . XII. . . Association 3 . .04 Inetd . . . . . . . . . . . . .07 X. . . 221 XIII. . . . . . . . . .01 X. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .05 Serveur HTTP virtuel . . . . . . . . . . . .01 Quatre types de serveurs . . . . Relation client–serveur en mode connect´ e . . . . . . . . . . . . . . . . . . . En-tˆ etes d’IPsec . . . . . . . . .01 XI. . . . . . . .04 XI. . . . . . . . . . . . . . . . . . . . . . 239 244 252 256 . . . . . . . . . . . .03 Syslogd . . . . . . . . . .14 X. . . . . . . . . . . . . Association 4 . . . . . Proxy . . . . . . . . . . . . . . . . . . . . . . . . . . . .

xii TABLE DES FIGURES .

Liste des tableaux .

xiv LISTE DES TABLEAUX .

Ne pas h´ esiter ` a me contacter (<fr. et sont orient´ es “ Unix ”. tout change ” comme le disait d´ ej` a Lao Tseu. et surtout incompl` etes. pleines d’erreurs involontaires. s’il y a lieu. L’usage des informations contenues est donc plac´ e sous la responsabilit´ e pleine et enti` ere du lecteur. c’est ` a dire mis ` a la disposition de tous pour un usage personnel ou collectif. ne peut se concevoir sans cette pr´ eface. c’est ` a dire qu’il ne remplace pas les documents cit´ es dans la bibliographie qui termine chacun des chapitres qui le composent. que vous avez une remarque ` a me faire. Ce support est en acc` es libre. Enfin. En aucun cas l’auteur ne pourra ˆ etre tenu responsable des cons´ equences de l’usage de ce document.fr>) en cas de doute sur l’usage. concernant des r´ eseaux ! ! Ces cours s’accompagnent de travaux pratiques dont le texte ne figure pas ici. ils sont principalement destin´ es au Mast` ere SIO.laissus[at]laissus. sans but lucratif. qui est fourni tel quel et sans garantie d’aucune sorte.sio. je suis toujours ravi d’apprendre que ce travail a pu servir ! . si vous pensez que la lecture de ce support vous a apport´ e quelque chose. 400 ans avant JC.ecp. ou tout simplement me complimenter (¸ ca fait toujours plaisir quoi que l’on puisse en dire ! :) sentez-vous libres de m’envoyer un courrier ´ electronique. Enfin. Que dirait-il alors aujourd’hui. ces pages r´ eclament avant tout votre indulgence de lecteur bienveillant : “ rien n’est constant. sa redistribution sous quelque forme que ce soit. ´ Evidement imparfaites.Pr´ eface Attention ! Ce document n’est qu’un support de cours. (Syst` emes Informatiques Ouverts — http ://www.fr/). Sa revente. ne peut ˆ etre envisag´ ee que pour couvrir les frais induits par sa reproduction.

xvi Pr´ eface .

Premi` ere partie Introduction ` a la pile ARPA .

.

LANs G´ en´ eralit´ es Un r´ eseau informatique met en relation des ordinateurs.Il n’existe pas de “ botin ” g´ en´ eral du r´ eseau. les mˆ emes chiffres ´ etaient 4 850 000 machines pour plus de 71 000 r´ eseaux locaux). . en juin 1996 ce nombre ´ etait de 12 millions de machines. le nombre de machines1 directement accessibles sur le r´ eseau serait de 180 000 000 selon l’ISC2 . Des ordinateurs sont dits “ en r´ eseaux ” d` es lors qu’ils partagent une technologie qui leur permet de communiquer ensemble. Sur ce type de support.com/who/ches/map/gallery/index.fr/statistiques/ . Actuellement dans le monde (janvier 2003). Le plus souvent cette technologie se mat´ erialise physiquement par une liaison avec un cˆ able conducteur. un signal ´ electrique v´ ehicule les messages informatiques. Pour la france l’AFNIC propose ´ egalement quelques statisques3 . En 1980 il ne comptait que quelques dizaines d’hˆ otes.nic. Il existe d’autres types de supports en 1 2 Source http ://www.org/ds/ Internet Software consortium 3 http ://www.bell-labs.isc. TCP/IP est le protocole le plus r´ epandu dans le monde grˆ ace ` a l’Internet.Chapitre I R´ eseaux locaux 1 Pr´ eambule Ce cours n’est pas un cours g´ en´ eral sur les r´ eseaux mais une pr´ esentation minimale de cette technologie pour pouvoir aborder le cours de concepts et programmation TCP/IP sous UNIX.cs. en f´ evrier 1995.1 G´ en´ eralit´ es . . par contre Bill Cheswick des Bell labs l’a cartographi´ e: http ://www. comme un r´ eseau t´ el´ ephonique met en relation des personnes.html 2 2. r´ eparties en pr` es de 500 000 r´ eseaux (Par comparaison.

Ce mod` ele se nomme OSI comme “ Open Systems Interconnect Reference Model ”. c’est celle sur laquelle les informaticiens ont beaucoup travaill´ e dans les ann´ ees soixantes 4 Con¸ cu par l’Am´ ericain Paul Baran et publi´ e en 1964 . Les constituants de ce mod` ele sont si largement employ´ es qu’il est difficile de parler de r´ eseaux sans y faire r´ ef´ erence. Ces r´ eponses sont g´ en´ eralement formul´ ees dans un “ protocole ”. une sorte de mode d’emploi des r´ eseaux. Ce concept facilite le partage des possibilit´ es physiques du r´ eseaux (bande passante) et est parfaitement adapt´ e pour une impl´ ementation sur machines s´ equentielles travaillant en temps partag´ e (plusieurs communications peuvent alors avoir lieux simultan´ ement et sur une mˆ eme machine). l’information traverse ces couches. mais n’est pas une contrainte de sp´ ecification. . infrarouge. Partant de ce concept.2 Mod` ele de communication ISO Le concept de base de tout ce cours est celui de la “ commutation de paquets ”. une vieille id´ ee de l’informatique4 contrairement ` a l’approche par circuits virtuels plus utilis´ ee en t´ el´ ephonie. ` chaque couche est asLe mod` ele OSI est constitu´ e de sept couches. Ce mod` ele sert souvent de r´ ef´ erence pour d´ ecrire la structure et le fonctionnement des protocoles de communication.4 R´ eseaux locaux pleine expansion comme les liaisons par ondes hertziennes. envoy´ ees sur le r´ eseau et r´ e-assembl´ ees ` a la r´ eception pour reproduire les donn´ ees d’origine. Toutes ces questions (et bien d’autres) trouveront une r´ eponse dans ce cycle de cours. Cette forme d’organisation n’est pas dˆ ue au hasard. un mod` ele d’architecture pour les protocoles de communication a ´ et´ e d´ evelopp´ e par l’ISO (International Standards Organisation) entre 1977 et 1984. certains sont tr` es populaires.. d’autres absolument pas. Il y a des centaines de protocoles diff´ erents sur l’Internet. rayon laser. Sans connaissance pr´ ealable concernant les r´ eseaux informatiques on peut imaginer quantit´ e d’interrogations ` a partir de cette hypoth` ese de raccordement : – Comment reconnaitre un correspondant ? – Comment dialoguer avec ? – Comment diffuser l’information ` a plusieurs correspondants ? – Comment ´ eviter la cacophonie ? – Il y a t–il une hi´ erarchie des machines ? – Il y a t–il un chef d’orchestre ? – . 2. Les donn´ ees ` a transmettre d’une machine ` a une autre sont fragment´ ees ` a l’´ emission en petit blocs de quelques centaines d’octets munis de l’adresse du destinataire. chacune y apporte sa particularit´ e.. A soci´ ee une fonction bien pr´ ecise. .

G´ en´ eralit´ es . par exemple passer d’une repr´ esentation “ big endian ” ou ` a une repr´ esentation “ little endian ” ou encore plus complexe comme celle d´ ecrite pas les “ XdR ” (eXternal Data Representation). comme des tensions. Cette couche met par exemple en œuvre des r` egles de renvoi de l’information en cas d’erreur de r´ eception. . Ils ne sont pas forc´ ement accessibles ` a l’utilisateur car ils peuvent ˆ etre r´ eserv´ es ` a un usage d’administration. elle d´ elimite un service qui peut ˆ etre r´ ealis´ e par plusieurs protocoles de diff´ erentes origines. 3 La couche r´ eseau (Network layer) isole les couches hautes du mod` ele qui ne s’occupent que de l’utilisation du r´ eseau. Deux utilisateurs d’une mˆ eme machine peuvent utiliser la mˆ eme application sans risque d’inter-actions parasites. des probl` emes li´ es ` a la technologie employ´ ee pour v´ ehiculer les donn´ ees. 2 La couche de donn´ ee (Data link layer) effectue le travail de transmission des donn´ ees d’une machine ` a une autre. Comme. Un des int´ erˆ ets majeurs du mod` ele en couches est de s´ eparer la notion de communication. Une couche ne d´ efinit pas un protocole.LANs pour d´ efinir les caract´ eristiques des syst` emes d’exploitation.01) : 7 La couche application (Application layer) est constitu´ ee des programmes d’application ou services. 4 La couche de transport (Transport layer) garantie que le destinataire obtient exactement l’information qui lui a ´ et´ e envoy´ ee. des fr´ equences. qui se servent du r´ eseau. 5 La couche de session (Session layer) effectue l’aiguillage entre les divers services (7) qui communiquent simultan´ ement ` a travers le mˆ eme ordinateur connect´ e et le mˆ eme r´ eseau. la description d’une prise. Ainsi chaque couche peut contenir tous les protocoles que l’on veut. 6 La couche de pr´ esentation (Pr´ esentation layer) met en forme les donn´ ees suivant les standards locaux ou particuliers ` a l’application. 1 La couche Physique (Physical layer) d´ efinit les caract´ eristiques du mat´ eriel n´ ecessaire pour mettre en oeuvre le signal de transmission. des couches basses qui ne s’occupent que de la transmission de l’information. 5 . . Pour m´ emoire (figure I. pourvu que ceux-ci fournissent le service demand´ e` a ce niveau du mod` ele.

ainsi l’application B ne voit-elle que les octets envoy´ es par l’application A. Chaque couche ne voit et ne sait communiquer qu’avec la couche qui la pr´ ec` ede et celle qui la suit. De mani` ere sym´ etrique. chaque couche pr´ el` eve les octets qui lui sont propres. avec le cas particulier des couches 1 et 7. au niveau 3 elle se nomme “ packet ”. au niveau 4 du transport. puis “ frame ” au niveau 2 et “ signal ” au niveau 1. et de la couche 2 vers la couche 7 pour que l’application B re¸ coive l’information de A. Le principe de base de cette discussion repose sur le fait que chaque couche du mod` ele de la machine A est en relation uniquement avec son homologue du mˆ eme niveau de la machine B. Quand l’information descend de la couche 7 vers la couche 1. sans le d´ etail de l’acheminement. L’int´ erˆ et de travailler en couches est que lorsque les modalit´ es d’´ echanges entre chacune d’entres elles sont pr´ ecis´ ement d´ ecrites. chaque couche “ en-capsule ” les donn´ ees re¸ cues avant de les transmettre. C’est sur ce principe qu’est bˆ atie la suite de protocoles d´ esign´ ee par TCP/IP Quand deux applications A et B discutent entre-elles via le r´ eseau. quand l’information remonte de la couche physique vers la couche Application. les informations circulent de la couche 7 vers la couche 2 quand l’application A envoie de l’information sur le r´ eseau. .01 Du niveau 7 de l’application. Ainsi le volume d’informations s’est accrˆ u de quelques centaines d’octets arriv´ e` a la couche 1. on peut changer l’impl´ ementation et les sp´ ecificit´ es de la couche elle-mˆ eme sans que cela affecte le reste de l’´ edifice. l’information circule dans ce que l’on appelle un “ message ”.6 Mod` ele en 7 couche de l’OSI R´ eseaux locaux Protocole Application Présentation Session S Protocole Application Présentation Session S Protocole Transport T S Protocole Transport S T Réseau R T S Protocole Réseau S T R Liaison L R T S Protocole Liaison S T R L Physique L R T S Protocole Physique S T R L figure I.

1 Qu’est-ce qu’un LAN ? Le terme “ r´ eseau local ” n’est pas clairement d´ efini. Notez que les notions de “ bande passante ” et “ nombre limit´ e ” (etc. puis de politique d’emploi des ressources du r´ eseau. – Une mise en œuvre qui reste du domaine priv´ e. c’est ` a dire qui ne d´ epend pas d’un op´ erateur officiel de t´ el´ ecommunications. – Une extension g´ eographique de moins en moins limit´ e. – Une bande passante ´ elev´ ee. La cons´ equence est que les r´ eseaux se d´ eveloppent d’abord en local. avant de se tourner (parfois) vers l’ext´ erieur.) sont volontairement qualitatives.02 Exemple de types de technologies utilis´ ees dans les LANs : – Token ring . Machine sur le LAN figure I.3 R´ eseaux locaux 7 3 R´ eseaux locaux Le probl` eme intuitif et pratique qui se pose est de relier entre elles par un cˆ able toutes les machines qui veulent communiquer : c’est impossible d’abord pour des raisons techniques. – Un mˆ eme m´ edia (mˆ eme cˆ able par exemple) qui raccorde de multiples machines. tel r´ eseau qui sert ` a l’enseignement ne doit pas pas perturber le fonctionnement de tel processus industriel. le monde est vaste. – Des relations entre les machines plac´ ees sur un mode d’´ egalit´ e. . peut ˆ etre de caract´ eristiques diff´ erentes. d` es lors qu’on lui reconnait les caract´ eristiques suivantes : – Cohabitation de plusieurs protocoles. Elles ´ evoluent rapidement avec le temps. 3. . – Un nombre de machines raccord´ ees limit´ e. autour d’un centre d’int´ erˆ et commun. cependant tout le monde s’accorde ` a baptiser de la sorte un r´ eseau. (et non par exemple sur un mode Maˆ ıtre/Esclave comme dans un r´ eseau dont la topologie serait en ´ etoile). partag´ ee par tous les hˆ otes – La capacit´ e de faire du “ broadcasting ” et du “ multicasting ”.

Les hommes se connectent sur les ordinateurs Les ordinateurs se connectent sur un r´ eseau Les r´ eseaux s’inter-connectent dans un “ internet ” ..8 – – – – – – IEEE 802 LANs Ethernet et Fast-Ethernet FDDI (anneau en fibre optique) ATM 802.11b (wireless) .MAN Un WAN (Wide Area Network) d´ esigne des ordinateurs connect´ es entre diff´ erentes villes (Metropolitan Area Network) ou pays. ces deux tendances font que la distinction entre ces deux types de r´ eseaux est de moins en moins claire.3 Communications inter-r´ eseaux Les r´ eseaux sont appel´ es ` a communiquer entres eux et quand cela se produit on parle de communications inter-r´ eseaux (“ internetworking ”). l’´ echange d’informations. R´ eseaux locaux 3. Le rˆ ole d’une communication inter-r´ eseaux est de gommer les ´ eventuelles diff´ erences de technologie d’´ echange pour permettre ` a deux r´ eseaux. Les am´ eliorations technologiques apport´ ees aux LANs permettent de les ´ etendre de plus en plus g´ eographiquement. c’est par exemple une ligne t´ el´ ephonique lou´ ee fonctionnant ` a 64 kbps. celles apport´ ees aux WAN augmentent consid´ erablement les bandes passantes. ou encore une liaison transatlantique ` a 1Mbits/secondes. le partage de ressources communes. Un moyen de faire communiquer deux r´ eseaux distincts passe par l’utilisation de “ gateway ” ou passerelle.. ou plus. Un tel dispositif est parfois appel´ e routeur (router). 3. une liaison RNIS.2 WAN . La technologie utilis´ ee est traditionnellement moins performante que celle d’un LAN. mais c’est un abus de langage.

On parle d’un cˆ able Ethernet. si une machine peut faire les deux. 3. Un coupleur doit ˆ etre ` a l’´ ecoute des trames qui circulent sur le cˆ able. Multiple Access with Collision Detection ” Plus tard l’IEEE (Institute of Electrical and Electronics Engineers) sous l’instance de son commit´ e 802. Il n’y a pas de multiplexage en fr´ equence. Ethernet est un standard publi´ e en 1982 par DEC. 3. les plus connus pour TCP/IP sont 802. etc. “ Logical Link Control ” les cartes Ethernet modernes utilisent 4 fils au lieu de deux et offrent ansi des possibilit´ es de “ full duplex ” que n’avaient pas leurs ancˆ etres des ann´ ees 80 6 5 .3 (CSMA/CD) Dans le monde TCP/IP. Par d´ efaut le standard est donc celui de la RFC 894. l’encapsulation des datagrammes IP est d´ ecrite dans la RFC 894 [Hornig 1984] pour les r´ eseaux Ethernet et dans la RFC 1042 [Postel et Reynolds 1988] pour les r´ eseaux 802. d’une liaison Ethernet. Une trame ´ emise par une station est re¸ cue par tous les coupleurs du r´ eseau Ethernet. . celle-ci a une adresse unique.).Liaison (Data Link) 9 4 Couche 2 . 2. Cette technique repose sur une m´ ethode d’acc` es et de contrˆ ole dite CSMA/CD pour “ Carrier Sense. publia un ensemble de standards l´ eg` erement diff´ erents. Intel Corp. Par contre il est seulement souhaitable que cette machine soit capable d’envoyer des paquets conformes ` a la RFC 1042. cela doit ˆ etre configurable. ˆ etre capable d’envoyer et de recevoir un paquet conforme ` a la RFC 894. pas de “ full duplex ” 6 . ainsi si une trame lui est destin´ ee il la prend. 2. elle contient l’adresse de l’´ emetteur et celle du destinataire.Liaison (Data Link) La couche 2 la plus populaire est celle que l’on identifie sous le vocable “ Ethernet ”.2 (Contrˆ ole logique de la liaison – LLC5 ) et 802.1 Caract´ eristiques d’Ethernet Quelques principes fondamentaux 1. En r` egle g´ en´ erale. et Xerox. Un coupleur connait sa propre adresse. sinon il n’en fait rien. . On parle alors d’une station Ethernet. Sur le cable circulent des trames. Il n’y a pas de topologie particuli` ere (boucle. 4. ˆ etre capable de recevoir des paquets conformes aux deux standards. .4 Couche 2 . 4. . ´ etoile. Un ´ equipement est raccord´ e sur un cˆ able par un “ transceiver ” : “ Transmitter + receiver = transceiver ” (coupleur ou transducteur). autant de paquets de bits. Le support de transmission est un Segment = bus = cˆ able coaxial. toute machine utilisant TCP/IP sur ce type de r´ eseaux doit : 1.

– Une trame a une longueur minimale (72) et une longueur maximale (1526). sa mise en œuvre se fait ` a faible coˆ ut. sinon elle attend. une sorte de r´ eunion sans animateur entre personnes polies En conclusion. Autrement dit. Une station qui veut ´ emettre attend que toutes les autres stations se taisent. – Performances peu d´ ependantes de la charge. Points ` a retenir : – Simplicit´ e et faible coˆ ut – Peu de fonctions optionnelles – Pas de priorit´ e – Pas de contrˆ ole sur l’attitude des voisins – D´ ebit d’au moins 10Mb/s (jusqu’` a 1000Mb/s th´ eorique). – Les octets circulent du premier octet du pr´ eambule au dernier octet du CRC. les deux (ou plus) stations d´ etectent ce fait et re´ emettent ult´ erieurement leur paquet en attente. Les deux trames sont alors inexploitables. Format d’une “ Frame Ethernet ” Encapsulation Ethernet (RFC 894) Données encapsulées 8 6 6 2 46 à 1500 4 Type des données Adresse de la source Adresse de la destination Préambule de synchronisation Checksum figure I. Si les donn´ ees ne sont pas assez longues (46 octets) des caract` eres de remplissage sont ajout´ es (“ padding ”). Cette absence conduit ` a dire que c’est un r´ eseau ´ egalitaire.03 Quelques consid´ erations en vrac : – Dˆ u au d´ ebit global de 10Mbits/seconde. Si deux stations ´ emettent en mˆ eme temps il y a collision. le d´ ebit est de 10 bits par micro-seconde (en gros un facteur 1000 avec un cpu). si le cˆ able est libre elle envoie sa trame. Un r´ eseau Ethernet est donc un r´ eseau ` a caract` ere probabiliste car il n’y a pas de chef d’orchestre pour synchroniser les ´ emissions.10 R´ eseaux locaux 5. sauf en cas de collisions trop importantes. . 6. la technologie Ethernet est simple.

– Le champ “ type ” est deux octets qui d´ esignent le type des donn´ ees encapsul´ ees : Type Donn´ ees 0800 IP 0806 ARP 0835 RARP 6000 DEC 6009 DEC 8019 DOMAIN . . Adresses IEEE802. les trois derniers d´ esignent le num´ ero de carte. Exemple d’adresse physique en repr´ esentation hexad´ ecimale : 08 :00 :09 :35 :d5 :0b 08 :00 :09 est attribu´ e` a HP8 . – Le pr´ eambule et le SFD (“ Start Frame Delimiter ”) servent ` a la synchronisation.Couche 2 . par tranche de 224 cartes7 Chaque constructeur assure l’unicit´ e du num´ ero de chaque carte fa24 briqu´ ee.3 ou Ethernet Quel que soit le standard l’adressage est sur 6 octets.. ou “ hardware addresse ”. 35 :d5 :0b est l’adresse de la carte 11 D’autres constructeurs. En fait cette adresse est divis´ ee en deux parties. En gros 2 cartes par classe d’adresses. entre ne pas fonctionner du tout et des comportements tr` es bizarres pour les applicatifs. 48 bits. Dans le cas contraire le r´ eseau aura un comportement impr´ evisible. Remarque importante : il faut connaˆ ıtre l’adresse de son correspondant ` ce stade de l’expos´ pour pouvoir lui envoyer un paquet ! A e on ne sait pas encore comment faire quand on ignore cette information. Pour le bon fonctionnement d’un LAN il est absolument indispensable que toutes les stations aient une adresse physique diff´ erente. les trois premiers octets d´ esignent le constructeur. – Adresses d’origine et de destination sont celles respectivement de la machine ´ emettrice et de la machine destinatrice.. etc.. On parle alors d’adresse physique.Liaison (Data Link) A l’int´ erieur de chaque octet le premier bit envoy´ e est celui de poids faible. L’IEEE assure l’unicit´ e des num´ ero de constructeurs.. saisis au hasard des r´ eseaux : On pourra consulter la RFC 1700 page 172 “ ETHERNET VENDOR ADDRESS COMPONENTS ” pour une liste exhaustive des constructeurs et leurs num´ eros 7 . Nous reparlerons de l’unicit´ e de l’adresse au cours de la pr´ esentation des protocoles ARP et RARP (cf cours ARP/RARP pages 50 et 53)..

Dans ce cas toutes les stations d’un r´ eseau sont destinatrices du paquet.. 4. – Tous les num´ eros de protocole sont sup´ erieurs ` a 150010 qui est la longueur maximale des donn´ ees encapsul´ ees. si tous les bits d’adresse sont ` a 1. :00 :00 :00 :10 :0C :20 :04 :5A Cisco Sun DEC 9 3Com . Ce qui fait en d´ ecimal : 8 × 162 + 0 × 161 + 0 × 160 = 2048 10 .802. 6 source 2 4 RFC 894 figure I. La diff´ erenciation s’effectue ` a partir de la valeur de ces deux octets. c’est une adresse de broadcast. Donc une valeur inf´ erieure ou ´ egale ` a ce seuil indique une frame 802..04 – On remarque que le champ “ taille ” de la frame 802.3 MAC dest.. source LLC 1 1 1 SNAP 3 2 Données 38 à 1492 6 dest.3.2 Diff´ erences Ethernet . MAC = “ Medium Access Control ” LLC = “ Logical Link Control ” Le plus petit num´ ero de protocole est celui d’IP : 0800 hexad´ ecimal. R´ eseaux locaux Attention.3 est ` a la place du champ “ type ” de la frame Ethernet.2/802..12 00 08 AA 00 . On remarque ´ egalement que le commit´ e 802 a choisi de subdiviser la couche 2 ISO en deux sous couches : MAC et LLC.

Quelques notions de technologie de base et donc tr` es succintes sont n´ ecessaires pour bien comprendre la suite de ce cours.5 Interconnexion .1 Raccordement Une machine est raccord´ ee ` a un r´ eseau en g´ en´ eral par l’interm´ ediaire de deux constituants : Réseau local Prise "vampire" Transceiver Carte réseau Bus informatique figure I.Technologie ´ el´ ementaire 13 5 Interconnexion .Technologie ´ el´ ementaire LLC MAC Cable transceiver Carte coupleur Ethernet Cable coaxial Bus de station Couche réseau Couche liaison Couche physique figure I. Base comme “ Baseband ”. ou encore 10Base5 (10 comme 10Mbits/s. 5.05 L’interconnexion ne se limite pas au niveau Ethernet. dit encore “ Thick Ethernet ” ou Ethernet standard.06 Dans cette technologie de raccordement le support est un gros cˆ able jaune. 5 comme 500 m` etres). 10Base5 Quelques particularit´ es du 10Base5 : .

tr` es fragile (ne pas marcher dessus ! :).3 . souple. Pour les cˆ ablages rapides on pr´ ef` ere le 10Base2 ou “ Thin Ethernet ” ou encore Ethernet fin (2 comme 200 m` etres). Le 10BaseT r` egle d´ efinitivement le probl` eme de l’ajout ou du retrait d’une machine sur le LAN (T comme “ Twisted Pair ” ou paires torsad´ ees). pour un maximum de 100 stations. elle reste sur le cˆ able. en fibre optique. 10Base2 Quelques particularit´ es du 10Base2 : – Longueur maxi de 185 m` etres avec un maximum de 30 stations.14 R´ eseaux locaux – Longueur maxi est 500 m` etres. Le raccordement du HUB au reste du r´ eseau se fait par 10Base2. – La longueur maximale entre le moyeu et la station est de 100 m` etres. – Coˆ ut non n´ egligeable. – Le raccordement au transducteur se fait ` a l’aide d’une prise du type RJ45. Les d´ esavantages du 10Base2 imposent g´ en´ eralement l’usage du 10BaseT dans toute structure d´ epassant quelques machines (5 ` a 10). les cartes int` egrent le transducteur. – D´ eplacement d’une station non ais´ e. ce qui l’empˆ eche de fonctionner durant l’op´ eration. – Le moyeu impose une architecture en ´ etoile. C’est un inconv´ enient de taille sur un r´ eseau tr` es utilis´ e.5 m` etre entre chaque. – Pas de perturbation quand on ajoute une station : la pose d’une nouvelle prise n’interrompt pas la continuit´ e du r´ eseau. – La topologie impose de mettre les stations en s´ erie avec un minimum de 0. 11 Voir le paragraphe V. – Il faut rompre la continuit´ e du r´ eseau pour ajouter une nouvelle station. en plus on perd la prise vampire. – C’est une “ vieille ” technologie tr` es bien normalis´ ee mais d´ epass´ ee. ou tout simplement par chaˆ ınage avec un autre HUB (“ Daisy chain ”). Cette technique impose l’usage d’une boite noire r´ eseau nomm´ ee 11 “ HUB ” ou moyeu. – Technique tr` es bon march´ e. – Le raccord se fait avec un “ transceiver ” en T (BNC bien connu des ´ electroniciens). 10BaseT Quelques particularit´ es du 10BaseT : – Une double paire torsad´ ee de cˆ able suffit. Celle-ci simule la continuit´ e dans le cas du retrait d’une station. – Cette technique est en outre assez sensible aux perturbations ´ electromagn´ etiques. – Il faut un bouchon de 50 ohms ` a chaque extr´ emit´ e du r´ eseau (2).

– La fibre permet d’atteindre des vitesses de transmission sup´ erieures aux 10Mbits/100Mbits/1000Mbits maintenant courants sur des paires de fils en cuivre. – Les nouvelles technologies issues des recherches les plus r´ ecentes promettent des fibres multifr´ equences (1024 canaux par fibre) avec pour chaque canal une bande passante de plusieurs giga-octets.).Interconnexion . avec des utilisateurs responsables. Fibre optique Quelques particularit´ es de la fibre optique : – La plus utilis´ ee est la fibre multimode 62. . 100 comme 100 Mbits/s. Le cˆ ablage constitue les fondations d’un r´ eseau. Aujourd’hui le 100BaseT ´ equipe la majeur partie des ´ equipements professionnels.5/125. le faire proprement d’embl´ e ´ evite une source continuelle d’ennuis pas la suite ! Les besoins en bande passante d’aujourd’hui ne pr´ efigurent sans doute pas encore les besoins de demain (vid´ eo haute d´ efinition sur tous les postes. . Ces nouveaux m´ edias auront une bande passante de plusieurs t´ era-octets par secondes. Enfin la fibre optique est utilis´ ee de plus en plus souvent pour effectuer les liaisons point ` a point. . .Technologie ´ el´ ementaire – Cette technique est d’une tr` es grande souplesse d’utilisation elle impose n´ eanmoins l’achat de HUB. . . Sinon il vaut mieux avoir des commutateurs (Cf V. avec un pr´ e-cˆ ablage en 10BaseT. – Cette technique des paires torsad´ ees est tr` es sensible aux perturbations ´ electromagn´ etiques. il faut donc 15 . switch. utiliser plutˆ ot du 10Base2 pour les structures exp´ erimentales de quelques machines. – Son principal d´ esaventage est un coˆ ut ´ elev´ e au m` etre (de l’ordre d’une dizaine d’ pour un cˆ able d’un m` etre cinquante) et la n´ ecessit´ e d’avoir des transducteurs au raccordement de tous les appareils contenant de l’´ electronique (serveur.5) pour relier les diverses machines du r´ eseau. une sorte de m´ ecano car tous les supports sont mixables. Conclusion L’Ethernet est un jeu de construction tr` es bien maitris´ e. de l’ordre de 150  pour un 12 ports. Sauf besoin ponctuel ne plus installer de 10Base5.0 µm – Usage d’un transducteur optique pour assurer la transformation entre le signal lumineux (un laser) et le signal ´ electrique. – La fibre est insensible aux perturbations ´ electromagn´ etiques. Un tel module peut coˆ uter de l’ordre de 500 ` a 1000  . ´ electromagn´ etiques. Entre les bˆ atiments utiliser de la fibre optique. – La distance maximale entre deux points est 1. routeur).5 km. elle permet en outre le cˆ ablage de site important (plusieurs km2 ).

3 Technologie de liaison : .16 pr´ evoir tr` es large d` es la conception initiale. Par exemple en technologie Ethernet la longueur maximale d’un brin ne peut pas exc´ eder 180 m` etres. R´ eseaux locaux Machine A Machine B Réseau physique Ethernet 802. Pour pallier ` a cette d´ eficience on utilise des r´ ep´ eteurs (“ repeaters ”). ..08 – Agit uniquement au niveau de la couche 1 ISO. Raccordement ==> dérivation du réseau figure I. c’est un “ amplificateur de ligne ” avec ses avantages et aussi l’inconv´ enient de transmettre le bruit sans discernement : il n’y a aucun filtrage sur le contenu. Un r´ ep´ eteur : R Répéteur R R Brins physiques différents mais meme LAN figure I.2 802.2 R´ ep´ eteur ` une technologie particuli` A ere correspond forc´ ement des limitations dues aux lois de la physique.07 5..

sinon de brancher la boite ` a un emplacement pertinent. . moyeu) : Liaison "backbone" HUB Prises RJ45 Stations à raccorder au réseau local figure I. – C’est un ´ el´ ement “ bon march´ e ”. sauf certains mod` eles ´ evolu´ es. Les hubs peuvent ˆ etre chaˆ ın´ es entres-eux . .Interconnexion . 10Base2.Technologie ´ el´ ementaire – Relie deux brins d’une mˆ eme technologie en un seul LAN car les trames sont reproduites ` a l’identique.. .. Un hub r´ ep` ete simplement les informations d’un port ou du backbone vers tous les autres ports raccordables (le nombre de ports est une caract´ eristique du hub). l’usage d’un r´ ep´ eteur fait passer la limite des 500 m` etres ` a 1000 m` etres. En cela il ne limite pas les collisions et n’am´ eliore pas l’usage de la bande passante..).). . souvent ils sont reli´ es au backbone local par une autre technologie que la paire torsad´ ee (fibre optique. – En 10Base5. – Les HUB n’ont pas d’adresse Ethernet. En corollaire une station raccord´ ee via un hub est vue sur le r´ eseau comme si elle ´ etait raccord´ ee comme par exemple en 10Base2. Son seul int´ erˆ et est de permettre le branchement ou le d´ ebranchement des stations sans perturber le fonctionnement global du r´ eseau. – Il n’y a aucune administration particuli` ere. Dans le cas de “ hubs intelligents ” les ports sont associ´ es les uns aux autres par groupes de fonctionnement.. . 17 5.3 Concentrateur Un concentrateur (ou “ HUB ”.SNMP.09 – Est aussi nomm´ e´ etoile ou multir´ ep´ eteur. On parle alors de “ hubs intelligents ” parcequ’ils permettent d’associer des ports entres-eux. g´ erables ` a distance (TELNET.

Dialogue entre deux stations. De nos jours le pont en tant que tel est de moins en moins utilis´ e par contre le principe de son fonctionnement se retrouve.18 R´ eseaux locaux 5. avec pont : Pont intelligent A B C D E P Meme réseau local figure I. figure I. dans les commutateurs (paragraphe suivant) et dans les points d’acc` es sans fil (“ wireless ”). Par contre dans le cas d’un dialogue entre A et E le pont ne sert ` a rien. sans pont : A B C D E Le dialogue entre A et B perturbe l’éventuel dialogue entre D et E. Son action est plus que physique elle est aussi logique puisqu’il y a lecture et interpr´ etation des octets v´ ehicul´ es.11 les machines A et B peuvent dialoguer sans pertuber le dialogue entre les machines D et E. donc au niveau de la trame physique. Une am´ elioration possible quand on ne peut pas changer de technologie (augmentation du d´ ebit) est d’utiliser un ou plusieurs ponts (“ bridges ”) pour regrouper des machines qui ont entre-elles un dialogue privil´ egi´ e. Le r´ esultat de ce travail logique (apprentissage) consiste ` a isoler le trafic sur certains tron¸ cons d’un LAN.10 Dialogue entre deux stations. Sur la figure I. entres autres.4 Ponts La technologie CSMA/CD atteint vite ses limites quand le r´ eseau est encombr´ e. . donc am´ eliore l’usage de la bande passante. A cause de ce travail on parle g´ en´ eralement de “ ponts intelligents ” ou de “ ponts transparents ” car la phase d’apprentissage est automatique ! – R´ eduit le taux de collisions en r´ eduisant le trafic inutile.11 Un pont : – Agit au niveau de la couche 2.

Le revers d’une telle architecture est que le nombre de collisions croˆ ıt tr` es vite avec le trafic. Dans ce cas un pont a une adresse Ethernet. les trames transmises sont reproduites ` a l’identique. – Un pont contient un cpu. ce qui donne un d´ ebit global de 20 Mbit/s. Lorsqu’une trame se pr´ esente sur l’un des ports du commutateur elle est (ou n’est pas) re-rout´ ee vers un autre port en fonction de l’adresse physique du destinataire. – Si une trame est ` a destination d’un port d´ ej` a occup´ e. Il existe plusieurs diff´ erences entre un pont et un commutateur : – Un commutateur peut mettre simultan´ ement plusieurs ports en relation. – Un commutateur fonctionne comme un pont pour ´ etablir sa carte des adresses mais il peut aussi travailler ` a partir d’une table pr´ econfigur´ ee. etc. un commutateur ` a N ports ` a 10 Mbit/s chacun a un d´ ebit maximum de N × 10/2 = 20M bit/s. on parle alors de “ ponts ` a translations ”. Par exemple un commutateur de 4 ports en 10BaseT peut supporter deux connexions port source/port destination simultan´ ees ` a 10 Mbit/s chacune. Depuis plusieures ann´ ees est apparue une nouvelle technologie nomm´ ee “ Intelligent Switching Hub ” (ISH) – commutateur intelligent – qui utilise le concept de commutation parall` ele. il est en g´ en´ eral administrable ` a distance car on peut agir sur la table de filtrages (ajout. sans que le d´ ebit de chacun en souffre. D’aspect ext´ erieur ces ´ equipements se pr´ esentent comme un hub mais ont en interne un cpu suffisamment puissant pour mettre en œuvre une logique de commutation raffin´ ee. – Relie deux segments (ou plus) en un seul LAN.).. le commutateur la m´ emorise pour la d´ elivrer sitˆ ot le port disponible. – Attention..5 Commutateurs Aligner des stations sur un mˆ eme r´ eseau local constitue une premi` ere ´ etape simple et de faible coˆ ut pour un r´ eseau local d’entreprise. un pont ne filtre pas “ broadcast ” et “ multicast ”. – Il existe des ponts entre Ethernet et Token-ring. 19 5. . contraintes de filtrages. comme nous avons pu le remarquer au paragraphe pr´ ec´ edent. un protocole nomm´ e STP (“ Spanning Tree Protocol ”) d´ esactive automatiquement le ou les ponts qui occasionne(nt) un bouclage des trames. – Les ponts interdisent que les r´ eseaux aient des boucles. L’usage de ponts peut constituer une premi` ere solution mais elle n’est pas totalement satisfaisante dans tous les cas de figure.Interconnexion . d’o` u une baisse tr` es sensible de la rapidit´ e des ´ echanges dˆ ue ` a ce gaspillage de la bande passante. D’un point de vue plus th´ eorique.Technologie ´ el´ ementaire – Moins cher qu’un routeur et plus rapide (services rendus moins complets).

qui devient un “ routeur ” (“ router ”). Son rˆ ole est de prendre une d´ ecision sur la route ` a suivre et de convertir le format des donn´ ees pour ˆ etre compatible avec le r´ eseau ` a atteindre (en fonction de la route). Avec un commutateur.20 R´ eseaux locaux – Un commutateur peut fonctionner par port (une seule station Ethernet par port) ou par segment (plusieurs stations Ethernet par port). la fonction de conversion n’est pas utilis´ ee. il est ais´ e d’organiser un r´ eseau en fonction de la port´ ee des serveurs des postes clients associ´ es.12 illustre ce principe : S1 S2 Serveurs généraux Commutateur intelligent Hub Client 1 Serveur local Client 2 figure I. La figure I.6 Passerelles — Routeurs Pour raccorder deux LANs non forc´ ement contigus il faut faire appel ` a ce que l’on d´ esigne “ une passerelle ” (“ gateway ”). la fonction de routage donne alors son nom ` a l’appareil en question (´ eponyme). Cette ´ etiquette se r´ esume par deux octets ajout´ es dans la trame.1Q). Les commutateurs ´ etiquettent les trames avec un identificateur du VLAN auquel elles appartiennent. Le probl` eme du routage entre A et B : . 5. Souvent. et c’est le cas avec TCP/IP. De mˆ eme le trafic entre le “ client 1 ” et le “ serveur local ” n’est pas vu du “ client 2 ”. selon les recommandations du comit´ e 802 (norme 802.12 Le trafic r´ eseau entre le “ client 1 ” et le serveur “ S2 ” ne perturbe pas le trafic entre le “ client 2 ” et le serveur “ S1 ”.

il est administrable ` a distance. figure I. – Contient un cpu et un programme tr` es ´ evolu´ e.Technologie ´ el´ ementaire 21 B G G A G Plusieurs chemins sont possibles pour aller de A à B.14 Un routeur : – Agit au niveau de la couche 3. – Poss` ede au moins deux interfaces r´ eseau (pas forc´ ement identiques). Il prend des d´ ecisions de destination. Il existe cependant des possibilit´ es de simuler un mˆ eme LAN bien que les trame traversent un routeur (cf cours ARP (page 50)). . – Remplit ´ egalement les fonctions d’un pont (B-routeur) mais les brins ainsi reli´ es ne forment en g´ en´ eral plus un LAN car les adresses physiques contenues dans les trames ne servent plus ` a identifier le destinataire.Interconnexion .13 La fonction passerelle consiste aussi en traduction de protocoles : A G G G X25 Ethernet B Modem Token ring Liaison rtc figure I. d’où la nécessité d’une stratégie. Il faut une autre adresse qui d´ epend de la pile au-dessus (exemple adresse IP).

22 R´ eseaux locaux 6 Bibliographie Pour en savoir plus : RFC 0894 S C. Switches.txt) RFC 1042 S J. (Pages=15) (Format=. 04/01/1984. 02/01/1988. Hornig. Postel. (Pages=3) (Format=. “ Standard for the transmission of IP datagrams over IEEE 802 networks ”. J. Reynolds. “ Standard for the transmission of IP datagrams over Ethernet networks ”. Routeurs.txt) (Obsoletes RFC0948) – Radia Perlman — “ Interconnections – Briges and Routeurs ” — Addison–Wesley – Radia Perlman — “ Interconnections Second Edition ” – Briges. and Internetworking Protocoles — Addison–Wesley .

la DARPA demande ` a l’universit´ e de Berkeley d’impl´ ementer ces protocoles dans leur version (BSD) d’unix. . fut construit dans le but d’´ etudier les technologies de communications. le projet “ Cyclades ”. c’est le premier pionner de l’Internet d´ ec´ ed´ e. bas´ e sur la commutation de paquets. rlogin.). En 1983 les protocoles TCP/IP sont adopt´ es comme un standard militaire et toutes les machines sur le r´ eseau commencent ` a l’utiliser.Chapitre II Introduction ` a IP 1 TCP/IP et l’Internet . Ainsi commence le mariage entre Unix et les protocoles TCP/IP. on peut consulter par exemple : http ://www. nomm´ e ARPANET. rsh. . En Juin 1978 Jon Postel2 d´ efinit IPv4 et en 1981 IP est standardis´ e dans la RFC 791 [J. L’exp´ erience d’ARPANET est alors si concluante que toutes les organisations qui lui sont rattach´ ees l’utilisent quotidiennement pour pour leurs messages de service. . Lanc´ e en France en 1972. L’apport de l’Universit´ e de Berkeley est majeur. Pour faciliter cette reconversion. Grenoble. le r´ eseau passe officiellement du stade exp´ erimental au stade op´ erationnel. sous la responsabilit´ e de Louis Pouzin.html 1 .. En 1975. Paris. les bases des protocoles TCP/IP sont d´ evelopp´ es ` a ce moment.isi.) et en Europe. Le d´ eveloppement d’ARPANET ne s’arrˆ ete pas pour autant. pr´ ef´ er´ e par les op´ erateurs de t´ el´ ecoms nationaux. ´ etait ´ egalement bas´ e sur la commutation de paquets et l’usage de datagrammes. avec des utilitaires tr` es homog` enes avec ceux d´ ej` a existants sous Unix (rcp.Un peu d’histoire ´ En 1969 aux Etats Unis. tant au niveau th´ eorique (concept des sockets) qu’au niveau de l’utilisateur. Il est rest´ e op´ erationnel jusqu’en 1978. Ce r´ eseau. 2 Jon Postel est d´ ec´ ed´ e le 16 Octobre 1998 ` a l’ˆ age de 55 ans. Postel 1981]. ind´ ependamment de toute contrainte commerciale1 Un grand nombre de techniques de communication par modems datent de cette ´ epoque. donc apr` es que ARPANET soit op´ erationnel. . date ` a laquelle faute de cr´ edit il a ´ et´ e abandonn´ e au profit de X25. l’agence gouvernementale DARPA lance un projet de r´ eseau exp´ erimental.edu/postel. Il reliait quelques grands centres universitaires en France (Lille.

surtout avec l’apparition en 1991 d’un nouvel outil de consultation. Konqueror. Les “ anciens ” se nommaient archie. en Europe et en Asie y sont connect´ es. . l’Internet s’est ouvert au commerce.recherche. la version 6 (IPng). ARPANET n’est plus. D´ esormais ils sont rendus obsol` etes par le “ web ” (protocole http).edu/SDG/Software/Mosaic/NCSAMosaicHome. Pour les utilisateurs. gopher. Le succ` es de cette technologie est alors tr` es important et suscite un int´ erˆ et croissant de la part d’acteurs tr` es divers. Netscape. – Les dizaines de milliers de forums de discussion (“ news ”). Les protocoles d´ esign´ es par TCP/IP ont ´ egalement envahi les r´ eseaux locaux eux-mˆ emes. . En conclusion de ce paragraphe sur l’historique on peut dire que l’Internet est une collection apparemment anarchique (il n’y a pas de structure hi´ erarchique et centralis´ ee) de r´ eseaux inter-connect´ es et appartenant ` a divers http ://archive. l’Internet. – Puis maintenant la radio. pour faire face ` a sa popularit´ e fortement croissante et aux demandes de transactions s´ ecuris´ ees. Seul les programmeurs d’applications r´ eseaux et les administrateurs de syst` emes ont besoin d’en connaˆ ıtre les arcanes. Mozilla.htm 4 3 . Les services r´ eseaux les plus populaires sont principalement : – Le courrier ´ electronique qui permet l’´ echange de messages entres usagers. Des centaines de milliers de sites aux Etats Unis. est d´ efinie et en cours de d´ eploiement exp´ erimental4 . Depuis 1990. – Le transfert de fichiers entre machines (“ ftp ” et ses d´ eriv´ es comme “ fetch ” ou “ wget ”). et en particulier La “ National Science Foundation ” qui y voit un int´ erˆ et majeur pour la recherche scientifique et soutient donc ce nouveau moyen de mettre en communication tous les chercheurs.uiuc. .24 Introduction ` a IP Depuis cette ´ epoque. veronica. le “ chat ”. Depuis 1994. la vid´ eoconf´ erence.ncsa. le protocole ´ evolue et une nouvelle version.gouv. qui permet ` a un utilisateur de se connecter sur un site distant. un nouveau terme est apparu pour d´ esigner cette interconnexion de r´ eseaux.html Un r´ ecent discours de ministre tente d’ailleurs de lui donner un impulsion nouvelle :http ://www.La liste n’est pas exhaustive ! Depuis 1995. car il est plus facile d’utiliser les mˆ emes protocoles en interne et en externe. la r´ ealit´ e virtuelle avec le VRML. depuis son calculateur local. Firefox. – Le “remote login ”.. – Les serveurs inter-actifs. . wais.. les bourses d’´ echanges point ` a point. le “ World Wide Web ” ou “ Web ” et ses interfaces populaires : Mosaic3 . l’acc` es ` a l’Internet est possible ` a l’aide d’une collection de programmes sp´ ecialis´ es si faciles ` a utiliser que l’on peut ignorer tout (ou presque) de leur fonctionnement interne. ou ses ´ equivalents. pourtant le terme Internet demeure il d´ esigne maintenant un espace de communication qui englobe la plan` ete ´ tout enti` ere. avec un “ i ” majuscule.fr/discours/2002/dhourtin.

. . 25 2 Caract´ eristiques de TCP/IP Le succ` es de TCP/IP. s’il vient d’abord d’un choix du gouvernement am´ ericain. On distingue trois niveaux : les r´ eseaux au sein des organisations (lans). xDSL. 2. la liste n’est pas exhaustive. Ce protocole est ind´ ependant du support physique du r´ eseau. une liaison par rayon laser. 4. une liaison FDDI 600Mbits. Le site de l’association Fnet indique quelques pointeurs int´ eressants sur 5 l’historique de l’Internet (en anglais). La majeurs partie des informations relatives ` a ces protocoles sont publi´ ees dans les RFCs (Requests For Comments). Les RFCs contiennent les derni` eres versions des sp´ ecifications de tous les protocoles TCP/IP. infrarouge. les r´ eseaux r´ egionaux et les r´ eseaux de transit. la description de nouveaux protocoles. une liaison radio (satellites. d’une structure commerciale propri´ etaire. un r´ eseau token-ring. Cela permet ` a TCP/IP d’ˆ etre v´ ehicul´ e par des supports et des technologies aussi diff´ erents qu’une ligne s´ erie. ainsi que bien d’autres informations comme des propositions d’am´ eliorations des outils actuels. ATM.2 Caract´ eristiques de TCP/IP propri´ etaires. d’un syst` eme d’exploitation particulier. “ wireless ” 802. Le mode d’adressage est commun ` a tous les utilisateurs de TCP/IP quelle que soit la plate-forme qui l’utilise.fnet. Si l’unicit´ e de l’adresse est respect´ ee.fr/history/ . les communications aboutissent mˆ eme si les hˆ otes sont aux antipodes. ce qui est prouv´ e de nos jours. Ils sont donc th´ eoriquement transportables sur n’importe quel type de plate-forme. 3. s’appuit ensuite sur des caract´ eristiques int´ eressantes : 1. 5 http ://www. la liste des supports et des technologies n’est pas exhaustive. les sources (C) en sont disponibles gratuitement et ont ´ et´ e d´ evelopp´ es ind´ ependamment d’une architecture particuli` ere. des commentaires sur la gestion des r´ eseaux.11a/b/g). Les protocoles de hauts niveaux sont standardis´ es ce qui permet des d´ eveloppements largement r´ epandus sur tous types de machines. une liaison lou´ ee. C’est un protocole ouvert. un cˆ able coaxial Ethernet. fibre optique.

1 Couche interface r´ eseau (Network access layer). est construite sur un mod` ele en couches moins complet que la proposition de l’ISO. 2 Couche Internet (Internet layer).02 . 4 Couche Application (Application layer). figure II..26 Introduction ` a IP 3 Comparaison TCP/IP — ISO La suite de protocoles d´ esign´ ee par TCP/IP. ou encore “ pile ARPA ”.. 0 Mat´ eriel (n’est pas une couche comprise dans le protocole).01 La figure II.01 met en comparaison les fonctionnalit´ es des couches du mod` ele OSI et celles des protocoles TCP/IP. Application Présentation Session Transport Réseau Liaison Physique 4 3 2 1 0 Application Transport Internet Interface Matériel Pile Arpa figure II. 3 Couche Transport (Transport layer). telnet X11 TCP http t/tcp dns nfs xdr rpc UDP arp rarp Ethernet ATM IP fibre optique igmp icmp . Quatre couches sont suffisantes pour d´ efinir l’architecture de ce protocole.

3. . de multiples processus appartenant ` a des utilisateurs diff´ erents et pour des programmes d’applications diff´ erents.02 donne une vue d’ensemble de l’architecture logicielle avec protocoles d’applications de la famille IP. En fonction des caract´ eristiques de l’´ echange le programme a choisi un mode de transmission ` a la couche de transport.02 ` a droite. comme on peut l’observer sur la figure II. ce qui implique la capacit´ e de multiplexer et de d´ emultiplexer les donn´ ees. IP “ Internet Protocol ” TCP “ Transport Control Protocol ” UDP “ User Datagram Protocol ” Les autres protocoles ne sont pas d´ etaill´ es.. Chaque programme d’application interagit avec la couche de transport pour envoyer ou recevoir des donn´ ees. acc` edent au r´ eseau au mˆ eme moment.Comparaison TCP/IP — ISO La figure II. suivant qu’elles vont vers le r´ eseaux ou vers les programmes d’application (“ Session ”).). 27 3. Ils sont tr` es nombreux. Dans .1 Couche “ Application Layer ” Au plus haut niveau les utilisateurs invoquent les programmes qui permettent l’acc` es au r´ eseau. . 3. qu’elle doit analyser pour d´ eterminer s’ils lui sont adress´ es ou pas. n´ eanmoins il est possible pour certaines applications de court-circuiter cette fonctionnalit´ e pour agir directement au niveau “ R´ eseau ”.3 Couche “ Internet Layer ” Cette couche re¸ coit des data-grammes en provenance de la couche r´ eseau. non tous ici repr´ esent´ es et il s’en faut de beaucoup. Cette couche peut avoir ` a r´ eguler le flot de donn´ ees et ` a assurer la fiabilit´ e du transfert : les octets re¸ cus doivent ˆ etre identiques aux octets envoy´ es. nous aurons l’occasion d’en parler ult´ erieurement. Cette couche divise le flux de donn´ ees en paquets (terminologie de l’ISO) et passe chacun avec une adresse de destination au niveau inf´ erieur. et c’est surtout valable pour les syst` emes d’exploitation multitˆ aches multi-utilisateurs (Unix. C’est pourquoi cette couche doit g´ erer des “ checksums ” et savoir re-´ emettre des paquets mal arriv´ es. De plus.2 Couche “ Transport Layer ” La principale tˆ ache de la couche de transport est de fournir la communication d’un programme d’application ` a un autre. La plus grande proportion des applications laissent ` a la couche de transport le soin d’effectuer le travail de “ Session ”. Une telle communication est souvent qualifi´ ee de “ point ` a point ”.

. La d´ efinition de ceux-ci reste ind´ ependante de la couche r´ eseau. dans le deuxi` eme cas elle les ignore. . 4 Encapsulation d’IP A Application Message Transport Paquet Internet Datagramme Network Trame Network Internet Transport B Application Réseau physique figure II. Enfin cette couche g` ere les datagrammes des protocoles ICMP et IGMP. Elle utilise alors l’algorithme de routage (page 65) pour d´ ecider si le paquet doit ˆ etre envoy´ e vers une passerelle ou vers une machine directement accessible. Cette couche prend aussi en charge la communication de machine ` a machine. 3. Elle accepte des requˆ etes venant de la couche de transport avec une identification de la machine vers laquelle le paquet doit ˆ etre envoy´ e. nous allons examiner le probl` eme de l’adressage IP. ce qui leur permet de s’adapter ` a chaque nouvelle technologie au fur et ` a mesure de leur apparition. dans le chapitre suivant. Avant de s’int´ eresser au d´ etail des data-grammes IP.).28 Introduction ` a IP le premier cas elle doit “ d´ ecapsuler ” son en-tˆ ete du data-gramme pour transmettre les donn´ ees ` a la couche de transport et au bon protocole de cette couche (TCP.4 Couche “ Network Access ” Le protocole dans cette couche d´ efinit le moyen pour un syst` eme de d´ elivrer l’information ` a un autre syst` eme physiquement reli´ e.03 Comme nous l’avons d´ ecrit avec le mod` ele des couches OSI.. les couches IP fonctionnent par encapsulations progressives. Il d´ efinit comment les data-grammes IP sont transmis. UDP.

Pour la couche IP le protocole comporte en standard 5 mots de 32 bits. (Pages=45) (Format=. Application Transport Internet Network | | Header | | Header | Header | | Header | Header | Header | datas datas datas datas | | | | 29 La taille des “ headers ” d´ epend des protocoles utilis´ es. “ Internet Protocol ”.5 Bibliographie Chaque couche en-capsule la pr´ ec´ edente avec les informations de contrˆ ole qu’elle destine ` a la couche de mˆ eme niveau sur la machine distante.txt) (Obsoletes RFC0760) La Recherche Num´ ero sp´ ecial Internet num´ ero 238 de f´ evrier 2000 6 5 mots de 32 bits = 5 × 4 octets = 20 octets . mˆ eme chose pour la 6 couche TCP . Postel. Cet ajout est nomm´ e “ header ” (en-tˆ ete) parce-qu’il est plac´ e en tˆ ete des donn´ ees ` a transmettre. 09/01/1981. 5 Bibliographie Pour en savoir plus : RFC 0791 S J.

30 Introduction ` a IP .

l’adresse nous dit “ o` u ” il se trouve et la route “ comment ” on y parvient. au contraire il fait l’objet d’une attention particuli` ere notamment pour faciliter les op´ erations de routage. son adresse. la route ` a suivre pour y parvenir. Ce chapitre parle de l’adressage. Le nom dit “ qui ” est l’hˆ ote distant. Lorsque l’on veut ´ etablir une communication. Nous remettons ` a plus tard la correspondance entre ce nombre et une ´ eventuelle repr´ esentation symbolique. construit par interconnexion de r´ eseaux physiques via des passerelles.Chapitre III Anatomie d’une adresse IP 1 Adressage IP Nous avons dit que l’Internet est un r´ eseau virtuel. Le nom de la machine distante. Afin qu’il n’y ait pas d’ambigu¨ ıt´ e pour la reconnaissance des hˆ otes possibles. En r` egle g´ en´ erale les utilisateurs pr´ ef` erent des noms symboliques pour identifier les machines tandis que les processeurs des machines sont plus ` a l’aise avec les nombres. 3. Les adresses IP (version 4) sont standardis´ ees sous forme d’un nombre de 32 bits qui permet ` a la fois l’identification de chaque hˆ ote et du r´ eseau auquel il appartient. le maillon essentiel des protocoles TCP/IP pour rendre transparents les d´ etails physiques des r´ eseaux et faire apparaitre l’Internet comme une entit´ e uniforme. il est intuitivement indispensable de poss´ eder trois informations : 1. il est absolument n´ ec´ essaire d’admettre un principe g´ en´ eral d’identification. 2.1 Unicit´ e de l’adresse Un syst` eme de communication doit pouvoir permettre ` a n’importe quel hˆ ote de se mettre en relation avec n’importe quel autre. 1. Le choix des nombres composants une adresse IP n’est pas laiss´ e au hasard. .

32 Anatomie d’une adresse IP Chaque adresse IP contient donc deux informations basiques.icann. Rekhter..255 Les adresses publiques (souvent une seule). Un LIR est g´ en´ eralement un FAI ou une grande organisation (entreprise multinationale). elles doivent ˆ etre uniques sur le r´ eseau.0.0.168.net 4 http ://www. Ce dernier point est capital pour assurer l’efficience du routage. La question est donc de savoir de qui le FAI les obtient.ripe. Les adresses priv´ ees que tout administrateur de r´ eseau peut s’attribuer librement pourvu qu’elle ne soient pas rout´ ees sur l’Internet. Pour ce qui nous concerne en Europe c’est donc le RIPE NCC (R´ eseaux IP europ´ een Network Coordination Centre) qui d´ elivre les adresses que nous utilisons. Il y a actuellement trois “ Regional Internet Registries ” op´ erationnels : 3 4 l’APNIC pour la r´ egion Asie-Pacifique.arin. . une adresse de r´ eseau et une adresse d’hˆ ote.255. appel´ ees “ Regional Internet Registries ” ou RIR.net/ 5 http ://www. et les adresses publiques. Il est sous l’autorit´ e de l’instance r´ egionale de gestion de l’adressage. Les adresses IP sont allou´ ees ` a l’utilisateur final qui en fait la demande par un “ Local Internet Registry ”. dans chaque pays.255.168.16.0 172.0 10.255.31. d´ elivr´ ees par une structure mondiale qui en assure l’unicit´ e. autoris´ e par le RIPE NCC.255 (ancien Arpanet !) 172. La combinaison des deux d´ esigne de mani` ere unique une machine et une seule sur l’Internet. Les adresses ` a utiliser sur les r´ eseaux priv´ es sont d´ ecrites par la RFC 1918 [Y.org 3 http ://www.0.255. comme nous le verrons au chapitre suivant.net/ .2 D´ elivrance des adresses IPv4 On distingue deux types d’adresses IP.0 192. . Qu’elles soient d´ elivr´ ees de mani` ere temporaire ou attribu´ ees pour le long terme. Ainsi pour un utilisateur (quelle que soit sa taille) changer de FAI implique aussi de changer de plan d’adressage IP. lorsque celles-ci ont 1 2 Fournisseur d’Acc` es Internet http ://www. ou LIR. l’ARIN pour l’Am´ erique et enfin 5 le RIPE NCC pour l’Europe (l’AfriNIC pour l’Afrique ainsi que le LACNIC pour l’Am´ erique Latine sont en cours de cr´ eation). C’est L’ICANN (Internet Corporation for Assigned Names and Numbers)2 qui est charg´ e au niveau mondial de la gestion de l’espace d’adressage IP. Il d´ efinit les proc´ edures d’attribution et de r´ esolution de conflits dans l’attribution des adresses. sont le plus g´ en´ eralement four1 nies par le FAI .255 192.0. mais d´ el` egue le d´ etail de la gestion de ces ressources ` a des instances r´ egionales puis locales.apnic. 1.1996] : 10.

192.2 ci-dessus).0. tout comme la machine ayant E 240.z Les lecteurs attentifs auront remarqu´ e que le r´ eseau 0 n’est pas utiC 2 097 152 réseaux (2^21) 256 machines (2^8) lis´ e. Ainsi. Les adresses IP sont alors restitu´ ees puis r´ e-attribu´ ees ` a d’autres utilisateurs.net/ripe/docs/ar2003.y.z A 127 réseaux pour identifier le r´ eseau et de 24 bits 16 777 216 machines (2^24) pour identifier l’hˆ ote.x. ici 16 777 215).255 le plus fort num´ ero dans le r´ eseau (tous les bits de la partie hˆ ote ` a figure III.0 à 239. B. On dispose de 7 bits 1.x.255.0. l’adresse est de classe A. De mˆ eme.z à 127.0 à 247.ripe.255. un octet d’hˆ ote. On compte plus de 2000 de LIRs offrant leurs services en Europe selon le RIPE NCC6 33 2 Anatomie d’une adresse IP Une adresse IP est un nombre de 32 bits que l’on a coutume de repr´ esenter sous forme de quatre entiers de huit bits.x.255. nommables. s´ epar´ es par des points (comme au paragraphe 1. 2.2 Anatomie d’une adresse IP ´ et´ e allou´ ees statiquement par le LIR. Classe B Deux octets r´ eseau.01 1. La partie r´ eseau de l’adresse IP vient toujours en tˆ ete.255. deux octets d’hˆ otes.html .1 Classe D´ ecomposition en classes Nombre de réseaux/machines Si le premier bit est 0. il a une signification particuli` ere (“ tous les r´ eseaux ”) comme on le D 224. On a donc les r´ eseaux de 1 ` a 127 et 224 hˆ otes pos128.255 pr´ ecisera au paragraphe suivant.0.255. Il reste donc seulement C.0. L’int´ erˆ et de cette repr´ esentation est imm´ ediat quand on sait que la partie r´ eseau et donc la partie hˆ ote sont presque toujours cod´ ees sur un nombre entier d’octets.255.z à 223. la machine 0 n’est pas utilis´ ee. D et E il faut examiner les bits de 16 777 214 machines adressables dans une classe A ! poids fort de l’octet de poids fort : 6 Voir http ://www.x. la partie hˆ ote est donc toujours en queue. Classe C Trois octets r´ eseau. ce qui r´ eduit de deux unit´ es le nombre des machines Pour distinguer les classes A. trois octets d’hˆ otes. on a principalement les trois formes suivantes : Classe A Un octet r´ eseau.0.y.255.y à 191.0.0. c’est ` a dire 16 777 216 maB 65536 machines (2^16) chines diff´ erentes (de 0 ` a 16 777 215).y 16 384 réseaux (2^14) sibles.

sur toutes les machines. Ce qui 21 fait 2 = 2 097 152 r´ eseaux (de 192. la classe D. B et C : 127 × 16777212 + 16384 × 65534 + 2097152 × 254 = 3737091588 7 Ce total. contrairement aux trois premi` eres classes qui sont d´ edi´ ees ` a l’“ unicast ” ou point ` a point. (RFC 1112 [S. 1989]).255) et 65 534 (65 536 − 2) machines.0 indique la machine ellemˆ eme (loopback – Cf chapitre IP page 43). ind´ ependamment de l’adresse r´ eseau sur lequel elle est connect´ ee. la classe E. Si les quatre premiers bits de l’adresse sont 1110 .255. Cette classe est pr´ evue pour faire du “ multicast ”.0 ` a 191. Enfin. c’est ` a dire une information adress´ ee ` a tout le monde. . il s’agit d’une classe exp´ erimentale. il s’agit d’une classe d’adressage sp´ eciale.0. cela d´ esigne toutes les machines du r´ eseaux. pour ˆ etre plus exact. Ces adresses forment une cat´ egorie ` a part. c’est ce que l’on appele une adresse de “ broadcast ”.2 Adresses particuli` eres Certaines adresses IP ont une signification particuli` ere ! Par convention le num´ ero 0 d’hˆ ote n’est pas attribu´ e. La RFC 1700 pr´ ecise “ Class E addresses are reserved for future use ” mais n’indique pas de quel futur il s’agit. On ´ evite au maximum l’usage d’une telle adresse IP sur les r´ eseaux. l’adresse est de classe B. 7 8 Sous shell. ` l’inverse. donc en r` egle g´ en´ erale l’hˆ ote lui-mˆ eme.0 ` a 223. Si une adresse IP contient cette zone nulle cela signifie que l’on adresse le r´ eseau lui-mˆ eme et aucun hˆ ote en particulier.0.255) et 254 (256 − 2) machines. Il reste 21 bits pour identifier le r´ eseau et 8 bits pour identifier la machine. Par exemple.0. doit ˆ etre amput´ e des 17 890 780 hˆ otes des r´ eseaux priv´ es pr´ evus dans la RFC 19188 . l’adresse 127. Si les trois premiers bits sont 110 . Il reste 14 bits pour identifier le r´ eseau et 16 bits pour identifier la machine. Deering. pour des raisons d’efficacit´ e (encombrement de la bande passante). soit donc tout de mˆ eme au total 3 719 200 808 hˆ otes adressables en utilisant IPv4 ! 2.34 Anatomie d’une adresse IP Si les deux premiers bits sont 10 . pour conclure ce paragraphe. l’adresse est de classe C. Ce 14 qui fait 2 = 16 384 r´ eseaux (128. calculons le nombre d’hˆ otes adressables th´ eoriquement ` a l’aide des classes A. ou multipoint. si tous les bits de la partie hˆ A ote sont ` a 1. Si les quatre premiers bits de l’adresse sont 1111 . . tapez : echo "127*16777212+16384*65534+2097152*254"|bc 16777212 + 16 × 65534 + 256 × 254 = 17890780 . nous en reparlons au paragraphe 3.

255.195. 1985] donne plus de pr´ ecisions. .1 255.0. 2.0.255. les bits 6 et 7 de la partie “ host ” sont utilis´ es pour caract´ eriser un sousr´ eseau. Le nombre de bits employ´ es est laiss´ e ` a l’initiative de l’administrateur. Pummill & B.1 du r´ eseau 138.0.104.0 Cet hˆ ote (boucle locale).0. La figure suivante en rappelle les valeurs pour les huit premiers exposants : figure III. ne peuvent figurer que comme adresse source dans des cas bien particuliers comme le d´ emarrage d’une station (cf chapitre IP page 43 et les travaux pratiques associ´ es). Manning.0 0.0 193.104. J. avec un num´ ero de r´ eseau ´ egal ` a 0.1 138. Postel.195.0.195.0 Tous les hˆ otes du 193. sur ce r´ eseau L’hˆ ote 1 de ce r´ eseau Tous les hˆ otes L’hˆ ote 52. 1995] est une table de tous les sous-r´ eseaux possibles.192 = 0xFFFFFFC0 figure III. 35 Remarque : les deux premi` eres adresses.0.1 Hˆ ote inconnu.0. la RFC 1878 [T.52.255 127. Hostid de la classe C 31 24 23 16 15 193 104 1 8 76 5 0 hostid (6 bits) réduit des 2 bits du subnet id Netid de la la classe C subnet id (2 bits) netmask (les 2 bits de poids fort) : 255.195. pour d´ esigner un r´ eseau. .1.0 Cet hˆ ote sur le 138. Dans la figure III.255. .0.02 Le “ subnet ” utilise les bits de poids fort de la partie hˆ ote de l’adresse IP.Sous-r´ eseaux Quelques exemples d’adresses avec une signification particuli` ere : 0.255 138.1. Quelques r´ evisions des propri´ et´ es des puissances de 29 sont souvent n´ ecessaires pour bien assimiler ce paragraphe.02 ci-contre.03 7 128 6 64 5 32 4 16 3 8 2 4 1 2 0 1 Décomposition unique : 255 = 128 + 64 + 32 + 16 +8 + 4 + 2 + 1 9 et plus g´ en´ eralement de la d´ ecomposition d’un nombre en ses facteurs premiers.255. Mogul.3 Sous-r´ eseaux En 1984 un troisi` eme niveau de hi´ erarchie est mis en place : le “ subnet ” ou sous-r´ eseau.0. La RFC 950 [J. pour permettre aux administrateurs de g´ erer plus finement de grands r´ eseaux.

192.104. 192.192 128 + 63 = 191 . 192.1.192.192.168. 192.192.168.104. le remplissage du tableau suivant dans le cas de la classe C 192.168.1 00 + 1 = 1 01 193. 191.192. Premi` ere Derni` ere machine machine ` toutes ces adresses il faudra appliquer le masque de sous-r´ A eseau : 0xFFFFFF soit encore 255.192.168. 159.62 255.192.192.104.129 ` a .1.168. 95.193 ` a . 192.255. Ce qui permet de caract´ eriser 4 sous-r´ eseaux de 62 machines (63 moins l’adresse de broascast.168. 96. .65 ` a .192.192.255. 192.255. 10 11 Donc 64 valeurs possibles de 0 ` a 63 “ netmask ” . 192. 223 et 224.64 193.104.1.00 193.1.1. 63.192.192.104.0 et avec 3 bits pour d´ efinir les sous-r´ eseaux ne devrait pas vous poser de probl` eme. 64. 192.168.128 193.255. 192.1.168. Num´ ero du subnet 000(0) 001(1) 010(2) 011(3) 100(4) 101(5) 110(6) 111(7) Num´ ero du r´ eseau 192.192. o` u n est le nombre de bits du masque. au lieu des 254 hˆ otes sans. . Le calcul des masques et des adresses de diffusion est expliqu´ e dans le tableau suivant : Num´ ero du r´ eseau 193. 192.168. 32.129 128 + 1 = 129 11 193. 192.255.254 Soit un total de 62 × 4 = 248 hˆ otes possibles pour cette classe C avec un 11 masque de sous-r´ eseau .190 255.192. amput´ ees de 31.255.255. Adresse de broadcast 192.193 192 + 1 = 193 Si vous pensez avoir tout compris.168. Remarque : On pourra v´ erifer que la perte d’espace d’adressage pour des hˆ otes se calcule avec la relation (2n − 1) × 2. 127.192.168.126 255.192. 128. 192. le “ 0 ” n’´ etant pas compt´ e).1.168.255.1.192 00 + 63 = 63 . 192.168.192.192 64 + 63 = 127 .255. aura comme adresse IP : Sous-r´ eseau Adresse D´ ecomposition 00 193.65 64 + 1 = 65 10 193. 192. Ainsi avec 3 bits de masque de sous-r´ eseau.192 “ Netmask ” “ Broadcast ” Adressage hˆ ote 255. 192.168.104.168. et d’autre part 25 + 24 + 23 + 22 + 21 + 20 = 6310 . 192. la perte d’espace d’adressage s’´ el` eve ` a 14 hˆ otes ! Les 254 possibilit´ es (256 moins 0 et 255) de nommage de la classe C se r´ eduisent ` a 240.1 ` a .36 Anatomie d’une adresse IP Nous avons d’une part 27 + 26 = 192.168.168.104.192 192 + 63 = 255 . 160.104.255. La machine d’adresse 1 sur chaque sous-r´ eseau.

2. OSPF. le routage n’est plus bas´ e uniquement sur la partie r´ eseau des adresses. trois caract´ eristiques sont requises pour pouvoir utiliser ce concept : 1. BGP-4 le font. en plus cela all` ege les tables.4 CIDR En 1992 la moiti´ e des classes B ´ etaient allou´ ees. – Il est plus facile de pr´ evoir une table de routage pour un bloc d’adresses contig¨ ues qu’adresse par adresse.168/16 Le terme “ classless ” vient de ce fait. Ces blocs de num´ eros sont souvent appell´ es “ supernet ”.16.0.255.168. des adresses IP multiples doivent avoir les mˆ emes bits de poids fort. ` a appliquer sur les adresses. En g´ en´ erale.CIDR 37 2.0. 3. Ce masque se manifeste concrˆ etement comme dans la re´ ecriture du tableau du paragraphe 1.0 10. Les adresses allou´ ees sont donc des classes C contig¨ ues.16/12 192.255.31.0. . . il est moins courant d’en rencontrer une de plus de quelques milliers.0.255 172.0 192. Les tables de routages et algorithmes doivent prendre en compte un masque de 32 bits. RIP-2.168. Les protocoles de routage doivent ajouter un masque 32 bits pour chaque adresse IP (Cet ajout double le volume d’informations) transmise. et si le rythme avait continu´ e. . Ainsi par exemple il est courant d’entendre les administrateurs de r´ eseaux parler d’un “ slash 22 ” (/22) pour d´ esigner un bloc de quatre classes C cons´ ecutives. Deux consid´ erations qui ont conduit l’IETF a mettre en place le CIDR (“ Classless InterDomain Routing ” ou routage Internet sans classe) bas´ e sur une constatation de simple bon sens : – S’il est courant de rencontrer une organisation ayant plus de 254 hˆ otes. au d´ ebut de 1994 il n’y aurait plus eu de classe B disponible et l’Internet aurait bien pu mourrir par asphyxie ! De plus la croissance du nombre de r´ eseaux se traduisait par un usage “ aux limites ” des routeurs.255 192.2 : 10. 8 ` a 16 classes C mises bout ` a bout suffisent pour une entreprise. attribu´ ees par r´ egion ou par continent.255. Plus pr´ ecisement.255. Pour ˆ etre r´ eunies dans une mˆ eme route.0 172. proches de la saturation car non pr´ evus au d´ epart pour un tel volume de routes (voir les RFC 1518 et RFC 1519).255 10/8 172.

255.0 206.0.0.255.0.255 201.255.255.0. quand il ne connait rien du r´ eseau sur lequel il est connect´ e. “ All-subnets-directed broadcast ” C’est le cas o` u tous les bits des subnets et hˆ otes sont ` a 1.0 196.255.0.0.255.0 194. sur option.0 200.0.255.0.0 198.org/assignments/ipv4-address-space 12 . Ce cas possible th´ eoriquement est rendu obsol` ete depuis la RFC 922 (1993).0 204.0. Il y a quatre formes possibles de broadcast : “ Limited broadcast ” (255.255.0. Ce tableau est tr` es synth´ etique. “ Subnet-directed broadcast ” C’est le mˆ eme cas que ci-dessus mais avec une adresses IP comportant des subnets.255.38 Anatomie d’une adresse IP Les agr´ egations d’adresses sont ventil´ ees selon le tableau suivant12 : Multir´ egionales Europe Autres Am´ erique du Nord Am´ erique centrale.5 Pr´ ecisions sur le broadcast Tout d’abord il faut pr´ eciser qu’une adresse de broadcast est forc´ ement une adresse de destination.0.255 203.0.255.255) Une telle adresse ne peut servir que sur le brin local et ne devrait jamais franchir un routeur. “ Net-directed broadcast ” Tous les bits de la partie hˆ ote sont ` a 1. Am´ erique du Sud Zone Pacifique Autres Autres 192. L’usage de cette adresse est normalement limit´ ee ` a un hˆ ote en phase d’initialisation.255. Ce n’est malheureusement pas le cas (pr´ ecisions en cours).255.255.0.255.255.255. Un routeur propage ce type de broadcast.255 199.255 205.255.0 193.0.iana.255 195.0.255 2.0.0 202.255.255 197.255 207. pour une information plus d´ etaill´ ee et ` a jour consultez le site de l’IANA http ://www. elle ne peut jamais apparaˆ ıtre comme une adresse source dans un usage normal des r´ eseaux.

3 Adressage multicast 39 3 Adressage multicast En r` egle g´ en´ erale l’adressage multicast est employ´ e pour s’adresser en une seule fois ` a un groupe de machines. les hˆ otes qui le d´ esirent rejoignent et quittent le groupe comme ils veulent. – Il n’y a pas de restriction sur le nombre d’hˆ otes dans un groupe et un hˆ ote n’a pas besoin d’appartenir ` a un groupe pour lui envoyer un message.0. "Multicast group address" 1 1 1 0 4 bits 28 bits "Multicast group ID" figure III. La plupart des adresses multicast allou´ ees le sont pour des applications particuli` eres comme par exemple la d´ ecouverte de routeurs (que nous verrons ult´ erieurement lors du routage IP) ou encore la radio ou le t´ el´ ephone/vid´ eo sur Internet (“ Mbone ”).1 Adresse de groupe multicast Si une adresse multicast d´ emarre avec les bits 1110 par contre pour les 28 bits suivants son organisation interne diff` ere de celle des classes A.255. – Un groupe d’hˆ otes qui partagent un protocole commun utilisant une adresse multicast commune peuvent ˆ etre r´ epartis n’importe o` u sur le r´ eseau.0. B et C.0.255.0.1 224.0 ` a 239. cette approche induit une ´ economie de moyen et de bande passante ´ evidente quand on la compare ` a une d´ emarche “ unicast ” : un seul datagramme est rout´ e vers tous les clients int´ eress´ es au lieu d’un envoi massif d’autant de datagrammes qu’il y a de clients. Dans le cas d’un serveur vid´ eo/audio. Les plus couramment utilis´ ees13 sur un lan sont : 224. Les adresses de type “ multicast ” ont donc la facult´ e d’identifier un groupe de machines qui partagent un protocole commun par opposition ` a un groupe de machines qui partagent un r´ eseau commun. 13 Pour plus de pr´ ecisions on pourra se reporter page 56 de la RFC 1700 .0.04 – Les 28 bits n’ont pas de structure particuli` ere par contre on continue ` a utiliser la notation d´ ecimale point´ ee : 224.2 Toutes les machines sur ce sous-r´ eseau Tous les routeurs sur ce sous-r´ eseau 3.255. – L’appartenance ` a un groupe est dynamique.0.

cette adresse n’est pas unique. si l’adresse correspond ` a l’une des adresses de groupe multicast pr´ ealablement configur´ ees.2 Adresse multicast et adresse MAC Une station Ethernet quelconque doit ˆ etre configur´ ee pour accepter le multicast. La question est de savoir comment les trames de type multicast atteignent justement cette station Ethernet ? La r´ eponse se trouve dans un protocole nomm´ e IGMP et que nous examinerons dans le prochain chapitre concernant IP. ce qui conduit au sch´ ema suivant : 5 bits inutilisables dans l’adresse MAC. On peut mˆ eme pr´ eciser que pour chaque trame comportant une adresse multicast il y a 25 adresses IP de groupes multicast possibles ! Ce qui signifie que si les 23 bits de poids faible ne suffisent pas ` a discriminer la trame il faudra faire appel au pilote de p´ eriph´ erique ou ` a la couche IP pour lever l’ambigu¨ ıt´ e. 0 1 1 10 7 8 15 16 23 24 31 01 : 00 : 5E Les 23 bits de poids faible du "group Id" de l’adresse 0 00 0 0 0 01 0 0 0 0 0 0 0 0 01 01 1 1 1 0 0 figure III. Quand une trame de type multicast est lue par la station Ethernet puis par le pilote de p´ eriph´ erique. Restent trois octets. Cette op´ eration sous entend ` a juste titre que la carte r´ eseau sait faire le tri entre les trames. c’est ` a dire pour accepter les trames contenant un datagramme munis d’une adresse IP de destination qui est une adresse multicast. 14 Cf RFC 1700 page 171 . Ceux-ci ne d´ esignent pas un constructeur en particulier mais sont poss´ ed´ es par l’ICANN (ex IANA). En effet les trames multicast ont une adresse MAC particuli` ere : elles commencent forc´ ement par les trois octets 01 :00 :5E14 .40 Anatomie d’une adresse IP 3. le datagramme franchit la couche IP et une copie des donn´ ees est d´ elivr´ ee aux processus qui ont “ joint le groupe multicast ”. soit 24 bits dont le premier est forc´ ement ` a 0 pour d´ esigner les adresses de multicast (contrainte de la RFC 1700).05 Du fait qu’il n’y a pas assez de place dans l’adresse MAC pour faire tenir les 28 bits du groupe multicast.

Toutes permettent d’atteindre cet interface. D` es que nous aurons examin´ e le fonctionnement de la couche IP nous reviendrons sur cette figure pour en expliquer le fonctionnement (voir page 71). La r´ eciproque n’est pas vraie car un mˆ eme interface peut collectionner plusieurs adresses IP. par contre les “ datagrammes ” et les “ trames ” diff` erent puisqu’il ne s’agit plus du mˆ eme r´ eseau physique. En g´ en´ eral une passerelle qui met en relation n r´ eseaux poss` ede n adresses IP diff´ erentes (une dans chaque r´ eseau). On dira donc maintenant qu’une adresse IP identifie non pas un hˆ ote mais un interface. avec une adresse IP dans chacun de ces r´ eseaux. . On dit d’une machine ayant au moins deux adresses IP qu’elle est du type “ multi-homed ”.06 met en situation deux hˆ otes.4 Conclusion et bibliographie 41 4 Conclusion et bibliographie Pour conclure ce chapitre sur l’adressage IP.Nous aurons l’occasion de revenir sur ces notions ` a la fin de ce cours. il faut nous donner quelques pr´ ecisions suppl´ ementaires. Cette d´ emarche n’est pas exacte si on consid` ere par exemple le cas d’une passerelle. . on parle alors d’“ alias IP ” et de “ r´ eseaux virtuels ”. Si les “ messages ” et les “ paquets ” sont identiques. A et B. A Application Messages identiques Transport Transport B Application Paquets identiques Passerelle G Internet Internet Internet Réseau Réseau Réseau Réseau physique 1 Réseau physique 2 figure III. mais ce n’est pas une obligation (nous verrons quelle peut en ˆ etre l’utilit´ e` a la fin de ce cours). en relation via une passerelle G. .06 La figure III. connect´ ee physiquement ` a au moins deux r´ eseaux diff´ erents. Jusqu’` a pr´ esent nous avons d´ esign´ e un hˆ ote par son adresse IP.

Deering. Gerich. Topolcic. D. (Pages=17) (Format=. (Pages=10) (Format=. 05/26/1993. de Groot & E. 08/01/1989. T. Varadhan. (Format : TXT=72609 bytes) (Status : PROPOSED STANDARD) RFC 1519 PS V. Li. Lear. October 1994.txt) (Obsoletes RFC1338) RFC 1466 I E.txt) (Obsoletes RFC1366) RFC 1467 “ Status of CIDR Deployment in the Internet. Karrenberg. J. B.txt) (STD 5) RFC 1112 S S. (Format : TXT=458860 bytes) (Obsoletes RFC1340) (Also STD0002) (Status : STANDARD) RFC 1878 “ Variable Length Subnet Table For IPv4. (Pages=18) (Format=. Rekhter. (Format : TXT=22270 bytes) (Obsoletes RFC1627. (Format : TXT=20720 bytes) (Obsoletes RFC1367) (Status : INFORMATIONAL) RFC 1700 “ Assigned Numbers. “ Classless InterDomain Routing (CIDR) : an Address Assignment and Aggregation Strategy ”. Reynolds. ” Y. Volume 1 .42 Pour en savoir plus : Anatomie d’une adresse IP RFC 0950 S J. Yu. September 1993. and architecture . 08/01/1985. T. Rekhter. G. 09/24/1993. ” C.EYROLLES . “ Internet standard subnetting procedure ”. August 1993. Fuller. (Pages=24) (Format=.Principles. RFC1597) (Also BCP0005) (Status : BEST CURRENT PRACTICE) Quelques ouvrages qui font autorit´ e: – W. “ Host extensions for IP multicasting ”. ” T. Mogul. J. February 1996. Richard Stevens . Manning.Le routage dans l’Internet .Internetworking with TCP/IP . Postel.txt) (Obsoletes RFC0988) (STD 5) RFC 1518 “ An Architecture for IP Address Allocation with CIDR ” Y. protocols.TCP/IP Illustrated. Postel.Prentice–Hall – Christian Huitema . Pummill & B. J. (Format : TXT=19414 bytes) (Obsoletes RFC1860) (Status : INFORMATIONAL) RFC 1918 “ Address Allocation for Private Internets.The protocols Addison-Wesley – Douglas Comer . “ Guidelines for Management of IP Address Space ”. Moskowitz. K. ” J. J. December 1995. Li.

UDP. il est d´ efini dans la RFC 791. .. sont appell´ ees “ datagramme IP ”..Chapitre IV Protocole IP 1 Datagramme IP IP est l’acronyme de “ Internet Protocol ”. TCP. – IP ne donne aucune garantie quant au bon acheminement des donn´ ees qu’il envoie. Il n’entretient aucun dialogue avec une autre couche IP distante. c’est le MTU (“ Maximum Transfert Unit ”). 31 28 27 24 23 SERVICE TYPE FLAGS 16 15 TOTAL LENGTH FRAGMENT OFFSET 0 VERS HLEN IDENTIFICATION TTL PROTO HEADER CHECKSUM SOURCE IP ADDRESS DESTINATION IP ADDRESS IP OPTIONS PADDING DATA . Les donn´ ees qui franchissent la couche IP. on dit aussi qu’il d´ elivre les datagramme “ au mieux ”.01 La taille maximale d’un datagramme d´ epend du support physique. datagramme Internet ou datagramme tout court. figure IV. Quelques caract´ eristiques en vrac du protocole IP : – IP est le support de travail des protocoles de la couche de transport. alias couche Internet..

en-tˆ ete plus donn´ ees. c’est un standard. la taille maximale fait : (23 + 22 + 21 + 20 ) × 4 = 60 octets2 TOTAL LENGTH Donne la taille du datagramme. La taille standard de cette en-tˆ ete fait 5 mots. 1 2 Nous examinerons les caract´ eristiques de la version 6 d’IP ` a la fin de ce cycle de cours On encore plus simple 24 − 1 . .. Actuellement c’est la version 4 qui est principalement utilis´ e sur l’Internet. Toutes les architectures de CPU ne sont pas bˆ aties sur le mˆ eme mod` ele : mot de deux octets 15 "Big endian" ..44 Protocole IP – Chaque datagramme est g´ er´ e ind´ ependamment des autres datagrammes mˆ eme au sein du transfert des octets d’un mˆ eme fichier. soit 20 octets. bien que quelques impl´ ementations 1 de la version 6 existent et soient d´ ej` a en exp´ erimentation . – Sur la figure IV. 1. HLEN 4bits qui donnent la longueur de l’en-tˆ ete en mots de 4 octets. L’objet de ce champ est la v´ erification que l’´ emetteur et le destinataire des datagrammes sont bien en phases avec la mˆ eme version. A+1 A octet 0 Octet 1 HP MOTOROLA 0 1 0 "Little endian" . Ils sont d’ailleurs transmis sur le r´ eseau dans cet ordre. .. S’il y fragmentation (voir plus loin) il s’agit ´ egalement de la taille du fragment (chaque datagramme est ind´ ependant des autres). c’est le “ Network Byte Order ”.02 – L’en-tˆ ete IP minimale fait 5 mots de 4 octets. dupliqu´ es.).. perdus ou alt´ er´ es ! Ces probl` emes ne sont pas d´ etect´ es par IP et donc il ne peut en informer la couche de transport. S’il y a des options la taille maximale peut atteindre 60 octets. Cela signifie que les datagrammes peuvent ˆ etre m´ elang´ es.1 Description de l’en-tˆ ete VERS 4 bits qui sp´ ecifient la version du protocol IP.01 les bits les plus significatifs de chaque mot de quatre octets sont ` a gauche (31. octet 1 octet 0 INTEL Croissance des adresses figure IV.

Si un routeur passe le compteur ` a z´ ero avant d´ elivrance du datagramme. PROTOCOL 8 bits pour identifier le format et le contenu des donn´ ees. . TYPE OF SERVICE 8 bits (4 utiles) qui indiquent au routeur l’attitude ` a avoir vis ` a vis de ce datagramme. Il permet ` a IP d’adresser les donn´ ees extraites ` a l’une ou l’autre des couches de transport. si elle ne correspond pas ` a celle trouv´ ee dans l’en-tˆ ete le datagramme est oubli´ e (“ discard ”) sans message d’erreur. Dans le cadre de ce cours. Consulter la section suivante Fragmentation IP. ` a l’origine du datagramme. . HEADER CHECKSUM 16 bits pour s’assurer de l’int´ egrit´ e de l’en-tˆ ete. SOURCE ADDRESS Adresse IP de l’´ emetteur. . Couramment la valeur de d´ epart est 32 ou mˆ eme 64. A la r´ eception de chaque paquet. UDP et TCP. . Suivant les valeurs de ce champ. IGMP.La limitation vient le plus souvent du support physique (MTU) qui impose une taille plus petite. le routeur peut privil´ egier un datagramme par rapport ` a un autre. . sauf sur les “ hyperchannel ”. Pr´ evu ` a l’origine pour d´ ecompter un temps. la couche calcule cette valeur. Son objet est d’´ eviter la pr´ esence de paquets fantˆ omes circulant ind´ efiniment. 16 bits autorisent la valeur 65535. un message d’erreur — ICMP (consultez le paragraphe 4) — est renvoy´ e ` a l’´ emetteur avec l’indication du routeur. Le paquet en lui-mˆ eme est perdu. ce champ n’est qu’un compteur d´ ecr´ ement´ e d’une unit´ e` a chaque passage dans un routeur. TTL “ Time To Live ” 8 bits. nous utiliserons essentiellement ICMP. Lors du calcul de ce “ checksum ” ce champ est ` a 0. Les donn´ ees sont fragment´ ees car les datagrammes peuvent avoir ` a traverser des r´ eseaux avec des MTU plus petits que celui du premier support physique employ´ e. un peu comme le champ “ type ” d’une trame Ethernet. 255 secondes maximum de temps de vie pour un datagramme sur le net. 0x00 0x02 0x04 0x10 0x08 Service normal Minimiser le coˆ ut Maximiser la qualit´ e Minimiser le d´ elai Maximiser le d´ ebit Transfert banal “ news ” (nntp) ICMP Session telnet Transfert ftp 45 IDENTIFICATION. des datagrammes d’un transfert de fichier (ftp) peuvent avoir ` a laisser passer un datagramme rep´ er´ e comme contenant des caract` eres frapp´ es au clavier (session telnet). FLAGS et FRAGMENT OFFSET Ces mots sont pr´ evus pour contrˆ oler la fragmentation des datagrammes.Description de l’en-tˆ ete La taille des donn´ ees est donc ` a calculer par soustraction de la taille de l’en-tˆ ete. Par exemple.

Pour des raisons de s´ ecurit´ e.. 2. Il peut avoir ` a fragmenter les donn´ ees de taille sup´ erieure au MTU du support physique ` a employer. . Historiquement ces options ont ´ et´ e pr´ evues d` es le d´ ebut mais leur impl´ ementation n’a pas ´ et´ e termin´ ee. En conclusion partielle que peut-on dire du travail de la couche IP ? 1. IP OPTIONS 24 bits pour pr´ eciser des options de comportement des couches IP travers´ ees et destinatrices.. Certains sites consid` erent mˆ eme comme suspects les datagrammes contenants des “ IP OPTIONS ” ! PADDING Remplissage pour aligner sur 32 bits. la tendance est d’ignorer ce champ. Les options les plus courantes concernent : – Des probl` emes de s´ ecurit´ e – Des enregistrements de routes – Des enregistrements d’heure – Des sp´ ecifications de route ` a suivre – . on verra plus loin de quelle mani` ere. . C’est son travail principal. .46 Protocole IP DESTINATION ADDRESS Adresse IP du destinataire du datagramme. Il consiste ` a router les datagrammes en les acheminant “ au mieux ”.

A G1 802. La pr´ esence ` a 1 de ce bit interdit la fragmentation dudit datagramme par la couche IP qui en aurait besoin. Par exemple cette valeur est de 1500 pour une trame Ethernet. Les fragments deviennent des datagrammes ` a part enti` ere. C’est une situation de blocage. . due ` a la pr´ esence active du bit “ Don’t Fragment bit ” du champ FLAGS de l’en-tˆ ete IP. un bloc de 1481 octets sur Ethernet sera d´ ecompos´ e en un datagramme de 1480 (1480 + 20 = 1500) et un datagramme de 1 octet ! Il existe une exception ` a cette op´ eration. . 3. Rien ne s’oppose ` a ce qu’un fragment soit ` a nouveau fragment´ e. il n’est r´ eassembl´ e que par la couche IP destinatrice finale. si la couche IP doit transmettre un bloc de donn´ ees de taille sup´ erieure au MTU ` a employer. le “ Maximum Transfert Unit ”.2 (1492) X25 (128) B G2 Ethernet (1500) figure IV. Dans ces conditions.). 2.2 Fragmentation IP La couche de liaison (Couche 2 “ Link ”) impose une taille limite. . elle peut ˆ etre de 256 avec SLIP (“ Serial Line IP ”) sur liaison s´ erie (RS232. – Cette op´ eration est absolument transparente pour les couches de transport qui utilisent IP. Cela implique trois remarques : 1.Fragmentation IP 47 1.03 Fragmentation – Quand un datagramme est fragment´ e. il y a fragmentation ! Par exemple. la couche ´ emettrice est tenue au courant par un message ICMP (consultez le paragraphe 4) Fragmentation needed but don’t fragment bit set et bien sˆ ur le datagramme n’est pas transmis plus loin. La taille des datagrammes re¸ cus par le destinataire final est directement d´ ependante du plus petit MTU rencontr´ e.

un des bits du champ FLAGS est positionn´ e ` a 1 pour indiquer “ More fragment ” ! Ce champ a une longueur de 3 bits. – Mais si un fragment manque. chaque fragment est identifi´ e de mani` ere unique. Offset : données transmises Ce qui reste à transmettre Le fragment à transmettre figure IV. . – Les donn´ ees ont une taille quelconque. La figure IV.05 r´ esume l’op´ eration de fragmentation d’un datagramme IP. Cet offset est cod´ e sur 13 bits. – Chaque fragment est un datagramme ind´ ependant. la totalit´ e du datagramme est perdu car aucun m´ ecanisme de contrˆ ole n’est impl´ ement´ e pour cela dans IP. sauf pour le dernier fragment.04 Pour tous les fragments : – Les donn´ ees doivent faire un multiple de 8 octets. Cette valeur est inscrite dans le champ IDENTIFICATION. – Ils arrivent ` a destination. FRAGMENT OFFSET contient l’offset du fragment. relativement au datagramme initial. R´ eassemblage – Tous les datagrammes issus d’une fragmentation deviennent des datagrammes IP comme (presque) les autres. dupliqu´ es. susceptible d’ˆ etre ` a son tour fragment´ e. ´ evidement. – Le champ TOTAL LENGTH change. S’il y a encore des fragments.48 Protocole IP – Quand un datagramme est fragment´ e. – il y a suffisamment d’information dans l’en-tˆ ete pour r´ eassembler les fragments ´ epars. Pour le dernier fragment : – FLAGS est remis ` a z´ ero. IP doit faire le tri. relativement au datagramme initial. peut ˆ etre dans le d´ esordre.

05 IDENTIFICATION FLAG OFFSET TOTAL LENGTH HEADER CHECKSUM H1 I MF 0 H +N C1 H2 I MF N H +N C2 H3 I MF 2×N H +N C3 H4 I MF 3×N H +N C4 H5 I 0 4×N H +M C5 Notez les variations de certains champs de l’en-tˆ ete : 1. 4. sauf cas particulier. FLAG est 0 pour le dernier datagramme 3. reste de la division entière de L par 8. IDENTIFICATION est le mˆ eme pour tous 2. . L octets à transmettre figure IV. 5. HEADER CHECKSUM change ` a chaque fois car l’OFFSET change (rappel : il ne tient pas compte des donn´ ees). ici N. TOTAL LENGTH est g´ en´ eralement diff´ erent pour le dernier fragment. OFFSET croˆ ıt de la taille du fragment.Fragmentation IP Datagramme initial H 0 N multiple entier de 8 N−1 N H1 49 5 datagrammes différents H2 H3 H4 H5 2N 3N 4N M.

il est d´ efinie dans la RFC 826. Remarque importante : Cette information n’a pas de sens dans le cadre d’une liaison de type “ point ` a point ” avec un protocole tel que ppp. 2. son adresse (champ destinataire) est donc remplac´ ee par une adresse de “ broadcast ” (48 bits ` a 1).1 Fonctionnement A demande à toutes les stations : étant donné l’adresse IP de B.50 Protocole IP 2 Protocole ARP ARP est l’acronyme de “ Address Resolution Protocol ”.06 la station Ethernet A (IA . que vaut son adresse physique ? A X B Y Broadcast Ethernet (vs IEEE) figure IV. deux machines peuvent communiquer ⇐⇒ elles connaissent leurs adresses physiques respectives. la solution ` a ce probl` eme passe par l’usage du protocole ARP. d´ edi´ e` a ARP. – L’usage de ARP est compl` etement transparent pour l’utilisateur. PA ) a besoin de connaitre l’adresse physique de la station Ethernet B (IB . Toutes les machines du LAN ´ ecoutent cet ´ echange et peuvent mettre ` a jour leur table de conversion (adresse IP adresse Ethernet) pour la machine 3 cf chapitre I “ R´ eseaux locaux ” . L’adresse de la machine qui doit r´ epondre ´ etant l’objet de la question. celle-ci ´ etant ind´ ependante de la partie mat´ erielle il faut avoir un moyen d’´ etablir un lien entre ces deux constituants. – La norme Ethernet (vs IEEE) suppose l’identification unique de chaque carte construite et vendue3 . On suppose qu’une machine connait sa propre adresse physique par un moyen qui n’est pas d´ ecrit ici (ne fait pas partie du protocole). – Le probl` eme ` a r´ esoudre est issu de la constatation qu’une adresse IP n’a de sens que pour la suite de protocole TCP/IP . PB ). pour ce faire elle envoie un datagramme de format sp´ ecial (cf paragraphe suivant).06 Sur la figure IV. – Sur une mˆ eme liaison physique (lire plus loin “ mˆ eme LAN ”). si les adresses physiques ne sont pas d´ ej` a connues (on verra pourquoi plus loin). Ethernet par exemple. qui lui permet de poser la question (“ Arp question ”) ` a l’ensemble des machines actives. – Lors du premier ´ echange entre 2 machines d’un mˆ eme LAN.

Sur la figure IV.168.168.14) (192. A X B Y B répond directement à A en lui communiquant son adresse physique.192.192.07 la r´ eponse de B est du type “ unicast ”.192.168. Il n’est pas besoin d’utiliser ARP pr´ ealablement ` a chaque ´ echange.168. est ainsi utilis´ e au maximum de ses possibilit´ es. 51 Réponse unicast. car heureusement le r´ esultat est m´ emoris´ e.36) at at at at at at at at at 8:0:9:85:76:9c 8:0:9:85:76:bd 8:0:9:a:f9:aa 8:0:9:a:f9:bc 0:4f:49:1:28:22 permanent 8:0:9:70:44:52 0:20:af:2f:8f:f1 0:4f:49:1:36:50 permanent 0:60:8c:81:d5:1b Enfin.fr desiree.fr espoirs.fr pythie. Remarque : quand une station Ethernet ne r´ epond plus (cf ICMP) il y a suppression de l’association adresse IP . Le “ broadcast ”. coˆ uteux en bande passante.168.chezmoi.chezmoi.34) (192. du fait de l’utilisation de “ broadcast ” physiques.192.168.fr plethore.33) (192.10) (192. .Protocole ARP A. que nous ´ evoquerons succintement ` a la fin de ce paragraphe. . et c’est un point tr` es important.fr (192.fr ramidus.chezmoi.fr byzance.chezmoi.168.fr gateway.35) (192.chezmoi.192.chezmoi.13) (192.chezmoi.192.chezmoi.fr ramidus. figure IV. La commande arp -a sous Unix permet d’avoir le contenu de la table de la machine sur laquelle on se trouve. Il existe cependant un cas particulier : le proxy ARP.168.12) (192.adresse MAC. En r` egle g´ en´ erale la dur´ ee de vie d’une adresse en m´ emoire est de l’ordre de 20 minutes et chaque utilisation remet ` a jour ce compteur. .11) (192.168. par exemple : $ arp -a soupirs.192. les messages ARP ne franchissent pas les routeurs.192.07 Si la station B ne r´ epond pas.chezmoi.192. la station continuera ` a poser la question ` a intervals r´ eguliers pendant un temps infini.

3) SENDER ADR (0.08 Le datagramme ci-dessus est encapsul´ e dans une trame physique du type 0x08064 . PROTOCOL TYPE pour sp´ ecifier le type d’adresse logique dans les champs SENDER ADR et TARGET ADR.02 du chapitre d’introduction ` a IP (page 23) .1) TARGET HA (2 à 5) TARGET ADR (0 à 3) figure IV. Question 1 3 R´ eponse 2 4 ARP RARP SENDER HA adresse physique de l’´ emetteur SENDER ADR adresse logique de l’´ emetteur TARGET HA adresse physique du destinataire TARGET ADR adresse logique du destinataire 4 voir ou revoir la figure II. HARDWARE TYPE pour sp´ ecifier le type d’adresse physique dans les champs SENDER HA et TARGET HA. il est n´ ecessaire car la trame est la mˆ eme pour toutes les op´ erations des deux protocoles qui l’utilisent. c’est 0x0800 (mˆ eme valeur que dans la trame Ethernet) pour des adresses IP. OPERATION ce champ pr´ ecise le type de l’op´ eration.5) SENDER ADR (2.2 Format du datagramme 31 HARDWARE TYPE 16 15 PROTOCOL TYPE 0 HLEN 1 HLEN 2 OPERATION SENDER HA (0 à 3) SENDER HA (4. c’est 1 pour Ethernet.52 Protocole IP 2. HLEN 1 pour sp´ ecifier la longueur de l’adresse physique (6 octets pour Ethernet). HLEN 2 pour sp´ ecifier la longueur de l’adresse logique (4 octets pour IP).1) TARGET HA (0.

Sur une machine Unix configur´ ee en serveur RARP les correspondances entres adresses IP et adresses physiques sont enregistr´ ees dans un fichier nomm´ e g´ en´ eralement /etc/bootptab.3 Protocole RARP 53 2. – Pour communiquer en TCP/IP une machine a besoin d’au moins une adresse IP. . .3 Proxy ARP Le proxy ARP permet l’extension du lan ` a des hˆ otes qui ne lui sont pas directement physiquement reli´ es. .. celles qui sont habilit´ es ` a r´ epondre (serveurs RARP) compl` etent le datagramme et le renvoient directement (“ unicast ”) ` a l’´ emetteur de la requˆ ete puisqu’elle connaissent son adresse physique. – Pour certains ´ equipements cette op´ eration n’est pas possible voire mˆ eme non souhait´ ee par l’administrateur du r´ eseau : – Terminaux X Windows – Stations de travail “ diskless ” – Imprimante en r´ eseau – “ Boites noires ” sans capacit´ e autonome de d´ emarrage – PC en r´ eseau – . il est d´ efini dans la RFC 903 (BOOTP et DHCP en sont des alternatives avec plus de possibilit´ es). l’id´ ee de ce protocole est de la demander au r´ eseau. Ce subterfuge est rendu possible apr` es configuration ad´ equate de la passerelle de raccordement. num´ eris. Un exemple tr` es courant est celui d’un hˆ ote qui acc` ede ` a un r´ eseau via un dialup (rtc. – Le protocole RARP est adapt´ e de ARP : l’´ emetteur envoie une requˆ ete RARP sp´ ecifiant son adresse physique dans un datagramme de mˆ eme format que celui de ARP et avec une adresse de “ broadcast ” physique. – Normalement une machine qui d´ emarre obtient son adresse IP par lecture d’un fichier sur son disque dur (ou depuis sa configuration fig´ ee dans une m´ emoire non volatile). comme s’il y ´ etait physiquement raccord´ e.). mais qui s’y rattachent par exemple au travers d’une passerelle. 3 Protocole RARP RARP est l’acronyme de “ Reverse Address Resolution Protocol ”.. Le NetID de son adresse IP peut alors ˆ etre le mˆ eme que celui du r´ eseau rejoint. Le champ OPERATION contient alors le code de “ RARP question ” – Toutes les stations en activit´ e re¸ coivent la requˆ ete..

1 Le syst` eme de messages d’erreur Dans le syst` eme que nous avons d´ ecrit. mais la figure II.02 du chapitre d’introduction ` a IP (page 23) montre que le niveau Application peut ´ egalement avoir un acc` es direct ` a ce protocole. 5 6 voir ou revoir la figure II. des ´ echanges entres hˆ otes sont tout ` a fait possibles. 4. Le mˆ eme m´ ecanisme est valable pour les deux types d’´ echanges. Si une passerelle ne peut router ou d´ elivrer directement un paquet ou si un ´ evenement anormal arrive sur le r´ eseau comme un trafic trop important ou une machine indisponible. la plupart des cas sans en informer les couches sup´ erieures (certaines applications utilisent ICMP6 ). Les paquets circulent d’une passerelle vers un autre jusqu’` a en trouver une qui puisse les d´ elivrer directement ` a un hˆ ote. d´ econnect´ ees du r´ eseau ou incapables de router les paquets parcequ’en surcharge. Le syst` eme fonctionne parfaitement si toutes les machines sont en ordre de marche et si toutes les tables de routage sont ` a jour. Il peut y avoir des rupture de lignes de communication. Malheureusement c’est une situation id´ eale. il faut pouvoir en informer l’hˆ ote qui a ´ emis le paquet. Ainsi. chaque passerelle et chaque hˆ ote op` ere de mani` ere autonome. C’est pourquoi est ajout´ e syst´ ematiquement un m´ ecanisme de gestion des erreurs connu sous le doux nom de ICMP. quand un message d’erreur arrive pour un paquet ´ emis. . en pannes. des machines peuvent ˆ etre ` a l’arrˆ et.02 du chapitre d’introduction ` a IP (page 23) Mˆ eme figure qu’au point pr´ ec´ edent . c’est la couche IP elle-mˆ eme qui g` ere le probl` eme. ICMP n’est pas restreint aux ´ echanges passerelleshˆ otes. Celui-ci pourra alors r´ eagir en fonction du type de probl` eme rencontr´ e. Nous avons vu que le protocole IP ne v´ erifie pas si les paquets ´ emis sont arriv´ es ` a leur destinataire dans de bonnes conditions. Des paquets IP peuvent alors ne pas ˆ etre d´ elivr´ es ` a leur destinataire et le protocol IP lui-mˆ eme ne contient rien qui puisse permettre de d´ etecter cet ´ echec de transmission. ICMP est un m´ ecanisme de contrˆ ole des erreurs au niveau IP. route et d´ elivre les datagrammes qui arrivent sans coordination avec l’´ emetteur.54 Protocole IP 4 Protocole ICMP ICMP est l’acronyme de “ Internet Control Message Protocol ”. il est historiquement d´ efini dans la RFC 950. Initialement pr´ evu pour permettre aux passerelles d’informer les hˆ otes sur des erreurs de transmission. Il fait partie de la couche IP5 et porte le num´ ero de protocole 1. .

.2 Format des messages ICMP Chaque message ICMP traverse le r´ eseau dans la partie DATA d’un datagramme IP : En−tete IP Message ICMP figure IV. Il n’´ etait donc pas possible de rester au niveau physique du r´ eseau (` a l’inverse de ARP ou RARP).Protocole ICMP 55 4. est que les messages peuvent avoir ` a traverser plusieurs r´ eseaux avant d’arriver ` a leur destination finale. La raison de l’utilisation d’IP pour d´ elivrer de telles informations. dans ce cas on ne g´ en` ere pas d’erreur sur l’erreur ! Il est important de bien voir que puisque les messages ICMP sont encapsul´ es dans un datagramme IP. pour permettre au destinataire du message d’identifier quel paquet est ` a l’origine du probl` eme. CODE compl` ete l’information du champ pr´ ec´ edent. La figure IV.10 d´ ecrit le format du message ICMP : 31 TYPE 24 23 CODE 16 15 CHECKSUM 0 EN−TETE du message original . figure IV. CHECKSUM est utilis´ e avec le mˆ eme m´ ecanisme de v´ erification que pour les datagrammes IP mais ici il ne porte que sur le message ICMP (rappel : le checksum de l’en-tˆ ete IP ne porte que sur son en-tˆ ete et non sur les donn´ ees v´ ehicul´ ees). Il y a toutefois une exception : il peut arriver qu’un paquet d’erreur rencontre lui-mˆ eme un probl` eme de transmission. .10 Chaque message ICMP a un type particulier qui caract´ erise le probl` eme qu’il signale.09 La cons´ equence directe est que les messages ICMP sont rout´ es comme les autres paquets IP au travers le r´ eseau. les messages ICMP donnent toujours l’en-tˆ ete IP et les 64 premiers bits (les deux premiers mots de quatre octets) du datagramme qui est ` a l’origine du probl` eme. ICMP n’est pas consid´ er´ e comme un protocole de niveau plus ´ elev´ e. En addition. Un en-tˆ ete de 32 bits est compos´ e comme suit : TYPE contient le code d’erreur.

La vitesse est donc ajust´ ee par une sorte d’apprentissage rustique. Il existe onze valeurs de TYPE diff´ erentes. Dans ce cas la machine en question envoie un paquet ICMP “ source quench ” qui est interpr´ et´ e de la fa¸ con suivante : L’´ emetteur ralenti le rythme d’envoi de ses paquets jusqu’` a ce qu’il cesse de recevoir ce message d’erreur. . trop de trafic ` a suivre. Puis graduellement il augmente le d´ ebit. 7 Pour des raisons de s´ ecurit´ e certaines machines peuvent ne pas r´ epondre. il est rejet´ e.. N’importe quelle machine qui re¸ coit une telle requˆ ete doit formuler un 7 message ICMP “ echo reply ” en retour Ce m´ ecanisme est extrˆ emement utile. Echo reply (0) ” Une machine envoie un message ICMP “ echo request ” pour tester si son destinataire est accessible. la plupart des impl´ ementations le propose sous forme d’un utilitaire (ping sous Unix). . ceux qui sont le plus utilis´ es. .11 “ Destination Unreachable (3) ” Quand une passerelle ne peut pas d´ elivrer un datagramme IP. elle envoie un message ICMP “ destination unreachable ” ` a l’´ emetteur. “ Echo Request (8). Echo request(8) IP IP A Echo reply(0) B Y figure IV. aussi longtemps que le message “ source quench ” ne revient pas . Dans ce cas le champ CODE compl` ete le message d’erreur avec : 0 “ Network unreachable ” 1 “ Host unreachable ” 2 “ Protocol unreachable ” 3 “ Port unreachable ” 4 “ Fragmentation needed and DF set ” 5 “ Source route failed ” “ Source Quench (4) ” Quand un datagramme IP arrive trop vite pour une passerelle ou un hˆ ote.56 Protocole IP 4. Un paquet arrive “ trop vite ” quand la machine qui doit le lire est congestionn´ ee.3 Quelques types de messages ICMP Ce paragraphe examine quelques uns des principaux types de messages ICMP.

Afin de pr´ evenir le cas ou un paquet circulerait ` a l’infini d’une passerelle ` a une autre.4. ainsi quand une passerelle d´ etecte une erreur de routage. la donn´ ee initiale dans la table de routage peut s’av´ erer incorrecte.. Elle redirige le paquet vers la bonne destination. Les passerelles connaissent de bien meilleures routes que les hˆ otes euxmˆ emes. chaque passerelle d´ ecr´ emente ce compteur et rejette le paquet quand le compteur arrive ` a z´ ero et envoie un message ICMP ` a l’´ emetteur pour le tenir au courant. “ Time exceeded (11) ” Chaque datagramme contient un champ TTL dit “ TIME TO LIVE ” appell´ e aussi “ hop count ”. Le syst` eme d’exploitation les lit au d´ emarrage sur le syst` eme de fichiers et l’administrateur en change de temps en temps les ´ el´ ements. “ Redirect (5) ” Les tables de routage (Voir le paragraphe 6) des stations restent assez statiques durant de longues p´ eriodes. “ Router solicitation (10) vs Router advertisement (9) ” Il s’agit d’obtenir ou d’annoncer des routes. nous verrons cela plus en d´ etail dans le paragraphe 6. 57 . Cette redirection ne r` egle pas les probl` emes de routage car elle est limit´ ee aux interactions entres passerelles et hˆ otes directement connect´ es. Si entre deux modifications une destination change d’emplacement. Le champ CODE du message ICMP peut avoir les valeurs suivantes : 0 “ Redirect datagram for the Net ” 1 “ Redirect datagram for the host ” 2 . elle fait deux choses : 1. C’est donc une s´ erieuse entorse ` a la r` egle d’ind´ ependance des couches. Elle envoie ` a l’´ emetteur du paquet un message ICMP “ redirect ” 2. La propagation des routes aux travers des r´ eseaux multiples est un autre probl` eme.Protocole ICMP Ce type de paquet ICMP a donc tendance ` a vouloir r´ eguler le flux des datagrammes au niveau IP alors que c’est une fonctionnalit´ e de la couche de transport (TCP)..

12. 2 pour dire qu’il s’agit de la r´ eponse d’un hˆ ote. Sa raison d’ˆ etre est que les datagrammes ayant une adresse multicast8 sont ` a destination d’un groupe d’utilisateurs dont l’´ emetteur ne connait ni le nombre ni l’emplacement. Checksum Le checksum est calcul´ e comme celui d’ICMP. sa taille est fixe (contrairement ` a ICMP) : seulement 2 mots de 4 octets.. IGMP est encapsul´ e dans IP10 avec le protocole num´ ero 2.edu/ietf-audiocast-article. l’acronyme de “ Internet Group Management Protocol ”. donc consommatrices de bande passante.. 31 28 27 24 23 16 15 0 Vers.02 du chapitre I d’introduction ` a IP (page 23) 9 8 . 10 voir ou revoir la figure II. 1 pour dire qu’il s’agit d’une question (query d’un routeur). il est primordial que les routeurs aient un moyen de savoir s’il y a des utilisateurs de tel ou tel groupe sur les LANs directement accessibles pour ne pas encombrer les bandes passantes associ´ ees avec des flux d’octets que personne n’utilise plus ! 5. Type Inutilisé Checksum sur 16 bits Adresse du groupe sur 32 bits figure IV.12 Version Version 1.ps relate cette exp´ erience. Adresse C’est l’adresse multicast (classe D) ` a laquelle appartient l’hˆ ote qui r´ epond. L’usage du multicast ´ etant par construction d´ edi´ e 9 aux applications comme la radio ou la vid´ eo sur le r´ eseau . Inutilis´ e .1 Description de l’en-tˆ ete IGMP est un protocole de communication entre les routeurs susceptibles de transmettre des datagrammes multicast et des hˆ otes qui veulent s’enregistrer dans tel ou tel groupe. Le papier ftp ://venera.isi. est historiquement d´ efinie dans l’Annexe I de la RFC 1112.58 Protocole IP 5 Protocole IGMP IGMP. Comme le montre la figure IV. Voir page 39 La premi` ere exp´ erience ` a grande ´ echelle du multicast fut sans doute la conf´ erence de l’IETF en mars 1992. Type Ce champ prend deux valeurs.

0. Les hˆ otes. 11 “ tous les hˆ otes du LAN ” . 2. Pour rafraˆ ıchir leur connaissance des besoins de routage les routeurs envoient leurs questions avec une fr´ equence tr` es faible de l’ordre de la minute.13 Il y a deux exceptions ` a la strat´ egie ci-dessus. A Type= Report TTL=1 Src=IP A Groupe=Adr. Ces questions sont envoy´ ees ` a tous les hˆ otes des LANs directement raccord´ es ` a l’aide de l’adresse multicast du groupe 11 224. groupe M. et pour chaque LAN.0.1. groupe M. dont les interfaces ont ´ et´ e correctement configur´ ees. remarquez au passage la valeur des adresses. Tous les hˆ otes susceptibles de joindre un groupe multicast ´ ecoutent ce groupe par hypoth` ese.1 IP Type=Query Groupe=0. La figure IV. Dst=Adr. La r´ eponse envoy´ ee est ´ ecout´ ee par tous les membres du groupe appartenant au mˆ eme LAN. Pour chaque groupe auquel il appartient. La premi` ere est que si une question est re¸ cue alors que le compte ` a rebours pour r´ epondre ` a une r´ eponse est en cours. Tout ceux qui s’appr´ etaient ` a envoyer une telle r´ eponse au serveur en interrompent le processus pour ´ eviter une redite.Protocole IGMP 59 5.0. avant de renvoyer sa r´ eponse. calcul´ e al´ eatoirement ` a partir de l’adresse IP unicast de l’interface qui a re¸ cu la question.2 Fonctionnement du protocole La RFC 1112 pr´ ecise que les routeurs multicast envoient des messages de questionnement (Type=Queries) pour reconnaˆ ıtre quels sont les ´ eventuels hˆ otes appartenant ` a quel groupe. La deuxi` eme est qu’il n’y a jamais de d´ elai appliqu´ e pour l’envoi de datagramme portant l’adresse du groupe de base 224. Afin d’´ eviter une “ tempˆ ete de r´ eponses ” chaque hˆ ote met en œuvre la strat´ egie suivante : 1.13 montre un tel ´ echange.0.0. Un hˆ ote ne r´ epond pas imm´ ediatement ` a la question re¸ cue. il attend un d´ elais compris entre 0 et 10 secondes. r´ epondent ` a une question par autant de r´ eponses que de groupes auxquels ils appartiennent sur l’interface r´ eseau qui a re¸ cu la question.0.1 encapsul´ e dans un datagramme IP ayant un champ TTL=1. Le routeur ne re¸ coit ainsi qu’une seule r´ eponse pour chaque groupe. il n’est pas interrompu.0. TTL=1 Src= IPG Dst=224.0. ce qui lui suffit pour justifier le routage demand´ e.0 IGMP G figure IV.

0. plutˆ ot que d’attendre une question du routeur. En cons´ equence les applications qui utilisent le multicast (avec une adresse sup´ erieure ` a 224. Au cas o` u cette r´ eponse se perdrait il est recommand´ e d’effectuer une r´ e´ emission dans un court d´ elai. Quand un hˆ ote rejoint un groupe.3 Fonctionnement du Mbone Pr´ ecisions en cours.0. Il n’y a pas de message ICMP sur les datagrammes ayant une adresse de destination du type multicast. Les routeurs ne doivent pas transmettre de tels datagrammes. 5. Si aucune r´ eponse ne leur parvient pour tel ou tel groupe demand´ e pr´ ec´ edement.0 et 224. . Il n’y a pas de report pour quitter un groupe. 2. 4. .225) pour d´ ecouvrir des services.0. doivent avoir une strat´ egie pour augmenter la valeur du champ TTL en cas de non r´ eponse. Remarques : 1.0. le routage s’interrompt.60 Protocole IP afin de pr´ eserver au maximum la bande passante du r´ eseau.225 est d´ edi´ ee aux applications utilisant une valeur de 1 pour le champ TTL (administration et services au niveau du LAN). 3. le seul trafic IGMP est celui des hˆ otes demandant ` a rejoindre tel ou tel groupe. La plage d’adresses multicast entre 224. Sur un LAN sans routeur pour le multicast.0. .0. il envoie imm´ ediatement une r´ eponse (type=report) pour le groupe (les) qui l’int´ eresse.

.org/∼picobsd/. Il est absolument n´ ecessaire de franchir une passerelle connue d’avance ou d’employer un chemin par d´ efaut. Cette op´ eration est beaucoup plus d´ elicate que la pr´ ec´ edente car il faut s´ electionner une passerelle. Le routage indirect Le destinataire n’est pas sur le mˆ eme LAN comme pr´ ec´ edement.6 Routage IP 61 6 Routage IP Ce paragraphe d´ ecrit de mani` ere succincte le routage des datagrammes. de faire appel ` a une machine Unix pour ce faire12 . o` u le site du projet Zebra de GNU http ://www. Sur l’Internet. mais par des routeurs dont c’est la fonction par d´ efinition (et qui sont donc plus efficace et plus perfectionn´ es pour cette tˆ ache). ou au sein de toute entit´ e qui utilise IP. . les d´ elais de propagation.org/ 12 . le trajet le plus court.zebra. En effet. La diff´ erence entre un “ routeur ” et un “ hˆ ote ” est que le premier est capable de transmettre un datagramme d’un interface ` a un autre et pas le deuxi` eme. le routage s’appuie sur cette partie de l’adresse IP du destinaon peut consulter par exemple http ://www. encapsule le datagramme dans une trame et l’envoie. L’´ emetteur trouve l’adresse physique du correspondant (ARP). On divise le routage en deux grandes familles : Le routage direct Il s’agit de d´ elivrer un datagramme ` a une machine raccord´ ee au mˆ eme LAN. Nous examinerons donc le probl` eme (simplifi´ e) du routage dans ce dernier cas. la taille des datagrammes. C’est le cas le plus courant. Cette op´ eration est d´ elicate si les machines qui doivent dialoguer sont connect´ ees ` a de multiples r´ eseaux physiques. par exemple sur l’Internet qui regroupe des centaines de milliers de r´ eseaux diff´ erents. D’un point de vue id´ eal ´ etablir une route pour des datagrammes devrait tenir compte d’´ el´ ements comme la charge du r´ eseau. et c’est son travail le plus important.freebsd. Le routage des datagrammes se fait au niveau de la couche IP. Parceque le routage est une op´ eration fondamentalement orient´ ee “ r´ eseau ”. Toutefois il est courant dans les “ petits r´ eseaux ”. ou quand le probl` eme ` a r´ esoudre reste simple. les datagrammes ne sont pas rout´ es par des machines Unix. le type de service demand´ e. l’´ etat des liaisons. Toutes les machines multiprocessus sont th´ eoriquement capables d’effectuer cette op´ eration.La pratique est plus rudimentaire ! Il s’agit de transporter des datagrammes aux travers de multiples r´ eseaux physiques. donc aux travers de multiples passerelles. toutes les machines ` a atteindre ne sont pas forc´ ement sur le mˆ eme r´ eseau physique. Les lecteurs soucieux d’en savoir plus sur ce probl` eme tr` es vaste pourront se repporter ` a la bibliographie en fin de chapitre.

14 Cette table est tr` es fr´ equemment utilis´ ee par IP : sur un serveur plusieurs centaines de fois par secondes.62 Protocole IP taire. la couche IP examine les informations contenues dans sa table de routage : 6. invoqu´ ee dans les scripts de lancement du syst` eme. La couche IP d´ etermine celle-ci en examinant les bits de poids fort qui conditionnent la classe d’adresse et donc la segmentation “ network.host ”.1 Table de routage Sous Unix toutes les op´ erations de routage se font grˆ ace ` a une table. – Par des messages “ ICMP redirect ”. – Dynamiquement avec les d´ emons de routage “ routed ” ou “ gated ” (la fr´ equence de mise ` a jour est typiquement de l’ordre de 30 sec. Dans certain cas (CIDR) le masque de sous r´ eseau est aussi employ´ e. qui se trouve dans le noyau lui-mˆ eme. et en fonctionnement : – Au coup par coup avec la commande route. Muni de ce num´ ero de r´ eseau. . dite “ table de routage ”. La figure IV.). ` a partir du shell (administrateur syst` eme uniquement).14 r´ esume la situation : Démons DHCP de routage Commande route Commande netstat ICMP Algorithme de routage Table de routage Couche IP figure IV. Comment est-elle cr´ ee ? Au d´ emarrage avec la commande route.

1 192.168.192. Chaque franchissement d’un routeur compte pour un saut. Les drapeaux (“ flags ”) les plus courants : C c D G H L M S U W 13 La route est g´ en´ er´ ee par la machine. la m´ etrique de la route par d´ efaut est 1. La route est active.33 192.168.Table de routage IP La commande netstat -rn permet de la visualiser au niveau de l’interface utilisateur (“ Application layer ”) : $ netstat -rn Routing tables Internet: Destination default 127. De plus.192. La route est le r´ esultat d’un clˆ onage.192/27 192. sinon c’est une route directe.168.192.34 192. Dans la table ci-dessus.14 192.192.168.15 192. La route est vers une machine.168.168.192.0.0.168.168.35 192.192. qui permet le choix d’une route plutˆ ot qu’une autre en fonction de cette valeur.0.168.192. chaque route qui d´ esigne une passerelle (ici la route par d´ efaut) doit s’accompagner d’un nombre de sauts (“ hop ”). d’une colonne destination.192. La route d´ esigne une passerelle. La route a ´ et´ e cr´ ee dynamiquement (d´ emons de routage).168. ` a l’usage.192.12 192.192.11 192.36 127. Des colonnes Refs. La route a ´ et´ e modifi´ ee par un “ redirect ”.192. ou encore m´ etrique.192.168.10 192.13 192. sinon elle est vers un r´ eseau.32/27 192.168.168. Use et Netif .36 63 Gateway 192.1 link#1 8:0:9:85:76:9c 8:0:9:85:76:bd 8:0:9:88:8e:31 8:0:9:a:f9:bc 0:4f:49:1:28:22 link#1 link#2 8:0:9:70:44:52 0:20:af:2f:8f:f1 0:4f:49:1:36:50 link#2 Flags UGS UH UC UHLW UHLW UHLW UHLW UHLW UHLW UC UHLW UHLW UHLW UHLW On peut m´ emoriser cette table comme ´ etant essentiellement compos´ ee d’une colonne origine. La route a ´ et´ e ajout´ ee manuellement. Remarque : la sortie de la commande netstat -rn ci-dessus a ´ et´ e sim13 plifi´ ee.0. D´ esigne la conversion vers une adresse physique (cf ARP).

les routes statiques sont celles cr´ ees au d´ emarrage de la machine ou ajout´ ees manuellement par l’administeur syst` eme. La figure IV.16 met en situation plusieurs r´ eseaux et les passerelles qui les relient. on peut reconnaˆ ıtre que l’administrateur syst` eme n’a configur´ e qu’une seule 14 route “ manuellement ” .35 link 2 Subnet 001 . toutes les autres lignes ont ´ et´ e d´ eduites par la couche IP elle-mˆ eme. mˆ eme si cela ´ etait concevable.2 Routage statique Comme nous avons pu le deviner au paragraphe pr´ ec´ edent. Le nombre de machines possibles ` a atteindre potentiellement sur l’Internet est beaucoup trop ´ elev´ e pour que chaque machine puisse esp´ erer en conserver l’adresse. cette information ne serait jamais ` a jour donc inutilisable.6). elle connait (ou est suppos´ ee connaˆ ıtre) l’adresse d’une passerelle suppos´ ee ˆ etre mieux inform´ ee pour transmettre ce datagramme. Dans l’exemple de sortie de la commande netstat du paragraphe 6. en cours de fonctionnement.64 Protocole IP La figure 15 pr´ ecise l’architecture du r´ eseau autour de la machine sur laquelle a ´ et´ e ex´ ecut´ e le netstat.36 R figure IV. Si une machine ne peut pas router un datagramme. 14 . nous verrons pourquoi au paragraphe concernant l’interface de “ loopback ” (6.14 link 1 M . Plutˆ ot que d’envisager la situation pr´ ec´ edente on pr´ ef` ere restreindre l’´ etendue du “ monde connu ” et utiliser la “ strat´ egie de proche en proche ” pr´ ec´ edement cit´ ee. qui plus est.1. Subnet 000 .15 6. Ce n’est pas tout ` a fait exact.

1 A B 1.10. Sinon Si IN apparait dans la table de routage. extrait de l’adresse IP.23 10 figure IV.168.192 R2 .16 Et voici une version tr` es simplifi´ ee des tables de routage statiques : Machine A default : 192. Sinon Si ID apparait comme une machine ` a laquelle une route sp´ eciale est attribu´ ee.168.3 Routeur R2 192.168.1. en fonction de sa table de routage. Si IN est un num´ ero de r´ eseau auquel M est directement reli´ ee : – Obtenir l’adresse physique de la machine destinatrice – Encapsuler le datagramme dans une trame physique et l’envoyer directement.1 Routeur R1 10 : 172.16 .251 R1 . .16.1.1 . M d´ esigne la machine sur laquelle s’effectue le routage.251 Machine B default : 10.192.10.16. router le datagramme en fonction.Routage statique .1. IN .1 Algorithme de routage Cet algorithme simplifi´ e r´ esume les op´ erations de la couche IP pour choisir une destination.1. Cette op´ eration est essentiellement bas´ ee sur le num´ ero de r´ eseau.192 : 172.1 65 172.10.3 192.10. router le datagramme en fonction. ID .1.

Le protocole utilis´ e par ces routeurs limitrophes est souvent EGP (“ Exterior Gateway Protocol ”) ou BGP (“ Border Gateway Protocol ”). Internet Core GGP Core Gateway EGP. Il existe de nombreux protocoles de routage dynamique dont certains sont aussi anciens que l’Internet. sujet ` a des changements fr´ equents de configuration. Sch´ ematiquement on peut imaginer l’Internet comme une hi´ erarchie de routeurs. Sinon D´ eclarer une erreur de routage (ICMP).OSPF External gateways Autonomous System Autonomous System figure IV. . Les routeurs principaux (“ core gateways ”) de cette architecture utilisent entres-eux des protocoles comme GGP (“ Gateway to Gateway Protocol ”).66 Protocole IP Sinon S’il existe une route par d´ efaut router le datagramme vers la passerelle ainsi d´ esign´ ee. N´ eanmoins tous ne conviennent pas ` a tous les types de probl` eme.Le routage dynamique est alors un bon moyen d’entretenir les tables de routages et de mani` ere automatique. il en existe une hi´ erarchie. En bordure de ces routeurs principaux se situent les routeurs qui marquent la fronti` ere avec ce que l’on nomme les “ Autonomous systems ”. . s’il est vaste et complexe.BGP Core Gateway RIP. Les protocoles .17 Au sein d’un syst` eme autonome on utilise un IGP (“ Interior Gateway Protocol ”) c’est ` a dire un “ protocole de gateways int´ erieurs ”. l’ensemble de ces routeurs forment ce que l’on nomme l’“ Internet Core ”. 6. c’est ` a dire des syst` emes de routeurs et de r´ eseaux qui poss` edent leurs m´ ecanismes propres de propagation des routes.3 Routage dynamique Si la topologie d’un r´ eseau offre la possibilit´ e de plusieurs routes pour atteindre une mˆ eme destination.

168. le d´ elais de 30 secondes est augment´ e d’une valeur al´ eatoire comprise entre 1 et 5 secondes. c’est ` a dire en comptant toutes les liaisons.10. Pour ´ eviter une “ tempˆ etes de mises ` a jours ”.Version 1 du protocole) et la RFC 1723 (1994 . la distance devient “ infinie ”. qui s’appuie sur un algorithme de calcul du chemin le plus court dans un graphe. Ainsi on peut avoir la situation suivante : Subnet 192.64 (netmask 0xFFFFFFE0) figure IV.11.18 .Routage dynamique les plus couramment employ´ es sont RIP (“ Routing Information Protocol ”) qui est simple ` a comprendre et ` a utiliser.168. ` a fr´ equence fixe (environ 30 secondes).4 Depuis la d´ efinition de RIPv2 (RFC 1723) les routes peuvent ˆ etre accompagn´ ees du masque de sous r´ eseau qui les caract´ erise. plus capable mais aussi beaucoup plus complexe ` a comprendre dans son mode de fonctionnement. Ainsi se propagent les tables de routes d’un bout ` a l’autre du r´ eseau. la longueur du chemin est ´ etablie en nombre de sauts (“ hop ”). ou m´ etrique. L’adresse IP utilis´ ee est une adresse de multipoint (“ multicast ”) comme nous verrons au paragraphe 6. Ce protocole est bas´ e sur des travaux plus anciens men´ es par la firme Xerox.192.224 (netmask 0xFFFFFFE0) 67 R1 Subnet 192. RIP utilise le concept de “ vecteur de distance ”. Chaque routeur ´ emet dans un datagramme portant une adresse IP de broadcast. Cette distance est exprim´ ee comme un nombre entier variant entre 1 et 15 .0 R2 Subnet 192. il est document´ e dans la RFC 1058 (1988 . Si une route n’est pas annonc´ ee au moins une fois en trois minutes.Version 2 du protocole). ou encore OSPF (“ Open Shortest Path First ”) plus r´ ecent. le contenu de sa table de routage et ´ ecoute celle des autres routeurs pour compl´ eter sa propre table. et la route sera retir´ ee un peu plus tard de la table (elle est propag´ ee avec cette m´ etrique).168. la valeur 16 est consid´ er´ ee comme l’infini et indique une mise ` a l’´ ecart de la route.192. Le graphe est celui des routeurs. entre la source et la destination. RIP RIP est apparu avec la version BSD d’Unix.168.0 R4 R3 Subnet 192.

0. Si entre deux annonces une route change.192. plutˆ ot que de configurer manuellement les routes statiques. il peut ˆ etre int´ eressant de faire de la “ d´ ecouverte automatique de routeurs ” (RFC 1256).0 192.168.4 D´ ecouverte de routeur et propagation de routes Au d´ emarrage d’une station.0. sauf si le routeur s’apprˆ etait ` a´ emettre une annonce.64 Destination R1 R1 R2 R3 Coˆ ut 1 1 2 3 Avec une route par d´ efaut qui est le routeur R2.11. La d´ ecouverte de routeur n’est pas un protocole de routage.168.0.2 (` a destination de tous les routeurs de ce LAN). Toutes les stations capables de comprendre le multicast (et convenablement configur´ ees pour ce faire) ´ ecoutent ces messages et mettent ` a jour leur table. ` A chaque route est associ´ e un niveau de pr´ ef´ erence et une dur´ ee de validit´ e. le m´ ecanisme de “ ICMP redirect ”.224 192.168.1.168. d´ efinis par l’administrateur du r´ eseau.192. son objectif est bien moins ambitieux : obtenir une route par d´ efaut.192. La constitution de cette table n’est possible qu’avec RIPv2 ´ etant donn´ e l’existence des deux sousr´ eseaux de la classe C 192. 6. examin´ e au paragraphe suivant. Les stations qui d´ emarrent peuvent solliciter les routeurs si l’attente est trop longue (environ 7 minutes) avec un autre message ICMP. surtout si elle sont susceptibles de changer et que le nombre de stations est grand.68 Protocole IP Apr` es propagation des routes. la table de routage du routeur R1 pourrait bien ressembler ` a: Source 192. qui est a destination de tous les hˆ otes du LAN. Une validit´ e nulle indique un routeur qui s’arrˆ ete et donc une route qui doit ˆ etre supprim´ ee.0 192. Ces messages ont l’adresse multicast 224.10. corrige l’erreur de route. .168. de type 10 (“ router sollicitation ”) et avec l’adresse multicast 224.0. ` intervals r´ A eguliers les routeurs diffusent des messages ICMP de type 9 (“ router advertisement ”) d’annonces de routes. OSPF Pr´ ecisions en cours. La r´ eponse du ou des routeurs est du type “ unicast ”.

Message ICMP “ redirect ” 69 6. La route modifi´ ee est visible avec la commande netstat -r. La nouvelle route est employ´ ee pour les datagrammes qui suivent (vers la mˆ eme direction). cette possibilit´ e n’est valable que sur un mˆ eme LAN.5 Message ICMP “ redirect ” La table de routage peut ˆ etre modifi´ ee dynamiquement par un message ICMP (IV). Il re-route le datagramme vers R2. Ce travail s’effectue pour chaque datagramme re¸ cu de la station. ce qui ´ evite qu’il soit ´ emis deux fois sur le LAN.21 – La station veut envoyer un datagramme et sa table de routage lui commande d’utiliser la route qui passe par le routeur R1. – Le routeur R1 re¸ coit le datagramme.21. La situation est celle de la figure IV. elle figure avec le drapeau ’M’ (modification dynamique). Pour se faire : 1. – D` es que la station re¸ coit le message “ ICMP redirect ” elle met ` a jour sa table de routage. Pour des raisons ´ evidentes de s´ ecurit´ e. 2. Station Datagramme 1 ICMP redirect Datagramme 2 R1 R2 figure IV. lui indiquant la nouvelle route vers R2. scrute sa table de routage et s’apper¸ coit qu’il faut d´ esormais passer par R2. Il envoie un message “ ICMP redirect ” (type 5) ` a la station. .

Nous verrons ult´ erieurement (cf chapitre X) que le filtrage IP sur le 127/8 est aussi ais´ e que sur n’importe quel autre r´ eseau 15 ..0. 127. Internet IP Réseau Pilote de "loopback" Pilote de carte réseau Réseau physique figure IV. l’interface standard du r´ eseau.1 Flags UH Netif lo0 Dans toutes les machines Unix modernes cette configuration est d´ ej` a pr´ evue d’embl´ ee dans les scripts de d´ emarrage. selon le routage. Gateway 127... Dans le cas du pilote de loopback.0.0. o` u l’interface de loopback. L’objet de cette interface est de pouvoir utiliser les outils du r´ eseau en local. L’exemple d’usage le plus marquant est sans doute celui du serveur de noms (voir page 103) qui tient compte explicitement de cet interface dans sa configuration. tout dialogue entre outils clients et serveurs sur une mˆ eme machine est possible et mˆ eme souhaitable sur cet interface pour am´ eliorer les performances et parfois la s´ ecurit´ e15 .6 Interface de “ loopback ” Toutes les impl´ ementations d’IP supportent une interface de type “ loopback ”. d’o` u l’explication de la ligne ci-dessous d´ ej` a rencontr´ ee (page 62) dans le cadre de la table de routage : Routing tables Internet: Destination . Cette association est effectu´ ee sur une machine Unix ` a l’aide de la commande ifconfig.1.22 La valeur courante est 127. Le routage est ici bien sˆ ur bas´ e sur l’adresse IP associ´ ee ` a chacune des interfaces.0.0.. montre que la couche IP peut utiliser.70 Protocole IP 6. qui ´ etablit une correspondance entre un pilote de p´ eriph´ erique (rep´ er´ e par son fichier sp´ ecial) et une adresse IP. sans passer par un interface r´ eseau r´ eel (associ´ e ` a une carte physique). l’adresse est standardis´ ee ` a n’importe quelle adresse valide du r´ eseau 127 (page 34). Concr` etement. La figure IV.0.22 ci-contre.1 .

69 192.168.168.249 3.249 Nous faisons en outre les hypoth` eses suivantes : 1. L’adresse IP de R est dans le mˆ eme LAN.20 passant par 192.20/20 diff` erent).168. que se passe t-il sur le r´ eseau ? ´ Etape 1 La machine A applique l’algorithme de routage (page 65) et s’apper¸ coit que la partie r´ eseau de l’adresse de B n’est pas dans le mˆ eme LAN (192.20. passant par R.10.249 Réseau ifR2 .0 192.20. .10.20.0 figure IV.249 192.249 et r´ eciproquement la machine B voit le r´ eseau 192.7 Finalement. Pour cela nous utilisons deux r´ eseaux priv´ es de la RFC 1918 : 192.168.168.0 via le 192.249 Réseau ifB .23 Ce tableau r´ esume l’adressage physique et logique de la situation : Interface ifA ifB ifR1 ifR2 Adresse MAC 08 :00 :20 :20 :cf :af 00 :01 :e6 :a1 :07 :64 00 :06 :5b :0f :5a :1f 00 :06 :5b :0f :5a :20 Adresse IP 192. comment ¸ ca marche ? Dans ce paragraphe nous reprenons la figure III. La machine A a connaissance de l’adresse IP de la machine B La machine A envoie un datagramme ` a la machine B.0 et nous faisons l’hypoth` ese que la passerelle fonctionne comme une machine Unix qui ferait du routage entre deux de ses interfaces ! A Internet R Internet B Internet Réseau .10/24 et 192.168.0 et 192. La cons´ equence de l’hypoth` ese 1 implique que pour atteindre R directement il nous faut d’abord d´ eterminer son adresse physique.168.10.69 192.20.168.168. Le protocole ARP (page 50) doit ˆ etre utiliser. A peut donc atteindre R par un routage direct.109 192. B et R sont vides 2.168.168. La machine A a connaissance d’une route vers le r´ eseau 192.10.10.10.109 ifA ifR1 . Les caches “ arp ” des machines A.168.20. comment ¸ ca marche ? 71 7 Finalement.168.168. L’hypoth` ese 2 entraine qu’une route route existe pour atteindre ce r´ eseau.06 (page 41) et nous y apportons comme ´ etait annonc´ e une explication du fonctionnement qui tienne compte des protocoles principaux examin´ es dans ce chapitre.

10.20.10.69 ´ Etape 5 Et la “ r´ eponse ARP ” : SENDER SENDER TARGET TARGET HA ADR HA ADR 00 :01 :e6 :a1 :07 :64 192. Celle-ci est sur un LAN dans lequel R se trouve ´ egalement.20.168.168.109 ´ Etape 3 A est en mesure d’envoyer son datagramme ` a B en passant par R.249 ff :ff :ff :ff :ff :ff 192. ` aB: .69 08 :00 :20 :20 :cf :af 00 :06 :5b :0f :5a :1f Remarquez qu’ici l’adresse IP destination est celle de B ! ´ Etape 4 R a re¸ cu le datagramme depuis A et ` a destination de B.69 00 :06 :5b :0f :5a :20 192. Il s’agit de routage indirect puisque l’adresse de B n’est pas sur le mˆ eme LAN. Voici les ´ el´ ements de cette “ question ARP ” : SENDER SENDER TARGET TARGET HA ADR HA ADR 00 :06 :5b :0f :5a :20 192.168.249 ´ Etape 6 Enfin.168. Les adresses physiques et logiques se r´ epartissent maintenant comme ceci : IP SOURCE IP TARGET MAC SOURCE MAC TARGET 192.168.168.72 Protocole IP A envoie en cons´ equence une trame ARP (page 52 comportant les ´ el´ ements suivants : SENDER SENDER TARGET TARGET HA ADR HA ADR 08 :00 :20 :20 :cf :af 192. Remarquez qu’ici l’adresse IP destination est celle de R ! ´ Etape 2 R r´ epond ` a la “ question ARP ” par une “ r´ eponse ARP ” (OPERATION contient 2) et un champ compl` et´ e: SENDER SENDER TARGET TARGET HA ADR HA ADR 00 :06 :5b :0f :5a :1f 192.20. comme “ question ARP ”.20.109 192. un routage direct est donc le moyen de transf´ errer le datagramme.109 ff :ff :ff :ff :ff :ff 192.10.168.168. dans cette derni` ere ´ etape.20. Pour la mˆ eme raison qu’` a l’´ etape 1 R n’a pas l’adresse MAC de B et doit utiliser ARP pour obtenir cette adresse.168. R envoie le datagramme en provenance de A.249 08 :00 :20 :20 :cf :af 192.249 Avec un champ OPERATION qui contient la valeur 1.10.168.10.

and architecture . Finlayson. (Format TXT=97779 bytes) (Obsoletes RFC0760) (Status : STANDARD) RFC 826 “Ethernet Address Resolution Protocol : Or converting network protocol addresses to 48.E.” D. Deering.C. 8 Bibliographie : Pour en savoir plus : RFC 791 “Internet Protocol. Nov-01-1982. J. – Christian Huitema . Jun-01-1984.8 Bibliographie IP SOURCE IP TARGET MAC SOURCE MAC TARGET 192. Mogul. Richard Stevens . les adresses MAC.Principles.” Sep-01-1991.bit Ethernet address for transmission on Ethernet hardware. Aug-011989.Prentice–Hall – Craig Hunt . diff` erent compl` etement ! Remarque : Si A envoie un deuxi` eme datagramme. S. Aug-01-1985.Le routage dans l’Internet .” R. T.109 192.The protocols Addison-Wesley – Douglas Comer . Inc.” S. les caches ARP ont les adresses MAC utiles et donc les ´ etape 1. (Format : TXT=43059 bytes) (Also RFC0792) (Status : PROPOSED STANDARD) – W.O´Reilly & Associates.69 00 :06 :5b :0f :5a :20 00 :01 :e6 :a1 :07 :64 73 Remarque. Mogul. Sep-01-1981. (Format : TXT=37985 bytes) (Updates RFC0792) (Status : STANDARD) RFC 1112 “Host extensions for IP multicasting. Volume 1 . Plummer.20. Si les adresses IP n’ont pas chang´ e.Internetworking with TCP/IP .10. . elles.” J. Deering. (Format : TXT=39904 bytes) (Obsoletes RFC0988. Mann. J. Theimer. (Format : TXT=22026 bytes) (Status : STANDARD) RFC 903 “Reverse Address Resolution Protocol.C.168.EYROLLES .TCP/IP Illustrated. M.C. Postel. Postel.168. . RFC1054) (Updated by RFC2236) (Also STD0005) (Status : STANDARD) RFC 1256 “ICMP Router Discovery Messages. 2. (Format : TXT=9345 bytes) (Status : STANDARD) RFC 950 “Internet Standard Subnetting Procedure. protocols. 4 et 5 deviennent inutiles. comparons avec le datagramme de l’´ etape 3.TCP/IP Network Administration .” J.

74 Protocole IP .

l’OS bloque un processus qui tente de lire une donn´ ee non encore disponible. L’id´ ee est d’associer la destination ` a la fonction qu’elle remplie. La couche UDP ajoute un m´ ecanisme qui permet l’identification du service (niveau Application). non pr´ evisible ` a distance. Ce logiciel doit alors assurer la possibilit´ e de g´ erer la file d’attente des paquets qui arrivent. A l’inverse. En effet. jusqu’` a ce qu’un processus 1 (Application) les lise.1 Identification de la destination Rappel : Au niveau de la couche Internet les datagrammes sont rout´ es d’une machine ` a une autre en fonction des bits de l’adresse IP qui identifient le num´ ero de r´ eseau. Lors de cette op´ eration aucune distinction n’est faite entre les services ou les utilisateurs qui ´ emettent ou recoivent des datagrammes. il ne peut servir ` a cette fonction. Pour le syst` eme Unix les programmes sont identifi´ es de mani` ere unique par un num´ ero de processus. il est indispensable de faire un tri entre les divers applications (services) : plusieurs programmes de plusieurs utilisateurs peuvent utiliser simultan´ ement la mˆ eme couche de transport et il ne doit pas y avoir de confusion entre eux. mais ce num´ ero est ´ eph´ em` ere. – La plupart des syst` emes d’exploitation fournissent le moyen d’un acc` es synchrone ` a un port.Chapitre V Protocole UDP 1 UDP – User Datagram Protocol UDP est l’acronyme de “User Datagram Protocol”. il est d´ efini dans la RFC 768 [Postel 1980]. ie tous les datagrammes sont m´ elang´ es. 1. – Le syst` eme d’exploitation local a ` a sa charge de d´ efinir le m´ ecanisme qui permet ` a un processus d’acc´ eder ` a un port. Cette identification se fait ` a l’aide d’un entier positif que l’on baptise port. 1 “Operating System” . Les donn´ ees encapsul´ ees dans un en-tˆ ete UDP sont des “paquets UDP”.

Application Port 1 Port 2 Port 3 Message Transport Paquet UDP UDP TCP Internet IP figure V. Conceptuellement on s’apper¸ coit alors que rien ne s’oppose ` a ce qu’un mˆ eme service (Num´ ero de port) soit attribu´ e conjointement aux deux protocoles (pointill´ e sur la figure). en plus de l’adresse IP de la machine elle-mˆ eme. On peut pr´ evoir le num´ ero de port en fonction du service ` a atteindre. Cette situation est d’ailleurs courante dans la r´ ealit´ e des serveurs.76 Protocole UDP Pour communiquer avec un service distant il faut donc avoir connaissance de son num´ ero de port. La figure 1 explicite la notion de port. c’est l’objet du paragraphe 1.01 2 Cf “Protocole IP” page 43 . La couche IP s´ epare les data2 grammes TCP et UDP grˆ ace au champ PROTO de son en-tˆ ete.3. l’association du protocole de transport et du num´ ero de port identifie un service sans ambigu¨ ıt´ e.

02 – UDP apporte un m´ ecanisme de gestion des ports. . ou encore mode datagramme. Ainsi.Un risque suppl´ ementaire (par rapport aux propri´ et´ es d’IP d´ ej` a connues) de perte de donn´ ees. Si l’application destinatrice ne les “consomme” pas assez rapidement. sans ´ echange pr´ eliminaire.2 Description de l’en-tˆ ete Un paquet UDP est con¸ cu pour ˆ etre encapsul´ e dans un datagramme IP et permettre un ´ echange de donn´ ees entre deux applications. tous les d´ efauts d’IP recens´ es au chapitre pr´ ec´ edent sont applicables ` a UDP. Plus particuli` erement. les paquets ` a destination d’une application UDP sont conserv´ es dans une pile de type FIFO. un paquet UDP g´ en` ere un datagramme IP et c’est tout ! Header IP Paquet UDP = données d’IP PROTO = UDP figure V. – UDP est aussi d´ esign´ e comme un mode de transport “non connect´ e”. Plus g´ en´ eralement. au dessus de la couche Internet. DNS — RFC 1035— Ce service utilise UDP dans le cas d’´ echanges de petits paquets d’informations (≤ 512 octets) sinon il utilise TCP 3 . base de donn´ ees r´ epartie au niveau mondial. ainsi l’´ emission des messages se fait-elle sans garantie de bon acheminement. si les donn´ ees ` a transmettre n’obligent pas IP ` a fragmenter (cf page 47). par opposition ` a TCP que nous examinerons dans le chapitre suivant. En local d’autres applications tr` es utiles comme tftp ou nfs sont ´ egalement susceptibles d’employer UDP. C’est au niveau applicatif qu’il convient de prendre en compte cette lacune. – UDP est simplement une interface au dessus d’IP. .Description de l’en-tˆ ete 77 1. les plus anciens paquets risquent d’ˆ etre ´ ecras´ es par les plus r´ ecents. et qui s’accomode tr` es bien de ce mode de transport. Parmis les utilisations les plus courantes d’UDP on peut signaler le serveur de noms3 . – Il n’y a aucun retour d’information au niveau du protocole pour apporter un quelconque moyen de contrˆ ole sur le bon acheminement des donn´ ees.

. Dans le cas courant (IP sans option) cette taille maximale est donc de 65 515.03 UDP SOURCE PORT Le num´ ero de port de l’´ emetteur du paquet.04 Ce pseudo en-tˆ ete est pr´ evu initialement pour apporter une protection en cas de datagrammes mal rout´ es ! . CHECKSUM Le checksum est optionnel et toutes les impl´ ementations ne l’utilisent pas. . UDP DESTINATION PORT Le num´ ero de port du destinataire du paquet. donc comprennant l’en-tˆ ete et le message. MESSAGE LENGTH C’est la longueur du paquet. quand il est sp´ ecifi´ e il indique le num´ ero de port que le destinataire doit employer pour sa r´ eponse.. S’il est employ´ e. – La longueur minimal est 8 – La longueur maximale est 65 535 − H (IP ). 16 15 Protocole UDP 0 UDP DESTINATION PORT CHECKSUM figure V. La valeur z´ ero (0) indique qu’il est inutilis´ e.03 d´ ecrit la structure de l’en-tˆ ete... il porte sur un pseudo en-tˆ ete constitu´ e de la mani` ere suivante : 31 24 23 16 15 Source Address 8 7 0 zero Destination Address Protocol UDP length UDP destination port CHECKSUM DATAS UDP source port UDP length figure V. 31 UDP SOURCE PORT MESSAGE LENGTH DATA .78 La figure V. Ce champ est optionnel. le port 0 n’est donc pas celui d’un service valide..

Toute machine qui utilise la pile TCP/IP se doit de connaˆ ıtre un certain nombre de services bien connus. comme nous l’examinerons en d´ etail dans le cours de programmation.Ports r´ eserv´ es — disponibles 79 1.05 indique quelques uns des plus connus et plus utilis´ es ports bien connus. . il y en a quantit´ e d’autres. les bornes sont donc [0. rep´ er´ es par une s´ erie de ports bien connus ou “well known port numbers”. cette liste de services est plac´ ee dans le fichier /etc/services et lisible par tous les utilisateurs et toutes les applications. 65535]. 65535]. En effet. par construction. Nom echo echo ftp-data ftp-data ftp ftp telnet telnet smtp smtp domain domain http http pop3 pop3 sunrpc sunrpc nntp nntp Port Proto 7 tcp 7 udp 20 tcp 20 udp 21 tcp 21 udp 23 tcp 23 udp 25 tcp 25 udp 53 tcp 53 udp 80 tcp 80 udp 110 tcp 110 udp 111 tcp 111 udp 119 tcp 119 udp Commentaire #File #File #File #File Transfer Transfer Transfer Transfer [Default Data] [Default Data] [Control] [Control] mail #Simple Mail Transfer mail #Simple Mail Transfer #Domain Name Server #Domain Name Server www www-http #World Wide Web HTTP www www-http #World Wide Web HTTP #Post Office Protocol . pour pouvoir dialoguer avec les autres machines de l’Internet (vs Intranet).3 Ports r´ eserv´ es — ports disponibles Le num´ ero de port est un entier 16 bits non sign´ e. donc le segment r´ eellement exploitable est [1. un service (comprendre un programme au niveau applicatif) qui d´ emarre son activit´ e r´ eseau (et qui donc est consid´ er´ e comme ayant un rˆ ole de serveur) s’attribue le (les) num´ ero(s) de port qui lui revient (reviennent) conform´ ement ` a cette table.Version 3 #Post Office Protocol . . . Nous avons vu pr´ ec´ edement que le port 0 n’est pas exploitable en tant que d´ esignation de service valide.05 Le tableau de la figure V. Sur une machine Unix.Version 3 rpcbind #SUN Remote Procedure Call rpcbind #SUN Remote Procedure Call usenet #Network News Transfer Protocol usenet #Network News Transfer Protocol figure V.

qui en contrˆ ole l’usage. Attribution des ports “ancienne m´ ethode” Historiquement les ports de 1 ` a 255 sont r´ eserv´ es aux services bien connus. Le segment [1024. Le segment [1.80 Protocole UDP Une autorit´ e. plus r´ ecemment. Attribution des ports “nouvelle m´ ethode” Devant l’explosion du nombre des services enregistr´ e l’IANA a modifi´ e la 5 segmentation qui pr´ ec` ede. 49151] est celui des services enregistr´ es.iana. Le segment [49152. 1023]. D´ esormais les num´ eros de ports sont class´ es selon les trois cat´ egories suivantes : 1. l’IANA4 . 65535] est celui des attributions dynamiques et des services priv´ es . ce segment ` a´ et´ e´ elargi ` a [1. 1023] est toujours r´ eserv´ es aux services bien connus. Les services bien connus sont d´ esign´ es par l’IANA et sont mis en œuvre par des applications qui s’ex´ ecutent avec des droits privil´ egi´ es (root sur une machine Unix) 2. ` partir de 1024 et jusqu’` A a 65535. Par exemple : Nom Port Proto Commentaire bpcd 13782 tcp VERITAS NetBackup bpcd 13782 udp VERITAS NetBackup 3. La derni` ere en date est la RFC 1700. Aucune application ne peut s’attribuer durablement et au niveau de l’Internet un num´ ero de port dans ce segment. l’IANA se contente d’enregistrer les demandes d’usage et signale les ´ eventuels conflits. centralise et diffuse l’information relative ` a tous les nombres utilis´ es sur l’Internet via une RFC. 4 5 “Internet Assigned Numbers Authority” http ://www. elle fait plus de 200 pages ! Par voie de cons´ equence cette RFC concerne aussi les num´ eros de ports. nous en examinerons l’usage dans le cours de programmation. Ils sont ´ enum´ er´ es par l’IANA et peuvent ˆ etre employ´ es par des processus ayant des droits ordinaires.org/assignments/port-numbers . sans en r´ ef´ errer ` a l’IANA.

RFC2181) (Status : STANDARD) RFC 1700 “ASSIGNED NUMBERS. de Groot & E. RFC0883) (Obsoleted by RFC1065. Postel. J. Aug-28-1980. RFC1597) (Also BCP0005) (Status : BEST CURRENT PRACTICE) Sans oublier : – W. Reynolds. Mockapetris. (Format : TXT=22270 bytes) (Obsoletes RFC1627. protocols.The protocols Addison-Wesley — 1994 – Douglas Comer . and architecture .” P. Karrenberg.” Y. Nov-01-1987.Principles. RFC1348.Internetworking with TCP/IP . B.” J. Moskowitz.V. (Format : TXT=129180 bytes) (Obsoletes RFC0973. RFC0882. (Format : TXT=458860 bytes) (Obsoletes RFC1340) (Also STD0002) (Status : STANDARD) RFC 1918 “Address Allocation for Private Internets. Richard Stevens . G. RFC1183. RFC2065.Prentice–Hall .concepts and facilities.” J. RFC2065) (Updated by RFC1101. Lear. Volume 1 . (Format : TXT=5896 bytes) (Status : STANDARD) RFC 1035 “Domain names . October 1994. February 1996. D. RFC1876.2 Bibliographie 81 2 Bibliographie Pour en savoir plus : RFC 768 “User Datagram Protocol. Rekhter. Postel. RFC1982.TCP/IP Illustrated.J.

82 Protocole UDP .

01 1. il est d´ efini dans la RFC 793 [Postel 1981c]. 2. Header IP Segment TCP = données IP PROTO = TCP figure VI. Les donn´ ees encapsul´ ees dans un en-tˆ ete TCP sont des “ paquets TCP ”.1 Caract´ eristiques de TCP TCP est bien plus compliqu´ e1 qu’UDP examin´ e au chapitre pr´ ec´ edent. Il faut pr´ eciser que les paquets de donn´ ees sont acquitt´ es de bout en bout et non de point en point. TCP contient un m´ ecanisme pour assurer le bon acheminement des donn´ ees. 3 pour UDP ! 1 . il apporte en contrepartie des services beaucoup plus ´ elabor´ es. Cinq points principaux caract´ erisent ce protocole : 1. Le protocole TCP permet l’´ etablissement d’un circuit virtuel entre les deux points qui ´ echangent de l’information. Cette possibilit´ e est absolument indispensable d` es lors que les applications doivent transmettre de gros volumes de donn´ ees et de fa¸ con fiable.Chapitre VI Protocole TCP 1 TCP – Transport Control Protocol TCP est l’acronyme de “ Transport Control Protocol ”. D’une mani` ere g´ en´ erale le r´ eseau assure l’acheminement et les extr´ emit´ es le contrˆ ole (Dave Clark). On dit aussi que TCP Une simple comparaison du volume des RFC initiales est parlante : 85 pages pour TCP.

IP locale Adresse de la machine qui ´ emet. 4. les modules de protocole informent les applications respectives que la connexion est ´ etablie et que le transfert peut d´ ebuter. c’est un flux d’octets non structur´ e sur lequel il n’agit pas. Il est impos´ e ou est d´ etermin´ e automatiquement comme nous le verrons dans le cours de programmation. IP distante Adresse de la machine distante. Il est obligatoire de le connaˆ ıtre pr´ ecisement. TCP a la capacit´ e de m´ emoriser3 des donn´ ees : – Aux deux extr´ emit´ es du circuit virtuel. – Les protocoles des 2 OS communiquent alors en s’envoyant des messages au travers du r´ eseau pour v´ erifier que le transfert est possible (autoris´ e) et que les deux applications sont prˆ etes pour leurs rˆ oles. les informent de leurs d´ esirs d’´ etablir ou de recevoir une communication. – Le protocole est libre de fragmenter le flux de donn´ ees en paquets de tailles adapt´ ees aux r´ eseaux travers´ es. – Avant le transfert les 2 applications se mettent en relation avec leurs OS2 respectifs. . Conceptuellement. – Durant le transfert. pour ´ etablir une connexion — un circuit virtuel — il faut avoir r´ eunis les ´ el´ ements du quintuplet : Le protocole C’est TCP mais il y pourrait y avoir d’autres transports qui assurent le mˆ eme service. ` la r´ – A eception. Il lui incombe cependant d’effectuer le r´ eassemblage et donc de stocker temporairement les fragments avant de les pr´ esenter dans le bon ordre ` a l’application. 2 3 “ Operating System ” dans un buffer . Que l’un d’eux change et il s’agit d’une autre connexion ! 3. L’ensemble de ces cinq ´ el´ ements d´ efinit un circuit virtuel unique. – Pratiquement. le dialogue entre les protocoles continue. pour v´ erifier le bon acheminement des donn´ ees. les applications s’envoient des volumes de donn´ ees absolument quelconques. allant de 0 octet ` a des centaines (ou plus) de Mo. Port distant Le num´ ero de port associ´ e au service ` a atteindre. – Une fois ces pr´ eliminaires ´ etablis. l’une des deux applications doit effectuer un appel que l’autre doit accepter. Port local Le num´ ero de port associ´ e au processus. .84 Protocole TCP fonctionne en mode connect´ e (par opposition ` a UDP qui est en mode non connect´ e ou encore mode datagramme). le protocole d´ elivre les octets exactement comme ils ont ´ et´ e envoy´ es. TCP est ind´ ependant vis ` a vis des donn´ ees transport´ ees.

02 TCP SOURCE PORT Le num´ ero de port de l’application locale. SEQUENCE NUMBER C’est un nombre qui identifie la position des donn´ ees ` a transmettre par rapport au segment original. Le circuit virtuel est rompu quand les deux parties ont clos le flux. Il doit s’accompagner du drapeau ACK (voir plus loin). TCP simule une connexion en “ full duplex ”. l’op´ eration qui consiste ` a lire des donn´ ees peut s’effectuer ind´ ependamment de celle qui consiste ` a en ´ ecrire. ce champ contient une valeur non nulle et non facilement pr´ evisible. 10 mots de 4 octets sont donc possibles pour les options. TCP DESTINATION PORT Le num´ ero de port de l’application distante. 31 21 16 15 87 TCP SOURCE PORT TCP DESTINATION PORT SEQUENCE NUMBER ACKNOWLEDGEMENT NUMBER OFF RESERVED CODE CHECKSUM OPTIONS DATA . c’est la s´ equence initiale ou ISN4 TCP num´ erote chaque octet transmis en incr´ ementant ce nombre 32 bits non sign´ e. Dans le cas d’un en-tˆ ete sans option. 85 1. Il repasse ` a 0 apr` es avoir atteint 232 − 1 (4 294 967 295). il s’agit d’un d´ eplacement qui permet d’atteindre les donn´ ees quand il y a des options. il s’agit du nombre de mots de 4 octets qui composent l’en-tˆ ete. Sa taille normale est de 20 octets. Pour le premier octet des donn´ ees transmis ce nombre est incr´ ement´ e de un. 4 “ Initial Sequence Number ” . et ainsi de suite. Au d´ emarrage de chaque connexion. Pour chacune des deux applications en connexion par un circuit virtuel. ACKNOWLEDGEMENT NUMBER C’est un num´ ero qui identifie la position du dernier octet re¸ cu dans le flux entrant. OFF pour OFFSET. ce champ porte la valeur 5.. Le protocole autorise la clˆ oture du flot dans une direction tandis que l’autre continue ` aˆ etre active. ` a moins que des options soient pr´ esentes. . WINDOW URGENT POINTER PADDING 0 figure VI. .2 Description de l’en-tˆ ete La figure suivante montre la structure d’un en-tˆ ete TCP.Description de l’en-tˆ ete 5. Le d´ eplacement maximum 4 est donc de 60 octets (2 − 1 × 4 octets). Cod´ e sur 4 bits..

Cette valeur varie en fonction de la nature du r´ eseau et surtout de la bande passante devin´ ee ` a l’aide de statistiques sur la valeur du RTT. L’´ emetteur du segment a fini d’´ emettre. qui en limite donc th´ eoriquement la taille ` a 65 535 octets (ce n’est pas compl` etement exact. Nous y reviendrons au paragraphe 4. Ce pointeur contient alors un offset ` a ajouter ` a la valeur de SEQUENCE NUMBER du segment en cours pour d´ elimiter la zone des donn´ ees urgentes ` a transmettre ` a l’application. Chaque partie annonce ainsi la taille de son buffer de r´ eception. pour lui indiquer que toutes les donn´ ees collect´ ees doivent ˆ etre transmises ` a l’application sans attendre les ´ eventuelles donn´ ees qui suivent. voir plus loin l’option wscale). Les options utilis´ ees : . Sa pr´ esence est d´ etect´ ee d` es lors que l’OFFSET est sup´ erieur ` a 5. Le m´ ecanisme de transmission ` a l’application d´ epend du syst` eme d’exploitation.86 RESERVED Six bits r´ eserv´ es pour un usage futur ! Protocole TCP CODE Six bits pour influer sur le comportement de TCP en caract´ erisant l’usage du segment : URG Le champ “ URGENT POINTER ” doit ˆ etre exploit´ e. l’´ emetteur n’envoie pas plus de donn´ ees que le r´ ecepteur ne peut en accepter. Par construction. RST SYN FIN Re-initialisation de la connexion Le champ “ SEQUENCE NUMBER ” contient la valeur de d´ ebut de connexion. OPTIONS C’est un param` etrage de TCP. ACK Le champ “ ACNOWLEDGMENT NUMBER ” doit ˆ etre exploit´ e. En fonctionnement normal un seul bit est activ´ e` a la fois mais ce n’est pas une obligation. URGENT POINTER Ce champ n’est valide que si le drapeau URG est arm´ e. La taille de celle-ci est d´ efinie par un entier non sign´ e de 16 bits. en-tˆ ete et donn´ ees. CHECKSUM Un calcul qui porte sur la totalit´ e du segment. La RFC 1024 [Postel 1987] d´ ecrit l’existence de paquets tcp d´ enomm´ es “ Christmas tree ” ou “ paquet kamikaze ” comprenant les bits SYN+URG+PSH+FIN ! WINDOW Le flux TCP est control´ e de part et d’autre pour les octets compris dans une zone bien d´ elimit´ ee et nomm´ ee “ fenˆ etre ”. PSH C’est une notification de l’´ emetteur au r´ ecepteur.

elle peut ´ egalement ˆ etre nulle par choix de l’application. est pr´ evue pour compl´ eter les mots. Cette partie est de longueur nulle ` a l’´ etablissement de la connexion. PADDING Remplissage pour se caler sur un mot de 32 bits. 87 5 MSS=“ Maximum Segment Size ” . DATAS Les donn´ ees transport´ ees. Pour de l’Ethernet la valeur est 1460 ( = M T U − 2 × 20). cod´ ee sur 1 seul octet. Au moment de l’´ etablissement d’une connexion (paquet comportant le flag SYN). la taille de la fenˆ etre est de 65535 × 2shif t . Par exemple si “ shift ” vaut 1 la taille de la fenˆ etre est de 131072 octets soit encore 128 ko. ` a cet effet une option “ No Operation ” ou nop. Quand cette valeur n’est pas nulle. timestamp pour calculer la dur´ ee d’un aller et retour (RTT ou “ round trip time ”).Description de l’en-tˆ ete mss La taille maximale du segment5 des donn´ ees applicatives que l’´ emetteur accepte de recevoir. Ce n’est pas une n´ egociation. wscale Facteur d’´ echelle (“ shift ”) pour augmenter la taille de la fenˆ etre au del` a des 16 bits du champ WINDOW (> 65535). nop Les options utilisent un nombre quelconque d’octets par contre les paquet TCP sont toujours align´ es sur une taille de mot de quatre octets . chaque partie annonce sa taille de MSS.

comme le sch´ ema de la figure 3 l’explicite. L’´ emetteur du premier paquet est ` a l’origine de l’´ etablissement du circuit virtuel. 1. mais il doit ´ egalement acquitter le paquet pr´ ec´ edent.03 On suppose que l’´ emetteur du premier paquet avec le bit SYN a connaissance du couple (adresse IP du r´ ecepteur.1 D´ ebut et clˆ oture d’une connexion ´ Etablissement d’une connexion L’´ etablissement d’une connexion TCP s’effectue en trois temps.88 Protocole TCP 2 2. Emetteur SYN (seq=x) Récepteur SYN (seq=y) ACK (seq=x+1) ACK(seq=y+1) Temps figure VI. C’est une attitude de “ serveur ”. . On dit aussi que le serveur effectue une “ ouverture passive ” (passive open). c’est une attitude g´ en´ eralement qualifi´ ee de “ cliente ”. 2. Le client doit acquitter le deuxi` eme segment avec ACK (seq = y + 1). avec sa s´ equence initiale (ISN = x). 3. On dit aussi que le client effectue une “ ouverture active ” (active open). Le r´ ecepteur du premier paquet accepte l’´ etablissement de la connexion. ce qu’il fait avec ACK (seq = x + 1). Le client envoie un segment comportant le drapeau SYN. ce qui suppose qu’il ´ etait prˆ et ` a le faire avant que la partie cliente en prenne l’initiative. num´ ero de port du service souhait´ e). Le serveur r´ epond avec sa propre s´ equence (ISN = y ).

. Emetteur close FIN (seq=x) Récepteur Envoi d’un EOF à ACK (seq = x + 1) l’application Flux de données du récepteur vers l’émetteur FIN (seq = y) Envoi d’un EOF à l’application ACK (seq = y + 1) Temps close Dernier segment de la connexion figure VI.2 Clˆ oture d’une connexion Clˆ oture canonique Un ´ echange de trois segments est n´ ecessaire pour l’´ etablissement de la connexion . les deux applications sont en mesure d’´ echanger les octets qui justifient l’´ etablissement de la connexion. La machine distante doit acquitter ce segment. ce qui implique que les donn´ ees circulent ind´ ependamment dans un sens et dans l’autre.Clˆ oture d’une connexion Une fois achev´ ee cette phase nomm´ ee “ three-way handshake ”. 89 2.04. Il y a donc ´ echange de 4 paquets pour terminer la connexion. L’application qui envoie un paquet avec le drapeau FIN indique ` a la couche TCP de la machine distante qu’elle n’enverra plus de donn´ ee.04 La raison est qu’une connexion TCP est “ full-duplex ”. La connexion est v´ eritablement termin´ ee quand les deux applications ont effectu´ e ce travail. comme il est indiqu´ e sur la figure VI. il en faut quatre pour qu’elle s’ach` eve de mani` ere canonique (“ orderly release ”). en incr´ ementant d’une unit´ e le “ sequence number ”. Les deux directions doivent donc pouvoir ˆ etre interrompues ind´ ependamment l’une de l’autre.

notamment dans le cas des traitements distants qui doivent s’accomplir une fois toutes les donn´ ees transmises. l’option SO LINGER . Comme c’est le dernier ´ echange. ou apr` es avoir rencontr´ e une exception non prise en compte (“ core dump ”. si des donn´ ees restaient ` a transmettre ` a l’application qui a envoy´ e le RST elles peuvent ˆ etre d´ etruites. Clˆ oture abrupte Au lieu d’un ´ echange de quatre paquets comme pr´ ec´ edement. Emetteur RST Récepteur figure VI. il faut en tenir compte lors de la conception des applications ! Sur la figure on constate que le serveur continue d’envoyer des donn´ ees bien que le client ait termin´ e ses envois. apr` es avoir (ou non) envoy´ e les derniers octets en attente6 . les deux couches TCP doivent g´ erer 7 paquets. Ce type d’arrˆ et est typiquement g´ er´ e par la couche TCP elle-mˆ eme quand l’application est brutalement interrompue sans avoir effectu´ e un appel ` a la primitive close(2). . Ce paquet clˆ ot l’´ echange. Le serveur a d´ etect´ e cette attitude par la r´ eception d’un caract` ere de EOF (en C sous Unix). sans compter les ´ echanges propres au transfert des donn´ ees. L’extremit´ e qui arrˆ ete brutalement la connexion ´ emet un paquet assorti du bit RST. comme par exemple pour un tri. Il ne re¸ coit aucun acquittement. Cette possibilit´ e a son utilit´ e. transmet les ´ eventuelles derni` eres donn´ ees ` a l’application et provoque une sortie d’erreur du type “ Connection reset par peer ” pour la primitive de lecture r´ eseau.).90 Protocole TCP Au total. L’extr´ emit´ e qui re¸ coit le paquet de reset (bit RST). un m´ ecanisme de reset est pr´ evu pour terminer une connexion au plus vite (abortive release). . comme par exemple lors d’un appel ` a la primitive abort(2).05 6 Voir dans le cours de programmation.

– Le temps qui s’´ ecoule entre l’´ emission d’un paquet et la r´ eception de son 8 acquittement est le RTT . comme nous avons d´ ej` a pu l’examiner partiellement au paragraphe pr´ ec´ edent. Si on consid` ere des d´ elais de transmission de l’ordre de 500 ms (voire plus).3 Contrˆ ole du transport 91 3 Contrˆ ole du transport Le bon acheminement des donn´ ees applicatives est assur´ e par un m´ ecanisme d’acquittement des paquets. On peut aussi remarquer qu’il sous-emploi la bande passante du r´ eseau. – L’´ emetteur conserve la trace du Paquet i pour ´ eventuellement le renvoyer.1 M´ ecanisme de l’acquittement Emetteur Paquet i Horloge Récepteur RTT ACK Paquet i+1 figure VI. Il faut noter que le RTT est la somme des temps de transit entre chaque routeur et du temps pass´ e dans les diverses files d’attente sur les routeurs. Le temps maximum d’attente est donc de 2 × M SL. Il est courant sur l’Internet actuel d’avoir un RTT de l’ordre de la seconde. 3.06 – Au d´ epart du Paquet i une horloge se d´ eclenche. Si cette horloge d´ epasse une valeur limite avant r´ eception de l’ACK le Paquet i est retransmis Cette valeur limite est bas´ ee sur la constante MSL7 qui est un choix d’impl´ ementation. il doit donc ˆ etre inf´ erieur ` a 2 × M SL. g´ en´ eralement de 30 secondes ` a 2 minutes. 7 8 “ Maximum Segment Lifetime ” “ Round Trip Time ” . un tel m´ ecanisme est totalement inadapt´ e au transfert de flux de donn´ ees.

sauf si on utilise un 9 m´ ecanisme de “ fenˆ etres glissantes ”.07 – Avec ce principe. comme le sugg` ere la figure VI. 9 10 “ sliding windows ” voir le cours de programmation . la bande passante du r´ eseau est beaucoup mieux employ´ ee.92 Protocole TCP 3. La largeur de la fenˆ etre est pr´ ecis´ ee dans le champ WINDOW de l’en-tˆ ete. – Si l’un des paquets doit ˆ etre re´ emis. (b) Chaque acquittement ACK envoy´ e est assorti d’une nouvelle valeur de taille de la fenˆ etre. la couche TCP du destinataire aura toute l’information pour le replacer dans le bon ordre.2 Fenˆ etres glissantes Cette attente de l’acquittement est p´ enalisante. permettant ainsi ` a l’´ emetteur d’ajuster ` a tout instant le nombre de segment qu’il peut envoyer simultan´ ement. ` chaque paquet est associ´ – A ee une horloge comme sur la figure VI. – Le nombre de paquets ` a envoyer avant d’attendre le premier acquittement est en fonction de deux param` etres : 1. Des valeurs courantes sont de l’ordre de 4096. 8192 ou 16384.07 : Emetteur Paquet i Paquet i+1 Paquet i+2 Paquet i+3 ACK(i) Paquet i+4 Récepteur Durée maximale d’attente pour l’acquittement sur le Paquet i figure VI.05. Elle change dynamiquement pour deux raisons : (a) L’application change la taille du “ buffer de la socket ”10 qui correspond ` a la taille de cette fenˆ etre.

La taille maximale des donn´ ees. Cette valeur est calcul´ ee pour ´ eviter absolument la fragmentation de IP au d´ epart des datagrammes. Cette option apparait uniquement dans un paquet assorti du drapeau SYN. Envoyés. figure VI. Le datagramme IP a donc une taille ´ egale au MSS augment´ ee de 40 octets (20 + 20). Comme de bien entendu cette valeur est fortement d´ ependante du 12 support physique et plus particuli` erement du MTU . ou MSS11 vaut 512 octets par d´ efaut. donc ` a l’´ etablissement de la connexion. il faut attendre que la fenêtre se déplace.06 et celle de la figure VI. 93 MSS accepté par le destinataire Fenêtre possible pour le destinataire (dernier acquittement) Fenêtre utilisable 1 2 3 4 5 6 7 8 9 10 . avec des trames l’encapsultation 802. Sur de l’Ethernet la valeur maximale est 1500 − 2 × 20 = 1460. TCP se doit de limiter au maximum la perte de paquets et donc leur re´ emission.3 de l’IEEE un calcul similaire conduit ` a une longueur de 1452 octets. On con¸ coit ais´ ement qu’entre la situation de la figure VI. ACK reçus. Peuvent être envoyés Ne peuvent pas encore être envoyés.08 Le d´ ebit obtenu d´ epend de la taille de la fenˆ etre et bien sˆ ur de la bande passante disponible. C’est la plus grande taille du segment de donn´ ees que TCP enverra. ACK non reçus.07 l’usage de la bande passante s’am´ eliore. pour fonctionner de mani` ere optimale.. en l’absence d’option de TCP. Par contre l’agrandissement de la taille de la fenˆ etre ne se con¸ coit que jusqu’` a une limite optimale au dela de laquelle des paquets sont perdus parcequ’envoy´ es trop rapidement pour ˆ etre re¸ cus par le destinataire. Or. 11 12 “ Maximum Segment Size ” “ Maximum Transfert Unit ” . Chaque couche TCP envoie sa valeur de MSS en mˆ eme temps que le paquet de synchronisation.Fenˆ etres glissantes 2.. comme une option de l’en-tˆ ete. Déjà envoyés.

. Cette derni` ere donn´ ee est fluctuante. fonction de la bande passante th´ eorique du r´ eseau et surtout de son taux d’occupation instantann´ e. comme on peut le deviner.94 Protocole TCP Cette taille limite optimale de la largeur de la fenˆ etre est. aussi TCP doit-il asservir continuement les tailles de fenˆ etre pour en tenir compte.

C’est ce que fait l’algorithme de Nagle. Pour le trafic en volume (“ bulk data ”). D’apr` es [W. L’´ el´ egance de cet algorithme est qu’il est tr` es simple et qu’il s’auto-r´ egule suivant le d´ elais de propagation. acquittement. TCP tente d’utiliser des paquets les plus larges possibles pour maximiser le d´ ebit. les algorithmes qui le pilotent s’ajustent en fonction de l’usage. Dans ce cas TCP accumule dans un mˆ eme buffer les octets en partance. l’algorithme de Nagle (1984) dit qu’une connextion TCP ne peut pas attendre plus d’un acquittement.1 Algorithme de Nagle Pour r´ eduire le trafic de ces “ tinygrams ” (RFC 896). 2. 13 ` a l’aide de l’option TCP NODELAY . 10% des donn´ ees ´ echang´ ees sur le r´ eseau concernent des applications interactives et 90% des applications qui ´ echangent des flux de donn´ ees. D` es r´ eception de l’acquittement il y a ´ emission du contenu du buffer en un seul paquet. La qualit´ e lent/rapide du r´ eseau est calcul´ ee ` a partir du “ timestamp ” envoy´ e dans les options de TCP et qui est ´ etabli d` es le premier ´ echange (puis re´ evalu´ ee statistiquement par la suite). retour de l’´ echo du caract` ere. Certaines applications d´ esactivent cet algorithme13 comme le serveur Apache ou le syst` eme de multi-fenˆ etrage X11. Deux cas se pr´ esentent donc : 1. Richard Stevens]. Les acquittements arrivent rapidement les agr´ egats d’octets peuvent tendre vers un seul caract` ere par paquet. acquittement. 4. Le r´ eseau est rapide.4 Compl´ ements sur le fonctionnement de TCP 95 4 Compl´ ements sur le fonctionnement de TCP L’usage du protocole TCP diff` ere consid´ erablement en fonction des applications mises en œuvre et des r´ eseaux ` a parcourir. Un exemple typique est celui de l’application telnet pour laquelle les caract` eres sont envoy´ es un ` a un dans un paquet diff´ erent. Si ce comportement n’est absolument pas p´ enalisant sur un r´ eseau rapide (LAN) par contre d` es que la bande passante commence ` a ˆ etre statur´ ee il est pr´ ef´ erable de regrouper un maximum d’octets (deux ou trois en pratique) dans un seul paquet pour en diminuer le nombre. chaque caract` ere ´ etant ` a l’origine de quatre paquets : ´ emission d’un caract` ere. alors que le trafic interactif utilise des paquets quasiment vides ´ emis le plus souvent ` a la fr´ equence de frappe des utilisateurs ou au rythme des mouvements d’une souris. Si le protocole TCP reste le mˆ eme pour tous. Le r´ eseau est lent.

plutˆ ot que de les ´ emettre d’un coup aussi rapidement que l’autorise le syst` eme ou le d´ ebit th´ eorique du r´ eseau. si des paquets sont perdus. Au contraire. est impl´ ement´ e` a l’aide d’une variable (cwnd) nomm´ ee “ congestion window ” que l’on traduit par fenˆ etre de congestion. puis quatre. et ainsi de suite jusqu’` a atteindre l’ouverture maximale de la fenˆ etre. Ainsi. le nombre maximum de segments de donn´ ees (×M SS en octets) que l’´ emetteur peut envoyer avant d’en recevoir le premier acquittement est le minimum entre cette variable (cwnd) et la taille de la fenˆ etre annonc´ ee par le r´ ecepteur ` a chaque acquittement de paquet. Durant cette progression. p´ enalisant pour le d´ ebit. il y a congestion suppos´ ee sur l’un des routeurs franchis et l’ouverture de la fenˆ etre est r´ eduite pour retrouver un d´ ebit qui minimise le taux de retransmission. Quand celui-ci est re¸ cu. L’ouverture de la fenˆ etre est nomm´ ee fenˆ etre de congestion ou encore “ congestion window ”. voir 4. 14 Ce cas arrive fr´ equemment quand un routeur s´ epare un r´ eseau rapide d’un r´ eseau lent . si un paquet est perdu l’algorithme d’´ evitement de congestion en diminue lin´ eairement la valeur (contrairement au “ slow start ” qui l’augmente exponentiellement). il envoie deux paquets. pour ´ eviter la congestion des routeurs. Le contenu de cette variable est pilot´ e par les algorithmes de d´ epart lent — “ slow start ”. on comprend bien qu’il vaut mieux ne pas envoyer la totalit´ e du contenu de la fenˆ etre d` es le d´ ebut de la connexion.2 — et d’´ evitement de congestion (“ congestion avoidance ”) examin´ e ici. TCP consid` ere qu’un paquet perdu est la cons´ equence d’un routeur (ou plus) congestionn´ e. Concr` etement. c’est ` a dire pour lequel les files d’attente ne sont pas assez larges pour absorber tous les paquets entrants14 Dans ce contexte.3 ´ Evitement de congestion Le contrˆ ole du flux ´ evoqu´ e pr´ ec´ edement. au d´ ebut de chaque connexion ou apr` es une p´ eriode de calme (“ idle ”) l’´ emetteur envoie un premier paquet de taille maximale (le “ mss ” du destinataire). 4. et attend son acquittement. Une re´ emission entraine un blocage de l’avancement de la “ fenˆ etre glissante ”. Une fois la capacit´ e de d´ ebit maximale atteinte. La limite de croissance de la variable cwnd est la taille de la fenˆ etre annonc´ ee par le r´ ecepteur.96 Protocole TCP 4. TCP utilise un algorithme nomm´ e “ slow start ” qui asservit l’´ emission des paquets au rythme de la r´ eception de leurs acquittements.2 D´ epart lent Un paquet est re´ emis parcequ’il arrive corrompu ou parcequ’il n’arrive jamais.

L’utilisateur tape : $ telnet srv discard Trying. Les tailles de fenˆ etre (win) et de segment maximum (mss) ne sont pas identiques. 3.chezmoi. par exemple dans une autre fenˆ etre xterm. L’´ etablissement de la connexion se fait ` a l’aide de la commande telnet sur le port discard (9) du serveur srv.1159 > srv. Escape character is ’^]’.459598 clnt.5 Paquets captur´ es. 2.1159 > srv. ack 2 win 8192 Simultan´ ement la capture des paquets est lanc´ ee. Connected to srv. serveur. Pour am´ eliorer la lisibilit´ e les num´ eros de s´ equences “ vrais ” ne sont indiqu´ es qu’au premier ´ echange. ack 2 win 4096 13:52:33. le service discard peut ˆ etre consid´ er´ e comme l’´ equivalent du fichier /dev/null sur le r´ eseau : les octets qu’on lui envoie sont oubli´ es (“ discard ”).457559 srv.275903 clnt.275114 srv..discard: .274009 clnt.chezmoi.discard > clnt. ` A chaque ´ echange la valeur entre parenth` ese indique le nombre d’octets ´ echang´ es. Plusieurs remarques s’imposent : 1. et celle qui est suppos´ ee prˆ ete ` a r´ epondre.discard > clnt.chezmoi.. Pour information. ack 1 win 8192 13:52:33. le tout pour faciliter la lecture : 0 1 2 3 4 5 6 13:52:30.discard: S 55104001:55104001(0) win 8192 <mss 1460> 13:52:30. 15 tcpdump que nous aurons l’occasion d’utiliser en TP .chezmoi et la machine srv.1159: .1159: S 2072448001:2072448001(0) ack 55104002 win 4096 <mss 1024> 13:52:30. Le num´ ero qui figure en tˆ ete de chaque ligne a ´ et´ e ajout´ e manuellement. comment´ es Le premier exemple montre un ´ echange de paquets de synchronisation (SYN) et de fin (FIN) entre la machine clnt. Le telnet du client fonctionne sur HP-UX alors que le serveur telnetd fonctionne sur une machine BSD. Ainsi le ack 1 de la ligne 2 doit ˆ etre lu 2072448002 (2072448001 + 1).456899 clnt. le nom de domaine “ chezmoi ” a ´ et´ e retir´ e. telnet> quit Connection closed. La symbole > qui marque le sens du transfert. La machine qui est ` a l’origine de l’´ etablissement de la connexion est dite cliente. Les suivants sont relatifs.discard: .1159 > srv.1159: F 1:1(0) ack 2 win 4096 13:52:33.1159 > srv. comment´ es 97 5 Paquets captur´ es.458887 srv. Et l’outil d’analyse r´ eseau15 permet la capture pour l’observation des ´ echanges suivants.discard > clnt.discard: F 1:1(0) ack 1 win 8192 13:52:33.

ack 3073 win 8192 8 srv. le serveur ´ etablit une connexion temporaire vers le client.20 > clnt.20 > clnt. . . 0 srv.20 > clnt. Il faut remarquer que l’´ etablissement de la connexion TCP est ici ` a l’initiative du serveur. ack 9217 win 8192 18 srv.20: .98 4.20 > clnt. L’absence de flag.20 > clnt. la premi` ere.. Les flags F et S. Les lignes ont ´ et´ e num´ erot´ ees manuellement et la date associ´ ee ` a chaque paquet supprim´ ee.1158 > srv.. 16 du nom du protocole applicatif utilis´ e : “ File Transfert Protocol ” . Lorsqu’un transfert de fichier est demand´ e via cette premi` ere connexion.1158 > srv.1158: P 6145:7169(1024) ack 1 win 4096 [tos 0x8] 13 srv. 2049:3073(1024) ack 1 win 4096 [tos 0x8] 7 clnt. concernant ftp : ftp-data ftp-data ftp ftp 20/tcp 20/udp 21/tcp 21/udp #File #File #File #File Transfer Transfer Transfer Transfer [Default Data] [Default Data] [Control] [Control] Dans cette exemple nous pouvons suivre le fonctionnement du m´ ecanisme des fenˆ etres glissantes..1158: P 5121:6145(1024) ack 1 win 4096 [tos 0x8] 11 clnt.20 > clnt..20: .1158 > srv.20: . ack 7169 win 8192 15 srv. En fait le protocole ftp fonctionne avec deux connexions TCP. ack 5121 win 8192 12 srv.20 > clnt..1158 > srv. ack 1 win 4096 [tos 0x8] 3 srv.1158: P 7169:8193(1024) ack 1 win 4096 [tos 0x8] 14 clnt. Le deuxi` eme exemple montre une situation de transfert de fichier avec 16 l’outil ftp .20 > clnt..20 > clnt. est ´ etablie du client vers le serveur. ack 1025 win 8192 5 srv.1158 > srv.1158: P 4097:5121(1024) ack 1 win 4096 [tos 0x8] 10 srv. Extrait du fichier /etc/services.1158: P 10241:11265(1024) ack 1 win 4096 [tos 0x8] 19 srv.1158: P 8193:9217(1024) ack 1 win 4096 [tos 0x8] 16 srv. ce qui peut laisser le lecteur perplexe. Elle sert au client pour assurer le contrˆ ole du transfert. 3073:4097(1024) ack 1 win 4096 [tos 0x8] 9 srv. Protocole TCP 5.20 > clnt.1158: .20: . rep´ er´ e par un point. ack 11265 win 8192 .20: .1158: . Elle est clotur´ ee d` es que le dernier octet demand´ e est transf´ err´ e.1158: S 1469312001:1469312001(0) win 4096 <mss 1024> [tos 0x8] 1 clnt.1158: P 11265:12289(1024) ack 1 win 4096 [tos 0x8] 20 clnt. . suppos´ e ` a l’´ ecoute sur le port 21.20 > clnt.1158: P 9217:10241(1024) ack 1 win 4096 [tos 0x8] 17 clnt.1158: P 1:1025(1024) ack 1 win 4096 [tos 0x8] 4 clnt.1158 > srv.20: .1158 > srv. Le port source 1159 et le port destination discard. non montr´ ee ici.1158: .20 > clnt.20: S 53888001:53888001(0) ack 1469312002 win 8192 <mss 1460> 2 srv. C’est cette connexion que nous examinons ici. 1025:2049(1024) ack 1 win 4096 [tos 0x8] 6 srv.1158: .20 > clnt. .L’explication est simple.20 > clnt.

1158 > srv.20 > clnt.20 > clnt.16 18. Données à transmettre.20 > clnt.1158: clnt. F .20: clnt. par segment de 1024 octets Numéros des lignes 1024 3 5.13 15.20: srv.1158: srv.20: srv.1158 > srv. Le type de service (“ Type Of service ” tos 0x8) est demand´ e par l’application pour maximiser le d´ ebit (consulter le cours IP page 45).20 > clnt. Le P symbolise le drapeau PSH.1158: P .6 8.1158 > srv.20 > clnt.20 > clnt. Le positionnement de ce drapeau est ` a l’initiative de la couche TCP ´ emettrice et non ` a l’application.9. . P P P . P F . 1178625:1179649(1024) ack 1 win 4096 [tos 0x8] ack 1178625 win 8192 1212417:1213441(1024) ack 1 win 4096 [tos 0x8] 1213441:1214465(1024) ack 1 win 4096 [tos 0x8] 1214465:1215489(1024) ack 1 win 4096 [tos 0x8] ack 1213441 win 8192 ack 1215489 win 8192 1215489:1215738(249) ack 1 win 4096 [tos 0x8] 1215738:1215738(0) ack 1 win 4096 [tos 0x8] ack 1215739 win 8192 1:1(0) ack 1215739 win 8192 ack 2 win 4096 [tos 0x8] 99 Remarques : 1.1158: srv.1158: clnt.1158: clnt. y compris celles transmises dans ce paquet.10 12.1158 > srv.20: srv. La couche TCP qui re¸ coit un tel paquet est inform´ ee qu’elle doit transmettre ` a l’application toutes les donn´ ees re¸ cues. 2.20 > clnt.1158 > srv.09 .20: clnt.1158: srv.Exemples de flux 21 22 23 24 25 26 27 28 29 30 31 32 srv.19 4 7 11 14 17 20 figure VI.

(Format : TXT=11648 bytes) (Status : UNKNOWN) RFC 1700 “ ASSIGNED NUMBERS.TCP/IP Illustrated. Postel. protocols. Postel.4 BSD Operating System ” (chapitre 13) — Addison–Wesley — 1996 . Reynolds. ” J. Postel. (Format : TXT=177957 bytes) (Status : STANDARD) RFC 1025 “ TCP and IP bake off. Sep-01-1981. Volume 1 . (Format : TXT=458860 bytes) (Obsoletes RFC1340) (Also STD0002) (Status : STANDARD) Sans oublier : – W. Sep-01-1987. ” J.100 Protocole TCP 6 Bibliographie RFC 793 “ Transmission Control Protocol.Principles. Richard Stevens .Prentice–Hall – McKusick – Bostic – Karels – Quaterman — “ The Design and implementation of the 4. and architecture . October 1994.The protocols Addison-Wesley – Douglas Comer .J. ” J.Internetworking with TCP/IP .

Deuxi` eme partie Protocoles applicatifs .

.

de mani` ere sous-jacente. la correspondance entre le nom (les noms s’il y a des synonymes ou “ alias ”) et l’adresse (il peut y en avoir plusieurs associ´ ees ` a un seul nom) d’une machine est plac´ ee dans le fichier /etc/hosts. lui attribuer un nom symbolique n’est absolument pas n´ ecessaire au bon fonctionnement de ses trois couches basses. lien entre cette symbolique et l’adressage IP qui lui est associ´ e. Pour terminer cette introduction.DNS 1 G´ en´ eralit´ es sur le serveur de noms S’il est obligatoire d’attribuer au moins une adresse IP ` a une pile ARPA pour pouvoir l’interconnecter en r´ eseau avec d’autres piles de mˆ eme nature.freebsd. Ci-apr` es le fichier en question.1 Bref historique Au d´ ebut de l’histoire de l’Internet.org . pr´ esent sur toutes les machines unix dot´ ees d’une pile Arpa. Ce nommage symbolique est simplement beaucoup plus naturel pour les humains que la manipulation des adresses IP.Chapitre VII Serveur de noms . une r´ ef´ erence implicite ` a leur(s) correspondant(s) num´ erique(s). il n’est pas innocent de pr´ eciser que le serveur de noms est en g´ en´ eral le premier service mis en route sur un r´ eseau. On y remarque qu’il ne contient plus que l’adresse 1´ 2 Eviter un blocage dˆ u` a l’interrogation des serveurs de noms www. pr´ elev´ e (et tronqu´ e partiellement) sur une 2 machine FreeBSD ` a jour. C’est la raison pour laquelle l’usage d’adresses IP sous la forme d´ ecimale point´ ee reste de mise lors de la configuration des ´ el´ ements de commutation et de routage1 . Ce chapitre explore les grandes lignes du fonctionnement de ce que l’on nomme le “ serveur de noms ”. Il n’intervient donc qu’au niveau applicatif. tout simplement parceque beaucoup de services le requi` erent pour accepter de fonctionner (le courrier ´ electronique en est un exemple majeur). 1. en revanche. ainsi la majeure partie des applications r´ eseaux font usage de noms symboliques avec. mˆ eme sous forme d´ ecimale point´ ee (adresses IP page 31).

feuilles de l’arbre.2 Syst` eme hi´ erarchis´ e de nommage L’espace de noms. 2. Les machines.domain 127. Par exemple entre les dieux de la mythologie grecque. avec les inconv´ enients suivants : – Absence de structure claire dans le nommage d’o` u de nombreux conflits entre les noms des stations.0.net/) . a rendu obsol` ete cette approche. sont nomm´ ees ` a l’aide du chemin parcouru de la feuille (machine) ` a la racine (non nomm´ ee). # # In the presence of the domain name service or NIS.domain’ below with the domainname of your # machine.internic. les plan` etes du syst` eme solaire.my. ce qui entraine : 1. pr´ ealablement non structur´ e. Cette organisation entraine une hi´ erarchisation des noms de machines et des autorit´ es qui ont le pouvoir de les nommer. et surtout jamais ` a jour compte tenu des changements continuels. la racine n’en a pas. Replace ’my. D’apr` es Douglas E.DNS # $FreeBSD: src/etc/hosts.0.2. Serveur de noms . de les maintenir.TXT).domain Au d´ ebut des ann´ ees 1980 c’est le NIC3 qui g` ere la mise ` a jour continuelle de cette table (HOSTS. au milieu des ann´ ees 1980 (1986) la liste officielle des hˆ otes de l’Internet contient 3100 noms et 6500 alias ! La forte croissance du nombre des machines. this file may # not be consulted at all.104 de “ loopback ” en ipv6 et ipv4.11. Une lourdeur du processus de mise ` a jour : il faut passer par un interm´ ediaire pour attribuer un nom ` a ses machines. les h´ eros historiques ou de bandes dessin´ ees. . – Centralisation des mises ` a jour. 3 “ Network Information Center ” (http ://www. # # ::1 localhost localhost. sous forme d’un arbre (et non d’un graphe). Comer. see /etc/host.1 localhost localhost. Chaque nœud de l’arbre porte un nom.conf for the resolution order.4 2003/02/06 20:36:58 dbaker Exp $ # # Host Database # # This file should contain the addresses and aliases for local hosts that # share this file. est d´ esormais r´ eorganis´ e de mani` ere hi´ erarchique. . 1.my. Un trafic r´ eseau (ftp) en forte croissance (N 2 si N est le nombre de machines dans cette table) et qui devient rapidement ing´ erable au vu des bandes passantes de l’´ epoque (quelques kilo bits par seconde).v 1.

“ Domain Name Server ” fasse r´ ef´ erence explicitement au concept de domaine. donc de droite ` a gauche.fr Derri` ere ce nom il faut imaginer un point (. Le serveur de noms est concern´ e par les “ zones ”.Syst` eme hi´ erarchis´ e de nommage Le s´ eparateur entre chaque embranchement. c’est ` a dire plusieurs sous domaines. est le point d´ ecimal.fr puisque celle-ci est g´ er´ ee de mani` ere autonome par rapport ` a la zone ecp.ecp. Un sous domaine est un domaine ` a part enti` ere et. Chaque zone doit avoir un serveur principal (“ primary server ”) qui d´ etient ses informations d’un fichier configur´ e manuellement ou semi manuellement (DNS dynamique). par contre la hi´ erarchie de noms s’observe de droite ` a gauche. voir plus loin named.sio.fr sous domaine de ecp.fr Domaine fr Domaine ecp. 4 5 Sauf justement dans les fichiers de configuration du serveur de noms.fr sous domaine du fr Domaine sio. Ce sous arbre peut comprendre plusieurs niveaux. Par exemple : fr ecp. ou nœud. La lecture s’effectue naturellement de gauche ` a droite. tout domaine est un sous domaine d’un autre. Une zone peut ˆ etre confondue avec le domaine dans les cas les plus simples. L’espace des noms y est organis´ e en tenant compte des limites administratives ou organisationnelles. Chaque nœud. mˆ eme s’il est terminal.fr sio. tout nœud est un domaine. pour bien comprendre la configuration d’un tel service il faut ´ egalement comprendre la notion de “ zone ”. Domaine & zone Le r´ eseau peut ˆ etre consid´ er´ e comme une hi´ erarchie de domaines. Bien que le serveur de noms. Le fait d’administrer une zone est le r´ esultat d’une d´ el´ eguation de pouvoir de l’administrateur de la zone parente et se concr´ etise par la responsabilit´ e de configurer et d’entretenir le champ SOA (“ start of authority ”. est baptis´ e par une chaˆ ıne de caract` eres et le nom de ce domaine est la concat´ enation de toutes les ´ etiquettes de nœuds lues depuis la racine. on peut parler de zone sio.fr.boot vs named.ecp. Voici un exemple de nom de machine : www.conf . Une zone est un point de d´ el´ egation dans l’arbre DNS.ecp.ecp. except´ ee la racine.fr 105 Par construction. page 118) de la-dite zone. Plusieurs serveurs secondaires (“ secondary server ”) recoivent une copie de la zone via le r´ eseau et pour assurer la continuit´ e du service (par la redondance des serveurs). Dans les exemples ci-dessus. autrement dit une zone concerne un sous arbre du DNS dont l’administration lui est propre.) qui est omis la plupart du temps car il est implicite4 . c’est ` a dire n’a pas de sous domaine. appel´ e un domaine. Ses fichiers de configuration5 pr´ ecisent la port´ ee de la zone et non du domaine.

138.01 http ://www.fr/ On peut les voir en d´ etail ` a cette adresse http ://www. – Chaque administrateur de domaine (universit´ es.nic. .106 Hi´ erarchie des domaines Serveur de noms .arpa.com/zone/iso-country-codes 8 Une base de donn´ ees sur les administrateurs de DNS est entretenue par les NICs. Par exemple le “ NIC France ” 6 g` ere le contenu de la zone . c’est la base “ whois ”. associations.ripe. Consulter le site http ://www. Sa responsabilit´ e est nomminative vis ` a vis du NIC.195. appel´ e aussi celui des “ top levels domains ” (TLD). entreprises.net/ pour plus d’informations.DNS Cette organisation du nommage pallie aux inconv´ enients de la premi` ere m´ ethode : – Le NIC g` ere le plus haut niveau de la hi´ erarchie. – Les instances r´ egionales du NIC g` erent les domaines qui leur sont d´ evolus. On dit aussi qu’il a l’autorit´ e sur son domaine (“ authoritative 8 for the domain ”) Racine non nommée Sens de lecture com arpa edu gov int mil net org ae Emirats Arabes Unis fr zw Zimbabwe Domaines du niveau le plus élevé (TLD) in−addr Domaines du second niveau ecp 138 Contour de zone cti sio 195 Domaines génériques Domaines nationaux 10 52 52. ´ egalement “ man whois ” sur une machine unix 7 6 .. interrogeable par l’utilitaire du mˆ eme nom.in−addr.) est en charge de son domaine et des sous domaines qu’il cr´ ee.fr.nw.10. . entit´ es administratives. Le nommage sur deux lettres des pays est issu de la norme ISO 31667 . figure VII.

– Les chiffres [0-9] et le tiret peuvent ˆ etre utilis´ es.). qui indique un nommage absolu10 . comme “ Fully Qualified Domain Name ” 9 .fr et www. L’usage du “ . – Les noms complets ne doivent pas faire plus de 255 caract` eres de long. “ Top 100 Host Names ” 10 FQDN.ecp. – Les majuscules et minuscules sont indiff´ erenci´ ees. Il y a des noms “ relatifs ” et des noms “ absolus ”.nw. En r` egle g´ en´ erale il n’est pas utile de l’employer.fr. – Les chaˆ ınes de caract` eres comme “ NIC ” ou d’autres acronymes bien connus sont ` a ´ eviter absolument. pourtant il n’y a aucune confusion possible entres ces machines.. Chaque site raccord´ e de mani` ere permanente proc` ede de cette mani` ere.sio. des machines de mˆ eme nom peuvent se trouver dans des domaines diff´ erents sans que cela pose le moindre probl` eme. est r´ eserv´ e` a certains outils comme ping ou traceroute et aux fichiers de configuration du serveur de noms.2 Fonctionnement du DNS – Les ´ eventuels conflits de nommage sont ` a la charge des administrateurs de domaine. selon le site du “ Network Wizards Internet Domain Suvey ” (www.ecp.1 Fonctionnement du DNS Convention de nommage La RFC 1034 pr´ ecise que les noms de machines sont d´ evelopp´ es un peu comme les noms de fichiers d’un syst` eme hi´ erarchis´ e (Unix. . ” est le s´ eparateur – Chaque nœud ne peut faire que 63 caract` eres au maximum . le soulign´ e ( ) est un abus d’usage. – Le “ . Le nom “ www ” est de loin le plus employ´ e 9 . ” en fin de nom. 107 2 2. comme des chemins dans un syst` eme de fichiers. 901 961 instances en janvier 2003 contre 1 203 856 instances en janvier 2002. – Chaque domaine entretient une base de donn´ ees sur le nommage de ses machines. Celle-ci est mise ` a disposition de tous les utilisateurs du r´ eseau. mˆ eme encadr´ ees par d’autres caract` eres. – Le point “ . “ le bon usage ” les limite ` a 12 caract` eres et commen¸ cant par une lettre. ainsi il n’y a pas une base de donn´ ees pour l’Internet mais un ensemble structur´ e de bases de donn´ ees reli´ ees entres elles et formant une gigantesque base de donn´ ees distribu´ ee . Du fait de la hi´ erarchisation.com). . comme par exemple entres les machines www. ” et le blanc “ ” sont proscrits.

68 138.52. partie du syst` eme qui est en charge de r´ esoudre les probl` emes de conversion entre un nom de machine et son adresse IP.fr =⇒ Succ` es ! 2. en pr´ esence d’un nom symbolique x.. pour r´ esoudre les requˆ etes de r´ esolution de noms. n} l’existence de x.2 Le “ Resolver ” Le “ resolver ” d´ esigne un ensemble de fonctions11 plac´ ees dans la biblioth` eque standard (gethostbyname vu en cours de programmation invoque les fonctions du “ resolver ”) qui font l’interface entre les applications et les serveurs de noms.ecp. Dans le cas contraire la machine en question n’est pas atteignable.ecp.sio.195. jusqu’` a trouver un nom plus complet que le serveur de noms saura reconnaˆ ıtre dans sa base de donn´ ees. 2. NIS. Le “ resolver ” applique la strat´ egie locale de recherche.. dn comp.fr =⇒ Succ` es ! b) machine = www. . res send.di .ecp. utilise un m´ ecanisme de compl´ etion (“ domain completion ”) pour compl´ eter le nom de machine simplifi´ e.sio.dn .. ecp. . Pour cela il s’appuie sur son fichier de configuration /etc/resolv.dn et s’arrˆ ete si celle-ci est reconnue. d´ efinie par l’administrateur de la machine.sio. res init.fr. donc accessibles par d´ efaut).132 Plus g´ en´ eralement ce nom de domaine se pr´ esente sous forme d1 .69 138. 138. . fichier /etc/hosts. res search.).195.di+1 .fr =⇒ Echec ! www. .fr. .d2 . i ∈ {1.ecp.52.Faire “ man resolver ” sur une machine unix 11 . le “ resolver ” teste pour chaque i. avec le domaine ci-dessus : a) machine = www (requˆ ete) www.sio.108 “ Completion ” Serveur de noms .52.ecp.sio (requˆ ete) ´ www.195..DNS Sur un mˆ eme r´ eseau logique on a coutume de ne pas utiliser le nom complet des machines auxquelles on s’adresse couramment et pourtant ¸ ca fonctionne ! La raison est que le “ resolver ”. res query. dn expand . Exemple d’un tel fichier : domain search nameserver nameserver nameserver sio..conf). Ainsi. Le “ resolver ” connait par hypoth` ese le nom de domaine courant (lu dans le fichier de configuration /etc/resolv. ..fr sio. res mkquery.conf et sur la strat´ egie locale (voir paragraphe suivant) d’emploi des possibilit´ es (serveur de noms. Exemple. Par construction les fonctions du “ resolver ” sont compil´ ees avec l’application qui les utilise (physiquement dans la libc.

Cette d´ emarche s’appuie sur plusieurs strat´ egies possibles.3 Strat´ egie de fonctionnement La figure VII.conf pr´ ecise au moins le domaine local assorti de directives optionnelles. 2. un hˆ ote du domaine “ R2 ” qui veut r´ esoudre une adresse du domaine “ R1 ” doit n´ ecessairement passer par un serveur interm´ ediaire pour obtenir l’information.02 Le fichier /etc/resolv.03 illustre le fait que chaque serveur de noms a la maˆ ıtrise de ses donn´ ees mais doit interroger ses voisins d` es qu’une requˆ ete concerne une zone sur laquelle il n’a pas l’autorit´ e de nommage.Strat´ egie de fonctionnement 109 Application Code utilisateur /etc/resolv. Subdivistion hiérarchiques des domaines Domaine R1 Domaines Domaine R2 figure VII.conf Requete UDP "Resolver" Reponse UDP Serveur(s) de noms distant(s) figure VII.03 . Ainsi. que nous examinons dans les paragraphes suivants.

Le nsswitch sous HP-UX12 ou Solaris13 permet de passer de l’un ` a l’autre en cas d’indisponibilit´ e. Le “ resolver ” envoie sa requˆ ete au serveur local. 2. quelle que soit l’architecture logicielle le “ resolver ” est configur´ e ` a l’aide du fichier /etc/resolv.conf. C’est donc toujours en passant par ce m´ ecanisme que les processus acc` edent ` a l’espace de noms. Le “ resolver ” envoie la demande au serveur local. Le serveur local re¸ coit la demande. Cette fonction est syst´ ematiquement pr´ esente dans la biblioth` eque standard (libc) et est donc accessible potentiellement ` a tout ex´ ecutable lors d’une compilation. Interrogation distante 1.DNS La figure ci-dessous illustre la recherche d’un nom dans le domaine local. Sur les machines Unix cela se traduit par l’appel ` a la fonction gethostbyname. 12 13 Unix de “ Hewlett-Packard ” Unix de “ Sun Microsystem ” . La fonction gethostbyname fait syst´ ematiquement appel au “ resolver ” d´ ej` a cit´ e. Enfin. Un processus demande l’adresse IP d’une machine. le fichier /etc/host.04 : 1.110 Interrogation locale Serveur de noms . Le “ resolver ” utilise une strat´ egie g´ en´ erale ` a la machine (donc qui a ´ et´ e choisie par son administrateur) pour r´ esoudre de telles requˆ etes : 1. Utilisation des services type “ YP ” (NIS) si configur´ es 3. Le processus demande l’adresse IP d’un serveur. parcequ’il a l’autorit´ e sur le domaine demand´ e (le sien). 1 Processus Serveur de noms local 2 figure VII. Sur la figure VII. il r´ epond directement au “ resolver ”. Utilisation du fichier /etc/hosts Cette strat´ egie est param` etrable en fonction du constructeur.conf sous FreeBSD effectue un travail assez proche. Interrogation du serveur de noms (DNS) si pr´ esent 2.04 Un processus (“ browser ” http par exemple) recherche l’adresse d’un nom de serveur.

5. Le serveur local retourne la r´ eponse au “ resolver ” 111 Serveur de noms racine 2 3 Processus 1 6 Serveur de noms local 4 5 Serveur de noms distant figure VII. les ´ etapes 2 et 3 deviennent inutiles et le serveur local interroge alors directement le serveur distant. 3. Ainsi. notamment vis ` a vis des deux crit` eres suivants : . Le serveur distant renvoie l’information demand´ ee au serveur local. Le serveur local interroge ce nouveau serveur distant.D.net : 1. – Si un processus demande une machine du mˆ eme domaine que la pr´ ec´ edente (mais pas du mˆ eme nom ! :).Strat´ egie de fonctionnement 2. – Dans le cas g´ en´ eral les serveurs racines ne voient pas plus de 1 ou deux niveaux en dessous. 6. Le serveur racine donne l’adresse d’un serveur pour D 2.B.C. du moins pendant la dur´ ee de validit´ e des donn´ ees (cf page 121). La dur´ ee de vie de l’adresse du serveur distant est elle aussi assortie d’une date limite d’utilisation. Pour lever l’ind´ etermination il interroge alors un serveur racine pour avoir l’adresse d’un serveur qui a l’autorit´ e sur la zone demand´ ee par le processus. Interrogation par “ procuration ” Le processus de recherche d´ ecrit au paragraphe pr´ ec´ edent ne convient pas dans tous les cas. si un processus demande A. Le serveur racine renvoie l’adresse d’un serveur qui a officiellement l’autorit´ e sur la zone 4. Le serveur pour D donnera peut ˆ etre l’adresse d’un serveur pour C et ainsi jouera le rˆ ole de serveur racine de l’´ etape pr´ ec´ edente.05 Remarques importantes : – Un m´ ecanisme de cache acc´ el` ere le processus ci-dessus : Si un processus redemande la mˆ eme machine distante on se retrouve dans le cas d’une interrogation “ locale ”. Le serveur local re¸ coit la requˆ ete et dans ce deuxi` eme cas il ne peut pas r´ epondre directement car la machine n’est pas dans sa zone d’autorit´ e.

195. c’est pourquoi il peut ˆ etre strat´ egique de concentrer les demandes vers un seul serveur r´ egional et donc de b´ en´ eficier au maximum de l’effet de cache d´ ecrit pr´ ec´ edement. – Strat´ egiquement il est pr´ ef´ erable de les placer en dehors du domaine. SOLEIL.UVSQ.05 montre le serveur local qui interroge directement les serveurs distants.ecp. Le trafic destin´ e au serveur de noms peut consommer une partie non n´ egligeable de la bande passante. 2. leur position dans l’arborescence leur conf` ere un statut qui se nomme : serveur racine (“ root name server ”) Un serveur ayant autorit´ e sur la racine de l’espace de nommage.ECP.fr (138. de l’ordre de trois ou quatre est souvent recontr´ e. Il peut y avoir autant de serveurs secondaires que souhait´ e.33. les serveurs secondaires re¸ coivent en pr´ evision une copie de la base de donn´ ees. par exemple dans le r´ epertoire /etc/namedb .root.5 14 Conversion d’adresses IP en noms On dit aussi questions inverses (“ inverse queries ”).FR.NIC. fichier named.ROOT-SERVERS.NET14 serveur primaire (“ primary server ”) Un serveur de noms qui a l’autorit´ e pour un ou plusieurs domaines (est d´ etenteur d’autant de SOA – Voir page 118).4 Hi´ erarchie de serveurs Si tous les serveurs de noms traitent de donn´ ees d’un format identique. NADIA. ou ils les lisent sur leur disque dur s’ils ont eu le temps de les y stocker au pr´ ec´ edent arrˆ et du serveur. nomm´ es [A-M].ecp. Il lit ses donn´ ees dans un fichier stock´ e sur disque dur. cette d´ emarche pose des probl` emes de s´ ecurit´ e dans le cas d’un domaine au sein duquel seuls un ou deux serveurs sont autoris´ es. – Au d´ emarrage ils re¸ coivent les informations du serveur primaire. Par exemple.FR a comme serveurs secondaires NS2.FR. L’administrateur du (des) domaine(s) met ` a jour les informations des domaines concern´ es depuis cette machine. sur le r´ eseau d’un autre FAI. 2.FR. 2.DNS 1. S´ ecurit´ e d’un domaine 2. le serveur PISTON. et si elles sont encore valides. Actuellement il y a 13 serveurs de ce type.fr n’interroge pas directement le serveur racine.3). Conservation de la bande passante Serveur de noms . ` a son d´ emarrage. il passe par le serveur officiel qui est piston. La figure VII.IRCAM. Par exemple le serveur de noms du domaine sio.112 1. serveur secondaire (“ secondary server ”) Dans le cas d’une panne ou d’un engorgement du serveur primaire.

01.arpa (Classe B 138. Le contraire provoque bien souvent la grogne (` a juste titre) des administrateurs.in-addr. .arpa. cela signifie cette idresse ip est administr´ ee. la gestion de la zone reverse reste du domaine du prestataire et non de son client. Si une machine est enregistr´ ee dans le TLD in-addr.01).arpa Du fait de la lecture inverse de l’arbre.138. A un domaine un peu particulier “ in-addr. ce qui ne prouve rien quant aux bonnes intentions de son utilisateur mais est un gage de “ bonne conduite ” au niveau du r´ eseau. ce qui signifie que les adresses selon les contours naturels des octets. Par exemple pour la classe B de l’ecp : 195..arpa en questionnant d’abord les serveurs du TLD in-addr. des classes d’adresses dont il dispose pour nommer ses machines. . pour les clients de fournisseurs d’acc` es n’ayant comme adresses IP officielles que celles d´ elimit´ ees par un masque de sous r´ eseau large seulement que de quelques unit´ es (< 254).in-addr. Il faut noter que la notion de sous r´ eseau (cf page 35) n’est pas applicable au domaine “ in-addr. portion du domaine “ arpa ”. s’il en re¸ coit la d´ el´ egation (celle-ci est ind´ ependante des autres noms de domaines).arpa ”. Ainsi.arpa puis ceux pour la zone 138.195) Le fonctionnement par d´ el´ egation est calqu´ e sur celui utilis´ e pour les noms symboliques (c’est la justification de son insertion dans la figure VII.arpa. Chaque administrateur de zone peut aussi ˆ etre en charge de l’administration des “ zones reverses ”.in-addr. 113 .Conversion d’adresses IP en noms Cette possibilit´ e est indiqu´ ee comme optionnelle dans la RFC 1034 mais est n´ eanmoins bien commode voire mˆ eme fr´ equement requise pour le client r´ eseau de services comme le courrier ´ electronique ou mˆ eme les serveurs de fichiers anonymes (ftp). les adresses IP sont exprim´ ees en “ mirroir ” de la r´ ealit´ e.138. Ainsi on peut obtenir quels sont les serveurs qui ont autorit´ e sur le 195.arpa ”. Toutes les adresses sont exprim´ ees dans le “ top level domain ” : in-addr. ` gauche de la figure on distingue Il faut reconsid´ erer la figure VII. Il faut ajouter que le bon usage sur les r´ eseaux est de pr´ evoir une entr´ ee dans la zone reverse pour toutes les machines utiles et utilis´ ees d’un r´ eseau accessible de l’Internet.

selon les cas ci-dessus. – Normalement la majeure partie du trafic se fait avec UDP.DNS 2. Dans le premier cas il s’agit d’un m´ ecanisme nomm´ e TSIG/TKEY. En g´ en´ eral. En effet. . il effectue une connexion TCP vers le serveur primaire pour obtenir sa copie de la base de donn´ ees. Des “ resolver ” capables d’interroger les serveurs avec une strat´ egie d´ efinie par l’administrateur du syst` eme. 2. 3 S´ ecurisation du DNS Le serveur de noms est la clef de voˆ ute des r´ eseaux. qu’est-ce qui vous assure que le site web de votre banque sur lequel vous venez de taper votre mot de passe est bien le vrai site officiel de cet ´ etablissement ? L’apparence de la page de garde ? Typiquement il y a deux situations de vuln´ erabilit´ e: 1. Interrogation d’un serveur par un resolveur Pour faire confiance en ce que vous dit le serveur de noms interrog´ e il faut d’une part que vous soyez certains d’interroger la bonne machine et d’autre part que celle-ci soit d´ etentrice d’une information incontestable. 3. dans le deuxi` eme DNSSEC. mais si la taille d’une r´ eponse d´ epasse les 512 octets. toutes les trois heures (c’est une valeur courante) il effectue cette d´ emarche. – Quand un serveur secondaire d´ emarre son activit´ e. notament lors de transferts de zones. TCP ou UDP ? Le port 53 “ bien connu ” pour le serveur de noms est pr´ evu pour fonctionner avec les deux protocoles. C’est une chaˆ ıne de confiance. Dialogue serveur ` a serveur. 2. Un espace de noms et une base de donn´ ees qui associe de mani` ere structur´ ee des noms ` a des adresses IP. un drapeau de l’en-tˆ ete du protocole l’indique au client qui reformule sans question en utilisant TCP. La version ISC (consultez le paragraphe 6) du programme BIND utilise deux strat´ egies diff´ erentes.114 Serveur de noms . qui remonte par construction du fonctionnement du serveur de noms interrog´ e par votre application (comme nous l’avons examin´ e dans les paragraphes qui pr´ ec` edent) jusqu’aux serveurs racines. comme toujours en s´ ecurit´ e. Des serveurs de noms.6 Conclusion Qu’est-ce qu’un DNS ? Un serveur de noms repose sur trois constituants : 1. qui sont comp´ etents pour r´ epondre sur une ou plusieurs zones. et c’est en mˆ eme temps un de ses talons d’Achille parceque les programmes que nous employons quotidiennement utilisent sans discernement l’information acquise du r´ eseau.

DNSSEC utilise un m´ ecanisme bas´ e sur le principe d’un ´ echange de clefs publiques. mais leur signature avec un algorithme de type MD515 Le serveur qui re¸ coit un tel paquet sign´ e. ´ La propagation de cette clef est manuelle (scp. Pour ´ eviter de trop longs temps de chiffrement.html 16 15 : . TSIG sert ´ egalement ` a la mise ` a jour dynamique (“ dynamic update ”). rend les mˆ emes services que TSIG tout en ´ evitant le transport du secret (TSIG). calcule la signature du paquet avec le mˆ eme algorithme (MD5).TSIG/TKEY pour s´ ecuriser les transferts TSIG/TKEY utilisent une clef sym´ etrique.1 TSIG/TKEY pour s´ ecuriser les transferts L’usage d’une clef sym´ etrique indique qu’il s’agit d’un secret partag´ e entre 2 serveurs. Cette mani` ere de proc´ eder se traduit donc rapidement par un grand nombre de clefs ` a g´ erer ce qui interdit un d´ eploiement g´ en´ eralis´ e sur l’Internet. donc mise en place au coup par coup. .com/rsalabs/faq/3-6-1. La g´ en´ eration de cette clef peut ˆ etre manuelle ou automatis´ ee avec le programme “ dnssec-keygen ”. TKEY TKEY. d´ ecrit dans la RFC 2930. donc partag´ ee par les deux serveurs (cette clef leur est connue par des m´ ecanismes diff´ erents). la connaissance de la clef par le client sert ` a la fois ` a l’authentifier et ` a signer les donn´ ees 16 . Le bon usage veut que l’on d´ edie une clef ` a un certain type de transaction (par exemple le transfert d’une zone) entre deux serveurs donn´ es.rsasecurity. .Eviter absolument l’usage de tout protocole diffusant un mot de passe en clair sur le r´ eseau). 115 3. Ne pas h´ esiter ` a faire un man md5 sur une machine Unix pour en savoir plus ! cf le programme nsupdate et la RFC 2136 17 On peut trouver une explication de cet algorithme sur ce site http ://www. Le r´ esultat de cette comparaison dit si les donn´ ees sont valides ou non. Cette caract´ eristique est bas´ ee sur le calcul la clef sym´ etrique automatiquement avec l’algorithme de DiffieHellman plutˆ ot que par un ´ echange “ manuel ”17 . TSIG TSIG comme “ Transaction SIGnature ” est la m´ ethode d´ ecrite dans la RFC 2845 et bas´ ee sur l’usage d’une clef sym´ etrique. L’int´ erˆ et de ces transferts sign´ es est que les serveurs secondaires sont certains de mettre ` a jour leur zones avec des donn´ ees qui proviennent bien du d´ etenteur du SOA et qui sont absolument semblables ` a ce qui a ´ et´ e´ emis. d´ echiffre la signature jointe avec la clef secr` ete partag´ ee et compare les deux signatures. La mˆ eme clef sert au chiffrement et au d´ echiffrement des donn´ ees. ce ne sont pas les donn´ ees ` a transf´ erer qui sont chiffr´ ees (ce ne sont pas des donn´ ees confidentielles).

DNS Par contre. met ` a jour le serveur de noms pour ˆ etre toujours accessible. le DNSSEC permet de construire une chaˆ ıne de confiance. . Avec comme mot clef “ dyndns ”.116 Serveur de noms . Comme d’ailleurs le m´ ecanisme suivant. . cet algorithme ` a base du tandem clef publique – clef priv´ ee suppose l’ajout d’un champ KEY dans les fichiers de configuration du serveur. qui proposent cette fonctionnalit´ e. requˆ etes) Mis en place. La distribution d’une clef publique (champ KEY) 2.isc. depuis le “ top level ” jusqu’au serveur interrog´ e par votre station de travail.2 DNSSEC pour s´ ecuriser les interrogations DNSSEC d´ ecrit dans la RFC 2535 permet : 1. C’est typiquement le cas d’un tout petit site qui a enregistr´ e son domaine chez un vendeur quelconque et qui au gr´ e des changements d’adresse ip (attribu´ ee dynamiquement par exemple avec DHCP18 ) par son fournisseur d’acc` es. 18 Cf http ://www. 4 Mise ` a jour dynamique La mise ` a jour dynamique de serveur de noms (RFC 2136) est une fonctionnalit´ e assez r´ ecente sur le r´ eseau. La certification de l’origine des donn´ ees 3. les moteurs de recherche indiquent l’existence de sites commerciaux ou ` a caract` ere associatif. elle permet comme son nom l’indique de mettre ` a jour la base de donn´ ee r´ epartie. 3.org/products/DHCP/ . L’authentification des transactions (transferts. Aussi bien au niveau du r´ eseau local qu’` a l’´ echelle de l’Internet il s’agit le plus souvent de faire correspondre un nom de machine fixe avec une adresse ip changeante.

ou “ Resource Record ”. ou “ Resource Record ”.boot selon les versions). les “ Resource Record ”.conf ou named. le contenu de ces zones est inscrit dans des fichiers ASCII . MX et PTR. mais d’apporter quelques ´ el´ ements fondamentaux pour en aider la lecture. sont absolument fondamentaux pour faire fonctionner un serveur de noms : SOA. S’il est serveur primaire d’une ou plusieurs zones. d´ efini ` a l’origine dans la RFC 1035. Ce transfert est effectu´ e automatiquement ` a la fr´ equence pr´ evue par l’administrateur du champ SOA et donc connue d` es le premier transfert. Cette action se traduit par ce que l’on nomme un “ transfert de zone ”. Le propos de ce qui suit n’est pas de se substituer ` a une documentation nombreuse et bien faite sur le sujet. En pratique toutes les distributions (commerciales ou libres) du serveur de noms conservent ce format de base de donn´ ees. Le marqueur de fin de ligne (CR+LF) est aussi celui de la fin de l’enregistrement. leur syntaxe est succintement d´ ecrite dans le paragraphe suivant. le fichier de configuration indique au server de quelle(s) zone(s) il est secondaire (il peut ˆ etre secondaire d’un grand nombre de zones) et donc o` u (adresse IP) il devra aller chercher cette information. ou en RR. le serveur de nom a un format pour ses champs. . RR dans la suite de ce texte. En cas de changement sur le serveur principal.5 Format des “ Resource Record ” 117 5 Format des “ Resource Record ” Comme pour toute base de donn´ ees. la mise en œuvre du serveur seule change (fichier de configuration du daemon). Le constituant de base d’un serveur de noms est une paire de fichiers ASCII contenant les enregistrements. Le contenu g´ en´ eral d’un tel enregistrement a la forme suivante (les accolades indique des donn´ ees optionnelles) : {name} {ttl} addr-class Record Type Record Specific data Cinq enregistrements. Un serveur de noms a autorit´ e (responsabilit´ e du SOA) sur une ou plusieurs zones. celles-ci sont rep´ er´ ees dans ses fichiers de configuration (named. S’il est serveur secondaire. NS. celui-ci avertit (“ Notify ”) ses serveurs secondaires de la n´ ecessit´ e de recharger la zone pour ˆ etre ` a jour. A. Ceux-ci sont en g´ en´ eral ´ ecrits sur une seule ligne de texte (sauf pour le champ SOA qui s’´ etale sur plusieurs lignes.

Notez bien que rien dans la syntaxe ne permet de distinguer le serveur principal de ses secondaires. ”. regroup´ ees entres parenth` eses.ecp. Dans le fichier db. Un probl` eme concernant cette zone devra ˆ etre signal´ e par e-mail ` a hostmaster@sio.domain et db. ( 2003110301 .sio. ( . Le caract` ere “ .1 RR de type SOA $(ORIGIN) sio.fr. Le “ Expire ” indique le nombre de secondes maximum pendant lesquelles un serveur secondaire peut se servir des donn´ ees du primaire en cas d’´ echec du transfert. .ecp..ecp.” marque le d´ ebut d’un commentaire. ns−slave1.fr. hostmaster.ecp.” qui s’est transform´ e en “@”).ecp. Il doit figurer dans chaque fichier db. “ Minimum ttl ” est le nombre de secondes par d´ efaut pour le champ TTL si celui-ci est omis dans les RR. Serial 10800 . Le “ Refresh ” indique la fr´ equence. Expire (5w6d16h) 86400 ) .fr.fr.sio.fr.ecp. Les param` etres de ce SOA sont d´ ecrits sur plusieurs lignes.domaine : {name} {ttl} addr−class IN IN IN NS NS NS NS Name servers name ns−master.118 Serveur de noms . Le num´ ero de s´ erie doit changer ` a chaque mise ` a jour de la zone (sur le serveur principal). Retry (1H) 3600000 .adresse Le nom de cette zone est ici rep´ er´ e par le caract` ere @ qui signifie la zone courante.ecp.ecp. name {ttl} addr−class @ IN SOA SOA Origin Person in charge sio.fr (notez le “. rep´ er´ ee par la ligne au dessus “ $(ORIGIN) sio. La ligne aurait ´ egalement pu s’´ ecrire : sio. Refresh (3h) 3600 .ecp. Minimum ttl (1D) SOA est l’acronyme de “ Start Of Authority ” et d´ esigne le d´ ebut oblig´ e et unique d’une zone.fr.sio.fr.2 RR de type NS Il faut ajouter une ligne de ce type (“ Name Server ”) pour chaque serveur de noms pour le domaine. 5.ecp.fr. en secondes. Le “ Retry ” indique combien de secondes un serveur secondaire doit attendre un transfert avant de le d´ eclarer impossible.. ` a laquelle les serveurs secondaires doivent consulter le primaire pour ´ eventuellement lancer un transfert de zone (si le num´ ero de s´ erie est plus grand). ns−slave2. hostmaster.fr.ecp.DNS 5. Les points en fin de noms sont n´ ecessaires. qui s’arrˆ ete ` a la fin de ligne.sio. IN SOA sio.fr.sio.

in−addr. {name} gw−sio {ttl} addr−class IN IN IN A A A A address 138.sio.195.52. .fr. on trouvera : 119 52.138.ecp.65 5. IN 52.ecp. ou encore “ Address record ” attribue une ou plusieurs adresses ` a un nom. sio.195.fr.sio.52.in−addr. sio. IN IN MX MX 10 20 smtp.adresse.52.laissus. gw−sio.195.ecp.sio.ARPA. name 2 33 65 {ttl} addr−class IN IN IN PTR PTR PTR PTR real name gw−sio.fr.fr.2 138.195.5 RR de type MX Le RR de type MX.arpa. ns−slave1. gw−sio.ecp.ecp.fr.arpa.ecp.195. 5.sio. 5. ou encore “ Mail eXchanger ” concerne les relations entre le serveur de noms et le courrier ´ electronique.” en fin de nom qui interdit la compl´ etion (il s’agit bien du nom FQDN).195. Il doit y avoir un RR de type A pour chaque adresse d’une machine.ecp.ecp. par exemple db.RR de type A Dans le fichier qui renseigne la zone “ reverse ”.33 138.ecp.4 RR de type PTR Le RR de type PTR. Nous examinerons son fonctionnement ult´ erieurement dans le chapitre sur le courrier ´ electronique (cf page 137).fr. ns−slave2. IN NS NS NS ns−master. donc dans le domaine sp´ ecial IN-ADDR. Notez le “.in−addr.138.fr.fr. c’est donc celui qui est potentiellement le plus fr´ equement utilis´ e.138. mailhost.fr.sio. ou encore “ PoinTeR record ” permet de sp´ ecifier les adresses pour la r´ esolution inverse.fr.arpa. IN 52.3 RR de type A Le RR de type A.sio.

fr. Il existe d’autres RR. www.fr est un surnom de la machine srv. .6 RR de type CNAME Le RR de type CNAME. Cette possibilit´ e est tr` es employ´ ee pour constituer des machines virtuelles. Le lecteur est fortement incit´ e ` a se reporter au “ Name Server Operations Guide ” pour plus d’informations. ou encore “ canonical name ” permet de distinguer le nom officiel d’une machine de ses surnoms.laissus. IN CNAME srv.120 Serveur de noms . WKS et KEY. On notera que les domaines n’ont rien ` a voir mais que ¸ ca fonctionne quand mˆ eme parfaitement.ecp. . comme nous le verrons au chapitre X. .DNS 5. non trait´ es dans cette pr´ esentation parcequ’ils n’apportent rien ` a la compr´ ehension du fonctionnement du serveur de noms.sio. la machine www. TXT.7 Autres RR. entres autres HINFO . 5.fr. Dans l’exemple ci-dessus.fr.ecp.sio.laissus.

6 BIND de l’ISC 121 6 BIND de l’ISC L’Internet Software Consortium19 est une organisation non commerciale qui d´ eveloppe et favorise l’emploi de l’outil “ Open Source ” comme BIND (acronyme de “ Berkeley Internet Name Domain ”).root localhost. named.conf named.192. 8.isc.1 Architecture du daemon “ named ” La figure VII.rev db. On peut ais´ ement installer ce logiciel sur ` a peu pr` es toutes les impl´ ementations d’unix connues (cf le fichier INSTALL du r´ epertoire src). Elle fournit une version du daemon “ named ” et un “ resolver ” int´ egr´ e dans la libc.3.2.192 db.org/ taper “ named -v ” pour les discerner entre-elles . Sa structure d´ epend de la version du logicielle.168.06 montre le sch´ ema g´ en´ eral de l’organisation logicielle du daemon “ named ”.9.conf selon que l’on est en version 4. Cette version libre du serveur de nom est la plus employ´ ee sur les machines Unix du r´ eseau.6 ou 9.terminal /var/run/named. queries Mise à jour dynamique de RRs Signaux Syslog named rndc named.pid /var/run/ndc /var/tmp/* Contour logique du serveur de noms figure VII. heureusement dans les deux cas la s´ emantique reste proche ! 19 20 http ://www.06 6. Au d´ emarrage celui-ci lit sa configuration dans un fichier qui peut se nommer named.3 et les suivantes du logiciel20 . named nsupdate Réseau tcp/ip Transferts de zones. ce qui justifie que l’on s’y int´ eresse.boot ou named.conf C’est le fichier de configuration lu au d´ emarrage.11.

ils seront examin´ es en travaux pratiques. 7 Bibliographie Quand on “ sait d´ ej` a ”. Un certain nombre de signaux modifient le comportement du serveur.192. Inc. Enfin la fl` eche vers syslog signifie que named utilise ce service pour laisser une trace de son activit´ e (cf cours sur l’architecture des serveurs).root Ce fichier contient la liste des serveurs de la racine. Enfin. souvent 1). — 1992 On trouve le BOG dans la distribution de “ bind ” ` a cette adresse : http ://www. tout comme les fichiers lus ou ´ ecrits dans les r´ epertoires /var/run et /var/tmp/. db. d´ etaille le contenu des champs de la base de donn´ ees. localhost. mais ne lui permet pas de r´ esoudre 127.fr. Le canal de communication entre les deux programmes est une socket unix AF UNIX vs AF LOCAL (cf cours de programmation page 199). Dunlap & Michael J. le BOG.DNS named.rev Ce fichier contient la base de donn´ ee du “ localhost ”. rndc ou “ name server control utility ” est comme son nom l’indique un outil d’administration du programme named lui-mˆ eme.xx (o` u xx est le num´ ero de la machine courante. Karels — “ Name Server Operations Guide ” — Ce document est accessible sur le serveur de l’Internet Software Consortium 21 – By the Nominum BIND Development Team — “ BIND 9 Administrator Reference Manual ” — Version 9. Personne n’a la responsabilit´ e du r´ eseau 127.0. Comer — “ Internetworking with TCP/IP – Volume I” (chapter 18) — Prentice All — 1988 – Paul Albitz & Cricket Liu — “ DNS and BIND ” — O’Reilly & Associates. leur nom et adresse IP. Ce fichier permet la convertion des noms en adresses IP. db. donc chacun doit le g´ erer pour lui-mˆ eme.0. la page de man de “ named ” suffit ` a v´ erifier un point obscur ! Sinon il existe une documentation tr` es fournie sur le sujet.168.122 Serveur de noms .3 22 – Douglas E. avec notamment : – Kein J. c’est ` a dire le “ Bind Operations Guide ”. c’est ` a dire le fichier qui permet au logiciel de convertir les adresses IP en noms.org/products/BIND/ 22 on trouve ´ egalement la derni` ere version de ce document sur le site de l’ISC 21 .terminal Exemple de fichier de base de donn´ ees pour le domaine factice terminal.isc.fr qui est utile durant les travaux pratiques.1.192 Ce fichier contient la base de donn´ ees de la zone “ reverse ” pour le domaine terminal. L’absence de ce fichier n’empˆ eche pas le serveur de fonctionner. C’est une alternative ` a l’usage direct des signaux.

Bibliographie – “ Installing and Administering ARPA Services ” — Hewlett Packard — 1991 – W. Richard Stevens — “ TCP/IP Illustrated Volume I ” (chapter 14) — Prentice All — 1994 Et pour en savoir encore plus. . . RFC 1034 “ Domain names - concepts and facilities ”. P.V. Mockapetris. Nov-01-1987. (Format : TXT=129180 bytes) (Obsoletes RFC0973, RFC0882, RFC0883) (Obsoleted by RFC1065, RFC2065) (Updated by RFC1101, RFC1183, RFC1348, RFC1876, RFC1982, RFC2065, RFC2181) (Status : STANDARD) RFC 1035 “ Domain names - implementation and specification ”. P.V. Mockapetris. Nov-01-1987. (Format : TXT=125626 bytes) (Obsoletes RFC0973, RFC0882, RFC0883) (Obsoleted by RFC2065) (Updated by RFC1101, RFC1183, RFC1348, RFC1876, RFC1982, RFC1995, RFC1996, RFC2065, RFC2181, RFC2136, RFC2137) (Status : STANDARD) RFC 1101 “ DNS encoding of network names and other types ”. P.V. Mockapetris. Apr-01-1989. (Format : TXT=28677 bytes) (Updates RFC1034, RFC1035) (Status : UNKNOWN) RFC 1123 “ Requirements for Internet hosts - application and support ”. R.T. Braden. Oct-01-1989. (Format : TXT=245503 bytes) (Updates RFC0822) (Updated by RFC2181) (Status : STANDARD) RFC 1713 “ Tools for DNS debugging ”. A. Romao. November 1994. (Format : TXT=33500 bytes) (Also FYI0027) (Status : INFORMATIONAL) RFC 2136 “ Dynamic Updates in the Domain Name System (DNS UPDATE) ”. P. Vixie, Ed., S. Thomson, Y. Rekhter, J. Bound. April 1997. (Format : TXT=56354 bytes) (Updates RFC1035) (Updated by RFC3007) (Status : PROPOSED STANDARD) RFC 2535 “ Domain Name System Security Extensions ”. D. Eastlake 3rd. March 1999. (Format : TXT=110958 bytes) (Obsoletes RFC2065) (Updates RFC2181, RFC1035, RFC1034) (Updated by RFC2931, RFC3007, RFC3008, RFC3090, RFC3226, RFC3445) (Status : PROPOSED STANDARD) RFC 2845 “ Secret Key Transaction Authentication for DNS (TSIG) ” P. Vixie, O. Gudmundsson, B. Wellington. May 2000. (Format : TXT=32272 bytes) (Updates RFC1035) (Status : PROPOSED STANDARD) RFC 2930 “ Secret Key Establishment for DNS (TKEY RR) ” D. Eastlake 3rd. September 2000. (Format : TXT=34894 bytes) (Status : PROPOSED STANDARD)

123

124

Serveur de noms - DNS

Chapitre VIII Courrier ´ electronique
1 G´ en´ eralit´ es sur le courrier ´ electronique

Le courrier ´ electronique, ou “mail” est l’un des deux services les plus populaires sur le r´ eseau, avec le web. C’est aussi l’un des plus vieux services du r´ eseau, bien avant que le r´ eseau existe sous la forme que l’on pratique aujourd’hui1 . La pr´ eface de la [RFC 822], document fondamental parmi les documents fondamentaux pour ce chapitre, laisse supposer l’existence de nombreux formats d’´ echanges ´ electroniques sur l’Arpanet, et ce avant 1977. Sa popularit´ e repose sur sa grande souplesse et rapidit´ e d’emploi. Il permet aussi bien les ´ echanges professionnels que les ´ echanges priv´ es ; son mode d’adressage donne la possibilit´ e d’envoyer un courrier ` a une personne comme ` a une liste de personnes ou encore ` a un automate capable de rediffuser vers un groupe (“mailing-list”). De nombreux outils d´ evelopp´ es, ` a l’origine essentiellement sur le syst` eme Unix, autour de ce concept ouvrent un vaste champs de possibilit´ es aux utilisateurs de tous les syst` emes d’exploitation, comme la ventilation des courriers par th` eme, le renvoi automatique, le r´ epondeur (pendant les absences), l’acc` es ` a sa boite aux lettres depuis des endroits diff´ erents, la r´ eception de fax,. . .La liste ne peut pas ˆ etre exhaustive ! C’est souvent pour avoir l’usage du courrier ´ electronique que les entreprises acc` edent ` a l’Internet. Les autres services viennent apr` es.

1.1

M´ etaphore du courrier postal

Un courrier postal (ou de surface, “s-mail”) a besoin de l’adresse du destinataire, de l’adresse de l’´ emetteur (pour la r´ eponse), d’un timbre et d’une enveloppe. Une fois dans la boˆ ıte aux lettres, l’enveloppe est rout´ ee de la poste locale vers la poste la plus proche du destinataire, pour ˆ etre finalement d´ elivr´ ee par un facteur.
1

Un historique int´ eressant http ://www.fnet.fr/history/

126

Courrier ´ electronique Pour un courrier ´ electronique c’est la mˆ eme chose ! Il existe de tr` es nombreux outils pour lire/´ ecrire un mail, des outils pour jouer le rˆ ole du bureau de poste et/ou du facteur. Sous Unix le facteur est le syst` eme lui-mˆ eme, le bureau de poste un programme nomm´ e “ sendmail2 ”. Il existe deux autres alternatives non abord´ ees dans ce document, ` a savoir le 3 4 programme “ qmail ” ou encore le programme “ postfix ”.

1.2

Adresse ´ electronique

Tous les courriers ´ electroniques ont un destinataire pr´ ecis´ e par son adresse 5 ´ electronique, ou “ E-mail ”. Celle-ci pr´ ecise le nom du destinataire et le site o` u il re¸ coit son courrier ´ electronique. Le nom du destinaire est une chaˆ ıne de caract` eres. Traditionnellement et pour des raisons techniques, sur le syst` eme Unix, le login de l’utilisateur peut ˆ etre ´ egalement le nom de sa boite aux lettres. Cette possibilit´ e est de moins en moins vraie ` a mesure que d’autres syst` emes avec d’autres logiques de fonctionnement font leur apparition sur le r´ eseau (notamment la lecture du mail via un interface html ou encore lorsque le mail est g´ er´ e par une base de donn´ ees). Par exemple, il est assez fr´ equent de voir employer le nom complet (pr´ enom et nom de famille) pour d´ esigner l’interlocuteur distant. La conversion ultime entre cette convention et la boˆ ıte aux lettres de l’utilisateur est l’affaire du “bureau de poste le plus proche”, c’est ` a dire le programme “sendmail” pour ce document (voir plus loin au paragraphe 4). Le caract` ere “ @ ” (lire “ at ”) s´ epare l’identificateur du destinataire de la destination. La destination est peut ˆ etre vide (il s’agit alors d’un destinataire sur la machine courante, ou d’un “alias” que le sendmail local sait traiter), ˆ etre un nom de machine du domaine local, le nom d’un autre domaine ou d’une machine sur un autre domaine. Les adresses suivantes ont un format valide : user1 Destinataire local. user2@nom de machine Destinataire sur une machine du domaine courant (rappellez-vous, il existe un m´ ecanisme de compl´ etion dans le “ resolver ” page 108 !). user3@nom de machine.domaine Destinataire sur une machine particuli` ere d’un domaine particulier (non forc´ ement local). user4@domaine Destinataire sur un domaine particulier (mˆ eme remarque que ci-dessus).
2 3

Version 8.12.9 en avril 2003 — http ://www.sendmail.org/ http ://www.qmail.org/ 4 http ://postfix.eu.org/start.html 5 Terme francis´ e en “ m` el ”, ou “ couriel ” pour les documents administratifs. . . ;-)

2 Format d’un “E-mail” - RFC 822 On devine ais´ ement que le fonctionnement du courrier ´ electronique sur une machine distante est fortement li´ ee au bon fonctionnement du serveur de noms (chapitre VII). Qui plus est, lorsque seul un nom de domaine est pr´ ecis´ e ` a droite du caract` ere “ @ ”, une information manque apparemment quant ` a la machine susceptible de recevoir le mail. Le lecteur en quˆ ete de plus de pr´ ecisions trouvera une description exhaustive de la syntaxe d’une adresse au paragraphe 6 de la [RFC 822].

127

2

Format d’un “E-mail” - RFC 822

Les octets qui composent un courrier ´ electronique ob´ eissent ` a une structure bien d´ efinie par la [RFC 822] de David H. Crocker : un en-tˆ ete et un 6 corps de message, s´ epar´ es par une ligne blanche (deux CRLF qui se suivent). Le contenu de l’en-tˆ ete dans son int´ egralit´ e n’est pas toujours spontan´ ement montr´ e par les outils qui nous permettent de lire et d’envoyer du courrier ´ electronique. Une option est toujours accessible pour ce faire, comme “ h ” sous mutt 7 . Une partie de l’en-tˆ ete est g´ en´ er´ ee automatiquement par le programme qui se charge du transfert (le paragraphe suivant nous dira qu’il s’agit d’un MTA), une autre est ajout´ ee par le programme qui permet de composer le mail, le MUA, une autre enfin est tap´ ee par l’utilisateur lui-mˆ eme.

En−tête Données (DATA) du protocole SMTP

En−tête ajoutée automatiquement En−tête ajoutée par l’utilisateur Ligne blanche ajoutée automatiquement

Corps

Le message (peut être vide)

figure VIII.01
6 7

Il s’agit respectivement des caract` eres 13 et 10 de la table ASCII - cf “ man ascii ” http ://www.mutt.org/ — le MUA, voir paragraphe suivant, pr´ ef´ er´ e de l’auteur

On peut les apparenter. aux informations qu’on trouve sur les enveloppes des courriers postaux. Cc.128 Courrier ´ electronique L’en-tˆ ete est constitu´ e de lignes construites sur le mod` ele : identificateur : [ valeur ] CRLF L’identificateur ne peut pas contenir le caract` ere “ : ” parcequ’il sert de s´ eparateur avec la partie droite.? Nous aurons l’occasion d’examiner des en-tˆ etes. Return-Path Origine du courrier From. Sender.01 doit ˆ etre globalement respect´ ee. . L’en-tˆ ete d’un mail donne des informations de nature vari´ ee sur le message lui-mˆ eme. Date Champs ´ etendus X. notamment lors des travaux pratiques qui suivront ce cours. except´ e l’espace. Bcc Identification du courrier Message-Id.1 de la RFC (SYNTAX). Type d’information Noms des champs Cheminement du courrier Received. In-Reply-To Renvoi ResentAutres Subject. Seule l’organisation de la figure VIII. 126]). L’usage des majuscules ou des minuscules est indiff´ erenci´ e. Reply-To Destinataire(s) du courrier To. Le lecteur soucieux d’une description exhaustive de ce en quoi peut ˆ etre constitu´ e un en-tˆ ete pourra se repporter au paragraphe 4. pour certaines d’entres elles. L’ordre d’apparition de ces champs est quelconque. “ Valeur ” est optionnelle. Il est constitu´ e de caract` eres ASCII cod´ es sur 7 bits et imprimables (c’est ` a dire ∈ [33.

3 Protocole SMTP .0 host. ou “ Simple Mail Transfert Protocol ” a comme objet le transport du courrier ´ electronique de mani` ere fiable et efficace.mondomain. 220 host. de la version de sa configuration.org/ 8 . La r´ eponse du serveur est un code 221 pour signifier la fin canonique de la connexion. Enfin L’utilisateur a tap´ e QUIT pour finir proprement la transaction. il est pr´ ef´ erable de r´ eserver ce genre de tests uniquement sur son propre site.0.0 OK QUIT 221 2.sendmail.mondomain. Postel. qui r´ epond ` a la connexion par un code 220 pour dire que le service est op´ erationnel (“service ready”). Escape character is ’^]’. suivi du nom de la machine. C’est pourquoi il est ais´ e de se connecter sur un MTA avec un simple 8 telnet : $ telnet localhost 25 Connected to localhost. de la banni` ere du programme. Dans un pass´ e pas si lointain l’acc` es r´ eseau de beaucoup de sites se r´ esumait au courrier ´ electronique encapsul´ e dans des trames du protocole UUCP. il est principalement aujourd’hui encapsul´ e dans des paquets TCP ` a destination du port 25 (cf le fichier /etc/services). 20 Jan 2003 15:34:45 +0100 (CET) NOOP 250 2. et de sa date courante. donc sur liaison s´ erie via modem ! 3. 9 http ://www.0. Il est d´ efini dans la [RFC 821] de Jonathan B. La partie cliente de la transaction se connecte sur le port 25 du serveur et envoie des commandes auxquelles le serveur r´ epond par des codes num´ eriques qui indiquent le statut de la prise en compte de la commande. Ind´ ependant par sa conception d’un quelconque sous-syst` eme de transport.fr closing connection Connection closed by foreign host. Les administrateurs r´ eseaux sont donc attentifs au trafic sur le port 25 .RFC 821 Le protocole SMTP.12.fr ESMTP Sendmail 8. Mon. Attention toutefois de ne pas abuser de cette pratique car de nombreuses attaques de sites ont d´ emarr´ e par le pass´ e` a l’aide un d´ etournement de sendmail.RFC 821 129 3 Protocole SMTP . Dans cet exemple le MTA est le programme Sendmail 9 . “human readable”). Puis l’utilisateur a tap´ e la commande NOOP qui n’a d’autre effet que de forcer le serveur ` a r´ epondre et renvoyer un code (250) pour dire que tout va bien.6.1 Protocole SMTP SMTP est un protocole ASCII (7 bits.

fr Date: Mon.fr HP Sendmail (1.mondomain.7/f la.fr by athome.109.7/8. pour visualiser les ´ echanges entre le MUA (machine athome.mondomain. 220 mailhub.109.fr>. En effet. 26 Jan 98 14:08:57 +0100 >>> HELO athome.mondomain.mondomain.37. via relay.." on a line by itself >>> ..fr Subject: test Ca passe ? .1) id OAA27655. <<<--..mondomain.mondomain.2.. ajoute un champ “Received” permettant apr` es coup de suivre le trajet du courrier. Mon.fr. EOT user@mondomain. Essayons : $ sendmail -v user@mondomain. 250 Ok user@mondomain.mondomain.4/user-2..fr..A taper pour marquer la fin du mail dans ce mode.fr) et le MTA local (machine mailhub.fr Hello athome.mondomain.1) id AA06996. end with "..130 Courrier ´ electronique Dans un deuxi` eme essai nous utilisons l’option -v du programme mail.fr with SMTP (8.fr Mon Jan 26 14:09:08 1998 Received: from mailhub. pleased to meet you >>> MAIL From:<user@mondomain.mondomain.fr> To: user@mondomain.fr>.fr. Les autres champs . Mon. lu aussi avec mail : Message 208/208 User Lambda Jan 26.8.fr with SMTP (1. >>> QUIT 221 mailhub.. 26 Jan 1998 14:09:08 +0100 (CET) Received: from athome.OAA27653@athome. 26 Jan 98 14:08:57 +0100 From: User Lambda <user@mondomain. Sent (Ok) Closing connection to mailhub.mondomain.mondomain.fr.mondomain.mondomain.fr> Received: by athome. chaque nœud travers´ e (MTA).fr> 250 <user@mondomain. Connecting to mailhub.fr Subject: test Ca passe ? Manifestement. ¸ ca passe ! :) Il est ´ egalement int´ eressant d’observer ` a ce niveau que les caract` eres du courrier ont ´ et´ e consid´ erablement enrichis par un en-tˆ ete volumineux (relativement).. 26 Jan 1998 14:09:06 +0100 (CET) Message-Id: <199801261309.37.mondomain.fr closing connection Et le courrier re¸ cu.8.fr by mailhub.fr 250 mailhub.fr> 250 <user@mondomain. Sender ok >>> RCPT To:<user@mondomain.fr).fr. Recipient ok >>> DATA 354 Enter mail.mondomain.4/fl a-2.. 98 02:09:06 pm +0100 From user@mondomain.1) ready at Mon.

du moins dans sa version de base. ce qui constitue une dangereuse faille potentielle dans la s´ ecurit´ e des r´ eseaux. . Une information plus d´ etaill´ ee se trouve ` a l’annexe E de la RFC. L’argument qui suit.Protocole SMTP comme Date :. Les cinq commandes d´ ecouvertes pr´ ec´ edement s’utilisent toujours dans cet ordre. d´ efinie dans la [RFC 822]. le premier chiffre donne le sens g´ en´ eral de la r´ eponse. 4 ou 5 signifie une erreur. La fonction la plus r´ epandue et la plus simple de MIME est d’autoriser l’usage des caract` eres accentu´ es (codage sur 8 bits ou plus) ` a l’int´ erieur du corps du message (l’en-tˆ ete SMTP reste cod´ ee sur 7 bits). L’utilisateur voit alors apparaˆ ıtre des lignes suppl´ ementaires comme celles-ci : X-Mime-Autoconverted: from 8bit to quoted-printable by bidule. QUIT. 3.domain> Content-Description: pouet.ici id QAA29283 131 Le “quoted-printable” est une forme possible du codage des caract` eres accentu´ es. DATA.0 Content-Type: text/plain. charset=ISO-8859-1 Content-Transfert-Encoding: quoted-printable Content-ID: Content-ID: <Pine. tr` es succintement ce qui d´ ebute par 1.2 ou 3 a une signification positive. C’est donc un protocole assez simple. Examinons succintement leur usage : Commande HELO Synopsis : HELO <espace> <domaine> <CRLF> Cette commande est utilis´ ee pour identifier l’´ emetteur du mail.14. RCPT. donc ` a´ eviter.FBSD. Cette attitude s’est g´ en´ eralis´ ee au point de devenir assez compliqu´ ee et ˆ etre formalis´ ee dans un ensemble de r` egles baptis´ ees MIME comme “Multipurpose Internet Mail Extensions” ([RFC 2184]). Une impl´ ementation minimale de SMTP en comprend deux autres en plus : RSET et NOOP.19971998X. Les codes de retour sont organis´ es sur trois chiffres.domain id SAA23150 X-MIME-Autoconverted: from quoted-printable to 8bit by mamachine. domain est le nom de la machine ou du domaine d’o` u provient la connexion. Le plus souvent on trouve des lignes comme celles-ci : Mime-version: 1. MAIL.c D’autres formes de MIME peuvent conduire ` a l’ex´ ecution d’un programme ext´ erieur au MUA. Cette partie de l’en-tˆ ete ajout´ ee par le MUA d’origine est souvent destin´ ee ` a piloter le comportement du MUA du destinataire du message plus que pour ˆ etre lue.2 Principales commandes de SMTP Exp´ erimentalement nous avons d´ ecouvert quelques uns des mots r´ eserv´ es du protocole : HELO.3. Subject : ou Message-Id : sont ajout´ es dans l’en-tˆ ete par le MUA de l’´ ecrivain du message.1592654.

<CRLF> qui marque la fin du message. Par exemple : MAIL FROM :<@mailhub.labas :Lambda@mondomain. le serveur lit les lignes de texte en provenance du client jusqu’` a rencontrer la s´ equence <CRLF>. Commande DATA Synopsis : DATA <CRLF> Apr` es r´ eception de la commande.01. En argument sont transmis (chemin inverse) l’adresse e-mail de l’´ emetteur et la liste des machines qui ont relay´ e le mail courant. ce qui compte c’est le code de retour pour confirmer l’aptitude au travail du serveur ! Commande MAIL Synopsis : MAIL <espace> FROM : <chemin inverse> <CRLF> Cette commande d´ ebute un transfert de mail.fr> Il est int´ eressant de noter que les arguments de cette commande et ceux de la pr´ ec´ edente (MAIL) forment l’enveloppe du mail (exp´ editeur et destinataire).ici :@mailhost. Il faut remarquer que celui-ci comprend l’int´ egralit´ e de la figure VIII. une notification de probl` eme ` a l’´ emetteur du mail. Par exemple : RCPT TO :<Lambda@mondomain. Cette information est optionnelle. . La premi` ere machine est la plus r´ ecente. s’il y a lieu. Commande QUIT Synopsis : QUIT <CRLF> Marque la fin de la session et entraine la clˆ oture de la connexion.132 Courrier ´ electronique En r´ eponse le serveur envoie une banni` ere dans laquelle il s’identifie et donne la date courante.fr> Commande RCPT Synopsis : RCPT <espace> TO : <destinataire> <CRLF> Cette commande est la deuxi` eme ´ etape dans la proc´ edure d’envoi d’un mail. Cette information est utilis´ ee pour renvoyer. Il y a une commande de ce type par destinataire du courrier (“ recipient ”).

Les MTAs ´ ecoutent le r´ eseau sur le port 25 et dialoguent entre-eux avec le protocole SMTP (ESMTP10 ). Zmailer. qmail. Sous Unix c’est un daemon. La conformit´ e aux standards Les messages proviennent de MUAs qui ne respectent pas forc´ ement tous les pr´ erequis de formulation des en-tˆ etes. MSA “ Mail Submission Agent ”. Cette s´ eparation des tˆ aches am´ eliore deux aspects : La s´ ecurit´ e Les nouveaux mails sont soumis ` a un daemon qui ne n’ex´ ecutent pas avec les droits du root11 . Par exemple : MMDF.3 Propagation du courrier ´ electronique SMTP est d´ efini comme un protocole de transfert. c’est le programme qui permet de lire et ´ ecrire le corps du courrier et de param´ etrer quelques ´ el´ ements de l’en-tˆ ete. 10 11 Extented SMTP SUID bit . MUA utilisateur MTA MTA MSA OS OS SMTP/ESMTP MUA utilisateur figure VIII.Protocole SMTP 133 3. L’objet du MSA est de s´ eparer les fonctions de transfert du courrier et d’acceptation de nouveaux courriers ´ emis depuis les MUA.. MUA “Mail User Agent” ou encore “mailer”. postfix. et le sujet du message. sendmail. c’est le programme que prend en charge le transfert du courrier. principalement l’adresse du destinaire. c’est une “ nouveaut´ e ” d´ efinie par la [RFC 2476] et qui joue le rˆ ole d’interface entre le MUA et le MTA..02 MTA “ Mail Transfert Agent ”. Le rˆ ole du MSA est de v´ erifier et de compl` eter ces en-tˆ etes avant de soumettre les mails au MTA pour le routage. donc un moyen pour router et d´ elivrer le message ` a son (ses) destinataire final (finaux). Smail.

pine.. figure VIII. B@domaine2 MTA MTA ‘‘relay mail’’ Utilisateur A au travail. mh. Elle a des avantages. notamment : – Avoir une politique de s´ ecurit´ e concentr´ ee sur une machine plutˆ ot que sur toutes les stations du r´ eseau : le routeur filtrant n’autorise les acc` es ext´ erieurs sur le port smtp que sur cette machine. elm.. mailx. . Cela se traduit par un emploi g´ en´ eralis´ e de machines relais ou “ mailhub ”. MUA SMTP/ TCP/IP Station de l’utilisateur A Stockage temporaire tant que le MTA du domaine 2 est inacessible. vers l’ext´ erieur et inversement. La figure 2 illustre la possibilit´ e la plus simple d’´ echange entre deux MTA : la connexion directe. Cela signifie que le MTA de la station ´ emettrice contacte le MTA de la station r´ eceptrice et lui d´ elivre directement le message. kmail. Il y en a pour tous les goˆ uts ! OS “Operating System”. La vie “ r´ eelle ” est plus compliqu´ ee car elle tient compte de l’organisation hi´ erarchique des r´ eseaux et surtout de la s´ ecurit´ e qui est un aspect devenu important sur l’Internet. MUA MTA MTA ‘‘relay mail’’ Stockage à long terme sur le disque dur de la station. il est courant de rencontrer mail. le syst` eme d’exploitation sur lequel fonctionnent ces programmes.03 Une telle machine concentre tous les courriers ´ electroniques d’un site. sylpheed. mutt. Wild Internet ! SMTP/ TCP/IP Utilisateur B au travail. Station de l’utilisateur B Stockage temporaire tant que la station de B est inacessible. eudora.134 Courrier ´ electronique Il existe un tr` es grand nombre de MUAs sous Unix.

Par exemple une machine distincte suivant que le courrier entre ou sort du site. Les stations des utilisateurs peuvent se contenter d’une configuration standard plus facile ` a distribuer et ` a adapter automatiquement. Certaines estimations tablent sur 30% de spam dans le trafic mail. qui envahissent nos boites aux lettres ´ electroniques. – Permettre de masquer plus facilement les machines internes du r´ eseau vis ` a vis de l’ext´ erieur. comment le caract´ eriser et surtout comment l’´ eviter.. Par “ spam ” on d´ esigne ces innombrables courriers. – Permettre le stockage interm´ ediaire du courrier en attente d’une d´ elivrance : les stations des utilisateurs ne sont pas toujours en fonctionnement. une arborescence de machines relais quand l’entreprise est elle-mˆ eme r´ epartie sur plusieurs sites g´ eographiques et ne poss` ede qu’une liaison vers l’ext´ erieur. Deux questions se posent. Caract´ eristiques du spam Un contenu commercial (ou financier d’une mani` ere ou une autre) Une importante liste de destinataires En-tˆ ete du message truqu´ ee Un grand nombre d’exemplaires du mˆ eme message envoy´ e dans un court laps de temps – Utilisation de l’adresse d’un destinataire sans son consentement explicite – Usage d’un site “ open mail relay ” pour l’´ emission – Champs To et From de l’en-tˆ ete invalides Pour m´ emoire. Le site sert alors en quelque sorte de tremplin pour – – – – . – Limiter le nombre de configurations compliqu´ ees de sendmail ` a un petit nombre de machines. Cette architecture est th´ eorique. en pratique il peut y avoir une hi´ erarchie de “ relay mail ” plus compliqu´ ee.Le spam Le spam est l’aspect tr` es d´ esagr´ eable du courrier ´ electronique.domaine. les courriers auront l’air de provenir de cette machine plutˆ ot que de la station d’un utilisateur sur le r´ eseau interne.4 Courriers ind´ esirables . un site “ open mail relay ” autorise un RCPT qui ne d´ esigne pas un destinataire local. L’adresse de l’´ emetteur aura la forme : user@domaine au lieu de : user@machine.Le spam – Avoir une politique centralis´ ee de filtrage des contenus ind´ esirables (virus) et ´ emetteurs suspects (spam). . 135 3.Courriers ind´ esirables . . le plus souvent ` a caract` ere commercial. En clair.

Tout ce qui est v´ erifiable dans l’en-tˆ ete et qui concerne le r´ eseau se r´ esoud bien (d´ etection des sites “ open mail relay ” ou liste des utilisateurs ind´ esirables). Et le mail sera d´ elivr´ e dans la boite aux lettres de l’utilisateur “ tartempion ” avec des champs From : et To : compl` etement inexploitables.fr> 250 2. On parle alors de “ fake mail ”. Plus celui-ci est complexe.com 250 mailhost. l’en-tˆ ete et le corps (figure VIII. il n’en est pas de mˆ eme pour la machine.. HELO UnSiteQuelconque. L’exemple qui suit illustre cette faille ˆ o combien navrante : telnet mailhost.. .mondomain. Ces outils sont toujours bas´ es sur un filtrage.fr 25 Connected to mailhost.. pleased to meet you MAIL From:<> 250 2. plus le temps de traitement ` a consacrer pour 1 courrier ´ electronique est important.0 <>.136 Courrier ´ electronique le mail. . Cette approche n’est pas suffisante car rien n’oblige dans le protocole ` a ce que les champs From : et To : de l’en-tˆ ete MIME soient en concordance avec les ´ el´ ements du protocole SMTP. . 12 Cf documentation compl´ ementaire distribu´ ee en cours .mondomain. Les versions modernes des MTA interdisent cette possibilit´ e.1.. ´ Eviter le spam C’est une question ouverte. .fr>..fr Hello UnSiteQuelconque.fr ESMTP Sendmail 8. end with ". S’il est ´ evident que l’œil humain reconnait un tel courrier de mani` ere quasi infaillible. 220 mailhost.mondomain. Recipient ok DATA 354 Enter mail.5 <tartempion@mondomain.fr.com> Unsollicited Bulk Email (UBE) or Unsollicited Commercial Email (UCE). Il y a deux parties ` a examiner dans un courrier..11.01). . . Sender ok RCPT To:<tartempion@mondomain. Escape character is ’^]’.1. L’id´ eal ´ etant ´ evidement de reconnaˆ ıtre la qualit´ e d’un e-mail en tr` es peu de cycles machines.0/fla-2001-04-10.com> To:<TuPeuxToujoursEssayer@YYY. N´ eanmoins des outils existent12 qui ´ etablissent un pr´ e-filtrage souvent tr` es efficace mais laissant toujours un pourcentage de mails qui franchissent les protections.mondomain." on a line by itself From:<NePasRepondre@XXX.com. avec un effet de dissimulation du site ´ emetteur v´ eritable.

domaineX MTA pouvant récupérer le courrier pour le domaine D figure VIII. Si le DNS du domaine ` a atteindre (une adresse est toujours mise sous la forme “nom@domain”) ne d´ esigne pas de machine capable de recevoir le courrier.1 Exemple de MTA . Transformer le nom de la machine distante en adresse IP 2.4 Exemple de MTA ..“Sendmail” et son environnement Relations avec le DNS Comme nous l’avons ´ evoqu´ e au paragraphe ??. le mail ne passera jamais pour ce domaine. proportionnellement ` a sa taille et ` a la complexit´ e des parties (pi` eces jointes) qui peuvent le composer. 3. Sendmail a besoin du serveur de noms pour les op´ erations suivantes : Sendmail Qui reçoit le mail pour le domaine D ? DNS Voici la liste des machines ayant un RR de type MX pour ce domaine et avec leur préférence respective Echec ! Sendmail machineA.04 1. Canoniser le nom de la machine qui se connecte 4. Canoniser le nom de la machine locale. . 137 4 4. Le quatri` eme point est le plus crucial. L’outil ultime sera celui qui comprendra le sens du texte et rejettera le courrier parcequ’ind´ esirable. Les outils les plus performants restent ` a´ ecrire.domaineD Echec ! Sendmail machineB.domaineD Succès ! Sendmail machineC. la relation entre le MTA et le DNS est ´ etroite. D´ eterminer quelles sont les machines susceptibles de recevoir du courrier pour le domaine ` a atteindre.“Sendmail” et son environnement Le filtrage sur le contenu du message est une autre possibilit´ e mais qui est beaucoup plus consommatrice de ressouces cpu..

puis est finalement rejet´ e s’il y a persistance de l’´ echec. machineC. La pond´ eration indique l’ordre ` a suivre pour les tentatives de connexions : il faut commencer par la valeur la plus basse.[name] .letter Figure 4. Il sp´ ecifie une liste d’hˆ otes pond´ er´ es par des pr´ ef´ erences. ` a qui on peut envoyer du courrier.domaineD machineC.domaineX Il est important de remarquer qu’une machine baptis´ ee “MX” par le DNS n’est pas forc´ ement localis´ ee dans le domaine pour lequel elle re¸ coit le courrier. Si cette liste est explor´ ee de bout en bout sans succ` es il y a ´ echec de la transmission du courrier. . C’est le cas de la troisi` eme ligne.138 Courrier ´ electronique Le champ RR (“Resource Record”) correspondant est du type MX (“Mail Exchanger”). Le r´ esultat est mat´ erialis´ e dans un fichier nomm´ e dead. Le contenu du champ RR renvoy´ e par le DNS pourrait avoir la constitution suivante : . le mail est conserv´ e un certain temps. domaineD [ttl][class] MX preference IN IN IN MX MX MX 10 20 30 mail exchanger machineA.domaineX .domaineD machineB. c’est mˆ eme souvent le cas pour les machines “ relay ”. S’il y a ´ echec de la re´ emission.

autant de “Mailer” s´ electionn´ es en fonction de l’adresse du destinataire (cf sendmail.400. Ces supports peuvent cohabiter au sein d’une mˆ eme configuration . comme la figure 5 tente de le r´ esumer : UUCP X.Relations avec l’OS 139 4.cf /etc/mail/userdb /etc/mail/aliases File d’attente des messages en /var/spool/mqueue figure VIII.info /var/log/maillog – UUCP.. Un certain nombre d’alias sont requis par la [RFC 1123].cf). .. d’autres sont conseill´ es par la [RFC 2142].conf : mail.. X. – /etc/sendmail. Quand sendmail re¸ coit un courrier. il tente de reconnaˆ ıtre le nom du destinataire dans cette base et si c’est le cas de lui appliquer la transformation prescrite.05 – L’activit´ e op´ erationnelle de sendmail est consign´ ee ` a l’aide de syslog13 . – /etc/aliases est une base de synonymes.400 SMTP/ESMTP syslogd Outil externe pour délivrer le mail aux utilisateurs Sendmail . $HOME/. SMTP sont autant de moyens de propager le courrier.cf est le fichier de configuration de sendmail. Tout syst` eme Unix est livr´ e avec une configuration standard qu’il faut adapter ` a la situation locale .forward /var/mail/userX /etc/mail/sendmail.2 Relations avec l’OS Sendmail a de multiples relations avec le syst` eme d’exploitation. . ce qui explique la pr´ esence de la ligne suivante trouv´ ee dans le fichier /etc/syslog. Un court extrait du-dit fichier : 13 ´ ements de serveurs Chapitre III du cours de programmation — El´ . c’est en g´ en´ eral ` a cet instant que les administrateurs syst` emes deviennent pensifs. ..(voir pourquoi au paragraphe 5).

these MUST be present MAILER-DAEMON: postmaster postmaster: root # Well-known aliases -. Dans ce r´ epertoire sont stock´ es les mails en attente d’une d´ elivrance.Nom@domaine” ce qui fait toujours plus chic ! – /var/spool/mqueue. – /var/mail/userX. sendmail transforme “postmaster” en “root”.. Si cette derni` ere chaˆ ıne ne fait pas l’objet d’une autre transformation par cette table. Ce fichier est mis ` a jour automatiquement par le MTA local en cas d’arriv´ ee de courrier. Si un grand nombre de courriers sont en attente. Cette disposition permet de traduire un nom de login en “Prenom. donc d’avoir une adresse de retour de la forme “Prenom. utilisateurs inexistants. L’entretien de la table des alias est de la responsabilit´ e de l’administrateur de la machine. il s’agit d’un utilisateur de la machine courante. Par exemple /var/spool/mail/root. “User Database” permet au sendmail d’effectuer une traduction de chaˆ ıne sur les noms des utilisateurs pour les courriers sortants..). . . puis “root” en “user”. La table des alias d’un domaine est un fichier strat´ egique qu’il convient de mettre ` a jour soigneusement (droits d’acc` es.140 Courrier ´ electronique # Basic system aliases -. Il peuvent y rester plusieurs jours (c’est un param` etre de la configuration du sendmail). et ¸ ca peut ˆ etre le cas pour les machines relais. Cela signifie par exemple que chaque fois q’un courrier est envoy´ e au “postmaster” de ce site. la section du disque dur qui supporte cette partition (ici /var) doit faire l’objet d’un dimensionnement en cons´ equence.these should be filled in! root: user info: root marketing: root sales: root support: root www: webmaster webmaster: root .Nom”. De mˆ eme que pour le r´ epertoire de file d’attente. sous peine d’obliger sendmail ` a refuser les mails faute de place disque. boucles. Chaque utilisateur de la machine locale (il peut ne pas y en avoir sur un serveur) a une boˆ ıte aux lettres (“mail box”) rep´ er´ ee comme un fichier ayant comme nom son login. le r´ epertoire des boˆ ıtes aux lettres des utilisateurs doit faire l’objet d’une attention par- . ` A chaque changement dans cette table l’administrateur doit fabriquer une table d’acc` es rapides (“hash table”) ` a l’aide de la commande “sendmail -bi” souvent li´ ee ` a “newaliases” – /etc/userdb Cette table. on peut visualiser cette file d’attente avec la commande mailq.

. sendmail lit le contenu de ce fichier. la prolif´ eration des “documents attach´ es” aux courriers ´ electroniques est un fl´ eaux contre lequel il est difficile de se pr´ emunir sauf ` a agrandir perp´ etuellement la taille de la partition /var. voire aussi d’effectuer des transformations avant de stocker les mails (procmail).forward est la base personnelle d’alias pour chaque utilisateur. . . . il faut arrˆ eter (“ kill -TERM pid-du-sendmail”) puis relancer (/usr/sbin/sendmail -bd -q30m) manuellement.ailleurs 141 Tous les courriers envoy´ e` a cette utilisateurs sont renvoy´ es ` a l’adresse indiqu´ ee.Relations avec l’OS ticuli` ere de la part de l’administrateur . Enfin on peut remarquer qu’aucun signal n’est pr´ evu pour indiquer ` a sendmail qu’il faut relire son fichier de configuration. Le fichier . Si le . celui-ci est un puissant filtre qui permet de faire un tri des courriers ´ electroniques par mots clefs (indispensable pour g´ erer les “mailing-lists”abondantes).forward contient la chaˆ ıne suivante : moi@un-autre-site. ! :( – ${HOME}/. Ou encore : "|exec /usr/local/bin/procmail" Qui permet d’invoquer l’usage du programme procmail. Lors de la mise au point de ce fichier. c’est voulu par le concepteur. ${HOME} ´ etant le r´ epertoire racine des fichiers de l’utilisateur en question. . ¸ ca permet de renvoyer son courrier vers d’autres sites.forward : avant d’ˆ etre finalement d´ elivr´ e dans la boˆ ıte aux lettres de l’utilisateurs.

et surtout lorsque le d´ etenteur de la boite aux lettres veut consulter ses mails depuis des postes diff´ erents. le protocole IMAP ! 14 De l’environnement de bureau KDE . qui ne sont pas configur´ ees pour faire du SMTP.3 Le cas de POP POP est l’acronyme de “ Post Office Protocol ”.06 Les clients POP sont l´ egions sur les PCs et sur les stations de travail sous Unix.kde. La boite aux lettres ne peut ˆ etre consult´ ee que par un seul client ` a la fois Ces points deviennent vite r´ edhibitoires quand le poste client doit acc´ eder au serveur au travers d’un r´ eseau non sˆ ur. gnus pour emacs. Sur l’architecture Unix. POP dans sa version 3 est d´ efini par la [RFC 1939]. mh. ou encore sylpheed. l’utilisateur doit avoir un compte sur la machine serveur 3.http ://www. pine. mutt. loin s’en faut. POP est un protocole tr` es simple qui fonctionne parfaitement mais qui n’est pas d´ enu´ e de d´ efauts : 1. donc qui utilisent comme support le protocole HTTP (voir page 149). ou un rempla¸ cant du procole POP. il permet l’acc` es ` a un serveur de courrier depuis des clients PC sous Windows. Ce cas de figure est de plus la r´ ealit´ e des professionnels en d´ eplacements. Les messages doivent ˆ etre r´ ecup´ er´ es sur le poste client pour ˆ etre manipul´ es (en POP3 un double peut rester sur le serveur) 4.org/ . Pour celles-ci citons : kmail14 . L’authentification (login/password) est ´ echang´ ee en “clair” sur le r´ eseau 2.142 Courrier ´ electronique 4. voire mˆ eme des stations unix distantes. La liste n’est pas exhaustive. par exemple via ppp. elm. C’est pourquoi d’autres solutions se sont d´ evelopp´ ees et sont de plus en plus utilis´ ees : les messageries accessibles via un browser web (webmail). Envoi : SMTP Serveur POP Client POP MTA Popd MUA SMTP Lecture: POP3 Boite aux lettres de l’utilisateur (mail box) figure VIII.

On peut ´ egalement trouver ce document dans la section “System Manager’s Manual” (SMM) des syst` emes BSD16 . Il faut imaginer qu’elles sont int´ egralement analys´ ees chaque fois que le programme sendmail est invoqu´ e. NetBSD ou OpenBSD ¸ ca se trouve /usr/share/doc/smm/08. d´ efinie dans la [RFC 2060]. une ligne qui d´ ebute par un espace ou une tabulation est la continuation de la pr´ ec´ edente. L’architecture pr´ esent´ ee figure VIII.org/ pour plus d’informations pour FreeBSD. C’est une d´ emarche purement formelle. les points n´ egatifs list´ es pour POP sont tous r´ egl´ es. L’ensemble fonctionne comme un syst` eme de production. le protocole IMAP — “ Internet Message Access Protocol ” — a ´ et´ e d´ evelopp´ e` a l’universit´ e de Stanford en 1986. Ces r` egles utilisent une syntaxe dense qui rebute g´ en´ eralement les administrateurs. disponible dans toute distribution de la V8. ce qui revient finalement au mˆ eme). Une ligne vide ou qui d´ ebute par un # est ignor´ ee (commentaire).06 reste valable. mˆ eme par un cpu de modeste performance (ou tr` es charg´ e. le premier caract` ere de chacune d’elles en pr´ ecise le type. ici une ou plusieurs adresses ´ electroniques. Elles doivent donc ˆ etre faciles ` a analyser.cf comme on peut le voir sur la figure 5. La configuration de sendmail est contenue essentiellement dans le fichier /etc/mail/sendmail. c’est ` a dire en gros pour chaque e-mail entrant ou sortant.5 Configuration du Sendmail 143 4. En clair. 5.4 Le cas de IMAP Bien que largement d´ eploy´ e que depuis quelques ann´ ees. Les paquets de r` egles (organisation d’ensemble figure 7 ) ont comme but essentiel d’analyser puis de prendre les bonnes d´ ecisions en fonction des adresses trouv´ ees dans l’en-tˆ ete. c’est ` a dire qui consomme des r` egles lues s´ equentiellement et les applique ` a un jeux de donn´ ees initiales. Consultez http ://www.imap.1 R` egles de re´ ecriture Les r` egles de re´ ecritures sont rep´ erables comme ces lignes qui d´ emarrent par un S (d´ ebut d’un paquet de r` egles) ou un par un R (simple r` egle). Le fichier de configuration est organis´ e comme une s´ erie de lignes.sendmailop/ 16 15 dans le r´ epertoire . 5 Configuration du Sendmail Cette section est une extraction libre et incompl` ete du paragraphe 5 du document intitul´ e “Sendmail Installation and Operation Guide”. pratiquement il suffit d’y remplacer le mot “ POP ” par “ IMAP15 ” ! Les fonctionnalit´ es sont plus riches et surtout pallient aux inconv´ enients list´ es pour POP. C’est actuellement la version 4rev1 qui est utilis´ ee.

1. est reinject´ e dans le syst` eme de production et ce jusqu’` a´ epuisement des possibilit´ es. non repr´ esent´ e sur l’automate. La partie droite (ou rhs18 ) est d´ eclench´ ee si le motif de la partie gauche est reconnu dans le flux de donn´ ees. . Les paquets de r` egles 1 et 2 sont appliqu´ es respectivement ` a l’en-tˆ ete des messages qui sortent (“send”) ou qui entrent (“receive”).07 Les r` egles sont num´ erot´ ees. pour l’émission R : Idem S mais pour la réception. sert ` a traiter les adresses locales apr` es que les aliases aient ´ et´ e appliqu´ es. s’il existe. les chiffres (0. UUCP. . Le r´ esultat produit. Les paquets de r` egles sont rep´ er´ es par la lettre S. ESMTP.3.4) sont autant de “ruleset”.2.Parse Address ### ###################################### Sparse=0 17 18 “left hand side” “right hand side” . Le paquet de r` egles 3 est appliqu´ e syst´ ematiquement ` a toutes les adresses. Le paquet de r` egles 4 est appliqu´ e` a toutes les adresses dans le message. qui en balise le nom. Le paquet de r` egles 5. La figure 7 donne un aper¸ cu du fonctionnement de l’automate.144 Courrier ´ electronique La partie gauche (ou lhs17 ) sert de d´ eclencheur (“pattern matching”) pour une r` egle. Le paquet de r` egles 0 sert essentiellement ` a d´ eterminer le “mailer” c’est ` a dire le moyen d’envoyer le courrier (SMTP. comme dans : ###################################### ### Ruleset 0 -.). comprendre des paquets de r` egles qui sont regroup´ ees ensembles parcequ’elles traitent d’un objectif commun. typiquement pour passer d’une forme interne ` a une forme externe. 0 Adresse résolue 1 S Adresse 3 D 4 Message 2 R D : Ajout du domaine de l’émetteur S : Reécrite spécifique au ‘‘mailer’’. figure VIII. le premier chiffre dit ` a quel paquet elles appartiennent.

. La deuxi` eme ne le pourrait pas car la chaˆ ıne “postmaster” pr´ ec` ede le caract` ere “<” et le “@” est suivi de “mondomain . La troisi` eme et la quatri` eme r` egle sont ´ egalement d´ eclenchables mais pr´ esentement l’ordre d’apparition est ´ egalement l’ordre de d´ eclenchement. La partie droite de la premi` ere r` egle commence par $ : $>Parse0 ce qui signifie l’appel d’un autre paquet de r` egles que l’on pourra trouver plus loin dans le fichier sendmail. . SParse0 Le $1 signifie que l’on ne transmet que le premier des tokens reconnus dans la partie gauche (“postmaster” dans l’exemple). . mˆ eme vide.do initial syntax checking and eliminate local addresses. elles d´ emarrent toutes avec la lettre R. It should not return with a #mailer other than the #error mailer. par exemple.fr. Le s´ eparateur de champ entre les trois partie de ces r` egles est la tabulation (une au minimum) L’adresse postmaster@mondomain.cf : # # # # # # Parse0 -. > Le “pattern matching” va tenter de rapprocher cette suite de mots ou tokens de la partie gauche des r` egles (lhs) pour d´ eterminer celles qui peuvent ˆ etre d´ eclench´ ees.Configuration du Sendmail Quant aux r` egles. fr . quand elle se pr´ esente devant le paquet de r` egles 0 qui d´ emarre ci-dessus. cette possiblit´ e sera donc examin´ ee ´ eventuellement plus tard.”. sur le mod` ele : Rlhs rhs commentaire 2. This should either return with the (possibly modified) input or return with a #error mailer. Dans la partie gauche $ s’applique ` a toute suite de tokens. a ´ et´ e mise sous une forme canonique par d’autres r` egles appliqu´ ees pr´ ealablement (notament dans la “ruleset 3”) : postmaster < @ mondomain . fr . Chaque ligne forme une r` egle. Donc la premi` ere ligne convient. comme dans : R$* R<@> R$* R$* $: $>Parse0 $1 $#local $: <@> $: $>ParseLocal $1 $: $>Parse1 $1 initial parsing special case error msgs handle local hacks final parsing 145 Deux remarques s’imposent : 1.

> rewrite: ruleset 95 returns: $# relay $@ mailhub .0 postmaster@mondomain. fr . > rewrite: ruleset 90 input: mondomain . fr $: postmaster < @ mondomain . fr . > rewrite: ruleset 0 input: postmaster < @ mondomain . > rewrite: ruleset 90 returns: postmaster < @ mondomain . fr . fr . mondomain .146 Courrier ´ electronique 5. mondomain . fr $: postmaster < @ mondomain . fr . > rewrite: ruleset 0 returns: $# relay $@ mailhub . > rewrite: ruleset 199 input: postmaster < @ mondomain . r` egle par r` egle. fr > rewrite: ruleset 96 returns: postmaster < @ mondomain .fr rewrite: ruleset 3 input: postmaster @ mondomain . fr . > rewrite: ruleset 3 returns: postmaster < @ mondomain . fr . fr $: postmaster < @ mondomain . fr . > rewrite: ruleset 198 returns: $# relay $@ mailhub . fr . fr . . > rewrite: ruleset 98 input: postmaster < @ mondomain . mondomain . fr . fr . fr . < fr > postmaster < @ mondomain . > rewrite: ruleset 95 input: < mailhub . > rewrite: ruleset 98 returns: postmaster < @ mondomain .2 Exemple de sortie de debug Il est utile d’avoir ce sch´ ema en tˆ ete quand on d´ ebogue les r` egles : avec l’option -bt de sendmail on peut suivre la progression de la transformation. > > Plus en TP. fr . > rewrite: ruleset 90 input: < mondomain . fr > postmaster < @ mondomain . > rewrite: ruleset 199 returns: postmaster < @ mondomain . ADDRESS TEST MODE (ruleset 3 NOT automatically invoked) Enter <ruleset> <address> > 3. fr rewrite: ruleset 96 input: postmaster < @ mondomain . . mondomain . fr . > rewrite: ruleset 198 input: postmaster < @ mondomain . . fr . > rewrite: ruleset 90 returns: postmaster < @ mondomain . fr > postmaster < @ mondomain .

6 Bibliographie 147 6 Bibliographie Pour en savoir davantage. Stefferud & D. December 1996. Comer — “Internetworking with TCP/IP – Volume I” (chapter 19) — Prentice All — 1988 – W.” N. Aug-01-1982. Moore. — 1994 – “Installing and Administering ARPA Services” — Hewlett–Packard — 1991 – Douglas E. M. Klensin. Languages.” J. Freed. Freed.Version 3. and Continuations.xx. July 1994. RFC1327) (Also STD0011) (Status : STANDARD) RFC 974 “Mail routing and the domain system. RFC 821 “Simple Mail Transfer Protocol. Rose. Partridge. K. Myers & M. Crispin. N. (Format : TXT=18581 bytes) (Status : STANDARD) RFC 1123 “Requirements for Internet hosts .” J.” M. E. Rose. – Bryan Costales with Eric Allman & Neil Rickert — “Sendmail” — ´ OReilly & Associates Inc. May 1996.” R. Oct-01-1989. RFC1138. (Format : TXT=245503 bytes) (Updates RFC0822) (Updated by RFC2181) (Status : STANDARD) RFC 1652 “SMTP Service Extension for 8bit-MIMEtransport. RFC1148. RFC2183) (Status : PROPOSED STANDARD) RFC 2476 “Message Submission. R. J.” Braden. Jan-011986.” C. Aug-13-1982. December 1998. Crocker. (Format : TXT=124482 bytes) (Obsoletes RFC0788) (Also STD0010) (Status : STANDARD) RFC 822 “Standard for the format of ARPA Internet text messages. . August 1997.T.” D. (Format : TXT=109200 bytes) (Obsoletes RFC0733) (Updated by RFC1123.” Klensin. (Format : TXT=30050 bytes) (Status : PROPOSED STANDARD) . Postel.Version 4rev1. (Format : TXT=166513 bytes) (Obsoletes RFC1730) (Status : PROPOSED STANDARD) RFC 2184 “MIME Parameter Value and Encoded Word Extensions : Character Sets. (Format : TXT=47018 bytes) (Obsoletes RFC1725) (Updated by RFC1957) (Also STD0053) (Status : STANDARD) RFC 2060 “ Internet Message Access Protocol . Gellens.application and support. (Format : TXT=11842 bytes) (Obsoletes RFC1426) (Status : DRAFT STANDARD) RFC 1939 “Post Office Protocol . RFC2047. Richard Stevens — “TCP/IP Illustrated Volume I” (chapter 28) — Prentice All — 1994 Et pour en savoir encore plus. Crocker. (Format : TXT=17635 bytes) (Updates RFC2045. . on pourra consulter “les bons auteurs” suivants : – Eric Allman — “Sendmail Installation and Operation Guide” — document au format PostScript jointe ` a toutes les distributions de la V8.

April 2001. RFC1869) (Status : PROPOSED STANDARD) ˙ RFC 2822 “Internet Message Format.” P. Ed. RFC0974. Resnick.April 2001. (Format : TXT=192504 bytes) (Obsoletes RFC0821. (Format : TXT=110695 bytes) (Obsoletes RFC0822) (Status : PROPOSED STANDARD) . Ed. Klensin.” J.148 Courrier ´ electronique ˙ RFC 2821 “Simple Mail Transfer Protocol.

La premi` ere version d´ eploy´ ee largement a ´ et´ e la 1. Le protocole HTTP1 est le protocole d’application utilis´ e pour v´ ehiculer. interroge un serveur connu par son “url3 ” dont la syntaxe est bien d´ ecrite dans la RFC 1738. Depuis le d´ ebut du mois de janvier 1997 est apparue la version 1.org/pub/WWW/TR/ 3 “Uniform Resource Locator” 2 1 . de l’HTML2 sur l’Internet. il suffit de la transmettre en tant qu’argument ` a un quelconque outil d’exploration et celui-ci vous renverra (si tout se passe comme pr´ evu !) ce qui est pr´ evu sur le serveur en question pour r´ epondre ` a cette demande (car il s’agit bien d’une requˆ ete comme nous le verrons plus loin dans ce chapitre). appel´ e g´ en´ eriquement un “browser”. un “User Agent”. le protocole HTTP ´ evolue doucement mais surement.1. l’usage de ce protocole se con¸ coit comme une relation entre un client et un serveur. devant FTP. il accompagne l’explosion de l’utilisation du syst` eme global d’information “World–Wide Web”.ecp. ou encore butineur de toile. Le port 80 est d´ edi´ e officiellement “Hypertext Transfer Protocol” “Hypertext Markup Language” — Consulter les “technical reports and publications” du site : http ://www. utilise un port connu ` a l’avance.0 et du serveur Apache qui l’utilise. deux fois plus volumineuse pour tenir compte des nouvelles orientations de l’usage du service. suppos´ e` a l’´ ecoute du r´ eseau au moment o` u la partie cliente l’interroge.Chapitre IX Anatomie d’un serveur Web 1 Le protocole HTTP Ce document est une pr´ esentation succincte du protocole HTTP 1. NNTP et SMTP . Il est longtemps rest´ e sous forme de “draft”. d´ efinie dans la RFC 1945 de mai 1996. entres autres.fr/ est une url . Le serveur.sio. Aujourd’hui ce protocole est tellement r´ epandu que pour bon nombre de nouveaux utilisateurs du r´ eseau. C’est le protocole le plus utilis´ e en volume depuis 1995.0. l’Internet c’est le “web” ! Techniquement. date d’apparition du “Web”. Depuis 1990. Par exemple la chaˆ ıne de caract` eres http ://www. Le client.w3.

Un en-tˆ ete MIME 3. GET / HTTP/1. La requˆ ete. Des octets.2 Structure d’un ´ echange L’exemple qui pr´ ec` ede est typique d’un ´ echange entre le client et le serveur : une question du client g´ en` ere une r´ eponse du serveur. $ telnet localhost 80 Trying. 10 Nov 2001 16:13:02 trois GMT parties : ETag: "1381-8b-3bed520e" Accept-Ranges: bytes Content-Length: 79 Connection: close Content-Type: text/html 1. ce qui nous autorise des essais de connexion avec le client tcp ` a tout faire : telnet ! Bien entendu on pourrait utiliser un “browser” plus classique. L’url qui d´ esigne un serveur peut contenir dans sa syntaxe le num´ ero de port sur lequel il faut l’interroger. mais celui-ci g´ erant pour nous le d´ etail des ´ echanges il ne serait plus possible de les examiner.sio.23 (Unix) que l’on peut d´ ecomposer en Last-Modified: Sat. 1.iana. <HTML> <HEAD> <TITLE>Ceci est un titre</TITLE> </HEAD> <BODY> </BODY> </HTML> Connection closed by foreign host. Le serveur ne conserve pas la m´ emoire des ´ echanges pass´ es. Notons ´ egalement la deconnexion ` a l’initiative du serveur. ici ceux d’une page ´ ecrite en HTML..1 Exemple d’´ echange avec http Le transport des octets est assur´ e par TCP5 et le protocole est “human readable”.fr :11235/. on dit aussi qu’il est sans ´ etat. Un code (HTTP) de retour 2. Escape character is ’^]’.150 Anatomie d’un serveur Web au protocole http4 . en fin d’envoi de la page HTML.0 Ce qui est tap´ e par l’utilisateur et la r´ eponse du serveur. ou “stateless”. mais ce n’est pas une obligation (cette d´ ecision est prise ` a la configuration du serveur). 1.ecp. comme dans : http ://www.org/assignments/port-numbers page 83 . 01 Mar 2002 10:59:06 GMT Server: Apache/1. Connected to localhost.. 4 5 http ://www. le tout lors d’une connexion TCP qui se termine lors de l’envoi du dernier octet de la r´ eponse (clˆ oture ` a l’initiative du serveur). suivie d’une ligne vide.1 200 OK Enfin la r´ eponse du serveur. HTTP/1.3. Date: Fri.

org/. A La premi` ere ligne du message. HEAD. Message HTTP 151 A B Début du message D C figure IX.site. mais seul l’en-tˆ ete du serveur est envoy´ e. La version du protocole . est soit la question pos´ ee (“request-line”). Utile pour faire des tests d’accessibilit´ e sans surcharger la bande passante. comme pour la question. dans le corps du message. les octets qui la d´ etaillent se trouvent plus loin. POST Cette m´ ethode permet d’envoyer de l’information au serveur. B et C forment l’en-tˆ ete du message. Par exemple http ://www. sous forme HTTP-Num´ ero de version. GET Plus de 99% des requˆ etes ont cette m´ ethode. et D le corps. ou POST.1 ! – La r´ eponse.01 Les parties A. Statut C’est une valeur num´ erique qui d´ ecrit le statut de la r´ eponse. Cette premi` ere ligne n’est que le statut de la r´ eponse. soit le statut de la r´ eponse (“status-line”). sous forme HTTP-Num´ ero de version. Utile ´ egalement pour v´ erifier de la date de fraicheur d’un document (information contenue dans l’en-tˆ ete). c’est typiquement le contenu d’un formulaire rempli par l’utilisateur. elle se termine par CRLF : La version du protocole . – La question est une ligne termin´ ee par CRLF. Trois champs la composent. elle se compose de trois champs : Une m´ ethode ` a prendre dans GET. Par exemple HTTP/1. consulter la RFC 1630 . Une ressource que l’on d´ esigne par une URL6 . HEAD La mˆ eme chose que GET.Le protocole HTTP La question et la r´ eponse sont bˆ aties sur un mod` ele voisin : le message HTTP. elle retourne l’information demand´ ee dans l’URL (ci-dessous). Le premier des trois digits donne le sens g´ en´ eral : 6 “Uniform Resource Locator”.

qui contient des informations ` a propos du corps du message.152 1xx 2xx Anatomie d’un serveur Web N’est pas utilis´ e “Futur Use” Succ` es. due ` a l’OS ou ` a la ressource devenue non accessible. 5xx Erreur cot´ e serveur. Sa syntaxe est proche de celle employ´ ee dans le courrier ´ electronique. consulter la RFC 1521 . Bien sˆ ur il s’agit de la date du serveur. Exemple d’en-tˆ ete MIME : Date: Fri. Last-modified : Il s’agit de la date de derni` ere modification du fichier demand´ e. La question comporte une erreur de syntaxe ou ne peut ˆ etre accept´ ee. 4xx Erreur cot´ e client.Phrase”) qui accompagne le statut. Content-length : D´ esigne la taille (en octets) du corps du message.23 (Unix) Last-Modified: Sat. l’action demand´ ee a ´ et´ e comprise et ex´ ecut´ ee correctement. par exemple le statut 200 est suivi g´ en´ eralement du commentaire “OK” ! B C’est une partie optionnelle.3. 7 “Multipurpose Internet Mail Extension”. Un en-tˆ ete de ce type est constitu´ e d’une suite d’une ou plusieurs lignes (la fin d’une ligne est le marqueur CRLF) construite sur le mod` ele : Nom de champ : Valeur du champ CRLF ´ Eventuellement le marqueur de fin de ligne peut ˆ etre omis pour le s´ eparateur “ . Il peut s’agir d’une erreur interne. c’est ` a dire la partie D de la figure 1.”. 10 Nov 2001 16:13:02 GMT ETag: "1381-8b-3bed520e" Accept-Ranges: bytes Content-Length: 79 Connection: close Content-Type: text/html Date : C’est la date ` a laquelle le message a ´ et´ e envoy´ e. Server : Contient une information relative au serveur qui a fabriqu´ e la r´ eponse. comme l’illustre le r´ esultat de la commande ll (voir aussi la co¨ ıncidence de la taille du fichier et la valeur du champ pr´ ec´ edent). il peut exister un d´ ecalage incoh´ erent si les machines ne sont pas synchronis´ ees (par exemple avec XNTP). avec une autre formulation. Content-type : Ce champ permet d’identifier les octets du corps du message. Phrase C’est un petit commentaire (“Reason. 01 Mar 2002 10:59:06 GMT Server: Apache/1. La partie cliente doit reprendre l’interrogation. elle repecte aussi le standard MIME7 . et pour cause. 3xx Redirection. En g´ en´ erale la liste des outils logiciels et leur version.

C’est dans cette partie du message que l’on trouve par exemple les octets de l’HTML. Content-Type : image/jpg =⇒ Le corps du message contient des octets ` a interpr´ eter comme ceux d’une image au format jpeg . ou encore ceux d’une image. plus pr´ ecisement dans le champ Content-Type. Le type des octets est intimement li´ e ` a celui annonc´ e dans l’en-tˆ ete. par le serveur ou par le client. constant lors des ´ echanges. C’est un moyen de maintenir le dialogue avec un serveur en particulier. D Le corps du message. Il est omis dans certains cas. Il est donc absolument obligatoire qu’elle figure dans le message. comme une requˆ ete avec la m´ ethode GET ou une r´ eponse ` a une requˆ ete avec la m´ ethode HEAD. . Par exemple : Content-Type : text/html =⇒ Le corps du message contient des octets ` a interpr´ eter comme ceux d’une page ´ ecrite en HTML. C Une ligne vide (CRLF) qui est le marqueur de fin d’en-tˆ ete.html 153 ETag : C’est un identificateur du serveur.Le protocole HTTP -rw-r--r-1 web doc 139 Nov 10 17:13 index. . Son absence entraine une incapacit´ e de traitement du message. par exemple quand ceux-ci sont en grappe pour ´ equilibrer la charge et assurer la redondance.

le signe “+”. ce sont : % < > " # { } | \ ^ ~ [ ] ‘ Pour un certain nombre de “schemes” (http. Ce sont : .1 8 Scheme http Une url avec la “scheme” http bien form´ ee doit ˆ etre de la forme : man ascii sur toute machine unix . Une “scheme” est une s´ equence de caract` eres 7bits. bien que th´ eoriquement repr´ esentables. / ? : @ = & Ainsi. .” et le “-” sont admis. les chiffres de “0” ` a “9”. . La syntaxe g´ en´ erale d’un(e) url est de la forme : <scheme> :<scheme-specific-part> Succintement la “scheme” est une m´ ethode que l’on s´ epare ` a l’aide du caract` ere “ :” d’une chaˆ ıne de caract` eres ascii 7 bits dont la structure est essentiellement fonction de la “scheme” qui pr´ ec` ede et que l’on peut imaginer comme un argument. qui en uniformise l’acc` es. Exemples de “schemes” : http. mailto. Les lettres “a” ` a “z”. .154 Anatomie d’un serveur Web 2 URIs et URLs Le succ` es du “web” s’appuie largement sur un syst` eme de nommage des objets accessibles.) certains caract` eres sont r´ eserv´ es car ils ont une signification particuli` ere. Majuscules et minuscules sont indiff´ erenci´ es. La m´ ethode d’encodage transforme tout caract` ere non utilisable directement en un triplet form´ e du caract` ere “%” et de deux caract` eres qui en repr´ esente la valeur hexad´ ecimale. 2. s’ils apparaissent dans l’url sans faire partie de sa syntaxe. Un certain nombre de caract` eres. le “.Il en existe d’autres (cf la RFC) non indispensables pour la compr´ ehension de cet expos´ e. 8 Globalement une url doit ˆ etre encod´ ee en ascii 7 bits sans caract` ere de contrˆ ole (c’est ` a dire entre les caract` eres 20 et 7F). qu’ils appartiennent ` a la machine sur laquelle on travaille ou distants sur une machine en un point quelconque du r´ eseau (mais suppos´ e accessible). . ce qui a comme cons´ equence que tous les autres caract` eres doivent ˆ etre encod´ es. Ce syst` eme de nommage universel est l’url (“Uniform Resource Locator” — RFC 1738) d´ eriv´ e d’un syst` eme de nommage plus g´ en´ eral nomm´ e uri (“Universal Resource Identifier” — RFC 1630). Par exemple l’espace (20 hex) doit ˆ etre cod´ e %20. file. ils doivent ˆ etre encod´ es. . ftp. sont consid´ er´ es comme non sˆ urs (“unsafe”) et devraient ˆ etre ´ egalement encod´ es de la mˆ eme mani` ere que ci-dessus.

searchpath C’est ce que l’on appelle la “query string”. Nous examinons succinctement le principe de fonctionnement de tels programmes page 169. ` Le ? marque la limite entre l’objet interrogeable et la “query string”. ils doivent ˆ etre encod´ es pour ´ eviter les ambigu¨ ıt´ es. la valeur 80 est prise par d´ efaut. . host C’est un nom de machine ou une adresse IP. De mˆ eme. autrement dit la chaˆ ıne d’interrogation. ` l’int´ A erieur de ces deux composantes. path C’est un s´ electeur au sens du protocole http.URIs et URLs http ://<host> :<port>/<path> ?<searchpath> “path” et “searchpath” sont optionnels. start et sa dont la signification peut ˆ etre partiellement devin´ ee. ici une recherche dans une base de donn´ ees. Il doit donc ˆ etre encod´ e s’il doit ˆ etre utilis´ e en tant que tel. le & marque la s´ eparation entre les couples variable = valeur. A l’int´ erieur de cette chaˆ ıne d’interrogation le caract` ere + est admis comme raccourci pour l’espace (ascii 20 hex). Le rˆ ole de la chaˆ ıne “search” est celui de ce que l’on appelle une CGI ou “Common Gateway Interface”. c’est ` a dire le caract` ere de rang 14 × 16+9 = 233.fr/search ?q=cours+r%E9seaux&hl=fr&start=10&sa=N 155 Notez le “´ e” cod´ e %E9. Exemple r´ ecapitulatif : http ://www. hl. mais dont le remplissage reste ` a la charge du serveur en question. ` a l’int´ erieur de la “query string” le caract` ere = marque la s´ eparation entre variable et valeur. port Le num´ ero de port. ? sont r´ eserv´ es. On peut ´ egalement observer quatre variables q. les caract` eres / .google. c’est ` a dire un programme qui effectue le lien entre le serveur interrog´ e et des programmes d’application. ce qui signifie que s’ils doivent ˆ etre employ´ es. S’il n’est pas pr´ ecis´ e.

html de la distribution standard apporte des pr´ ecisions. 3.3. Le serveur Apache introduit ´ egalement la possibilit´ e de serveurs multidomaines (domaines virtuels). synth´ etise l’environnement d’utilisation.156 Anatomie d’un serveur Web 3 Architecture interne du serveur Apache Cette partie se consacre ` a l’´ etude du fonctionnement du serveur Apache9 .conf httpd. tout ce qui n’est pas strictement dans les attributions du serveur (gestion des processus.org.1 Environnement d’utilisation La figure 2 qui suit.apache.apacheweek. Le fichier apache 1. Il corrige des bugs et ajoute de nombreuses fonctionnalit´ es. gestion du r´ eseau) est trait´ e comme un module d’extension. SIGTERM SIGHUP Serveur HTTPD Accès clients HTTP httpd. gestion m´ emoire. particul` erement un m´ ecanisme d’API pour permettre aux administrateurs de sites de d´ evelopper de nouveaux modules adapt´ es ` a leurs besoins propres.pid access_log error_log srm. aux ´ Etats Unis 9 . cette contrainte exclu les produits commerciaux. Au mois de mars 2002.netcraft. Plus g´ en´ eralement.com/ pointe ´ egalement sur grand nombre de documents tr` es utiles. Pour comprendre les m´ ecanismes internes d’un tel serveur il est absolument n´ ecessaire de pouvoir en lire le code source.conf Arborescence des fichiers accessibles “Apache HTTP server project”.23/htdocs/manual/misc/API.apacheweek. http ://www.com/survey/ 11 “National Center for Supercomputing Applications” – Universit´ e de l’Illinois. d’apr` es le “Netcraft Web Server Survey10 ” le serveur le plus utilis´ e (55%) est tr` es majoritairement celui du projet Apache. ce qui est fort appr´ eci´ e des h´ ebergeurs de sites. le serveur http ://www.com/ est ´ egalement une source int´ eressante d’informations 10 http ://www. le serveur Apache est une solution de continuit´ e au serveur du NCSA11 .conf access. D’apr` es ses auteurs. http ://www.

ou avec SIGTERM pour mettre fin ` a son activit´ e. elles sont cr´ e´ ees.conf qui permet d’en modifier le chemin 12 . S’il y en a de trop elles sont supprim´ ees. d` es son initialisation. La commande ps permet de visualiser une situation op´ erationnelle : Entre parenth` eses le nom de la variable du le fichier httpd. se situent dans le r´ epertoire DocumentRoot qui en est la racine. 157 Un processus joue le rˆ ole de r´ egulateur.Architecture interne du serveur Apache Le serveur se met en œuvre simplement. C’est le nombre minimum d’instances du serveur (non compris le processus maˆ ıtre) au d´ emarrage. httpd. Sa configuration se trouve dans le r´ epertoire conf sous-r´ epertoire de ServerRoot. d´ emarre un certain nombre de processus. ` a utiliser avec le signal SIGHUP (cf figure 2) pour provoquer la re-lecture et le re-d´ emarrage “` a chaud” du serveur. En voici un exemple : MinSpareServers 5 MaxSpareServers 10 StartServers 5 MaxClients 150 C’est le nombre minimum d’instances du serveur (non compris le processus maˆ ıtre) en attente d’une connexion.conf. error log (ErrorLog) Qui contient le d´ etail des acc` es infructueux et des ´ eventuels probl` emes de fonctionnement du serveur. a besoin des trois fichiers ASCII de configuration : srm.conf. Lors de l’ex´ ecution. Les fichiers accessibles par les connexions clientes. puis s’ex´ ecute avec les droits de l’utilisateur User et du groupe Group. access log (CustomLog) Qui contient le d´ etail des acc` es clients. httpd. Le fichier httpd. Le “daemon” httpd est soit du type (ServerType) “standalone” ou si son invocation est occasionnelle. qui. c’est ` a dire vue comme ”/” par les browsers clients. La compilation fournit un ex´ ecutable.pid contient un num´ ero de processus “leader” de groupe car en fait le serveur Apache. autant de serveurs capables de comprendre les requˆ etes des clients. C’est en fait dans celui-ci que sont effectu´ es l’essentiel des ajustements locaux ` a la configuration standard. C’est le nombre maximum de clients (requˆ etes HTTP) simultan´ es. eux. C’est le nombre maximum d’instances du serveur (non compris le processus maˆ ıtre) en attente d’une connexion. Il d´ emarre son activit´ e par ouvrir le port (Port) d´ esign´ e dans la configuration. pour s’ex´ ecuter correctement. du point de vue Unix c’est un processus chef de groupe (“leader”).conf. access.pid (PidFile) contient le “process ID” du “leader” de groupe . Cette constante peut ˆ etre augment´ ee en fonction de la puissance de la machine. Ce fichier peut devenir tr` es volumineux. ` a la demande pilot´ e par inetd (cf page 4). S’il en manque. trois fichiers sont modifi´ es12 : httpd.

reste similaire mais le code ayant beaucoup chang´ e.23.158 web root web web web web web web web web 17361 2794 17363 17270 17362 17401 17313 17312 17355 17314 2794 1 2794 2794 2794 2794 2794 2794 2794 2794 0 0 0 0 0 0 0 0 0 0 Mar Feb Mar Mar Mar Mar Mar Mar Mar Mar 13 23 13 13 13 13 13 13 13 13 ? ? ? ? ? ? ? ? ? ? 0:00 0:06 0:00 0:01 0:00 0:00 0:00 0:01 0:00 0:01 Anatomie d’un serveur Web /usr/local/bin/httpd /usr/local/bin/httpd /usr/local/bin/httpd /usr/local/bin/httpd /usr/local/bin/httpd /usr/local/bin/httpd /usr/local/bin/httpd /usr/local/bin/httpd /usr/local/bin/httpd /usr/local/bin/httpd -d -d -d -d -d -d -d -d -d -d /users/web /users/web /users/web /users/web /users/web /users/web /users/web /users/web /users/web /users/web Ici il y a 9 instances du serveurs et le processus maˆ ıtre.1 fla -rw------.3.1 fla drwxr-x--. La commande tail -1 logs/access.2 fla drwxr-x--.1. et qu’une seule “socket” est en apparence ` a l’´ ecoute du r´ eseau.tld .http *.2 fla drwxr-x--. 1. C’est une situation qui peut sembler paradoxale eu ´ egard au nombre de processus ci-dessus. le code nous fournira une explication au paragraphe suivant.2 fla drwxr-x--. La commande netstat -f inet -a | grep http ne donne qu’une ligne : tcp 0 0 *.2 fla users users users users users users users users users users 3738 2604 3059 512 512 512 2048 512 2048 512 Mar 12 1996 CHANGES Feb 22 1996 LICENSE Jul 3 1996 README Feb 7 22:14 cgi-bin Feb 7 22:14 conf Feb 7 22:14 htdocs Feb 7 22:14 icons Jul 8 1996 logs Mar 12 10:42 src Feb 7 22:15 support .2 Architecture interne Attention.1 du logiciel.2 fla drwxr-x--.0" 200 79 Il s’agit de la trace de notre exemple d’interrogation du d´ ebut de ce chapitre ! 3.2 fla drwxr-x--.chezmoi.* LISTEN Cela signifie qu’aucune connexion n’est en cours sur ce serveur.log fournit la trace de la derni` ere requˆ ete : www.[01/Mar/2002:17:13:28 +0100] "GET / HTTP/1. qu’il est ais´ e de reconnaitre (2794) car il est le p` ere des autres processus (ce qui n’implique pas qu’il en est le chef de groupe. ce paragraphe concerne la version 1.2 fla drwxr-x--. les num´ eros de lignes sont devenus de fait compl` etement faux. Le fonctionnement de la version courante.1. sous r´ epertoire du r´ epertoire principal de la distribution : $ ll apache_1. Ce qui nous int´ eresse plus particuli` erement pour expliquer le fonctionnement du serveur se trouve dans le r´ epertoire src/.1/ total 19 -rw------.1 fla -rw------.. mais la suite de l’analyse nous le confirmera).

c.c. http log. http config. avec le cas particulier de l’ex´ ecution 13 d’une CGI qui comme son nom l’indique est le programme qui effectue l’interface entre le serveur HTTP et un programme d’application quelconque.. du mode de relation entre le p` ere et ses fils.c. /* Pool for per-transaction stuff */ . http request. La fonction init alloc appelle make sub pool qui initialise un int´ eressant m´ ecanisme de buffers chaˆ ın´ es. */ “Common Gateway Interface” . int main(int argc. Les diff´ erents modules du serveurs sont ajout´ es dans une liste chaˆ ın´ ee.[ch] ⇒ 27441 lignes) nous nous restreignons aux fichiers essentiels d´ ecrits dans le “README” soit encore une petite dizaine d’entres eux (wc -l ⇒ 6821 lignes) : mod cgi.c. ptrans = make_sub_pool(pconf)... alloc.. 1523 . /* standalone_main rereads.. ptrans. init_alloc().c... /* Pool for config stuff */ pool *ptrans. nous examinerons plus particuli` erement ce qui se passe lors d’une connexion. 1491 1492 1493 159 .. 1035 1036 . dans un autre paragraphe.. utilis´ e tout au long du code d` es lors qu’il y a besoin d’allouer de la m´ emoire.. pool *pconf. 1472 1473 1474 .. http main. http core. char *argv[]) { . et celui-ci se trouve dans le fichier http main. setup_prelinked_modules().c. server_confname). comme il se doit ! . 1524 1525 1526 1527 1528 13 server_conf = read_config (pconf.. Gestion des processus Au commencement est le main...c..c Dans un premier temps nous allons examiner le fonctionnement de la gestion des processus..c. .. Dans la suite de ce document le terme “cgi” employ´ e seul d´ esigne ce type d’application.Architecture interne du serveur Apache Dans ce r´ epertoire qui compte au moins 75 fichier (wc -l *. Puis. if(standalone) { clear_pool (pconf). http protocol. pconf = permanent_pool..

1580 1581 1582 } Anatomie d’un serveur Web standalone_main(argc. la fonction sigsetjmp enregistre la position de la pile et l’´ etat du masque d’interruption (deuxi` eme argument non nul) dans erieur ` a siglongjmp forcera la reprise restart buffer. “Standalone” est ` a 0 si le serveur est invoqu´ e depuis inetd 14 . Tout appel ult´ de l’ex´ ecution en cette ligne. que nous supposons ici. l’appel ` a la fonction reclaim child processes() effectue autant de wait qu’il y avait de processus fils. Pour bien comprendre le cette fonction. il faut imaginer qu’elle est invoqu´ ee au d´ emarrage. } else { . Donc appelle la fonction just die qui ex´ tous les fils meurent.160 1529 1530 1531 . } exit (0).. La fonction standalone main (ligne 1362) pr´ epare le processus ` a son futur rˆ ole de serveur. Ligne 1382 (one process = 0) on envoie un signal SIGHUP ` a tous les processus du groupe.. elle contient le PID du chef de groupe. argv). pour lire et relire la configuration. et “` a chaud”. Ligne 1398 Relecture des fichiers de configuration. voir le cours sur les daemons). Ligne 1400 set group privs (ligne 960) change le “user id” et le “group id” si ceux-ci ont ´ et´ e modifi´ es. cela bloque toute tentative cumulative de relecture de la configuration. L’int´ eret d’avoir un groupe de processus est que le signal envoy´ e` a son “leader” est automatiquement envoy´ e` a tous les processus y appartenant. Ligne 1369 . la variable one process = 0 (sinon le processus est en mode debug) occasionne l’appel ` a la fonction detach (ligne 876). configuration du param` etre ServerType 14 . ecute un exit(0) (ligne 943). Cette disposition n’est utile que dans le cas d’un re-d´ emarrage “` a chaud”. Ligne 1374 . sauf le chef de groupe. pour ´ eviter les zombis. Son mode de fonctionnement le plus efficace reste avec ce param` etre ` a 1 (voir le cours sur inetd).conf. s’il est en mesure de le traiter.. Celle-ci transforme le processus en “leader” de groupe avec la succession bien connue fork + setsid (pour plus de d´ etails. Chaque processus qui re¸ coit ce signal. Cette alternative est d´ ecid´ ee dans le fichier httpd.. Ligne 1390 . Ligne 1377 On ignore tout signal de type SIGHUP. La variable pgrp est initialis´ ee par la fonction detach (ligne 876).

ou cr´ ee (setup shared mem ligne 432) la zone de m´ emoire commune entre le chef de groupe et ses processus fils.. de telle sorte qu’il sera supprim´ e d` es la fin du processus. Ce fichier est le verrou d’acc` es ` a la socket principale. apr` es avoir initialis´ e une structure d’adresse. d´ etail important.1 (netstat) sans l’expliquer. voila qui est fait ! . recueille les statistiques d’utilisation de chaque serveur et son statut (par exemple SERVER READY. donc d’instances de serveur. Cette zone m´ emoire est....(char *)&one. 1312 1313 . ce qui m´ erite un commentaire : .. if((setsockopt(s. C’est par ce moyen que le serveur maˆ ıtre contrˆ ole les serveurs fils.SO_REUSEADDR... et. SOL_SOCKET. soit de la m´ emoire rendue commune par un appel ` a la primitive mmap (Le choix est effectu´ e par configure qui analyse les possibilit´ es du syst` eme.1) Enfin la figure 4 montre son rˆ ole strat´ egique. soit un segment de m´ emoire partag´ ee (IPC du syst` eme V).Architecture interne du serveur Apache Ligne 1401 accept mutex init (ligne 166) fabrique un fichier temporaire (/usr/tmp/htlock.sizeof(one))) == -1) { . Ligne 1413 (on suppose listeners = NULL).XXXXXX).. SOL_SOCKET. La taille de cette zone est de HARD SERVER LIMIT × sizeof(short score) octets. avant compilation du serveur). ce que nous avons remarqu´ e au paragraphe II.. 1318 1319 .(char *)&keepalive_value. le serveur est accessible uniquement sur le port 80.. appelle par deux fois setsockopt. comme nous l’examinerons un peu plus loin. elle peut ˆ etre augment´ ee dans le fichier de configuration httpd.h. 161 . sizeof(keepalive_value))) == -1) { . appel ` a la fonction make sock (ligne 1298). l’ouvre.conf (voir ci-dessus au paragraphe II.. la structure short score. ` a un instant donn´ e. d´ efinie dans scoreboard.. SO REUSEADDR Indique que la r` egle d’exclusivit´ e suivie par bind(2) pour l’attribution d’un port ne s’applique plus : un processus peut se servir d’un mˆ eme port pour plusieurs usages diff´ erents (comme par exemple le client ftp qui attaque les port 21 et 20 du serveur avec le mˆ eme port local).). r´ eduit son nombre de lien ` a 0.SO_KEEPALIVE. Ligne 1402 reinit scoreboard (ligne 596) Cette fonction remet ` a z´ ero. if((setsockopt(s. voire mˆ eme des processus diff´ erents (c’est le cas ici) peuvent faire un bind avec le mˆ eme port sans rencontrer la fatidique erreur 48 (“Address already in use”) ! Vue des clients HTTP. SERVER DEAD. En standard cette valeur est 150. . . Celleci cr´ ee et initialise une socket. HARD SERVER LIMIT d´ efinit le nombre maximum de connexions actives.

.162 Anatomie d’un serveur Web SO KEEPALIVE Indique ` a la couche de transport. qu’elle doit ´ emettre ` a interval r´ egulier (non configurable) un message ` a destination de la socket distante.03 Arriv´ es ` a ce stade. Ligne 1430 set signals (1007) pr´ evoit le comportement lors de la r´ eception des signaux : SIGHUP SIGTERM Appel de restart Appel de sig term Ligne 1438 et la suivante. ici TCP. puis dans le fils modifie le comportement face aux signaux SIGHUP et SIGTERM (just die appelle exit) avant d’ex´ ecuter child main. Le processus maˆ ıtre Ligne 1444 d´ emarre une boucle infinie de surveillance. cr´ eation d’autant de processus fils qu’il en est demand´ e dans le fichier de configuration (StartServers). La fonction make child (1275) appelle fork. il nous faut analyser l’attitude des deux types de processus. ligne 1139). main () standalone_main () Pour chaque fils demandé Processus esclaves make_child () Processus maitre child_main () Boucle infinie accept () wait || make_child read_request () process_request () figure IX. Que celle-ci n’y r´ eponde pas et la prochaine tentative d’´ ecriture sur la socket se solde par la r´ eception d’un SIGPIPE. Seule la r´ eception et le traitement d’un signal peut l’interrompre. indiquant la disparition de la socket distante (voir plus loin la gestion de ce signal dans la fonction child main.

Au cours d’une boucle le serveur g` ere l’acceptation d’une requˆ ete et son traitement. C’est ` a dire qu’il faut qu’un autre processus en d´ ev´ erouille l’acc` es pour que le premier processus sur la liste d’attente (g´ er´ ee par le noyau Unix) y acc` ede. Ce fonctionnement est assur´ e suivant la version d’Unix par la primitive flock ou par la primitive fcntl. Ligne 1247 process request fabrique la r´ eponse au client. Il n’y a qu’un seul processus prˆ et ` a r´ epondre ` a la fois et d` es que le accept (ligne 1217) retourne dans le code utilisateur la ressource est d´ ev´ erouill´ ee (on suppose toujours listeners = 0).) assurent la mˆ eme fonctionnalit´ e. en plus complet. Cette op´ eration est ` a rapprocher de l’option SO REUSEADDR prise ligne 1312. . d´ ebute avec l’appel de la fonction child main. donc un message HTTP. . ou si Ligne 1182 le nombre de requˆ etes trait´ ees par ce processus a atteint la limite max requests per child. donc un autre message HTTP. Ce v´ erouillage est bloquant et exclusif.Architecture interne du serveur Apache Ligne 1458 Ici. le processus s’arrˆ ete de lui-mˆ eme. ils sont aussi plus complexes ` a mettre en œuvre. Ligne 1167 D´ ebut de la boucle infinie qui g` ere cette instance du serveur. semctl. si le nombre de serveurs disponibles est inf´ erieur au nombre minimal requis. Ligne 1245 read request lit la requˆ ete du client. Ligne 1190 L’appel ` a la fonction accept mutex on v´ erouille l’acc` es ` a la ressource d´ efinie pr´ ec´ edement avec accept mutex init (ligne 166). Ligne 1221 La fonction accept mutex off d´ ev´ erouille l’acc` es ` a la socket. autant de serveurs Web op´ erationnels. . Les s´ emaphore du Syst` eme V (semget. il y reg´ en´ eration de ceux qui manquent avec la fonction make child 163 Les processus esclaves Ligne 1139 La gestion de ces processus. Ligne 1174 Gestion du SIGPIPE donc des clients qui d´ econnectent avant l’heure ! Ligne 1180 Si le nombre de serveurs libres (count idle servers) est sup´ erieur ` a la limite configur´ ee. Il faut ´ eviter que plusieurs processus serveurs disponibles ne r´ epondent ` a la requˆ ete. C’est l’auto-r´ egulation pour lib´ erer des ressources occup´ ees par un trop grand nombre de processus serveurs inutiles. semop.

04 Prise en main des requˆ etes Le fichier concern´ e par la lecture de la requˆ ete est http protocol. par le programme d’application (CGI). et le protocole demand´ e . seule l’en-tˆ ete lue le corps du message dans le cas de a m´ ethode POST est lu plus tard. Celle-ci appelle en cascade process request internal.164 Anatomie d’un serveur Web Maitre HARD_SERVER_LIMIT score_board Accès à la socket httpd httpd . Parmi ceux-ci on peut relever. Ligne 716 La fonction unescape url (util. Ligne 723 La fonction getparents filtre les chemins (“pathname”) qui prˆ etent ` a confusion.c. Attention. La lecture de la premi` ere ligne du message HTTP est assur´ ee par la 15 fonction read request line.c. ligne 267) invoque le programme (module) qui se charge de fabriquer la r´ eponse. ligne 772. Si celui est inexisdu contenu du champ content type de la requˆ tant. comme dans notre exemple du paragraphe I. Ligne 768 La fonction invoke handler est le point d’entr´ ee dans le traitement de la requˆ ete.. ligne 329 .. 15 La m´ ethode. ligne 356. il est positionn´ e par d´ efaut ` a la valeur html/text.c et la fonction principale process request. l’URL. Cette fonction (http config. . La lecture de l’en-tˆ ete MIME est assur´ ee par la fonction get mime headers. Le fichier concern´ e par la formulation de la r´ eponse est http request. Cette derni` ere effectue un certain nombre de tests avant de traiter effectivement la requˆ ete. lors du traitement du message. ligne 684. ligne 593) assure le d´ ecodage des caract` eres r´ eserv´ es et transcod´ es comme il est sp´ ecifi´ e par la RFC 1738..c. httpd MaxClients figure IX.. au vue ete.

Ces deux modes de fonctionnement ne sont pas clairement document´ es. Il n’est pas assur´ e que cette possibilit´ e existera dans les futures versions du serveur 16 “Non Parse Header” . ce qui am´ eliore les performances en ´ evitant une s´ equence lecture/´ ecriture inutile. en fait il s’agit d’une caract´ eristique du serveur du CERN. la distinction est faite parle nom de la cgi elle-mˆ eme. y compris l’en-tˆ ete MIME. vue au paragraphe ci-dessus. La figure 5 r´ esume les 2 situations possibles d’ex´ ecution d’une CGI. . dans ce dernier cas.c. . Le point d’entr´ est la fonction cgi handler (ligne 207). c’est ` a dire celle qui appell´ ee par invoke handler. Dans le cas ordinaire (nom quelconque) les donn´ ees transmises depuis le client vers la cgi et r´ eciproquement. des images. c’est ` a la CGI de fabriquer l’int´ egralit´ e du message HTTP.Architecture interne du serveur Apache Deux types de CGIs Pour la suite nous supposons que la prise en main de la requˆ ete est ee faite par le module “cgi”. maintenue pour assurer sans doute la compatibilit´ e avec les applicatifs d´ ej` a´ ecrits. Connexion client 165 HTTPD Lecture client HTTPD 1 cgi 2 0 Ecriture client 0 1 nph−cgi 2 s−>error_log (fichier error_log) s−>error_log (fichier error_log) figure IX. elle. Ce comportement est justifi´ e d` es que de gros volumes d’octets sont ` a transmettre au client (de grandes pages HTML. passent par le processus httpd et via un tube non nomm´ e (“pipe”). est ´ emise directement. A elle ´ egalement de g´ erer la d´ econnexion pr´ ematur´ ee du client (SIGPIPE).05 Si le nom de l’ex´ ecutable commence par nph-16 le comportement du serveur http change. La lecture du code permet de d´ eduire qu’il y a deux types de CGI. Attention. la r´ eponse. seules les donn´ ees lues depuis le client (par exemple avec la m´ ethode POST) transitent par le processus httpd.). Dans le cas d’une cgi “nph”. d´ efini dans le fichier mod cgi.

.. donc httpd. 251 . Examinons le code du fichier mod cgi. 277 278 279 280 281 282 . et le sixi` eme qui est nul dans le cas d’une cgi du type “nph”. ee et sorscript in et script out sont respectivement les canaux d’entr´ tie des donn´ ees depuis et vers le processus qui ex´ ecute la cgi..4)).. &script_out....... . notamment celles qui utiliseront la version 1.. Il parait donc logique que dans le cas d’une cgi de type “nph” script in soit nul.. jusqu’` a la ligne 332. . Le contenu est renvoy´ e vers le processus fils. Un m´ ecanisme non encore analys´ e duplique la sortie de ce processus vers le client plutˆ ot que vers le processus serveur. r).c : 207 int cgi_handler (request_rec *r) 208 { 209 int nph.c... if (!spawn_child (r->connection->pool... ."nph-"..166 Anatomie d’un serveur Web Apache. . . si la m´ ethode choisie est du type POST. cgi_child. REMOTE HOST... La variable nph vaut 1 si la cgi est de ce type. return SERVER_ERROR. nph ? NULL : &script_in)) { log_reason ("couldn’t spawn child process". sans transformation : . par exemple SERVER SOFTWARE. . le processus lit ce que le client lui envoie.. . (void *)&cld.. L’appel de cette fonction provoque la cr´ eation d’un processus fils. .1 d’HTTP. } .. r->filename. 222 nph = !(strncmp(argv0. .. celui qui finalement va ex´ ecuter la cgi. Nous continuons la description du point de vue du processus p` ere. Ligne 295 et les suivantes.. add_common_vars (r). Il faut remarquer le deuxi` eme argument qui est un pointeur de fonction (cgi child).. ligne 126) compl` ete les variables qui ne d´ ependent pas du contenu de la requˆ ete.. . nph ? just_wait : kill_after_timeout. Ici on commence ` a fabriquer l’environnement d’ex´ ecution de la cgi Cette fonction (fichier util script.

. . script_out) == 0) break.. dans ce cas. 1.c. entres autres. Examinons maintenant comment se pr´ epare et s’ex´ ecute le processus fils : 101 void cgi_child (void *child_stuff) 102 { . 373 374 375 376 377 /* Handle script return. 127 env = create_environment (r->pool. len_read. pour tout processus.. . les variables REQUEST METHOD et QUERY STRING ` a l’environnement.Architecture interne du serveur Apache 311 312 . le seul moyen pour le client d’envoyer des arguments ` a la cgi est d’utiliser l’URL... */ if (script_in && !nph) { ... Chaque argument est ensuite ´ ecrit sous la forme : nom = valeur Les arguments sont s´ epar´ es les uns des autres par le caract` ere “&”. 126 add_cgi_vars (r). 337 338 . script_in). . if(!r->header_only) send_fd (script_in. r). script_out)... kill_timeout (r). La fonction add cgi vars (fichier util script.moi/cgi-bin/nph-qtp ?base=datas&mot=acacia&champ=. Il s’agit du tableau de variables accessibles depuis la variable externe environ. ligne 192) ajoute. 335 if (fwrite (argsbuffer. pfclose (r->connection->pool. 167 Il est donc clair que c’est ` a celui-ci d’exploiter ce qu’envoie le client. pfclose (r->connection->pool...chez.. puis renvoy´ ee au client (ligne 374). par exemple le r´ esultat d’une forme de saisie. En effet.. } Ce test traite le cas d’une cgi normale.MC La syntaxe de l’URL pr´ evoit le caract` ere “ ?” comme s´ eparateur entre le nom et ses arguments.. Ces deux derni` eres lignes pr´ eparent l’environnement du futur processus fils. dont la sortie est lue par le serveur. r->subprocess_env). Cette derni` ere variable joue un rˆ ole majeur dans la transmission des arguments ` a la cgi quand la m´ ethode choisie est GET. comme par exemple dans : http ://monweb. send_http_header(r).

168 135 136 ... 138

Anatomie d’un serveur Web error_log2stderr (r->server); ... if (nph) client_to_stdout (r->connection);

Ligne 135, la sortie d’erreur est redirig´ ee vers le fichier error log, et ligne 138, la sortie standard du processus, c’est la socket, donc envoy´ ee directement vers le client ! 184 185 186 187

if((!r->args) || (!r->args[0]) || (ind(r->args,’=’) >= 0)) execle(r->filename, argv0, NULL, env); else execve(r->filename, create_argv(r->pool, argv0, r->args), env

Puis finalement on ex´ ecute la cgi ! Bien sˆ ur, si le programme va au del` a de la ligne 187, il s’agit d’une erreur. . .

4 Principe de fonctionnement des CGIs

169

4
4.1

Principe de fonctionnement des CGIs
CGI — M´ ethode GET, sans argument

Dans ce paragraphe nous examinons ce qui se passe lors de l’ex´ ecution d’une CGI tr` es simple (shell script, le source suit) que l’on suppose plac´ ee dans le r´ epertoire idoine, pour ˆ etre ex´ ecut´ ee comme lors de la requˆ ete suivante :
$ telnet localhost 80 Trying ... Connected to localhost. Escape character is ’^]’. GET /cgi-bin/nph-test-cgi HTTP/1.0 HTTP/1.0 200 OK Content-type: text/plain Server: Apache/1.1.1

La requˆ ete tap´ ee par l’utilisateur. L’en-tˆ ete du message HTTP renvoy´ e par le serveur. La ligne de statut est g´ en´ er´ ee par la cgi car il s’agit d’une cgi de type nph-

CGI/1.0 test script report: argc is 0. argv is . SERVER_SOFTWARE = Apache/1.1.1 SERVER_NAME = www.chezmoi.tld GATEWAY_INTERFACE = CGI/1.1 SERVER_PROTOCOL = HTTP/1.0 SERVER_PORT = 80 REQUEST_METHOD = GET SCRIPT_NAME = /cgi-bin/nph-test-cgi QUERY_STRING = REMOTE_HOST = labas.tresloin.tld REMOTE_ADDR = 192.168.0.1 REMOTE_USER = CONTENT_TYPE = CONTENT_LENGTH = Connection closed by foreign host.

Le corps du message. Ces octets sont g´ en´ er´ es dynamiquement par le programme nph-test-cgi.

Et voici le source de cet exemple (une modification du script de test livr´ e avec Apache) :
#!/bin/sh echo HTTP/1.0 200 OK echo Content-type: text/plain echo Server: $SERVER_SOFTWARE echo echo CGI/1.0 test script report: echo echo argc is $#. argv is "$*". echo

Remarquez la fabrication de l’entˆ ete MIME, r´ eduite mais suffisante. Le echo seul g´ en` ere une ligne vide, celle qui marque la limite avec le corps du message.

170
echo echo echo echo echo echo echo echo echo echo echo echo

Anatomie d’un serveur Web
SERVER_SOFTWARE = $SERVER_SOFTWARE SERVER_NAME = $SERVER_NAME GATEWAY_INTERFACE = $GATEWAY_INTERFACE SERVER_PROTOCOL = $SERVER_PROTOCOL SERVER_PORT = $SERVER_PORT REQUEST_METHOD = $REQUEST_METHOD QUERY_STRING = $QUERY_STRING Toutes ces variables sont celles de REMOTE_HOST = $REMOTE_HOST l’environnement g´ en´ er´ e par le moREMOTE_ADDR = $REMOTE_ADDR REMOTE_USER = $REMOTE_USER dule cgi handler avant d’effecCONTENT_TYPE = $CONTENT_TYPE tuer le exec. CONTENT_LENGTH = $CONTENT_LENGTH

4.2

CGI — M´ ethode GET, avec arguments

Examinons maintenant un cas plus compliqu´ e, avec des arguments transmis, ou “query string”. Celle-ci est transmise ` a la cgi via la variable d’environnement QUERY STRING. C’est ` a la cgi de l’analyser puisque son contenu rel` eve de l’applicatif et non du serveur lui-mˆ eme. Essayons de coder la cgi de l’exemple :
http ://www.chezmoi.tld/cgi-bin/query ?base=datas&mot=acacia&champ=.MC

Premi` ere version : #!/bin/sh echo Content-type: text/plain echo echo "QUERY_STRING=>"$QUERY_STRING "<=" exit 0 L’interrogation avec un telnet produit la sortie : QUERY_STRING=>base=datas&mot=acacia&champ=.MC<= Se trouve tr` es facilement sur les sites ftp le source d’un outil nomm´ e cgiparse17 , parfaitement adapt´ e` a l’analyse de la chaˆ ıne transmise. D’o` u la deuxi` eme version :
#!/bin/sh CGIBIN=~web/cgi-bin BASE=‘$CGIBIN/cgiparse -value base‘ MOT=‘$CGIBIN/cgiparse -value mot‘ CHAMP=‘$CGIBIN/cgiparse -value champ‘
17

Cette partie du code montre l’analyse du contenu de la variable QUERY STRING avec l’outil cgiparse.

Il est dans la distribution standard du serveur httpd-3.0.tar.gz du CERN

Principe de fonctionnement des CGIs
echo Content-type: text/plain echo echo "BASE="$BASE echo "MOT="$MOT echo "CHAMP="$CHAMP exit 0

171

Et l` a, la fabrication du message renvoy´ e. La cgi renvoie ses octets via un tube au serveur, c’est donc celui-ci qui se charge de fabriquer un en-tˆ ete MIME.

Puis le r´ esultat de l’ex´ ecution : BASE=datas MOT=acacia CHAMP=.MC

4.3

CGI — M´ ethode POST

La m´ ethode POST autorise un client ` a envoyer au serveur une liste de couples variable=valeur. Chaque couple est s´ epar´ e des autres par une fin de ligne, c’est ` a dire (CR,LF). Cette m´ ethode est bien adapt´ ee ` a la transmission d’informations collect´ ees cot´ e client dans une forme18 de saisie, et dont le volume est variable. La liste des couples est ´ ecrite dans le corps du message, par le programme client, et ne fait pas partie de l’URL, comme c’est le cas pour la m´ ethode GET. Il y a ´ evidement une limite au nombre maximum d’octets envoy´ e par 19 le client, c’est le serveur qui en fixe la valeur . Du cot´ e du client, il faut pr´ evenir le serveur, dans l’en-tˆ ete du message HTTP, de la taille du corps du message. Cela s’effectue avec le champ Content-length :. L’exemple suivant ne fait que renvoyer la liste des couples lus, vers le client. Attention il ne fonctionne qu’avec telnet.
$ telnet www.chezmoi.tld 80 Trying 192.168.0.2... Connected to www.chezmoi.tld. Escape character is ’^]’. POST /cgi-bin/test-post HTTP/1.0 Content-length:14 areuh=tagada HTTP/1.0 200 OK Date: Mon, 24 Mar 1997 14:41:26 GMT Server: Apache/1.1.1 Content-type: text/plain REQUEST_METHOD = POST CONTENT_LENGTH = 14 Couple lu : areuh=tagada Connection closed by foreign host.
18 19

Le corps du message fait bien 14 caract` eres si on compte la fin de ligne (CR+LF).

La r´ eponse du serveur liste les couples lus, ici un seul ! La variable globale REQUEST METHOD pourrait ˆ etre utilis´ ee pour adapter le comportement de la cgi en fonction de la m´ ethode demand´ ee.

Voir le “tag” FORM de l’HTML efinie dans le fichier httpd.h HUGE STRING LEN qui vaut 8192 en standard, d´

172 Et voici le source de la cgi :

Anatomie d’un serveur Web

#!/bin/sh # # Ce script teste la methode POST # echo Content-type: text/plain echo echo REQUEST_METHOD = $REQUEST_METHOD echo CONTENT_LENGTH = $CONTENT_LENGTH while read l do echo "Couple lu :" $l done exit 0

4.4

Ecriture d’une CGI en Perl

Voir cours de Jean-Jacques Dhenin. . .

5 Conclusion – Bibliographie

173

5

Conclusion – Bibliographie

Rien n’est constant, tout change. . .Et il faut ˆ etre constamment ` a l’affut de la nouveaut´ e dans ce domaine tr` es r´ eactif qu’est celui du “World Wide Web”. Les quelques r´ ef´ erences bibliographique qui suivent illustrent ce cours, mais il est ´ evident qu’elles sont bien insuffisantes pour couvrir tous les aspects que le terme “web” sous-entend ! RFC 1521 N. Borenstein, N. Freed, “MIME (Multipurpose Internet Mail Extensions) Part One : Mechanisms for Specifying and Describing the Format of Internet Message Bodies”, 09/23/1993. (Pages=81) (Format=.txt, .ps) (Obsoletes RFC1341) (Updated by RFC1590) RFC 1590 J. Postel, “Media Type Registration Procedure”, 03/02/1994. (Pages=7) (Format=.txt) (Updates RFC1521) RFC 1630 T. Berners-Lee, “Universal Resource Identifiers in WWW : A Unifying Syntax for the Expression of Names and Addresses of Objects on the Network as used in the World-Wide Web”, 06/09/1994. (Pages=28) (Format=.txt) RFC 1738 T. Berners-Lee, L. Masinter, M. McCahill, “Uniform Resource Locators (URL)”, 12/20/1994. (Pages=25) (Format=.txt) RFC 1945 T. Berners-Lee, R. Fielding, H. Nielsen, “Hypertext Transfer Protocol – HTTP/1.0”, 05/17/1996. (Pages=60) (Format=.txt) RFC 2068 R. Fielding, J. Gettys, J. Mogul, H. Frystyk, T. BernersLee,“Hypertext Transfer Protocol – HTTP/1.1”, 01/03/1997. (Pages=162) (Format=.txt) TCP/IP Illustrated Volume 3 W. Richard Stevens – Addison-Wesley – Janvier 1996.

174

Anatomie d’un serveur Web

Chapitre X ´ ements de r´ El´ eseaux
1 Hˆ otes ou services virtuels
HTTP

A

B

C

D

ipA

ipB ipWWW

ipC Traffic HTTP

ipD

figure X.01 : Serveur HTTP virtuel

La machine B (d’adresse IP fixe ipB) h´ eberge par exemple le service HTTP d’adresse ip ipWWW. Cette op´ eration est rendue possible si le syst` eme d’exploitation de B autorise la notion d’alias IP. Si les machines A, C et D ex´ ecutent ´ egalement un serveur HTTP, elles peuvent potentiellement prendre le relais de la machine B, d` es lors que l’adresse ipWWW aura ´ et´ e retir´ ee de la machine B pour ˆ etre reconfigur´ ee sur l’une d’entres elles. Cette op´ eration peut se faire manuellement ou via un outil d’administration. Elle permet de faire transiter tr` es rapidement des services d’une machine ` a une autre, sans rupture ou presque de la continuit´ e. Vu des clients il s’agit toujours de la mˆ eme machine, mais elle est virtuelle puisqu’elle n’existe pas physiquement. Section en chantier, pr´ ecisions en cours. . .

est bouscul´ ee. dans une couche de transport comme TCP. . voir la description des sockets de Berkeley page 199 1 . voire mˆ eme dans une couche applicative comme HTTP. lui -mˆ eme ´ eventuellement encapsul´ e dans de l’Ethernet (PPPoE RFC 2516) ou de l’ATM (PPPoA pour l’ADSL. elle. et que les transferts entre la couche de transport (dans le noyau) et la couche applicative s’effectuent via un jeu de primitives du syst` eme. Ce dernier exemple peut paraˆ ıtre “ contre nature ” et pourtant cela fonctionne. Aussi le trafic de datagrammes remonte au niveau applicatif pour redescendre au niveau IP. si le principe d’encapsulation est conserv´ e. nous avons d´ ej` a analys´ e l’encapsulation des couches de la pile Arpa selon une progression naturelle de fonctionnalit´ es. Pr´ ec´ edemment. il faut pouvoir ´ ecrire directement dans IP ce qui n´ ecessite une socket en mode raw et donc un uid 0 ` a l’ex´ ecution 3 Rappelons que les processus applicatifs standards s’ex´ ecutent en mode utilisateur. ce qui a l’avantage de pouvoir ˆ etre mis en œuvre par un utilisateur n’ayant pas n´ ecessairement les droits de l’administrateur2 . Heureusement le gain en fonctionnalit´ es pour le r´ eseau est substanciel. outre une consommation suppl´ ementaire de cycles cpu et des changements de contexte inh´ erents ` a l’architecture logicielle3 .Principe Le tunnel permet d’encapsuler un protocole dans un autre de mˆ eme niveau ou sup´ erieur. Par exemple on peut envisager d’encapsuler IP dans de multiple protocole autres qu’Ethernet. la logique initiale de construction. comme les exemples qui vont suivre l’illustrent ! Les tunnels qui transitent par une couche de transport sont g´ er´ es par une application (par exemple sshd ou httptunnel).176 ´ ements de r´ El´ eseaux 2 Tunnel IP A Encapsulation d’IP dans IP B figure X. analyse) engendr´ e par l’ajout de ces nouveaux en-tˆ etes. page 28. En r´ esum´ e. a l’inconv´ enient d’ˆ etre d´ edi´ e` a un seul “ Point to Point Protocol ”. comme PPP1 . construire un tunnel se traduit par une perte d’espace pour les donn´ ees dans les datagrammes et par une consommation accrue de cycles cpus pour traiter les en-tˆ etes suppl´ ementaires. IP. . Construire un tunnel a un coˆ ut : d’une part celui de la perte d’espace de donn´ ees dans le datagramme (il faut loger un ou plusieurs en-tˆ etes suppl´ ementaires et le MTU reste constant lui !) et d’autre part celui du traitement suppl´ ementaire (d´ ecapsulation. RFC 2364) 2 Pour encapsuler IP dans IP par exemple.02 : Tunnel IP . mais par contre. Ici.

2. depuis la machine B (IPB ). 177 2.168. Sur la figure ci-dessus le tunnel IP encapsule donc de l’IP dans lui mˆ eme.0/24.2. NetBSD ou OpenBSD 6 Nous avons d´ ej` a rencontr´ e un tel interface virtuel avec l’interface de “ loopback ” lo0 page 70 4 .168. vers la machine A (IPA ) et au travers d’un r´ eseau rout´ e quelconque. Examinons maintenant quelle pourrait ˆ etre la configuration sp´ ecifique ` a ce tunnel.2 netmask 0xfffffffc route add -net 192.2.0/24 (RFC 1918). qui ne soit pas d´ ej` a dans l’un des r´ eseaux attach´ es ` a chacune des machines. – Par hypoth` ese la machine A sait comment router vers le 192. Encapsuler IP dans IP a l’avantage de rester g´ en´ eraliste du point de vue des applications.168. qui permet d’encapsuler de l’IP (version 4 ou 6) dans de l’IP (version 4 ou 6)6 . le 192.168. Sur la machine A : ifconfig create gif0 ifconfig gif0 inet tunnel IP(A) IP(B) ifconfig gif0 inet 192. des adresses dans le 192.Tunnel IP avec l’interface gif port (par exemple celui d’une application non crypt´ ee comme pop au travers 4 une liaison ssh) . si on souhaite (et c’est une quasi obligation quand on utilise des tunnels) ajouter un filtrage IP sur la machine B. Le but de cet exemple de tunnel est de montrer un routage de datagrammes issus d’un r´ eseau non officiellement rout´ e. il serait parfaitement possible d’utiliser.2 La mise en œuvre d’un tunnel au travers http pour contourner le filtrage en sortie d’un site n’est absolument pas recommand´ ee par l’auteur de ces pages et laiss´ ee ` a la compl` ete responsabilit´ e du lecteur 5 “ man gif ” sous FreeBSD.168.249. Il s’agit d’un pseudo-device (pas d’interface r´ eel associ´ e.0/30 (RFC 1918) sert de r´ eseau d’interconnexion entre les deux machines. comme cela pourrait ˆ etre le cas avec une carte r´ eseau) tr` es g´ en´ eraliste.168. Concr` etement. il s’agit d’attribuer une adresse IP ` a chacun des pseudo-devices. L’auteur pr´ ef` ere l’usage d’un r´ eseau d’interconnexion qui permet de bien s´ eparer ce qui concerne le tunnel de ce qui utilise le tunnel.1 192.03 illustre l’encapsulation d’IP dans IP grˆ ace ` a l’usage du 5 “ generic tunnel interface ” .249.2. par exemple.0/24.168.0/24 uniquement derri` ere le filtre.1 Tunnel IP avec l’interface gif La figure X. Conceptuellement.2. il est beaucoup plus ais´ e pour la conception des r` egles de filtrage de consid´ erer l’origine des datagrammes ayant une adresse source dans le 192. Pour les routeurs qui acheminent ce trafic il s’agit de datagrammes IP avec le type 4 (cf le fichier /etc/protocols au lieux des types 1 (icmp) 6 (tcp) ou 17 (udp) plus habituels.168. – Le r´ eseau 192.168.249. De plus.0 192.249.

249. C’est une ´ ecriture particuli` ere.03 : Tunnel IP ..249.249. Ainsi l’observation pratique rejoint la th´ eorie : on retrouve bien sur le l’interface du tunnel (gif0) l’en-tˆ ete 2.178 Puis sur la machine B : ´ ements de r´ El´ eseaux ifconfig create gif0 ifconfig gif0 inet tunnel IP(B) IP(A) ifconfig gif0 inet 192.168. adapt´ ee au pilote de l’interface gif0 pour la configuration des tunnels.168. Le datagramme est alors disponible au niveau de la pile IP de B pour ˆ etre rout´ e (routage direct8 ici) vers 192.2 -> 192. gif0: flags=8011<UP.168.168..249.1 -> 192.POINTOPOINT. 7 8 Avec tcpdump -i if0 puis tcpdump -i gif0 par exemple Cf page 61 .168.2.168.200. gif0: flags=8011<UP.POINTOPOINT.2 gif0 if0 IP(B) .cas concrˆ et Notez que la premi` ere ligne de configuration pr´ ecise la source et la destination r´ eelle des datagrammes alors que la deuxi` eme indique l’adresse locale et distante des extr´ emit´ es du tunnel.1 netmask 0xfffffffc Et sur la machine A : $ ifconfig -a . si on examine7 sur les interfaces de B le passage de datagrammes d’un ping.2 netmask 0xfffffffc Enfin.254.1 Datagrammes IPv4 non routables encapsulés dans des datagrammes IPv4 routables.168.MULTICAST> mtu 1280 tunnel inet IP(A) --> IP(B) inet 192.2 192.200. figure X. on peut voir le r´ esultat de la configuration comme ¸ ca : $ ifconfig -a . envoy´ e depuis A vers 192.2.200 192. d´ ecapsul´ e de son en-tˆ ete 1. Sur la machine B. on rel` eve les en-tˆ etes IP du tableau qui suit.168.168.168.MULTICAST> mtu 1280 tunnel inet IP(B) --> IP(A) inet 192. par exemple.2.0/24 192.249.1 netmask 0xfffffffc A IP(A) gif0 B 192.249.249.168...

Dans le paragraphe suivant ! Pour un routeur de type cisco qui prot´ egerait la machine B. Enfin pour conclure.249. il faudrait ajouter des r` egles du genre “permit ipinip host IPB IPA” et “permit ipinip host IPA IPB” 9 .168.2. Les “ core gateway ” le laisse passer sans probl` eme.2. . est-il n´ ecessaire de pr´ eciser que mˆ eme encapsul´ es dans IP.168. .168.200 icmp 179 Sur l’interface if0 Sur l’interface gif0 En-tˆ ete Src 192. les routeurs filtrants doivent ˆ etre sp´ ecialement configur´ es pour 9 laisser passer ce type de trafic . Il est int´ eressant de noter que le d´ eploiement d’IPv6 est d’abord bas´ e sur l’encapsulation de trames de la version 6 dans des trames de la version 4. en attendant que tous les routeurs soient capables de router IPv6 nativement.1 192.1 Dst 192.200 Code icmp Remarques : Attention.Tunnel IP avec l’interface gif En-tˆ ete 1 Src IPA Dst IPB Code ipencap(4) En-tˆ ete 2 192. nos datagrammes n’en sont pas moins lisibles par des yeux indiscrˆ ets ? Pour s’en pr´ emunir il nous faut examiner une technologie compl´ etementaire.168.249.

pour faire le lien avec le paragraphe qui pr´ ec` ede.2 IPsec et VPN IPsec est un protocole de s´ ecurit´ e inclus dans la couche IP elle-mˆ eme. pr´ ecisons qu’IPsec encapsul´ e dans IP (formellement. surtout ` a l’heure des r´ eseaux “ wifi ” dont les limites de port´ ee ne sont pas maˆ ıtrisables. tout ce qui renforce la s´ ecurit´ e IP est une bonne chose. Ce paragraphe aborde bri` evement la question du point de vue du protocole et de sa place dans la pile Arpa. Nous aurions pu conclure le chapitre sur IP page 43 par cette constatation que le protocole IP est lisible par tout le monde y compris par les indiscrˆ ets et que quasiment n’importe quel “ bricoleur ” peut forger de faux datagrammes (“ fake datagram ”) pour empoisonner un r´ eseau. une dimension de s´ ecurit´ e tr` es utilis´ ee pour relier des machines . Il est d´ efini dans la RFC 2401. travail normalement d´ evolu ` a la couche de transport mais qui au niveau d’IP permet d’´ ecarter tout datagramme qui aurait ´ et´ e modifi´ e pendant son transport. Authentification La source du datagramme ne peut ˆ etre qu’un seul ´ emetteur. un tunnel) porte un nom. IPsec renforce la s´ ecurit´ e d’IP sur plusieurs points : Confidentialit´ e Les donn´ ees d’IP (protocole de transport et donn´ ees applicatives) sont crypt´ ees.180 ´ ements de r´ El´ eseaux 2.physiquement localis´ es n’importe o` u il y a un acc` es IP. entre autres. Ainsi. D’ailleurs. Les RFCs donn´ ees page 195 sont le bon point de d´ epart pour se documenter sur les aspects cryptographiques d’IPsec 10 . donc normalement non inspectables avec tout outil d’analyse de r´ eseau. Dispositif “ anti-rejeux ” pour ´ eviter les attaques du type “ man-in-themiddle ” consistants ` a capturer un ou plusieurs datagrammes (crypt´ es) dans le but de les envoyer ` a nouveau pour b´ en´ eficier du mˆ eme effet produit que l’envoi initial.ou des r´ eseaux . et non un interm´ ediaire non pr´ evu. voire d´ etourner les services d’une machine. Int´ egrit´ e La totalit´ e des donn´ ees est prot´ eg´ ee par une somme de contrˆ ole (checksum). Ajouter Ipsec introduit. tout en laissant volontairement dans un certain flou les aspects li´ es ` a la cryptographie. IPsec dans quel but ? IPsec est un point de passage oblig´ e pour tout administrateur de r´ eseau qui souhaite mettre en place une politique de s´ ecurit´ e. en r´ eseaux virtuels s´ ecuris´ es ! C’est pour cette raison qu’Ipsec est un artefact incontournable de la panoplie s´ ecuritaire sur les r´ eseaux. le VPN (“ Virtual Private Network ”) ! Nous avons examin´ e comment un tunnel accroˆ ıt l’´ etendue d’un r´ eseau au travers d’autres r´ eseaux. 10 clairement absents des objectifs de ce cours .

et non sur l’´ echange d’une clef publique. Bien entendu IPcomp peut ˆ etre utilis´ e seul. par exemple racoon. Cette remarque a un impact sur la mani` ere avec laquelle on doit les configurer ! AH (“ Authentication Header ”) est d´ efini par la RFC 2402. IPcomp (“ IP payload compression ”) sert ` a compresser les donn´ ees avant de les crypter. les impl´ ementations d’IPsec ne supportent que l’unicast. . IKE (“ Internet Key Exchange ”) est d´ efini par la RFC 2409. c’est ` a dire qu’il cherche ` a certifier que les deux couches IP qui dialoguent sont bien celles qu’elles pr´ etendent ˆ etre. au d´ emarrage des ´ echanges et au cours du temps. Une n´ egociation d´ ecrite dans la RFC 2409 se d´ eroule entre les hˆ otes qui doivent dialoguer. . Si ces cas de figures sont tous th´ eoriquement possibles. Il faut noter que ce dernier travail empi` ete largement sur les attributions de la couche de transport mais se justifie compte-tenu des exigences inh´ erentes au fonctionnement d’IPsec. voir plus bas) entre les parties qui ´ echangent des messages. Ainsi la clef de chiffrement n’est plus d´ efinie de mani` ere statique dans un fichier mais change continuellement au cours du temps. Ce protocole n’est pas formellement indispensable au bon fonctionnement d’IPsec mais lui apporte un m´ ecanisme d’´ echange de clefs. Les 32 bits de l’adresse IP de destination12 permettent th´ eoriquement d’exprimer un adressage de type unicast ou multicast ou broadcast.IPsec et VPN IPsec en r´ esum´ e Ipsec (RFC 2401) est un assemblage de quatre protocoles : ESP (“ Encapsulating Security Payload ”) est d´ efini par la RFC 2406. puis l’int´ egrit´ e des donn´ ees par le calcul d’un checksum. “ 3DES ” (RFC 2451). Du point de vue de l’administration syst` eme et r´ eseau. il est effectu´ e “ point ` a point ” plutˆ ot que g´ en´ eralis´ e pour tout un r´ eseau. Il assure la confidentialit´ e par l’usage d’algorithmes de cryptage comme “ DES ” (RFC 2405) . et par une ouverture de port UDP (isakmp/500) suppl´ ementaire dans le filtrage du r´ eseau. ce qui entraine une certaine latence au d´ ebut des ´ echanges. la mise en place 11 de ce protocole passe par l’usage d’un daemon . Son action est rendue n´ ecessaire pour tenter de compenser la perte de la place occup´ ee par les en-tˆ etes ajout´ es. Il assure l’authentification. La cons´ equence est importante sur le d´ eploiement d’IPsec. 11 12 181 Voir page 250 pour le fonctionnement des daemons R´ evision possible page 33 . ce qui est meilleur du point de vue de la s´ ecurit´ e. “ CAST-128 ” (RFC 2144) ou encore “ blowfish ” (RFC 2451). la liste n’est pas exhaustive. Il faut juste noter qu’il s’agit d’algorithmes bas´ es sur l’existence un secret partag´ e (manuellement dans un fichier ou cr´ ee dynamiquement avec IKE.

Les datagrammes peuvent avoir les structures suivantes : Mode transport [IP1][AH][Transport][Data] [IP1][ESP][Transport][Data] [IP1][AH][ESP][Transport][Data] figure X. c’est un choix qui rel` eve de la politique de s´ ecurit´ e. la n´ egociation qui a lieu lors de l’´ etablissement d’IPsec repose sur ce que la RFC appelle des SA (“ Security Association ”).182 Ce travail est inclus dans ce qui est nomm´ e “ politique de s´ ecurit´ e ” dans la RFC 2401. le SPI ´ ements de r´ El´ eseaux figure X. de l’adresse IP du destinataire et du protocole ESP ou d’AH. plus connu sous le vocable “ VPN ”. Pour AH comme pour ESP. Une SA est formellement un triplet unique constitu´ e d’un index unique . l’ajout de donn´ ees vient se placer entre l’en-tˆ ete IP et les donn´ ees. La s´ ecurit´ e entre deux hˆ otes qui supporte IPsec. Pour en tenir compte. on parle alors de “ mode transport ” soit encore en l’encapsulant dans un tunnel comme vu au paragraphe 2 page 176 et on parle de “ mode tunnel ”.04 : En-tˆ etes d’IPsec Standard IP TCP DATA code=6(tcp) Avec AH IP AH TCP code=51(ah) DATA Données authentifiées DATA ESP Auth Données encryptées authentifiées AH + ESP IP AH ESP TCP DATA ESP Auth Avec ESP IP ESP TCP code=50(esp) code=6(tcp) code=50(esp) code=51(ah) (“ Security Parameter Index ”) sorte de num´ ero d’identification IP 13 suppl´ ementaire inclus dans l’en-tˆ ete AH ou ESP. Si les deux protocoles doivent ˆ etre utilis´ es. au travers l’Internet. il faut n´ egocier deux SAs. s’ajoutent deux mani` eres d’utiliser IPsec. Les deux protocoles peuvent ˆ etre utilis´ es ensembles ou s´ eparement. La RFC 2401 indique que toute impl´ ementation se r´ eclamant d’IPsec doit supporter les 4 associations qui suivent. soit directement d’une machine ` a une autre. en mode transport ou en mode tunnel. Comment utiliser IPsec ? Aux deux protocoles AH et ESP.05 : Association 1 Internet * H1 * H2 Mode tunnel [IP2][AH][IP1][Transport][Data] [IP2][ESP][IP1][Transport][Data] 13 intranet intranet Voir page 45 H=hote *=Supporte IPsec AH et/ou ESP .

puis AH aux datagrammes. figure X. ou PoP. Quand ils sont appliqu´ es tous les deux. Ensuite.08 : Association 4 Hote isolé dialup/ppp * H1 * G1 Internet AH et/ou ESP G=passerelle H=hote *=Supporte IPsec H2 intranet Ce dernier cas est celui d’un poste isol´ e qui se raccorde par exemple ` a l’intranet de son entreprise via un modem ou un acc` es IP non sˆ ur. on ajoute la s´ ecurit´ e entre les hˆ otes terminaux ` a celle d´ ej` a apport´ ee par les routeurs. par exemple. il faut d’abord appliquer ESP. et qui utilise un protocole non crypt´ e comme AppleTalk.06 : Association 2 Internet * G1 * G2 183 Le mode tunnel est le seul requis ici. Le mode tunnel est seul requis entre l’hˆ ote H1 et la passerelle G1.IPsec et VPN Remarque : En mode tunnel pour ce premier cas il n’y a pas d’obligation du support d’AH et ESP simultan´ ement.07 : Association 3 * G1 * G2 * H1 intranet Internet * H2 intranet AH et/ou ESP G=passerelle H=hote *=Supporte IPsec figure X. figure X. . La propagation du trafic de type ISAKMP (protocole IKE) au travers les routeurs est un plus. Nous avons donc une structure de datagramme qui a ces formes possibles : Mode tunnel [IP2][AH][IP1][Transport][Data] [IP2][ESP][IP1][Transport][Data] H1 intranet G=passerelle H=hote *=Supporte IPsec H2 intranet AH et/ou ESP C’est la combinaison des deux premiers cas. entre H1 et H2 on revient au premier cas.

Sur la machine B spdadd IP(B) IP(A) any -P out ipsec esp/tunnel/192.249. un excellent document de configuration se trouve sur le site du projet NetBSD : http ://www.kame. c’est ` a dire ce que l’on souhaite en entr´ ee (in).168.2/require. en sortie (out) puis un choix de protocole (esp. grˆ ace ` a des socket de type PF KEY Les clefs sont soit plac´ ees de mani` ere semi-d´ efinitive dans le fichier de configuration d’ipsec lui-mˆ eme (par exemple /etc/ipsec. enfin un niveau d’usage (require ici indique que tous ´ echanges doivent utiliser IPsec).1/require.249. Il faut d´ efinir sa politique de s´ ecurit´ e.168. ESP et IPcomp sont inclus dans le noyau directement. ` a l’aide de l’outil racoon. spdadd IP(A) IP(B) any -P in ipsec esp/tunnel/192. Les protocoles AH.249. Les fichiers de configuration IPsec pourraient ˆ etre : Sur la machine A spdadd IP(A) IP(B) any -P out ipsec esp/tunnel/192.168.168.1/require.249. ipcomp).168. Si nous reconsid´ erons la figure X. La clef de cryptage ne figure pas dans ce fichier car l’exemple utilise IKE pour cela.2-192.168. notamment racoon du projet KAME. ah. Enfin. setkey qui pilote une table de gestion des clefs situ´ ee elle aussi dans le noyau.1-192.249.168. un mode (tunnel ici) avec l’entr´ ee et la sortie du tunnel.249. Quelques daemons savent faire cela.03 les machines A et B jouent le rˆ ole des passerelles G1 et G2 de la figure X. spdadd est une instruction de la commande setkey.net/ .168.249. La gestion des clefs s’effectue via une commande externe.2-192.184 Impl´ ementation d’IPsec ´ ements de r´ El´ eseaux L’impl´ ementation d’IPsec sur les machines FreeBSD et NetBSd est issue du projet KAME14 et est ainsi fortement li´ e au d´ eveloppement de la pile IPv6.netbsd.1-192.2/require.conf soit confi´ ee aux bons soins d’un programme externe qui se charge de les cr´ ee et de les propager ` a l’aide du protocole IKE.249. spdadd IP(B) IP(A) any -P in ipsec esp/tunnel/192.06 (association 2).org/Documentation/network/ipsec/ 14 http ://www.

Son principe se trouve d´ ecrit dans la RFC 1631.1.104. Le propos d’un automate de translation d’adresses est de convertir les adresses IP ` a la vol´ ee au passage d’un interface.33.10 : Machine NAT en routeur Dans la figure 10. qui effectuent donc des tˆ aches potentiellement tr` es complexes (par exemple squid pour http) ou tr` es g´ en´ eraux et donc moins performants sur chaque protocole (cf nat au paragraphe suivant). .112. smtp.5 figure X.104. . . pr´ ecisions en cours.09 : Proxy Le propos d’un proxy est de concentrer le trafic r´ eseau via une seule machine pour toute une vari´ et´ e de protocoles (telnet.3 Proxy 185 3 Proxy P figure X. Les conditions de ce “ rebond ” peuvent ˆ etre param` etr´ ees par des r` egles d’acc` es.93.33. http. Il existe des proxy sp´ ecialis´ es sur tel ou tel protocole. la machine “ NAT ” est par hypoth` ese configur´ ee en routeur. Dans une configuration classique un tel automate isole un r´ eseau comportant des adresses IP non officielles (RFC 1918) d’un autre comportant des adresses officielles et donc potentiellement rout´ ees sur l’Internet. 4 Translation d’adresses La p´ enurie d’adresses IP est ` a l’origine du besoin de translation des adresses.163 Adresses IP B 10. Section en chantier.1 Internet A NAT 193. ce qui en fait un ´ el´ ement utile en s´ ecurit´ e des r´ eseaux (voir la RFC 1919). Adresses IP privées if_int 10. . . .1 publiques if_ext 193.96. On suppose ´ egalement que pour la machine A c’est le routeur par d´ efaut pour atteindre la machine B.). Tout le trafic r´ eseau qui passe par un proxy s’y arrˆ ete pour en repartir.

Le dialogue entre cette machine et les autres machines du r´ eseau “ priv´ e ”. port B. Les routeurs modernes ont la fonction de translation d’adresses incluse dans leurs fonctionnalit´ es standards.112. – La translation (ou “IP masquerading”) s’effectue dynamiquement selon l’adresse demand´ ee.104. elle translate dynamiquement les adresses dans les deux sens. – La machine NAT fait le travail d’un proxy transparent puisque chaque connexion s’y arrˆ ete puis en repart sans configuration particuli` ere de la part de l’administrateur de A ou de B. IP Hˆ ote A. – L’utilisateur de la machine A “ voit ” la connexion soit la forme : {tcp.186 Pour la machine A ´ ements de r´ El´ eseaux – La machine A s’adresse directement ` a la machine 193. Etre serveur est toutefois possible comme il l’est expliqu´ e avec l’usage de natd au paragraphe suivant. IP Hˆ ote NAT. – La situation de la machine A est plutˆ ot celle d’un poste client car ˆ non vu de l’ext´ erieur de son r´ eseau. IP Hˆ ote B. IP Hˆ ote B. via l’interface if int ne fait pas l’objet d’une translation d’adresse. port B} Pour la machine B – La machine B voit une connexion arriver en provenance de “ NAT ”.163 en utilisant son routeur par d´ efaut. – La translation d’adresse s’effectue pour les datagrammes qui traversent l’interface if ext. elle dialogue avec la machine NAT selon : {tcp. . port A. – La machine B n’a pas connaissance de la machine A. port A} Pour la machine NAT – La machine NAT a connaissance des 2 r´ eseaux.

. et celle-ci n’est pas “visible” du r´ eseau public. sans que son ´ emetteur puisse le soup¸ conner ! On distingue deux attitudes.0) est renvoy´ e sur la machine “S”. donc du service demand´ e. A l’insu des utilisateurs de la machine “NAT” du r´ eseau publique. les adresses IP des datagrammes ainsi que les num´ eros de ports sont re´ ecrits et reinject´ es dans le noyau IP qui les traite comme d’autres datagrammes (routage.0. tout le trafic IP (c’est ainsi qu’il faut comprendre l’adresse IP 0.Translation d’adresse 187 4. soit tout le flux entrant est redirig´ e sur une seule machine. ` La litt´ erature appelle ce cas le “static nat”. Compte tenu du fichier de configuration. . Il 15 fonctionne selon le mod` ele de la figure 11 . si elles ne se configurent pas de la mˆ eme mani` ere. Processus natd Noyau 6668 Règles de translation (/etc/natd. soit il est analys´ e plus finement et la redirection (r´ esultat de la re´ ecriture) est effectu´ ee en fonction du port. vers un num´ ero de port convenu ` a la configuration. un datagramme entrant peut ainsi par jeux de re´ ecriture ˆ etre redirig´ e sur une toute autre machine. par exemple le port 6668.1 Cas de NATD Natd est l’outil logiciel libre bien connu des administrateurs r´ eseaux. IPPROTO DIVERT) . ont des propri´ et´ es tr` es voisines en fonctionnement 16 Par exemple pour FreeBSD il faut ajoute l’option IPDIVERT dans la configuration du noyau 15 . filtrage.conf) Interface placé sous la gestion de natd if_int if_ext figure 11 : Natd sous FreeBSD Le processus natd ouvre une socket en mode raw pour communiquer directement avec la couche IP : divertInOut = socket (PF INET. Natd convertit les adresses IP ` a la vol´ ee. ` a ajouter dans /etc/services : natd 6668/divert # Network Address Translation socket Natd lit tous les datagrammes et ne retient pour traitements que ceux qui sont ` a destination du port d´ edi´ e. muni du m´ ecanisme ad´ equat 16 redirige tout le trafic entrant et sortant d’un interface r´ eseau.0. Les impl´ ementation commerciales que l’on trouve dans les routeurs. Le noyau IP.). SOCK RAW.

IP Hˆ ote NAT.188 Hote accessible ´ ements de r´ El´ eseaux Partie privée du réseau NAT IP(S) Hote distant R Partie publique du réseau if_ext S Internet figure X.0 La figure 13 nous montre un trafic ´ eclat´ e en fonction du service demand´ e. Port R. IP Hˆ ote HTTP. ce qui permet une gestion beaucoup fine des ressources du r´ eseau. Une demande de connexion de l’hˆ ote distant R sur la machine NAT et au port 80 va ˆ etre r´ eachemin´ ee vers la machine interne HTTP et sur le port que l’on souhaite. Mˆ eme remarque pour les deux autres services pr´ esent´ es. IP Hˆ ote R. IP Hˆ ote R.0. Port R.12 : “Static Nat” La configuration du daemon pourrait ˆ etre : natd -interface if ext -redirect address IP(S) 0.0. 80} La configuration de NAT pourrait ressembler ` a: # # Configuration multiservices # redirect_port tcp http:8080 80 redirect_port tcp smtp:25 25 redirect_port tcp dns:domain domain redirect_port udp dns:domain domain Hote accessible Partie privée du réseau http NAT Hote distant R Partie publique du réseau smtp dns Internet figure 13 : Configuration multiservices . 8080} La machine R ne voit que la partie “publique” de la connexion : {tcp. La machine HTTP voit la connexion en provenance de la machine R sous sa forme exacte : {tcp. par exemple 8080.

autrement dit il ne faut pas penser qu’un filtre IP suffit ` a r` egler tous les probl` emes de s´ ecurit´ e d’un site ou d’un hˆ ote. et qui se param` etre ` a l’aide de la commande ipfw. Il existe d’autres filtre. L’impl´ ementation choisie ici est ipfw.firewall. 5. Le filtre est un module du noyau. Dans ces conditions il faut se rendre ` a 17 l’´ evidence : il n’y a pas de s´ ecurit´ e absolue sur le r´ eseau ! Dans la litt´ erature. . On peut ´ egalement y adjoindre l’option IPFIREWALL VERBOSE pour le rendre bavard19 . mais il ne repr´ esente pas la panac´ ee en mati` ere de s´ ecurit´ e sur les r´ eseaux. une porte est ouverte au d´ etournement de l’usage initial du service offert. .freebsd. lues dans un fichier nomm´ e par defaut /etc/rc. . . le fond du probl` eme reste le mˆ eme. les scripts de d´ emarrage pour dicter au noyau les r` egles de filtrage. Par son usage on cherche ` a prot´ eger un site ou une machine d’un flux de datagrammes pour lesquels on suspecte que tous ne sont pas envoy´ es par des utilisateurs bienveillants. encore une fois le principe reste toujours le mˆ eme. notamment ipf. Si les d´ etails de mise en œuvre diff` erent d’une impl´ ementation ` a une autre. mˆ eme ` a priori innocents. Celle-ci est utilis´ ee dans les scripts de d´ emarrage pour dicter au noyau les r` egles de filtrage. ` a partir du moment o` u le filtre laisse passer certains datagrammes. ce qu’appr´ ecient par dessus tout les administrateurs r´ eseaux. Le filtre s’efforce d’´ eliminer le trafic ind´ esirable ` a partir de consid´ erations ` a priori. il est activ´ e d` es lors que l’options IPFIREWALL est ajout´ ee dans le noyau.5 Filtrage IP 189 5 Filtrage IP Le propos du filtrage IP est d’appliquer des r` egles de filtrage ` a un flux de datagrammes IP afin de prendre une d´ ecision qui est le plus souvent binaire : laisser passer ou ne pas laisser passer avec en option de conserver une trace de passage (des logs).org 19 Via syslogd . soucieux de tout connaˆ ıtre sur la nature du trafic. . un routeur filtrant est nomm´ e “ FireWall ”. Le filtrage IP est une caract´ eristique essentielle de tout routeur digne de ce nom ! Il est aussi possible de faire du filtrage IP avec les Unix libres. c’est cette approche qui est choisie dans les paragraphes qui suivent parcequ’accessible ` a toutes les bourses.1 Le cas d’ipfw de FreeBSD Le filtre IP en question est impl´ ement´ e dans le noyau. le filtre natif de FreeBSD18 . . qu’il faut traduire en “ pare-feux ”. En effet. charg´ e au d´ emarrage. http ://www. ´ Etablir des r` egles de filtrage IP sous-entend avoir une connaissance exhaustive de tous les ´ el´ ements qui s’y rattachent : 17 18 Les seuls r´ eseaux sˆ urs sont isol´ es du monde ext´ erieur dans une cage de Faraday.

Réseau protégé R ipfw 193. http. domain. num´ ero de ports.) – Adresses IP.. comme celui de la figure X. .1. . . icmp.firewall de la configuration standard d’une machine FreeBSD r´ ecente (c’est un script shell). Consid´ erons un site simple.225 193. masque de sous-r´ eseaux – Sens du trafic par rapport aux interfaces ci-dessus Il est assez ais´ e de mettre en place un filtrage simple.1.) – Protocoles applicatifs autoris´ es (smtp. L’examen de ces r` egles nous permet de d´ ecouvrir la nature du trafic autoris´ e ou non.190 ´ ements de r´ El´ eseaux – Nom des interfaces r´ eseaux impliqu´ ees – Protocoles r´ eseaux employ´ es (tcp.14 Adaptons-y les r` egles du mod` ele de base. par contre cette op´ eration peut devenir complexe d` es lors qu’on utilise des protocoles applicatifs compliqu´ es. mettant en jeux une strat´ egie d’utilisation des ports et des adresses non triviale. prot´ eg´ ee par le filtrage IP activ´ e sur la machine “R”.1.1 S http dns smtp ntp Interface ed0 Internet figure X.228 Réseau publique Interface ed1 C 193.104.104. . . extraites du fichier /etc/rc.104.14. La machine “C” acc` ede depuis l’ext´ erieur ` a la machine “S”. qui agit donc comme un routeur filtrant. udp.

0:255.255.168.0.1.240.0:255. l’action par d´ efaut consiste ` a bloquer le trafic (peut ˆ etre chang´ ee).228 80 setup # Rejetter et faire des logs de toutes les autres demandes de connexion ipfw add deny log tcp from any to any in via ${oif} setup # Permettre l’etablissement des autres connexions (via $iif).0.−) ipfw deny ip from any to any Quelques consid´ erations : – Les r` egles sont parcourues de la premi` ere ` a la derni` ere.0 via ${oif} # Laisser passer les connexions TCP existantes ipfw add pass tcp from any to any established # Permettre l’arrivee du courrier SMTP ipfw add pass tcp from any to 193.104.Filtrage IP 191 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 # Interface externe oif="ed0" onet="193.225" # Ne pas laisser passer le ‘‘spoofing’’ ipfw add deny all from ${inet}:${imask} to any in via ${oif} ipfw add deny all from ${onet}:${omask} to any in via ${iif} # Ne ipfw ipfw ipfw ipfw ipfw ipfw pas add add add add add add router les adresses de la RFC1918 deny all from 192.0:255.0 to any via ${oif} deny all from any to 172.0:255.255.0" omask="255.0.0.0 via ${oif} deny all from 10. ipfw add pass tcp from any to any setup # Permettre le trafic UDP/DOMAIN vers/depuis les serveurs DNS externes ipfw add pass udp from any 53 to any 53 # Permettre le trafic NTP vers/depuis les serveurs de dates ipfw add pass udp from any 123 to any 123 # Permettre le passage de tous les paquets ICMP ipfw allow icmp from any to any # Tout ce qui n’est pas explicitement autorise est # implicitement interdit .0 to any via ${oif} deny all from any to 10.224" oip="193.0.1.168.0:255.1.104. si aucune convient.16.0.0 to any via ${oif} deny all from any to 192.104.0. elle est appliqu´ ee et le filtrage s’arrˆ ete.255.0 via ${oif} deny all from 172.0.1.0.104.0. .0.0.255.0:255.255.255.228 25 setup # Permettre l’acces au serveur HTTP ipfw add pass tcp from any to 193.1.1" # Interface interne iif="ed1" inet="193.1.104.0. – Le filtrage IP consomme des ressources cpu.0.104.0. Il faut remarquer que la machine 193.240.224" iip="193.1. – D` es qu’une r` egle convient.104.16.228 est visible depuis l’ext´ erieure et utilise une adresse officiellement rout´ ee.0. donc pour am´ eliorer les performances il vaut mieux placer en tˆ ete de liste les r` egles employ´ ees le plus couramment.224" imask="255.

1.13 et X.12.1. Par exemple supposons que l’utilisateur de la station “C” ex´ ecute la commande suivante : telnet 193.228 Il va obtenir le message : telnet : Unable to connect to remote host : Connection timed out Tandis que l’administrateur du r´ eseau 193.104.104.104.22820 6 Exemple complet Dans cette partie nous examinons le cas de la configuration de la figure X.104. La juxtaposition des deux services induit peu de changements dans la configuration des r` egles de filtrage.228 Réseau publique NAT R ipfw 193. C’est une configuration tr` es employ´ ee du fait de la distribution parcimonieuse d’adresses IP par les fournisseurs d’acc` es.14.1.1 C S http dns smtp ntp Interface ed0 Internet figure X. 20 Toute ressemblance avec la configuration r´ eelle de ce r´ eseau ne peut ˆ etre que fortuite .104.0 ne verra rien par ce biais puisque l’acc` es SMTP est autoris´ e sur la machine 193. Réseau privé non visible de l’extérieur Interface ed1 193.1.15 : Translation d’adresse et filtrage IP Le propos est de mettre en place un routeur filtrant effectuant en plus la translation d’adresses IP.1.IP H^ ote C :2735 193.225 193.192 ´ ements de r´ El´ eseaux Une tentative d’acc` es sur un service non autoris´ e se traduit par un message d’erreur (syslogd).228 :23 in via ed0 Par contre. l’administrateur du r´ eseau 193.104.1. si l’intrusion consiste ` a d´ etourner l’usage du service SMTP. synth` ese des figures X. X.1.0 va constater la tentative d’intrusion par le message : ipfw : 3310 Deny TCP Adr.104.1.15.104.

228 80 setup # Rejetter et faire des logs de tout autre demande de connexion ipfw add deny log tcp from any to any in via ${oif} setup # Permettre l’etablissement des autres connexions (via $iif).228 123 ipfw add pass udp from 193.0 via ${oif} deny all from 10.0.0.0.104. traceroute. ipfw add divert 8668 all from any to any via ${oif} # Ne pas laisser passer le ‘‘spoofing’’ ipfw add deny all from ${inet}:${imask} to any in via ${oif} ipfw add deny all from ${onet}:${omask} to any in via ${iif} # Ne ipfw ipfw ipfw ipfw ipfw ipfw pas add add add add add add router les adresses de la RFC1918 deny all from 192. ipfw add pass tcp from any to any setup # Permettre le trafic UDP/DOMAIN vers/depuis les forwarders ipfw add pass udp from any 53 to 193.228 n’est plus visible de l’ext´ erieur.0.0 to any via ${oif} deny all from any to 10.0..104.14.255.0 via ${oif} deny all from 172.104.1.228 53 setup # Permettre l’acces au serveur HTTP ipfw add pass tcp from any to 193.1.Exemple complet Commen¸ cons par les r` egles de filtrage : 193 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 # Interface externe oif="ed0" onet="193.0.104.0.104.0.0 via ${oif} # Laisser passer les connexions TCP existantes ipfw add pass tcp from any to any established # Permettre l’arrivee du courrier SMTP ipfw add pass tcp from any to 193.255.0.0.0.168.11 ipfw add pass udp from any 32768−65535 to any 32768−65535 out xmit ${oif} ipfw add log icmp from any to any in recv ${oif} ipfw add pass icmp from any to any via ${iif} # Tout ce qui n’est pas explicitement autorise est # implicitement interdit .228 123 to any 123 # Permettre le passage des paquets ICMP (ping.1.0.104. les services sont en apparence h´ eberg´ es par la machine “R” qui se charge de .0.0.1..224" oip="193.168.240.1.255.228 53 to any 53 # Permettre le trafic DTP/NTP ipfw add pass udp from any 123 to 193.16.104.255.1.8.255.104.0:255.16.228 25 setup # Permettre le trafic TCP/DOMAIN ipfw add pass tcp from any to 193.0:255.104.0.225" # # Usage de ’natd’ pour transformer tout ce qui passe sur l’interface # "ed0" donc le subnet public.−) Dans le principe l’hˆ ote 193.0:255.1.104.228 53 ipfw add pass udp from 193.1.1.0:255.1.104.240.1.224 imask="255.1" # Interface interne iif="ed1" inet="193.224" iip="193.0 to any via ${oif} deny all from any to 192.0.3.1.0" omask="255.0:255.255.0 to any via ${oif} deny all from any to 172.) ipfw add pass icmp from any to any via ${oif} icmptype 0.0:255.

1.228 n’est plus visible.conf pour cette situation : redirect_port redirect_port redirect_port redirect_port redirect_port tcp tcp tcp udp udp 193. donc a d´ ej` a subit la translation d’adresse avant d’ˆ etre soumis au filtrage IP.228.228:25 25 193.104.1.1.104.228:53 53 193.1. la translation d’adresses est effectu´ ee avant le filtrage IP.228:123 123 O` u l’on s’apper¸ coit que la configuration n’a pratiquement pas chang´ e fondamentalement ormis par l’introduction de la r` egle : ipfw add divert 6668 all from any to any via ${oif} Qui indique au filtre que tout ce qui provient de l’interface “oif” est ` a lire sur le port 6668.104. Voici le contenu du fichier /etc/natd.104. qui est autoris´ e.1.1. Dans l’ordre des op´ erations.104.194 ´ ements de r´ El´ eseaux re-router les datagrammes en modifiant dynamiquement l’adresse de destination.1.228:80 80 193.104.228:53 53 193. Ainsi une demande de connexion sur le port 25 de la machine 193.1.104.1.1 sera transform´ ee en une demande de connexion sur le port 25 de la machine 193.104. Pour l’utilisateur de la station “C” la machine 193. seule la machine d’adresse 193.1 semble cumuler tous les services ! . Ce sont donc des adresses IP modifi´ ees qui sont introduites dans les r` egles de filtrage ! Terminons avec la configuration de natd.104.

S. R. March 1996. K. R. (Format : TXT=22714 bytes) (Status : INFORMATIONAL) RFC 1918 “ Address Allocation for Private Internets. February 1996. (Format : TXT=54202 bytes) (Obsoletes RFC1827) (Status : PROPOSED STANDARD) RFC 2409 “ The Internet Key Exchange (IKE). A. Lidl. Floyd. Kent. ” K. (Format : TXT=56772 bytes) (Obsoleted by RFC2401) (Status : PROPOSED STANDARD) RFC 2364 “ PPP Over AAL5. Black. Gross. Atkinson. Carrel. May 1994. Karrenberg. R. D. ” S. Stephens. G. ” S. Carrel. November 1998. Egevang & P. ” D. Evarts. B. November 1998. ” Y. September 2001. RFC2401. Moskowitz. J. RFC0793) (Status : PROPOSED STANDARD) RFC 1919 “Classical versus Transparent IP Proxies. July 1998. August 1995. Chatel. (Format : TXT=87374 bytes) (Status : INFORMATIONAL) . Atkinson. D. Harkins. Ramakrishnan. (Format : TXT=23539 bytes) (Status : PROPOSED STANDARD) RFC 2401 “ Security Architecture for the Internet Protocol. Malis. Atkinson. D. Li. R.7 Bibliographie 195 7 Bibliographie RFC 1631 “ The IP Network Address Translator (NAT). M. November 1998. A. ˜ Groot & E. Kent. ” R. J. (Format : TXT=94949 bytes) (Status : PROPOSED STANDARD) RFC 2516 “ A Method for Transmitting PPP Over Ethernet (PPPoE). Mamakos. Rekhter. D. Atkinson. Lear. ” G. (Format : TXT=170966 bytes) (Obsoletes RFC2481) (Updates RFC2474. J. D. ” S. (Format : TXT=52831 bytes) (Obsoletes RFC1826) (Status : PROPOSED STANDARD) RFC 2406 “ IP Encapsulating Security Payload (ESP). Kaycee. Francis. November 1998.” M. (Format : TXT=32537 bytes) (Status : INFORMATIONAL) RFC 3168 “ The Addition of Explicit Congestion Notification (ECN) to IP. Kent.de (Format : TXT=22270 bytes) (Obsoletes RFC1627. ” K. February 1999. Wheeler. (Format : TXT=168162 bytes) (Obsoletes RFC1825) (Updated by RFC3168) (Status : PROPOSED STANDARD) RFC 2402 “ IP Authentication Header. ” L. RFC1597) (Also BCP0005) (Status : BEST CURRENT PRACTICE) RFC 1825 “ Security Architecture for the Internet Protocol. Simone.

Bellovin . Zwicky . Steven M.Addison-Wesley 1994. – “Building Internet Firewalls” .Addison-Wesley 1994.TCP/IP Illustrated. .D. Bellovin . Cheswick.O´Reilly . Steven M. Brent Chapman and Elizabeth D.196 Sans oublier : Protocole TCP – W.1995. Richard Stevens . Volume 1 .William R.The protocols Addison-Wesley – “Firewalls and Internet Security” .

Troisi` eme partie Programmation des sockets de Berkeley .

.

Les sockets sont ce que l’on appelle une API (“Application Program Interface”) c’est ` a dire une interface entre les programmes d’applications et la couche transport. Il faut noter que les Pour un historique tr` es int´ eressant de cette p´ eriode on pourra consulter http ://www. Les fonctionnalit´ es des sockets que nous allons d´ ecrire. .html 1 . en 1982. Application Transport Programmes applicatifs API = sockets Noyau UNIX Internet Réseau Pilotes de périphériques Matériel figure XI.1c d’Unix pour VAX. a ´ et´ e la premi` ere ` a inclure TCP/IP dans le noyau du syst` eme d’exploitation et ` a proposer une interface 1 de programmation de ces protocoles : les sockets .3 de BSD Unix.oreillynet. etc.01 Les deux principales API pour Unix sont les sockets Berkeley et les TLI System V. sont celles apparues ` a partir de la version 4. par exemple TCP ou UDP. Ces deux interfaces ont ´ et´ e d´ evelopp´ ees en C.com/pub/a/network/2000/03/17/bsd. N´ eanmoins les sockets ne sont pas li´ ees ` a TCP/IP et peuvent utiliser d’autres protocoles comme AppleTalk.Chapitre XI G´ en´ eralit´ es sur les sockets de Berkeley 1 G´ en´ eralit´ es La version BSD 4. X´ erox XNS. en 1986. .

Pour conforter ce point de vue il n’est pas sans int´ erˆ et d’ajouter que toutes les applications majeures (named. Noyau Mécanisme de gestion des ports (session). . . et close. les m´ ecanismes propres aux op´ erations sur les r´ eseaux les ont conduits ` a d´ evelopper des primitives compl´ ementaires.200 Sockets de Berkeley constructeurs de stations de travail comme HP.02 2 Pr´ esentation des sockets Les cr´ eateurs des sockets ont essay´ e au maximum de conserver la s´ emantique des primitives syst` emes d’entr´ ees/sorties sur fichiers comme open. SUN2 .. sendmail. Transport Internet Réseau Transport Internet Réseau figure XI. par contre il est possible d’utiliser les sockets dans toutes les contributions locales 2 . sont programm´ ees avec de telles sockets. N◦ de port et processus. et avant d’entrer dans le vif du sujet. chaque socket active est identifi´ ee par un petit entier appel´ e descripteur de socket... SGI. ont adopt´ e ces sockets. ftpd. Quand un processus ouvre un fichier (open). Unix place ce descripteur dans la mˆ eme table que les descripteurs de fichiers. dhcpd. Enfin. . serveurs httpd. Par la suite. le sch´ ema ci-dessous rappelle les relations entre pile ARPA. ainsi une application ne peut-elle pas avoir un descripteur de fichier et un descripteur de socket identique. write. IBM. aussi nomm´ e descripteur de fichier. Comme pour un fichier. Cependant. Les applications de ce constructeur utilisent les TLI.. et dont l’utilisateur peut lire le code source. l’utilisateur manipule ce fichier uniquement par l’interm´ ediaire de l’indice.) de l’Internet. le syst` eme place un pointeur sur les structures internes de donn´ ees correspondantes dans la table des descripteurs ouverts de ce processus et renvoie l’indice utilis´ e dans cette table. read.. ainsi sont-elles devenues un standard de fait et une justification de leur ´ etude. Application Processus utilisateurs Application .

– Une connexion r´ eseau peut ˆ etre du type connect´ e ou non. la liste n’est pas exhaustive. une fois la connexion ´ etablie le processus ´ emetteur discute uniquement avec le processus destinataire.h sous Unix en explicite une trentaine 3 . une application utilisera la primitive socket et non open. APPLETALK3 . un mˆ eme processus peut envoyer plusieurs data-grammes ` a plusieurs autres processus sur des machines diff´ erentes.Pr´ esentation des sockets Pour cr´ eer une socket. En effet. – Une connexion est d´ efinie par un quintuplet (cf cours TCP page 83) qui est beaucoup plus compliqu´ e qu’un simple nom de fichier. on parle des sockets de Berkeley. pour les raisons que nous allons examiner. En conclusion de ce paragraphe on peut dire que le terme socket d´ esigne. il serait tr` es agr´ eable si cette interface avec le r´ eseau conservait la s´ emantique des primitives de gestion du syst` eme de fichiers sous Unix. et d’autre part l’extr´ emit´ e d’un canal de communication (point de communication) par lequel un processus peut ´ emettre ou recevoir des donn´ ees. – L’interface r´ eseau supporte de multiples protocoles comme XNS. Par exemple. malheureusement les entr´ ees/sorties sur r´ eseau mettent en jeux plus de m´ ecanismes que les entr´ ees/sorties sur un syst` eme de fichiers. Ce point de communication est repr´ esent´ e par une variable enti` ere. similaire ` a un descripteur de fichier. il faut consid´ erer les points suivants : – Dans une relation du type client-serveur les relations ne sont pas sym´ etriques. Dans le premier cas. D´ emarrer une telle relation suppose que le programme sait quel rˆ ole il doit jouer. Dans le cas d’un mode non connect´ e. d’une part un ensemble de primitives. Un sous syst` eme de gestion de fichiers sous Unix ne supporte qu’un seul format. 201 L’inspection du fichier /usr/include/sys/socket.

Les deux nommages sont possibles . le type permet de faire le choix entre un mode connect´ e. En fait avec la famille PF INET.. */ int socket(int PF. : : : : : : Pour les r´ eseaux Apple Pour le protocole Xerox NS Pour le protocole de l’OSI Pour le protocole SNA d’IBM Protocole Internet de Novell .. TYPE Cet argument sp´ ecifie le type de communication d´ esir´ e. int TYPE.h> <netinet/in. Idem AF LOCAL Acc` es ` a la table de routage Acc` es ` a une table de clefs (IPsec) Mais il existe d’autres impl´ ementations notamment avec les protocoles : PF APPLETALK PF NS PF ISO PF SNA PF IPX . 4 Cr´ eation d’une socket La cr´ eation #include #include #include d’une socket se fait <sys/types. int PROTOCOL) . .. un mode non connect´ e ou une intervention directe dans la couche IP : .202 Sockets de Berkeley 3 ´ Etude des primitives Ce chapitre est consacr´ e` a une pr´ esentation des primitives de base pour programmer des applications en r´ eseaux.. Sur tout syst` eme qui permet l’usage des sockets. pour “Address Family”. /* Pour toutes les primitives */ /* de ce chapitre il faut */ /* inclure ces fichiers. Pour ˆ etre bien complet il est fortement souhaitable de doubler sa lecture avec celle des pages de man correspondantes. . PF Sp´ ecifie la famille de protocole (“Protocol Family”) ` a utiliser avec la socket. l’´ equivalence est d´ efinie dans le fichier d’entˆ ete socket. on doit trouver au moins les familles : PF PF PF PF PF PF PF INET INET6 CCITT LOCAL UNIX ROUTE KEY : : : : : : : Pour les sockets IPv4 Pour les sockets IPv6 Pour l’interface avec X25 Pour rester en mode local (pipe).h.h> <sys/socket.h> par l’appel syst` eme socket. Le pr´ efixe PF est la contraction de “Protocol Family” On peut ´ egalement utiliser le pr´ efixe AF.

en interne la socket est ferm´ ee et si plus aucun processus n’a de descripteur ouvert sur elle. Il peut ˆ etre du type UDP ou TCP sous Unix. port ´ eloign´ e.4 Cr´ eation d’une socket SOCK STREAM SOCK DGRAM SOCK RAW : Mode connect´ e Couche transport : Mode non connect´ e Idem : Dialogue direct avec la couche IP 203 Faut-il repr´ eciser que seules les sockets en mode connect´ e permettent les liaisons “full-duplex”. un appel syst` eme fork duplique la table des descripteurs de fichiers ouverts du processus p` ere dans le processus fils. IPPROTO ICMP : TCP : UDP : uniquement avec SOCK RAW PROTOCOL est typiquement mis ` a z´ ero car l’association de la famille de protocole et du type de communication d´ efinit explicitement le protocole de transport : PF INET + SOCK STREAM PF INET + SOCK DGRAM =⇒ =⇒ TCP = IPPROTO TCP UDP = IPPROTO UDP La primitive socket retourne un entier qui est le descripteur de la socket nouvellement cr´ e´ ee par cet appel. Enfin. Le bon usage du descripteur de socket partag´ e entre les deux processus incombe donc ` a la responsabilit´ e du programmeur. adresse locale. quand un processus a fini d’utiliser une socket il appelle la primitive close avec en argument le descripteur de la socket : close(descripteur de socket) . adresse ´ eloign´ ee } Si la primitive renvoie -1. PROTOCOL Ce troisi` eme argument permet de sp´ ecifier le protocole ` a utiliser. Remarque importante : Comme pour les entr´ ees/sorties sur fichiers. Par rapport ` a la connexion future cette primitive ne fait que donner le premier ´ el´ ement du quintuplet : {protocole. 4 cf la page de manuel de perror(3) . la variable globale errno donne l’indice du message d’erreur idoine dans la table sys errlist. IPPROTO TCP IPPROTO UDP IPPROTO RAW. Si un processus ayant ouvert des sockets vient ` a s’interrompre pour une raison quelconque. Ainsi les descripteurs de sockets sont ´ egalement transmis. port local. le noyau la supprime. que la biblioth` eque standard sait parfaitement exploiter 4 .

La description de l’adresse change d’une famille de protocole (cf socket) ` a une autre. renvoy´ e par socket. myaddr Est une structure qui sp´ ecifie l’adresse locale avec laquelle bind doit travailler. */ struct in_addr sin_addr . suivis de 14 octets qui d´ efinissent l’adresse en elle-mˆ eme : struct sockaddr { unsigned short sa_family . */ char sin_zero[8] . char sa_data[14] . Cependant un serveur qui fonctionne suivant un num´ ero de port “bien connu” doit ˆ etre capable de sp´ ecifier un num´ ero de port bien pr´ ecis. en octets. Une fois que la socket est cr´ e´ ee. } . est nomm´ ee g´ en´ eralement sockaddr. surtout des clients. le protocole sous-jacent s’occupe de choisir un num´ ero de port pour l’application. . */ } . Cette structure g´ en´ erique. c’est pourquoi les concepteurs ont choisi de passer en argument une structure plutot qu’un entier. /* 32 bits. struct in_addr { unsigned long s_addr . Dans beaucoup d’applications. socket Est le descripteur de la socket. elle est d´ efinie de la fa¸ con suivante : struct sockaddr_in { short sin_family . addrlen Est un entier qui donne la longueur de l’adresse. struct sockaddr *myaddr. on a pas besoin de s’inqui´ eter du num´ ero de port.204 Sockets de Berkeley 5 Sp´ ecification d’une adresse Il faut remarquer qu’une socket est cr´ e´ ee sans adresse de l’´ emetteur ni celle du destinataire. /* 32b Internet */ } . /* PF_INET */ unsigned short sin_port . /* No de port. c’est ` a dire d’associer une adresse IP et un num´ ero de port ` a une socket : int bind(int sockfd. Pour la famille PF INET cette structure se nomme sockaddr in. socklen t addrlen) . /* Inutilises. Elle commence g´ en´ eralement par deux octets qui rappellent la famille de protocole. Pour les protocoles de l’Internet cela signifie que la cr´ eation d’une socket est ind´ ependante d’un num´ ero de port. la primitive bind permet d’effectuer ce travail.

. En g´ en´ eral les serveurs ont des num´ eros de port bien connus du syst` eme (cf /etc/services. Un client en mode non connect´ e a besoin que le syst` eme lui assigne une adresse particuli` ere. les serveurs ont besoin de le dire avant de pouvoir accepter les connexions. Bind retourne 0 si tout va bien. Dans ce cas la variable globale errno est positionn´ ee ` a la bonne valeur. tout message re¸ cu ` a cette adresse doit m’ˆ etre renvoy´ e”.6 Connexion ` a une adresse distante 205 struct sockaddr sa_family sa_data struct sockaddr_in sin_family sin_port sin_addr 16 octets sin_zero La structure générale La structure pour pile ARPA figure XI. Cet appel syst` eme compl` ete l’adresse locale et le num´ ero de port du quintuplet qui qualifie une connexion. C’est la primitive connect qui permet d’´ etablir la connexion. port local. par exemple si un num´ ero de port est d´ ej` a utilis´ e par un autre processus. sinon elle n’est pas tr` es utile (voir plus loin). ` a savoir un protocole. adresse locale. Que cela soit en mode connect´ e ou non. Quand une socket est cr´ e´ ee. port ´ eloign´ e. ce qui autorise l’usage des primitives read et write traditionnellement d´ edi´ ees au mode connect´ e. Un client peut pr´ eciser sa propre adresse. elle n’est pas associ´ ee avec une quelconque destination. adresse ´ eloign´ ee } 6 Connexion ` a une adresse distante L’initiative de la demande de connexion est typiquement la pr´ eoccupation d’un processus client. 2. si le programmeur choisit un mode de fonctionnement “connect´ e”. en mode connect´ e ou non.03 La primitive bind ne permet pas toutes les associations de num´ eros de port. Avec bind+socket on a la moiti´ e d’une connexion. 3. -1 si une erreur est intervenue. Il y a trois utilisations de la primitive : 1. ou si l’adresse Internet est invalide. un num´ ero de port et une adresse IP : {protocole. Bind dit au syst` eme “c’est mon adresse.

Le buffer contient les octets ` a transmettre. addrlen Donne la longueur de l’adresse. adresse locale. sockfd Est le descripteur de socket renvoy´ e par la primitive socket. Le quintuplet est maintenant complet : {protocole. en octets. la primitive connect ne rend pas la main. et longueur leur cardinal. il peut l’utiliser pour transmettre des donn´ ees. port local. parce-qu’elles n’offrent pas la possibilit´ e de pr´ eciser l’adresse du destinataire. servaddr est une structure qui d´ efinit l’adresse du destinataire. Quand on utilise write. Il y a cinq primitives possibles pour ce faire : send. La primitive connect a le prototype suivant : int connect(int sockfd. . traditionnellement r´ eserv´ ees au mode connect´ e. Les clients n’ont pas besoin de faire appel ` a la primitive bind avant d’invoquer connect car la connexion renseigne d’un coup les ´ el´ ements qui manquent. const void *buffer.206 Sockets de Berkeley Pour les protocoles orient´ es connexion. Dans le cas d’un client en mode non connect´ e un appel ` a connect n’est pas faux mais il ne sert ` a rien et redonne aussitˆ ot la main au code utilisateur. cet appel syst` eme rend la main au code utilisateur une fois que la liaison entre les deux syst` emes est ´ etablie. Dans le cas ou une impossibilit´ e se pr´ esente elle retourne -1 et positionne errno ` a la bonne valeur.const struct sockaddr *servaddr. la mˆ eme structure que pour bind. adresse ´ eloign´ ee} 7 Envoyer des donn´ ees Une fois qu’un programme d’application a cr´ e´ e une socket. recv et send.socklen t addrlen) . write et writev fonctionnent uniquement en mode connect´ e. size t longueur) . writev. Les diff´ erences entre ces trois primitives sont mineures. Tant que cette liaison n’est pas d´ efinie au niveau de la couche de transport. le descripteur d´ esigne l’entier renvoy´ e par la primitive socket. write. Dans le cas ou tout va bien elle retourne 0. sendmsg Send. port ´ eloign´ e. write. sendto. Le seul int´ erˆ et que l’on peut voir est que l’adresse du destinataire est fix´ ee et que l’on peut alors utiliser les primitives read. les deux syst` emes ´ echangent des informations sur les caract´ eristiques de la liaison future (cf cours TCP page 83). ssize t write(int descripteur. Durant cette phase des messages sont ´ echang´ es .

La primitive writev est sensiblement la mˆ eme que write simplement elle permet d’envoyer un tableau de structures du type iovec plutot qu’un simple buffer. . Cette primitive est tr` es commode ` a employer avec son pendant recvmsg car elle travaille avec la mˆ eme structure. ssize t sendto(int s. n´ egative ou non. c’est ` a dire sans qu’il soit effectivement retir´ e des buffers internes (ne s’applique qu’` a recv (page 208). const struct sockaddr *to. const void *msg. faire un envoi en urgence (out-of-band) : 0 MSG OOB MSG PEEK : Non op´ erant. 207 La primitive send ` a la forme suivante : int send(int s.const void *msg. len Sp´ ecifie le nombre de ces octets. c’est le cas le plus courant. Le programmeur soucieux d’avoir un code plus lisible pourra utiliser la deuxi` eme primitive : ssize t sendmsg(int sockfd.Envoyer des donn´ ees Tous les octets ne sont pas forc´ ement transmis d’un seul coup. : Pour envoyer ou recevoir des messages out-of-band. : Permet d’aller voir quel message on a re¸ cu sans le lire. En cons´ equence il est absolument n´ ecessaire de tenir compte de la valeur de retour de cette primitive. O` u messagestruct d´ esigne une structure contenant le message ` a envoyer sa longueur. Toutes deux r´ eclament que l’on sp´ ecifie le destinataire ` a chaque appel. l’adresse du destinataire et sa longueur. int vectorlen) . Les quatre premiers arguments sont exactement les mˆ emes que pour send. par exemple et avec TCP. les deux derniers permettent de sp´ ecifier une adresse et sa longueur avec une structure du type sockaddr. l’argument vectorlen sp´ ecifie le nombre d’entr´ ees dans iovector : ssize t writev(int descriptor. s D´ esigne l’entier renvoy´ e par la primitive socket. notamment si le buffer d’´ ecriture est plein ou si l’on d´ esire. msg Donne l’adresse du d´ ebut de la suite d’octets ` a transmettre. flags Ce drapeau permet de param` etrer la transmission du data-gramme.size t len. size t len. int flags) .int flags) . const struct iovec *iovector. socklen t tolen) . sendto et sendmsg donnent la possibilit´ e d’envoyer un message via une socket en mode non connect´ e. comme vu pr´ ec´ edemment avec bind. et ce n’est pas une condition d’erreur. const struct msghdr *messagestruct. Les deux autres primitives.int flags.

le descripteur est l’entier renvoy´ e par un appel pr´ ec´ edent ` a la primitive socket. readv. struct msghdr *messagestruct. Mais le programmeur peut aussi employer le readv. s L’entier qui d´ esigne la socket. La structure messagestruct est exactement la mˆ eme que pour sendmsg ainsi ces deux primitives sont faites pour fonctionner de paire. recv. buffer et longueur sp´ ecifie respectivement le buffer de lecture et la longueur de ce que l’on accepte de lire. void *buf. recvmsg. en m´ emoire. La derni` ere primitive recvmsg est faite pour fonctionner avec son homologue sendmsg : ssize t recvmsg(int sockfd. flags Permet au lecteur d’effectuer un contrˆ ole sur les paquets lus. Chaque lecture ne renvoie pas forc´ ement le nombre d’octets demand´ es. il y a trois primitives nouvelles pour lire des messages sur le r´ eseau : ssize t recv(int s. Sa forme d’utilisation est : ssize t read(int descripteur. len La longueur du buffer. buf Une adresse o` u l’on peut ´ ecrire.size t longueur) . La forme conventionnelle read d’Unix n’est possible qu’avec des sockets en mode connect´ e car son retour dans le code utilisateur ne s’accompagne d’aucune pr´ ecision quant ` a l’adresse de l’´ emetteur. il existe cinq primitives de r´ eception : read. Avec les mˆ eme caract´ eristiques que pour le readv. socklen t *fromlen) . . ce qui facilite les r´ eponses. size t len. void *buf. Le premier contient l’adresse de l’´ emetteur.size t len.208 Sockets de Berkeley 8 Recevoir des donn´ ees Sym´ etriquement aux cinq primitives d’envoi. int vectorlen) . Les deux arguments additionnels par rapport ` a recv sont des pointeurs vers une structure de type sockaddr et sa longueur. const struct iovec *iov. Bien sur. recvfrom. ssize t recvfrom(int s. mais peut ˆ etre un nombre inf´ erieur.int flags) . En addition aux deux primitives conventionnelles. int flags) . int flags.struct sockaddr *from. Notons que la primitive sendto fournit une adresse dans le mˆ eme format. avec la forme : ssize t readv(int descripteur. void *buffer. si cette primitive est utilis´ ee avec les sockets BSD.

newsock = accept(sockfd. socklen t *addrlen) .9 Sp´ ecifier une file d’attente 209 9 Sp´ ecifier une file d’attente Imaginons un serveur en train de r´ epondre ` a un client. int listen(int sockfd. il passe par l’usage de la primitive accept. Le nombre de fois o` u le noyau refuse une connexion est comptabilis´ e et accessible au niveau de la ligne de commande via le r´ esultat de l’ex´ ecution de la commande netstat -s -p tcp (chercher “ listen queue overflow ”). la forme de la primitive est : int accept(int sockfd. Ce param` etre est important ` a suivre dans le cas d’un serveur tr` es sollicit´ e. la requˆ ete n’est pas prise en compte. int backlog) . Ce moyen existe. si une requˆ ete arrive d’un autre client. et le syst` eme refuse la connexion. addrlen) . bind et listen pour se pr´ eparer ` a recevoir les connexions. le serveur ´ etant occup´ e. Il manque cependant ` a ce trio le moyen de dire au protocole “j’accepte d´ esormais les connexions entrantes”. sockfd l’entier qui d´ ecrit la socket. La primitive listen est l` a pour permettre la mise en file d’attente des demandes de connexions. Elle est g´ en´ eralement utilis´ ee apr` es les appels de socket et de bind et imm´ ediatement avant le accept. 10 Accepter une connexion Comme nous l’avons vu un serveur utilise les primitives socket. addr Un pointeur sur une structure du type sockaddr. “ There is currently no backlog limit ”. renvoy´ e par la primitive du mˆ eme nom. addr. Qui s’utilise comme suit : int newsock . . alors que sous Solaris 9. Quand le serveur invoque cette primitive il se met en attente bloquante d’une connexion. sockfd descripteur de la socket. Sous FreeBSD la valeur maximale par d´ efaut est de 128 (sans param` etrage sp´ ecifique du noyau). struct sockaddr *addr. La valeur maximale est fonction du param` etrage du noyau. backlog Le nombre de connexions possibles en attente (quelques dizaines). addlen Un pointeur sur un entier.

les couches sous-jacentes du protocole de transport remplissent la structure addr avec l’adresse du client qui fait la demande de connexion. 2 Combinaison de 0 et de 1 (´ equivalent de close). 11 Terminer une connexion Dans le cas du mode connect´ e on termine une connexion avec la primitive close ou shutdown. r´ ecup´ er´ e ici dans newsock. Normalement cet appel retourne imm´ ediatement. si un processus est interrompu de mani` ere inopin´ ee (r´ eception d’un signal de fin par exemple). un “ reset ” (voir page 86) est envoy´ e` a l’hˆ ote distant ce qui provoque la fin brutale de la connexion. l’appel ` a la primitive accept retourne dans le code utilisateur. how permet de fermer partiellement le descripteur suivant les valeurs qu’il prend : 0 Aucune donn´ ee ne peut plus ˆ etre re¸ cue par la socket. Donc. Addrlen contient alors la longueur de l’adresse. Le moyen le plus classique de terminer une connexion est de passer par la primitive close. Sockfd est le descripteur ` a fermer. int close(descripteur) . mais la primitive shutdown permet un plus grand contrˆ ole sur les connexions en “full-duplex”. cependant le kernel peut attendre le temps de la transmission des derniers octets (transparent). pour une socket en mode connect´ e. 1 Aucune donn´ ee ne peut plus ˆ etre ´ emise. La primitive bien connue sous Unix peut ˆ etre aussi employ´ ee avec un descripteur de socket. Puis le syst` eme cr´ ee une nouvelle socket dont il renvoie le descripteur. int shutdown(int sockfd. int how) . Les octets ´ eventuellement en attente sont perdus. Si cette derni` ere est en mode connect´ e. Ainsi la socket originale reste disponible pour d’´ eventuelles autres connexions. . quand une connexion arrive. le syst` eme assure que tous les octets en attente de transmission seront effectivement transmis dans de bonnes conditions.210 Sockets de Berkeley Quand une connexion arrive. Enfin.

05 . puisque c’est ainsi que nous appelerons d´ esormais les destinataire et ´ emetteur.12 Sch´ ema g´ en´ eral d’une connexion 211 12 Sch´ ema g´ en´ eral d’une connexion Il est temps pour nous de donner un aper¸ cu de la structure d’un serveur et d’un client.04 Sch´ ema d’une relation client–serveur en mode non connect´ e: Serveur fd=socket() fd=socket() bind(fd) bind(fd) sendto(fd) recvfrom(fd) échanges applicatifs sendto(fd) recvfrom(fd) Client close(fd) close(fd) figure XI. Sch´ ema d’une relation client–serveur en mode connect´ e: Serveur fd=socket() bind(fd) listen(fd) fd=socket() fd2=accept(fd) Etablissement de la connexion write(fd) read(fd2) échanges applicatifs write(fd2) read(fd) connect(fd) Client Fermeture de la close(fd2) connexion close(fd) figure XI.

Vous croyez ´ ecrire 13 alors qu’en r´ ealit´ e pour le r´ eseau vous avez ´ ecrit 3328 (0x0D00) ce qui bien ´ evidement ne conduit pas au mˆ eme r´ esultat. En mode TCP le simple fait de se connecter provoque l’´ emission de la chaˆ ıne ascii contenant la date vers le client et sa d´ econnexion. ligne 34 La variable sfd.232 Date(192. il s’agit bien d’une structure et non d’un pointeur de structure.232) = Wed Dec 10 20:59:46 2003 Une capture des trames r´ eseau ´ echang´ ees lors de l’ex´ ecution de cette commande se trouve page 215.52. sur le port 13 qui lui est r´ eserv´ e (/etc/services).232. ` a utiliser avec IPv4. 13. Si le processeur courant est du type “ little endian ” (architecture Intel par exemple) les octets sont invers´ es (le NBO est du type “ big endian ”).168.52. ligne 28 D´ eclaration de la structure saddr du type sockaddr in. sauf si un serveur de date ´ ecoute ´ egalement sur le port 3328. ce qui est tr` es peu probable car non conventionnel. Attention. 5 Son activation est ´ eventuellement ` a faire ` a partir du serveur de serveur inetd. re¸ coit la valeur du descripteur de socket. Celle-ci est d´ edi´ ee au protocole TCP.168.168. Nous en dirons plus sur htons au chapitre suivant.1 Client TCP “ DTCPcli ” Exemple d’usage : $ .52./DTCPcli 192.212 Sockets de Berkeley 13 Exemples de code “ client ” L’objectif de ces deux exemples est de montrer le codage en C et le fonctionnement d’un client du serveur de date (RFC 867. Ce serveur fonctionne en mode connect´ e ou non. car cette valeur est directement recopi´ ee dans le champ PORT DESTINATION du protocole de transport employ´ e (voir page 78 pour UDP et page 85 pour TCP). La connaissance de l’adresse IP du client n’est absolument pas utile pour la compr´ ehension de l’exemple. ligne 38 Le champ sin family de la structure saddr indique que ce qui suit (dans la structure) concerne IPv4. Il faut remarquer l’usage de la fonction htons (en fait une macro du pr´ e-processeur cpp) qui s’assure que ce num´ ero de port respecte bien le NBO (“ network Byte Order ”). En mode UDP il suffit d’envoyer un datagramme quelconque (1 caract` ere) au serveur puis d’attendre sa r´ eponse. “ daytime protocol ”) pr´ esent sur toute machine unix5 . Ici le serveur est une machine portant l’adresse IP 192. page 255 . ligne 39 Le champ sin port est affect´ e` a la valeur du num´ ero de port sur lequel ´ ecoute le serveur.

} */ /* close(sfd) implicite */ DTCPcli.argv[1].h> <string.sin_family = AF_INET .13 Exemples de code “ client ” En r´ esum´ e. exit(EX_OSERR) . sfd . } saddr.SOCK_STREAM.USAGE.s_addr = inet_addr(argv[1]) .argv[0]) .h> <netinet/in.h> <unistd. saddr. exit(EX_OSERR) . if (connect(sfd. C’est donc l’´ ecriture de quatre octets (IPv4).buf) . } if ((n = read(sfd. . * La syntaxe d’utilisation est : DTCPcli <adresse ip sous forme décimale> * */ #include #include #include #include #include #include #include #include #include #define #define #define <stdio. /* Attention au NBO ! saddr. if (argc != 2) { (void)fprintf(stderr. ce code n’est utilisable que sur les machines d’architecture “ big endian ”. } if ((sfd = socket(PF_INET. char buf[MAXMSG] .h> <sysexits.c. exit(EX_OK) . buf.sizeof saddr) < 0) { perror("connect") . 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 213 /* $Id: DTCPcli.sin_addr.h> USAGE MAXMSG NPORT "Usage:%s adresse_du_serveur\n" 1024 13 int main(int argc.h> <sys/types. char *argv[]) { int n.h> <arpa/inet. si le programmeur n’utilise pas la fonction htons.sin_port = htons(NPORT) . exit(EX_OSERR) . donc interpr´ etable comme le caract` ere de fin de chaˆ ıne du langage C.IPPROTO_TCP)) < 0) { perror("socket") .h> <sys/socket. pouvant comporter un caract` ere ascii 0.1 2002/11/24 16:52:50 fla Exp $ * * Client TCP pour se connecter au serveur de date (port 13 − RFC 867).v 1.c ligne 40 Le champ s addr de la structure sin addr se voit affect´ e de l’adresse IP. exit(EX_USAGE) . } buf[n] = ’\0’ .(struct sockaddr *)&saddr. struct sockaddr_in saddr .h> <sys/param.MAXMSG−1)) < 0) { perror("read") . (void)printf("Date(%s) = %s\n".

ligne 41 Appel ` a la primitive connect pour ´ etablir la connexion avec le serveur distant. Notons ´ egalement l’usage du “ cast ” du C pour forcer le type du pointeur (le prototype de la primitive exige ` a cet endroit un pointeur de type sockaddr). ` a l’aide du descripteur sfd. la primitive connect ne modifie pas son contenu pour autant. soit la connexion est ´ etablie. Quand celle-ci retourne dans le code du programme. d’une longueur de 26 caract` eres. page 86) ci-apr` es dans la capture du trafic entre le client et le serveur. celui-ci fait partie de la convention de repr´ esentation des chaˆ ınes de caract` eres du langage C. soit la connexion a ´ echou´ e et il faut traiter l’erreur. Ici le probl` eme se complique un peu dans la mesure o` u l’on dispose au d´ epart d’une adresse IP sous sa forme d´ ecimale point´ ee. les cinq ´ el´ ement du quintuplet qui caract´ erise la connexion sont d´ efinis (page ??). Du point de vue TCP. ligne 45 Appel ` a la primitive read pour lire le r´ esultat en provenance du serveur. Remarque : le buffer buf est largement surdimensionn´ e compte tenu de la r´ eponse attendue. Le contraire est mˆ eme certain puisque la RFC 867 n’y fait pas mention. Ce nombre ne peut exc´ eder le r´ esultat de l’´ evaluation de M AXM SG − 1. Nous en dirons plus ` a son sujet au chapitre suivant. Sur la capture d’´ ecran on voit ligne 8 (et 9) l’envoi de la date en provenance du serveur. Cot´ e serveur elle est d´ ej` a ferm´ ee (s´ equence write + close) comme on peut le voir ligne 8 (flag FP. Sur la capture des paquets de la page 215 nous sommes arriv´ es ` a la ligne 6. une quarantaine d’octets au maximum. qui correspond ` a la taille du buffer buf moins 1 caract` ere pr´ evu pour ajouter le caract` ere 0 de fin de chaˆ ıne. ligne 49 Ajout du caract` ere de fin de chaˆ ıne en utilisant le nombre de caract` eres renvoy´ es par read. ligne 52 La sortie du programme induit une clˆ oture de la socket cot´ e client. La fonction inet addr g` ere parfaitement ce cas de figure. La RFC 867 ne pr´ evoit pas de taille maximum si ce n’est implicitement celle de l’expression de la date du syst` eme en anglais. c’est ` a dire l’envoi de l’acquittement par le client du paquet de synchronisation envoy´ e par le serveur (ligne 3 et 4). En effet. L’´ echange pr´ eliminaire des trois paquets s’est effectu´ e dans de bonnes conditions (page 88). Ce nombre de caract` eres effectivement lus est affect´ e` a la variable n. Il faut noter que bien que nous ayons transmis la structure saddr par adresse (caract` ere &) et non par valeur. . Rien ne dit que le serveur qui r´ epond ajoute un tel caract` ere ` a la fin de sa r´ eponse.214 Sockets de Berkeley C’est pourquoi ` a cet endroit on ne peut pas employer les habituelles fonctions de la biblioth` eque standard (celles qui commencent par str).

nop.daytime: S 2381636173:2381636173(0) win 57344 <mss 1460. Le raisonnement sur la taille du buffer est identique ` a celui de la version TCP.2769 > serveur. ` a savoir l’association d’un num´ ero de port et d’une adresse IP.nop.timestamp 299093826 4133223> (DF) 23:03:29. ack 2 win 57920 <nop.2769 > serveur. donc en mode non connect´ e.wscale 0.nop. ack 1 win 57920 <nop.2769: FP 1:27(26) ack 1 win 57920 <nop.13 Exemples de code “ client ” Remarque : rien n’est explicitement pr´ evu dans le code pour ´ etablir la socket cot´ e client.232 Date(192.465361 serveur. captur´ e avec tcpdump 13. sans quoi il n’a aucun moyen de connaˆ ıtre notre existence.timestamp 4133222 299093825> (DF) 23:03:29.daytime: F 1:1(0) ack 28 win 57920 <nop.467296 serveur.timestamp 299093825 0> (DF) 23:03:29.466871 client.2 Client UDP “ DUDPcli ” Exemple d’usage : $ .nop.nop.nop.168.232) = Wed Dec 10 20:56:58 2003 ligne 33 Ouvertude d’une socket UDP.wscale 0. 23:03:29.2769 > serveur.466853 serveur.daytime > client.daytime > client./DUDPcli 192.465183 client.nop.168. Le num´ ero de port est choisi dans la zone d’attribution automatique comme nous l’avons examin´ e page 79.467146 client.timestamp 4133223 299093826> (DF) 215 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Trafic client-serveur TCP. L’adresse IP est celle de la machine. Il existe bien entendu une possibilit´ e pour le programme d’avoir connaissance de cette information : la primitive getsockname.timestamp 299093826 4133223> (DF) 23:03:29.nop.nop. Il faut remarquer que rien n’assure que les octets lus sont bien en provenance du serveur de date interrog´ e. ack 28 win 57894 <nop. En fait c’est la primitive connect qui s’en charge.nop.52.daytime: . ligne 45 R´ eception de caract` eres en provenance du r´ eseau. ligne 41 Envoit d’un caract` ere (NULL) au serveur. Nous aurions pu utiliser la primitive recvfrom dont un des arguments est une structure d’adresse contenant justement l’adresse de la socket qui envoie le datagramme (ici la r´ eponse du serveur).timestamp 4133223 299093826> (DF) 23:03:29.timestamp 299093826 4133222> (DF) 23:03:29. 38 et 39 Le remplissage de la structure saddr est identique ` a celui de la version TCP.daytime: .465397 client.daytime > client.2769: S 3179731077:3179731077(0) ack 2381636174 win 57344 <mss 1460.nop. ligne 37.52.2769: .2769 > serveur. La capture de trames suivante montre l’extrˆ eme simplicit´ e de l’´ echange en comparaison avec celle de la version utilisant TCP ! .

} if ((n=recv(sfd.argv[1].IPPROTO_UDP)) < 0) { perror("socket") .670175 serveur. } /* close(sfd) implicite */ DUDPcli. captur´ e avec tcpdump 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 /* $Id: DUDPcli.buf.h> #include <sysexits.MAXMSG−1.c .h> <sys/socket. buf[0] = ’\0’ .668689 client.h> USAGE MAXMSG NPORT "Usage:%s adresse_du_serveur\n" 1024 13 int main(int argc.h> <netinet/in.h> <arpa/inet.daytime: udp 1 23:23:17. if (argc != 2) { (void)fprintf(stderr. } buf[n] = ’\0’ .h> #include <string.daytime > client. sizeof saddr) != 1) { perror("sendto") .SOCK_DGRAM. sfd . * La syntaxe d’utilisation est : DUDPcli <adresse ip sous forme décimale> * */ #include <stdio. saddr.h> #include <unistd.buf) .1 2002/11/24 16:52:50 fla Exp $ * * Client UDP pour se connecter au serveur de date (port 13 − RFC 867). } saddr.216 1 2 Sockets de Berkeley 23:23:17. /* Attention au NBO ! */ saddr.0. exit(EX_OSERR) .sin_port = htons(NPORT) . char buf[MAXMSG] .0)) < 0) { perror("recv") . if (sendto(sfd.(struct sockaddr *)&saddr.argv[0]) . exit(EX_OSERR) .sin_addr. exit(EX_OK) . struct sockaddr_in saddr .h> #include #include #include #include #include #define #define #define <sys/types.v 1. exit(EX_USAGE) .1. } if ((sfd = socket(PF_INET.s_addr = inet_addr(argv[1]) .sin_family = AF_INET . char *argv[]) { int n.4222: udp 26 Trafic client-serveur UDP.USAGE. exit(EX_OSERR) . (void)printf("Date(%s) = %s\n".h> <sys/param.c.4222 > serveur.buf.

Stevens — “Internetworking with TCP/IP – Volume III” (BSD Socket version) — Prentice All — 1993 – Stephen A. J. Richard Stevens — “Unix Network Programming” — Second edition — Prentice All — 1998 – Douglas E. et N de port. Postel. — 19946 – W. Comer – David L. on pourra consulter les documents de r´ ef´ erence suivants : – Stuart Sechrest — “An Introductory 4. (Format : TXT=2405 bytes) (Also STD0025) (Status : STANDARD) Pour en savoir davantage. Rago — “Unix System V Network Programming” — Addison–Wesley — 1993 Et pour aller plus loin dans la compr´ ehension des m´ ecanismes internes : – W. bind listen.14 Conclusion et Bibliographie 217 14 Conclusion et Bibliographie Protocole Adresses locale Adresse ´ eloign´ ee ◦ ◦ et N de port. accept connect bind recvfrom bind sendto En conclusion on peut ´ etablir le tableau suivant : Serveur orient´ e connexion Client orient´ e connexion Serveur non orient´ e connexion Client non orient´ e connexion socket socket socket socket Concernant les exemples de code client.4BSD Interprocess Communication Tutorial” — Re imprim´ e dans “Programmer’s Supplementary Documents” — O’Reilly & Associates.ipctut/ des OS d’inspiration Berkeley 4.4 BSD Operating System” — Addison–Wesley — 1996 On peut ´ egalement trouver ce document dans /usr/share/doc/psd/20. outre les pages de man des primitives cit´ ees dans ce chapitre. May-01-1983. Richard Stevens — “Unix Network Programming” — Prentice All — 1990 – W. consulter cette RFC : RFC 867 “ Daytime Protocol ”. Richard Stevens — “TCP/IP Illustrated Volume 2” — Prentice All — 1995 – McKusick – Bostic – Karels – Quaterman — “The Design and implementation of the 4. Inc.4 6 le r´ epertoire .

218 Sockets de Berkeley .

Ceux-ci figurent dans une RFC particuli` ere. les deux vont donc cohabiter un certain temps. Le processus sp´ ecifie le num´ ero. Il y a deux mani` eres d’assigner un N◦ de port ` a une socket : 1.iana. Cod´ e sur deux octets non sign´ es. selon le type d’application envisag´ e. l’ancienne ou la nouvelle m´ ethode. Toutes les applications sur tous les syst` emes d’exploitation n’ont pas encore adopt´ e la nouvelle approche. Plus simplement. le num´ ero de port permet 65536 possibilit´ es de 0 ` a 65535. C’est typiquement ce que fait un client. La derni` ere en date est la RFC 1700 [Reynolds & Postel 1994]) au paragraphe “WELL KNOWN PORT NUMBERS”. Cette ´ echelle est fragment´ ee de deux mani` eres. sur toute machine Unix ` a jour. ne serait-ce qu’` a cause de “vieilles” applications non mises ` a jour. On suppose bien ´ evidement que les clients sont au courant ou qu’ils disposent d’un m´ ecanisme qui peut les renseigner (cf cours sur les RPC). une liste de ces ports se trouve dans le fichier 1 /etc/services . dans ce paragraphe nous pr´ ecisons comment choisir le num´ ero de port qui va bien. Il doit respecter quelques contraintes comme ne pas utiliser les ports d´ ej` a attribu´ es. En r` egle g´ en´ erale le d´ eveloppeur d’application ne s’attribue pas au hasard un (ou plus) num´ ero de port. Le processus laisse le syst` eme lui assigner automatiquement un num´ ero de port. sauf cas contraire exig´ e par le protocole d’application (cf cours sur les “remote execution”). Nous avons d´ ej` a examin´ e ce point dans les grandes lignes page 79.org/assignments/port-numbers pour se tenir au courant des ´ evolutions de cette liste 1 . 2. http ://www.Chapitre XII Compl´ ements sur les sockets Berkeley 1 R´ eservation des ports Au chapitre pr´ ec´ edent nous avons utilis´ e la primitive bind pour assigner une adresse ` a une socket. C’est typiquement ce que fait un serveur.

) se situent tous dans cette partie. rdist. Si tous les utilisateurs peuvent s’attribuer “manuellement” un num´ ero dans cette zone. Port de 512 ` a 1023 Une fonction rresvport permet l’attribution automatique d’un num´ ero de port dans cette zone. Il faut ´ egalement avoir les droits du root pour utiliser un num´ ero de port dans cette zone.1 R´ eservation de port — Ancienne m´ ethode Port N◦ 0 Ce num´ ero n’est pas utilisable pour une application. Port de 1 ` a 255 Pour utiliser cette zone il faut avoir les droits du root ` a l’ex´ ecution pour que le bind ne retourne pas une erreur.220 Compl´ ements sur les sockets Berkeley 1. pour la partie cliente des connexions (si le protocole n’impose pas une valeur particuli` ere) et pour les tests de serveurs locaux.. la suivante est pr´ evue pour cela.. Lorsque l’utilisateur (non root) utilise 0 comme num´ ero. ftp. il vaut mieux ´ eviter de le faire. pour des applications ayant un U ID = 0. et pas des moindres comme le serveur X11 sur le port 6000 ! 1. ftp.2 R´ eservation de port — Nouvelle m´ ethode Port N◦ 0 Ce num´ ero n’est pas utilisable pour une application. c’est une sorte de “jocker” qui indique au syst` eme que c’est ` a lui de compl´ eter automatiquement le num´ ero (voir plus loin de 49152 ` a 65535). Ports de 256 ` a 511 Jadis consid´ er´ e comme une “r´ eserve” des serveurs officiels commencent ` a s’y installer. telnet. faute de place dans la zone pr´ ec´ edente.).) se situent tous dans cette partie.. Par exemple. 5001 ` a 65535 Zone “libre” attention cependant car de tr` es nombreux serveurs y ont un port r´ eserv´ e. Les serveurs “classiques” (domain. Port de 1024 ` a 49151 est la zone des services enregistr´ es par l’IANA et qui fonctionnent avec des droits ordinaires. rexec. c’est le premier port libre qui est employ´ e. . Port de 1 ` a 1023 Pour utiliser cette zone il faut avoir les droits du root ` a l’ex´ ecution pour que le bind ne retourne pas une erreur. Port de 1024 ` a 5000 Zone d’attribution automatique par bind. smtp. smtp.. c’est dans cette zone qu’inetd (cf cours sur les serveurs) attribue des ports automatiquement pour les outils en “r” de Berkeley (rlogin. c’est une sorte de “jocker” qui indique au syst` eme que c’est ` a lui de compl´ eter automatiquement le num´ ero (voir plus loin de 1024 ` a 5000). telnet.. rcp. . .. Port de 49152 ` a 65535 est la zone d’attribution automatique des ports.. Les serveurs “classiques” (domain.

c’est le “Network Byte Order”. l “long” — Entier long sur 32 bits. #include <sys/types.. un num´ ero de port par exemple. elle sera examin´ ee dans le cours sur les XDR 3 Pour les machines qui respectent naturellement le NBO.h> Nous n’abordons pas ici la question de la transmission de donn´ ees h´ et´ erog` enes au niveau applicatif. de mˆ eme pour les applications qui doivent dialoguer avec d’autres ayant la mˆ eme architecture mat´ erielle. N´ eanmoins ´ ecrire du code “portable” consiste ` a utiliser ces macros dans tous les cas3 ! Pour se souvenir de ces fonctions. Pour cette raison.2 Ordre des octets sur le r´ eseau 221 2 Ordre des octets sur le r´ eseau Poids fort "Big endian" . n “network” — Le r´ eseau sur lequel on envoie les donn´ ees. D’un point de vue plus g´ en´ eral. Les architectures qui travaillent naturellement avec cette repr´ esentation n’ont donc th´ eoriquement pas besoin d’utiliser les fonctions qui suivent. octet 1 octet 0 HP SUN MOTOROLA INTEL Croissance des adresses figure XII.. comme les stations HP ou SUN. le num´ ero de port inscrit dans l’en-tˆ ete TCP (vs UDP) de l’´ emetteur est exploit´ e tel quel par la couche de transport du r´ ecepteur et donc il convient de prendre certaines pr´ ecautions pour s’assurer que les couches de mˆ eme niveau se comprennent..01 Le probl` eme de l’ordre des octets sur le r´ eseau est d’autant plus crucial que l’on travaille dans un environnement avec des architectures h´ et´ erog` enes. A+1 A octet 0 Octet 1 1 0 Poids faible "Little endian" . une adresse IP par exemple. La couche R´ eseau (page 28) ne transforme pas les octets de la couche Internet (page 27) qui elle mˆ eme ne modifie pas ceux de la couche de Transport2 (page 27).. les r´ eseaux imposent le “poids fort” avant le “poids faible”. h “host” — La machine sur laquelle s’ex´ ecute le programme. 2 . il faut connaˆ ıtre la signification des quatre lettres utiles : s “short” — Entier court sur 16 bits. ces fonctions sont des macros “vides”.

222 u u u u long short long short htonl htons ntohl ntohs (u (u (u (u

Compl´ ements sur les sockets Berkeley long) ; /* host to network short) ; /* host to network long) ; /* network to host short) ; /* network to host --------long */ short */ long */ short */

Par exemple, pour affecter le num´ ero de port 13 (service “daytime”) au champ sin port d’une structure de type sockaddr in : saddr.sin port = htons(13) ; Cette ´ ecriture est valable quelle que soit l’architecture sur laquelle elle est compil´ ee. S’il avait fallu se passer de la macro htons sur une architecture Intel (“little endian”), pour l’affection du mˆ eme num´ ero de port, il eut fallu ´ ecrire : saddr.sin port = 0x0D00 ; /* 0D hexad´ ecimal == 13 d´ ecimal */

3

Op´ erations sur les octets

Dans le mˆ eme ordre d’id´ ee qu’au paragraphe pr´ ec´ edent, les r´ eseaux interconnectent des architectures h´ et´ erog` enes et donc aussi des conventions de r´ epr´ esentation des chaˆ ınes de caract` eres diff´ erentes. Pour ˆ etre plus pr´ ecis, le caract` ere NULL marqueur de fin de chaˆ ıne bien connu des programmeurs C, n’est pas valide partout, voire mˆ eme est associ´ e` a une autre signification ! En cons´ equence, pour toutes les fonctions et primitives qui lisent et ´ ecrivent des octets sur le r´ eseau, les chaˆ ınes de caract` eres sont toujours associ´ ees au nombre de caract` eres qui les composent. Le corollaire est que les fonctions “classiques” de manipulation de chaˆ ınes en C (strcpy, strcat, ...) ne sont ` a utiliser qu’avec une extrˆ eme prudence. Pour copier des octets d’une zone vers une autre il faut utiliser bcopy, pour comparer deux buffers, bcmp, enfin pour mettre ` a z´ ero (remplir d’octet NULL) une zone, bzero. #include <string.h> void bcopy (const void *src, void *dst, size t len) ; int bcmp (const void *b1, const void *b2, size t len) ; void bzero (const void *b, size t len) ; bcopy Attention, len octets de src sont copi´ es dans dst et non l’inverse, comme dans strcpy. bcmp Compare b1 et b2 et renvoie 0 si les len premiers octets sont identiques, sinon une valeur non nulle qui n’est pas exploitable vis ` a vis d’une quelconque relation d’ordre (` a la diff´ erence de strcmp qui suppose les caract` eres dans la table ASCII).

4 Conversion d’adresses bzero Met des octets NULL (0) len fois ` a l’adresse b. Il exite des outils similaires, issus du syst` eme V : memcpy, memcmp, memset,....

223

4

Conversion d’adresses

La plupart du temps les adresses IP sont fournies par l’utilisateur dans le format “d´ ecimal point´ e”, or la structure d’adresse (sockaddr in) a besoin d’un entier non sign´ e sur 32 bits. Une conversion est donc n´ ecessaire pour passer d’une repr´ esentation ` a une autre. La fonction inet addr converti une adresse d´ ecimale point´ ee en un entier long non sign´ e et qui respecte le NBO. La fonction inet ntoa effectue le travail inverse. #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> unsigned long inet addr (char *) ; char * inet ntoa (struct in addr) ; Remarque : Ces deux fonctions ne sont pas sym´ etriques, le fait que etre une inet addr ne renvoie pas une structure du type in addr semble ˆ inconsistance. Exemple d’utilisation : struct sockaddr_in saddr ; saddr.sin_addr.s_addr = inet_addr("138.195.52.130") ; printf("Adresse IP = %s\n",inet_ntoa(saddr.sin_addr.s_addr)) ;

5

Conversion hˆ ote – adresse IP

Se pose r´ eguli` erement le probl` eme de convertir un nom symbolique en une adresse IP et inversement. L’origine de cette information d´ epend de la configuration de la station de travail : c’est un serveur de noms (DNS), c’est un fichier (/etc/hosts) ou tout autre syst` eme de propagation des informations (NIS. . .). Dans tous les cas l’information arrive ` a un programme via une entit´ e nomm´ ee le resolver, qui unifie les sources d’informations.

5.1

Une adresse IP ` a partir d’un nom d’hˆ ote
(char *name) ;

#include <netdb.h> struct hostent * gethostbyname struct hostent {

224

Compl´ ements sur les sockets Berkeley char *h_name ; /* Le nom officiel */ char **h_aliases ; /* Tableau de synonymes */ int h_addrtype ; /* PF_INET pour ARPA */ int h_length ; /* Long. de l’adresse */ char **h_addr_list ; /* Adresses possibles */ } ; #define h_addr h_addr_list[0] la macro h addr sert ` a assurer la compatibilit´ e avec les premi` eres versions dans lesquelles il n’y avait qu’une seule adresse IP possible par hˆ ote. Le nom “officiel” s’oppose aux noms synonymes. Par exemple, soit une machine officiellement baptis´ ee pasglop.mon-domain.fr ; si pour r´ epondre au besoin d’une certaine application l’administrateur du r´ eseau lui donne le surnom www.mon-domain.fr, celui-ci sera consid´ er´ e comme un “alias” vis ` a vis du nom officiel et donc lu dans h aliases. (voir page 120) La fin du tableau de pointeurs est marqu´ ee par un pointeur NULL. La liste des adresses est un tableau de pointeurs, le marqueur de fin de liste est ´ egalement un pointeur NULL. Chaque adresse est une zone de h length octets (cf fonction impnet dans l’exemple ci-apr` es). Le programme d’usage qui suit affiche toutes les informations contenues dans cette structure pour les hˆ otes dont le nom est pass´ e en argument (le code source de cet exemple, gethostbyname.c, est ` a la page suivante). $ gethostbyname puma.cti.ecp.fr isabelle.cti.ecp.fr Nom officiel : puma.cti.ecp.fr Type d’adresse : 2 - Longueur : 4 Adresse Internet : 138.195.34.2 Nom officiel : isabelle.cti.ecp.fr Type d’adresse : 2 - Longueur : 4 Adresse Internet : 138.195.33.49 $ gethostbyname anna.cti.ecp.fr anna.cti.ecp.fr : hote inconnu !

Conversion hˆ ote – adresse IP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51

225

/* * $Id: gethostbyname.c,v 1.3 2001/12/02 15:08:24 fla Exp $ * Exemple d’utilisation de la fonction "gethostbyname". */ #include <stdio.h> #include <sysexits.h> #include <sys/types.h> #include <sys/socket.h> /* AF_INET */ #include <netinet/in.h> /* struct in_addr */ #include <netdb.h> /* gethostbyname */ #include <arpa/inet.h> /* inet_ntoa */ #define USAGE "Usage:%s liste de machines distantes\n"

void impnet(struct in_addr **list) { struct in_addr *adr ; while ((adr = *list++)) (void)printf("Adresse Internet : %s\n",inet_ntoa(*adr)) ; } int main(int argc,char *argv[]) { register char *ptr ; register struct hostent *pth ; if (argc <2) { (void)fprintf(stderr,USAGE,argv[0]) ; exit(EX_USAGE) ; } while (−−argc > 0) { ptr = *++argv ; if (!(pth = gethostbyname(ptr))) { (void)fprintf(stderr,"%s : hote inconnu !\n",ptr) ; exit(EX_SOFTWARE) ; } printf ("Nom officiel : %s\n",pth−>h_name) ; while ((ptr = *(pth−>h_aliases))!=NULL) { (void)printf("\talias : %s\n",ptr) ; pth−>h_aliases++ ; } (void)printf("Type d’adresse : %d − Longueur : %d\n", pth−>h_addrtype, pth−>h_length) ; if (pth−>h_addrtype == PF_INET) impnet((struct in_addr **)pth−>h_addr_list) ; else (void)printf("Type d’adresse non reconnu !\n") ; } exit(EX_OK) ; }

gethostbyname.c

5.2

Un nom d’hˆ ote ` a partir d’une adresse IP

le probl` eme sym´ etrique se r´ esoud avec la fonction gethostbyaddr. La d´ efinition du prototype se trouve au mˆ eme endroit que pr´ ec´ edement, la fonction renvoie un pointeur sur une structure du type hostent. #include <netdb.h> struct hostent * gethostbyaddr (char *addr, int len, int type) ; addr Pointe sur une structure du type in addr.

226 len Est la longueur de addr.

Compl´ ements sur les sockets Berkeley

type PF INET quand on utilise la pile ARPA.

6

Conversion N◦ de port – service

Couramment les ports bien connus sont donn´ es par leur nom plutˆ ot que par leur valeur num´ erique, comme par exemple dans les sorties de la commande tcpdump.

6.1

Le num´ ero ` a partir du nom

Un tel programme a besoin de faire la conversion symbolique — num´ erique, la fonction getservbyname effectue ce travail. L’utilisateur r´ ecup` ere un pointeur sur une structure du type servent, NULL dans le cas d’une impossibilit´ e. La source d’informations se trouve dans le fichier /etc/services. #include <netdb.h> struct servent * getservbyname (char *name, char *proto) ; struct servent { char *s_name ; char **s_aliases ; int s_port ; char *s_proto ; } ; s name Le nom officiel du service. s aliases Un tableau de pointeurs sur les aliases possibles. Le marqueur de fin de tableau est un pointeur ` a NULL. s port Le num´ ero du port (il respecte le Network Byte Order). s proto Le nom du protocole ` a utiliser pour contacter le service (TCP vs UDP). Voici un programme de mise en application de la fonction, le code source de l’exemple, getservbyname.c se trouve ` a la page suivante. $ getservbyname domain Le service domain est reconnu dans /etc/services protocole :tcp - N de port :53 $ getservbyname domain udp Le service domain est reconnu dans /etc/services protocole :udp - N de port :53

serv−>s_name.h> /* Pour "getservbyname" */ #define USAGE "Usage:%s <nom de service> [<nom de protocole>]\n" #define MSG1 "Le service %s est reconnu dans /etc/services\nprotocole :%s − N° de port :%d\n" #define MSG2 "Le service %s (%s) est introuvable dans /etc/services !\n" int main(int argc.char *argv[]) { struct servent *serv .h> /* Pour "ntohs" */ #include <netdb. */ #include <stdio.ntohs(serv−>s_port)) .USAGE.c 6.argv[2]?argv[2]:"tcp")) (void)printf(MSG1.argv[0]) .argv[2]?argv[2]:"") . exit (EX_USAGE) .2 Le nom ` a partir du num´ ero Sym´ etriquement la fonction getservbyport effectue le travail inverse. char *proto) .h> #include <sys/types. } if (serv = getservbyname(argv[1].argv[1]. exit(EX_OK) .h> #include <netinet/in. NULL dans le cas d’une impossibilit´ e.c. Exemple de programmation : . else (void)printf(MSG2. #include <netdb.h> struct servent * getservbyport (int port.Conversion N◦ de port – service 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 227 /* * $Id: getservbyname. Exemples d’usage : $ getservbyport 53 Le port 53 correspond au service "domain" (protocole tcp). Elle renvoie aussi un pointeur sur une structure servent. $ getservbyport 53 udp Le port 53 correspond au service "domain" (protocole udp).v 1.3 2001/12/02 14:17:32 fla Exp $ * Exemple d’utilisation de la fonction "getservbyname".serv−>s_proto. if (argc <2) { (void)fprintf (stderr. } getservbyname.h> #include <sysexits.

char *argv[]) { struct servent *serv .h> /* Pour "ntohs" */ #include <netdb. et la paire de fonctions getprotobyname et getprotobynumber l’exploitent.h> /* Pour "atoi". if (argc <2) { (void)fprintf(stderr.3 2001/12/02 14:26:01 fla Exp $ * Exemple d’utilisation de la fonction "getservbyport". } if ((serv = getservbyport(atoi(argv[1]). exit(EX_USAGE) . Lors de la d´ eclaration d’une socket le troisi` eme argument est num´ erique..) en symboles et r´ eciproquement.h> #include <netinet/in.USAGE.\n" "Le port %s (%s) est introuvable dans /etc/services !\n" int main(int argc.c.ntohs(serv−>s_port).serv−>s_proto) . . #include <netdb. char **p_aliases . */ #include <stdio. IPPROTO IP.h> struct protoent *getprotobyname (char *name) . } getservbyport. donc un symbole.c 7 Conversion nom de protocole – N◦ de protocole Les fonctions getservbyname et getservbyport d´ elivrent un nom de protocole.argv[1]. IPPROTO TCP. else (void)printf(MSG2.serv−>s_name.argv[0]) .IPPROTO ICMP.h> /* Pour "getservbyport" */ #define USAGE #define MSG1 #define MSG2 "Usage:%s <numéro de port> [<nom de protocole>]\n" "Le port %d correspond au service \"%s\" (protocole %s). struct protoent { char *p_name . */ #include <sysexits.argv[2]?argv[2]:"tcp"))) (void)printf(MSG1.argv[2]?argv[2]:"") . } .228 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 Compl´ ements sur les sockets Berkeley /* * $Id: getservbyport. il est donc n´ ecessaire d’avoir un moyen pour convertir les num´ eros de protocoles (IPPROTO UDP. Le fichiers /etc/protocols contient cette information. struct protoent *getprotobynumber (char *proto) .. exit(EX_OK) . p name Le nom officiel du protocol..h> #include <stdlib.v 1. int p_proto .h> #include <sys/types.

le code g´ en´ er´ e n’en est que plus fiable et les ´ eventuels disfonctionnements plus ais´ es ` a d´ etecter.c Le source qui pr´ ec` ede donne un exemple de programmation de la fonction getprotobyname. */ #include <stdio.v 1.char *argv[]) { struct protoent *proto .8 Diagnostic p aliases La liste des synonymes.h> #include <sysexits. exit(EX_OK) .N : 6 $ getprotobyname vmtp Le protocole ipv6 est reconnu dans /etc/protocols . Quelques unes des erreurs ajout´ ees au fichier d’en-tˆ ete errno.h> #include <netdb. le dernier pointeurs est NULL. else (void)printf(MSG2.argv[0]) . Usage de ce programme : $ getprotobyname ip Le protocole ip est reconnu dans /etc/protocols .h . 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 229 /* * $Id: getprotobyname.proto−>p_proto) . } if (proto = getprotobyname(argv[1])) (void)printf(MSG1. } getprotobyname. p proto Le num´ ero du protocole.argv[1]) .2 2001/11/29 18:45:39 fla Exp $ * Exemple d’utilisation de la fonction "getprotobyname". exit(EX_USAGE) .h> /* Pour getprotobyname */ #define USAGE #define MSG1 #define MSG2 "Usage:%s <nom du protocole>\n" "Le protocole %s est reconnu dans /etc/protocols − N° : %d\n" "Le protocole %s est introuvable dans /etc/protocols !\n" int main(int argc.c.N : 0 $ getprotobyname tcp Le protocole tcp est reconnu dans /etc/protocols .proto−>p_name.N : 41 8 Diagnostic Chaque retour de primitive devrait ˆ etre soigneusement test´ e. if (argc <2) { (void)fprintf(stderr.USAGE. dans /etc/services.

230 erreur ENOTSOCK EDESTADDRREQ EMSGSIZE EPROTOTYPE ENOPROTOOPT EPROTONOSUPPORT ESOCKTNOSUPPORT EOPNOTSUPP EAFNOSUPPOR EADDRINUSE EADDRNOTAVAIL ENETDOWN ENETUNREACH ENETRESET ECONNABORTED ECONNRESET ENOBUFS EISCONN ENOTCONN ESHUTDOWN ETIMEDOUT ECONNREFUSED EREMOTERELEASE EHOSTDOWN EHOSTUNREACH Compl´ ements sur les sockets Berkeley Description de l’erreur Le descripteur n’est pas celui d’une socket Adresse de destination requise Le message est trop long Mauvais type de protocole pour une socket Protocole non disponible Protocole non support´ e Type de socket non support´ e Op´ eration non support´ ee Famille d’adresse non support´ ee Adresse d´ ej` a utilis´ ee L’adresse ne peut pas ˆ etre affect´ ee R´ eseau hors service Pas de route pour atteindre ce r´ eseau Connexion coup´ ee par le r´ eseau Connexion interrompue Connexion interrompue par l’hˆ ote distant Le buffer est satur´ e La socket est d´ ej` a connect´ ee La socket n’est pas connect´ ee Transmission apr` es un shutdown “time-out” expir´ e Connexion refus´ ee L’hˆ ote distant a interrompue sa connexion L’hˆ ote n’est pas en marche Pas de route vers cet hˆ ote .

Description des arguments : host Une chaˆ ıne de caract` eres qui est l’adresse de l’hˆ ote distant. /* Infos de "getservbyname". elle contient le nom symbolique du service distant sur lequel il faut se connecter. Toutes les deux renvoient un descripteur de socket prˆ et ` a l’emploi. soit c’est un nom symbolique. int port) .v 1.h> #include <sysexits. int udp_open(char *host.c. Cette adresse est soit sous forme d´ ecimale point´ ee. */ #include <stdio. char *service. ie on pourra employer send et recv au lieu de sendto et recvfrom. cette derni` ere valeur l’emporte sur celle trouv´ ee dans le fichier /etc/services. /* Adresse Internet du serveur. ou -1 en cas d’erreur (le message d’erreur doit ˆ etre g´ en´ er´ e par les fonctions elles mˆ emes).h> #include <arpa/inet. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 /* $Id: open_tcp. */ tcp_serv_info . service Si cette chaˆ ıne n’est pas nulle. port Le num´ ero du port distant. */ tcp_host_info . char *service. int port. ´ conn Cet argument n’a d’usage que pour la fonction udp open. */ struct sockaddr_in struct servent struct hostent . Egal ` a un.h> #include <errno. En voici les prototypes : int tcp_open(char *host.h> #include <sys/socket.h> #include <string. Dans le cas o` u service est non nulle et port > 0.h> #include <sys/types.h> #include <netinet/in. il pr´ ecise que la socket cr´ ee est d´ edi´ ee au serveur host (avec un bind). int conn) . S’il est n´ egatif alors service est obligatoirement non nulle.h> #define USAGE "Usage:%s <nom de machine distante>\n" tcp_serv_addr .h> #include <netdb. Elle ne peut pas ˆ etre nulle. /* Infos de "gethostbyname".4 2002/11/24 17:26:11 fla Exp $ * * Fonction "tcp_open" + exemple d’utilisation avec "daytime" * et "time".9 Exemples de mise en application 231 9 Exemples de mise en application Deux exemples de fonctions de connexion ` a un serveur sont jointes ` a ce cours : l’une tcp open et l’autre udp open.h> #include <unistd.

char buf[256] .(struct sockaddr *)&tcp_serv_addr.service) .sin_addr. SOCK_STREAM."tcp_open: erreur de nom de machine : %s : %s\n". tcp_host_info. unsigned long temps . bzero ((char *)&tcp_serv_addr. } tcp_host_info = *hp . return −1 . sizeof tcp_serv_addr) . } else { if (!(hp = gethostbyname(host))) { (void)fprintf(stderr."tcp_open:service inconnu:%s/tcp\n". return −1 .sizeof inaddr) .hp−>h_length) ."tcp"))) { (void)fprintf(stderr.hostid ? */ bcopy((char *)&inaddr.sin_port = sv−>s_port . return −1 . } if ((inaddr = inet_addr(host)) != INADDR_NONE) { /* netid. unsigned long inaddr .sin_family = AF_INET . (void)close(fd) ."tcp_open:numéro de port non spécifié !\n") .char *service. . return −1 .int port) { int fd . if (port > 0) tcp_serv_addr.sizeof tcp_serv_addr)<0) (void)fprintf(stderr. } if ((fd = socket(AF_INET. } return fd . int n .232 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 Compl´ ements sur les sockets Berkeley int tcp_open(char *host. else tcp_serv_addr."tcp_open: impossible de créer la socket !\n") . } if (connect(fd.sin_port = htons(port) . 0)) < 0) { (void)fprintf(stderr.sin_addr. } tcp_serv_info = *sv . } int main(int argc."tcp_open: impossible de se connecter !\n") . return −1 . host.(char *)&tcp_serv_addr.char *argv[]) { int sfd .strerror(errno)) . struct hostent *hp . } else { if (port <= 0) { (void)fprintf(stderr. tcp_serv_addr.h_name = (char *)NULL .sin_port = htons(port) . if (*service) { if (!(sv = getservbyname(service.(char *)&tcp_serv_addr. } tcp_serv_addr. bcopy(hp−>h_addr. struct servent *sv .

h> #include <sys/socket. */ struct servent udp_serv_info .2 2001/12/02 15:08:24 fla Exp $ * * Fonction "udp_open" + exemple d’utilisation avec "daytime" * et "time"./open_tcp localhost Date : Sun Dec 2 16:12:57 2001 Temps : 3216294777 Remarque : Pour transmettre la structure d’adresse du serveur ` a la fonction appelante. } (void)close(sfd) .h> #include <sys/types. sizeof temps) < 0) perror("read/port 37") .h> #include <arpa/inet.37)) < 0) exit (EX_SOFTWARE) . if (read(sfd.argv[1].argv[0]) . */ . 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 /* $Id: open_udp.h> #include <netinet/in.v 1.h> #include <sysexits. } open tcp.buf) ."daytime". exit (EX_OK) .ntohl(temps)) . /* Infos de "getservbyname".h> #define USAGE "Usage:%s <nom de machine distante>\n" struct sockaddr_in udp_serv_addr . else { buf[n]=’\0’. */ struct sockaddr_in udp_cli_addr .USAGE. /* * Connexion au serveur de temps */ if ((sfd = tcp_open(argv[1]. */ #include <stdio. exit (EX_USAGE) .(void *)&temps.h> #include <unistd.c Exemple d’usage : $ . } /* * Connexion au serveur de date */ if ((sfd = tcp_open(argv[1].h> #include <string. if ((n=read(sfd. /* Adresse Internet du serveur.c.argv[1].h> #include <netdb.Exemples de mise en application 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 233 if (argc < 2) { (void)fprintf(stderr.0)) < 0) exit(EX_SOFTWARE) . La fonction udp open compl` ete une structure globale. else (void)printf("Temps(%s)=%lu\n"."".(void *)buf. /* Adresse Internet du client. sizeof(buf)−1))< 0) perror("read/daytime") .h> #include <errno. (void)printf("Date(%s)=%s".

sin_addr. if (bind(fd.\ host) (void)close(fd) .hostid ? */ bcopy ((char *)&inaddr.(char *)&udp_serv_addr. bcopy(hp−>h_addr."udp_open: connexion impossible avec %s !\n". } bzero ((char *)&udp_cli_addr. } .sin_port = htons(port) . udp_cli_addr. } else { if (port <= 0) { (void)fprintf(stderr. else udp_serv_addr. return −1 . udp_cli_addr."udp"))) { (void)fprintf(stderr.s_addr = htonl(INADDR_ANY) . struct servent *sv .(char *)&udp_serv_addr."udp_open: impossible de créer la socket !\n") .sin_port = htons(0) .sin_port = htons(port) .int port. (void)close(fd) . if (port > 0) udp_serv_addr. unsigned long inaddr .(struct sockaddr *)&udp_cli_addr.strerror(errno)) ."udp_open:numéro de port non spécifié !\n") . return −1 . udp_serv_addr. udp_cli_addr. return −1 . sizeof udp_serv_addr) . host. if (*service) { if (!(sv = getservbyname(service. struct hostent *hp ."udp_open:erreur avec l’adresse locale !\n") .sin_port = sv−>s_port . return −1 . } } return fd .sin_family = AF_INET .h_name = (char *)NULL . } if ((fd = socket(AF_INET.hp−>h_length) . } else { if (!(hp = gethostbyname(host))) { (void)fprintf(stderr."udp_open:service inconnu:%s/udp\n". } udp_serv_info = *sv . } if (conn == 1) { /* Figer l’adresse du serveur.sin_addr. 0)) < 0) { (void)fprintf(stderr.sizeof inaddr) udp_host_info.sizeof udp_cli_addr) < 0) { (void)fprintf(stderr.sin_family = AF_INET ."udp_open:erreur de nom de machine:%s:%s\n".(struct sockaddr *)&udp_serv_addr.char *service. SOCK_DGRAM.sizeof udp_cli_addr) . return −1 .int conn) { int fd .234 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 Compl´ ements sur les sockets Berkeley int udp_open(char *host. } if ((inaddr = inet_addr(host)) != INADDR_NONE) { /* netid.sin_addr. */ if (connect(fd. bzero ((char *)&udp_serv_addr.service) . return −1 . sizeof udp_serv_addr)<0) { (void)fprintf(stderr. } udp_host_info = *hp . } udp_serv_addr.

1. if (send(sfd. sizeof buf. else (void)printf("Temps(%s)=%lu\n". /* * Connexion au serveur de temps */ if ((sfd = udp_open(argv[1].buf) . n) < 0) perror("sendto") .argv[1]. } open udp.(void *)&temps.c Exemple d’usage : $ .0.1)) < 0) exit(EX_SOFTWARE) . exit(EX_OK).0.Exemples de mise en application 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 235 int main(int argc.(void *)&udp_serv_addr."daytime". else { buf[n]=’\0’ .1.0) < 0) perror("send") ."".argv[0]) .0.0)) < 0) exit(EX_SOFTWARE) .USAGE.sizeof temps. n = sizeof udp_serv_addr .(void *)buf. (void)printf("Date(%s)=%s". } (void)close(sfd) .(void *)" ".\ (void *)&udp_serv_addr. else if ((n=recv(sfd. if (sendto(sfd./open_udp localhost Date : Sun Dec 2 16:12:17 2001 Temps : 3216294737 . char buf[256] . } /* * Connexion au serveur de date */ if ((sfd = udp_open(argv[1].argv[1].(void *)" ". if (argc < 2) { (void)fprintf(stderr. unsigned long temps .ntohl(temps)) . &n) < 0) perror("recvfrom") . else if (recvfrom(sfd.37. int n .char *argv[]) { int sfd . exit (EX_USAGE) .0)) < 0) perror("recv") .

“ASSIGNED NUMBERS”. (Pages=230) (Format=.ipc/paper. struct in addr sin char sin zero[8] . J. gethostbyname bzero Structure champ hostent h addrtype servent s port hostent h addr Outre les pages de manuel (man) le lecteur pourra consulter avec grand profit les ouvrages suivants : RFC 1700 J. Ce document est re´ edit´ e dans “Programmer’s Supplementary Documents” ´ editeur O’Reilly.236 Compl´ ements sur les sockets Berkeley 10 Conclusion et bibliographie L’usage des fonctions vues dans ce chapitre peut se r´ esumer autour d’une structure d’adresse de socket : short sin family . Robert S. Comer – David L.gz – W. 10/20/1994. Joy. California 94720. ou sous forme de fichier ascii dans le r´ epertoire : /usr/share/doc/psd/21. Fabry.4BSD Interprocess Communication Tutorial” — CSRG University of California. u short sin port .txt) (Obsoletes RFC1340) (STD 2) – Samuel J. Fonction gethostbyname getservbyname addr . Berkeley Berkeley.ascii. Phil Lapsley — “An Advanced 4. William N. Reynolds. Richard Stevens — “Unix Network Programming” — Second edition — Prentice All — 1998 – Douglas E. Richard Stevens — “Unix Network Programming” — Prentice All — 1990 – W. Leffler. Stevens — “Internetworking with TCP/IP – Volume III” (BSD Socket version) — Prentice All — 1993 . Postel.

Un serveur concourant (“ concurrent server ”) d´ esigne une impl´ ementation capable de g´ erer plusieurs taches en apparence simul- . les lit. mˆ eme au regard des bandes passantes modernes. puis nous examinons quelques points techniques remarquables de leur architecture logicielle comme la gestion des taches multiples. Entrer dans une boucle infinie qui accepte les requˆ etes des clients. 2. . la gestion des logs. des descripteurs multiples. d´ eduit des sch´ emas (revoir la page 211) d’utilisation des sockets. Enfin nous concluons ce chapitre avec une petite pr´ esentation du “ serveur de serveurs ” sous Unix. Un client r´ eseau qui s’y connecte et t´ el´ echarge pour 10 Go de donn´ ees accapare le serveur pendant un temps significativement long. que nous pourrions qualifier de na¨ ıve. Consid´ erons l’exemple d’un serveur de fichiers fonctionnant sur ce mode. lui affecter une adresse locale avec un num´ ero de port connu des clients potentiels. ne peut convenir qu’` a des applications tr` es simples. formule une r´ eponse et la renvoie au client. Un deuxi` eme client r´ eseau qui attendrait la disponibilit´ e du mˆ eme serveur pour transf´ erer 1Ko aurait des raisons de s’impatienter ! 1.1 Serveurs it´ eratif et concourant Un serveur it´ eratif (“ iterative server ”) d´ esigne une impl´ ementation qui traite une seule requˆ ete ` a la fois. pourrait ˆ etre celui-ci : 1. c’est ` a dire la commande inetd ! 1 Type de serveurs L’algorithme intuitif d’un serveur. D’abord nous tentons de r´ esumer leurs comportements selon une typologie en quatre mod` eles g´ en´ eriques. Cr´ eer une socket.Chapitre XIII ´ ements de serveurs El´ Dans ce chapitre nous abordons quelques grands principes de fonctionnement des logiciels serveurs. le fonctionnement en arri` ere plan (les fameux “ daemon ”). Cette d´ emarche. .

1 . donc un descripteur. Il ´ etablit un circuit virtuel bi-directionnel d´ edi´ e ` a chaque client ce qui monopolise une socket. . Attention. . Par contre. Dans cette premi` ere approche purement algorithmique nous n’abordons pas la mise en œuvre technique. 1. Le protocole d’application peut ˆ etre compl` etement boulevers´ e par le choix de l’un ou de l’autre. S’il n’y a que quelques octets ` a´ echanger entre le client et le serveur. Si l’application cliente a ´ et´ e interrompue accidentellement2 . retrait du r´ eseau. c’est ` a dire qu’il n’y a plus d’´ echange entre le client et le serveur. duplication et d´ esordre introduit dans l’ordre des datagrammes. les serveurs it´ eratifs sont plus faciles ` a concevoir et ` a programmer que les serveurs concourants. cette fonctionnalit´ e n’implique pas n´ ecessairement que ces taches concourantes doivent toutes s’ex´ ecuter en parall` ele. cet ´ echange est un gaspillage des ressources du r´ eseau. Que cette op´ eration se r´ ep` ete un grand nombre de fois et le serveur ne r´ epondra plus. le paragraphe 2 s’y consacrera ! D’un point de vue conceptuel. L’alternative n’est pas triviale. faute de descripteur disponible. Avant toute chose il faut se souvenir des caract´ eristiques les plus marquantes de l’un et de l’autre.238 ´ ements de serveurs El´ tan´ ees. s’ils sont d’une conception plus savante. mais le r´ esultat n’est pas toujours satisfaisant pour les clients. de plus il assure que les donn´ ees sont transmises. Si la connexion est au repos . ` a savoir perte. Il y a plus pr´ eoccupant. les serveurs concourants.2 Le choix d’un protocole La pile ARPA nous donne le choix entre TCP et UDP. rien n’indique ` a celui-ci que le client est toujours l` a ! TCP est silencieux si les deux parties n’ont rien ` a s’´ echanger1 . Mode connect´ e Le mode connect´ e avec TCP est le plus facile ` a programmer. sans perte. voire de m´ emoire libre au niveau de la couche de transport (allocation au niveau du noyau. Nous verrons au chapitre suivant comment on peut modifier ce comportement par d´ efaut 2 crash du syst` eme. L’´ etablissement d’une connexion et sa terminaison entraˆ ıne l’´ echange de 7 paquets.. Au contraire. rien n’indique au serveur que cette connexion est termin´ ee et il maintient la socket et les buffers associ´ es. . . en fonction de la m´ emoire totale et au d´ emarrage de la machine) ! Mode datagramme Le mode datagramme ou “ non connect´ e ” avec UDP h´ erite de tous les d´ esagr´ ements de IP. et interdit par construction toute possibilit´ e de “ broadcast ”. sont d’un usage plus agr´ eable pour les utilisateurs parceque naturellement plus disponibles.

Ce qui importe c’est leur nature concourante avec la “ tache maˆ ıtre ” qui les engendre.3 Quatre mod` eles de serveurs Deux comportements de serveurs et deux protocoles de transport combin´ es g´ en` erent quatre mod` eles de serveurs : Itératif Data−gramme Itératif Connecté Concourant Data−gramme Concourant Connecté figure XIII. Cr´ eer une socket. Le serveur de date “ daytime ” ou le serveur de temps “ time ” en sont d’excellents exemples. R´ ep´ eter : – Lire une requˆ ete d’un client. 2. G´ en´ eralement c’est la partie cliente qui est en charge de la re´ emission de la requˆ ete si aucune r´ eponse du serveur ne lui parvient.Quatre mod` eles de serveurs Pourtant malgr´ e ces inconv´ enients UDP reste un protocole qui offre des avantages par rapport ` a TCP. – Formuler la r´ eponse. Elle ne doit pas ˆ etre fig´ ee aux caract´ eristiques d’un r´ eseau local particulier et doit ˆ etre capable de s’adapter aux conditions changeantes d’un internet. conform´ ement au protocole d’application. – Envoyer la r´ eponse. 239 1. Par contre les probl` emes de fiabilit´ e du transport doivent ˆ etre g´ er´ es au niveau de l’application.Mode data-gramme : 1. Critique : Cette forme de serveur est la plus simple. La valeur du temps au del` a duquel l’application consid` ere qu’il doit y avoir re´ emission est ´ evidement d´ elicate ` a´ etablir. Avec un seul descripteur de socket un serveur peut traiter un nombre quelconque de clients sans perte de ressources due ` a de mauvaises d´ econnexions. elle n’est pas pour autant inutile. Algorithme it´ eratif .01 La terminologie “ tache esclave ” employ´ ee dans les algorithmes qui suivent se veut neutre quant au choix technologique retenu pour les impl´ ementer. . Elle est adapt´ ee quand il y a un tout petit volume d’information ` a´ echanger et en tout cas sans temps de calcul pour l’´ elaboration de la r´ eponse. lui attribuer un port connu des clients. Le “ broadcast ” et le “ multicast ” sont possibles.

Recevoir la demande du client.Mode connect´ e: ´ ements de serveurs El´ 1. Cr´ eer une socket. Terminer la tache. Mettre la socket ` a l’´ ecoute du r´ eseau. Cr´ eer une socket. lui attribuer un port connu des clients. 2.Mode datagramme : Maˆ ıtre : 1.240 Algorithme It´ eratif . 2. . Quand le dialogue est termin´ e. lui attribuer un port connu des clients. Le temps d’´ elaboration de la r´ eponse doit rester court. obtenir une socket pour la traiter. Entamer le dialogue avec le client. Elaborer la r´ eponse. Son usage pourrait ˆ etre d´ edi´ e ` a des relations clients/serveurs mettant en jeu de petits volumes d’informations avec la n´ ecessit´ e d’en assurer ` a coup sˆ ur le transport. Accepter la connexion entrante. 3. Esclave : 1. 4. conform´ ement au protocole de l’application. ´ 2. Algorithme concourant . conform´ ement au protocole de l’application. fermer la connexion et aller en 3). R´ ep´ eter : – Lire une requˆ ete d’un client – Cr´ eer une tache esclave pour ´ elaborer la r´ eponse. Envoyer la r´ eponse au client. en mode passif. 3. ce qui le rend peu attractif. Le temps d’´ etablissement de la connexion n’est pas n´ egligeable par rapport au temps de r´ eponse du serveur. Critique : Ce type de serveur est peu utilis´ e. 4. 5.

241 . Il est sur-dimensionn´ e pour les “ petits ” services et sa programmation soign´ ee n’est pas toujours ` a la port´ ee du programmeur d´ ebutant.Mode connect´ e: Maˆ ıtre : 1. 2. Critique : C’est le type le plus g´ en´ eral de serveur parce-qu’il offre les meilleurs caract´ eristiques de transport et de souplesse d’utilisation pour le client. conform´ ement au protocole de l’application. Amorcer le dialogue avec le client. Cr´ eer une socket. 2. – Cr´ eer une tache esclave pour traiter la r´ eponse. cette solution se justifie. par contre le coˆ ut de cr´ eation de ce processus fils est prohibitif par rapport ` a son usage : formuler une seule r´ eponse et l’envoyer. 3. 3. Cet inconv´ enient l’emporte g´ en´ eralement sur l’avantage apport´ e par le “ parall´ elisme ”. Mettre la socket ` a l’´ ecoute du r´ eseau. Esclave : 1. Algorithme concourant . Recevoir la demande du client.Quatre mod` eles de serveurs Critique : Si le temps d’´ elaboration de la r´ eponse est rendu indiff´ erent pour cause de cr´ eation de processus esclave. obtenir une socket pour la traiter. N´ eanmoins. dans le cas d’un temps d’´ elaboration de la r´ eponse long par rapport au temps de cr´ eation du processus esclave. Terminer la connexion et la tache. lui attribuer un port connu des clients. en mode passif. R´ ep´ eter : – Accepter la connexion entrante.

sans devoir patienter jusqu’` a l’ach` evement de la requˆ ete pr´ ec´ edente.3. C’est typiquement le comportement d’un syst` eme d’exploitation qui ordonnance des processus entre-eux pour donner ` a chacun d’eux un peu de la puissance de calcul disponible (“ time-sharing ”). Cette derni` ere caract´ eristique est celle des taches parall` eles. des processus (ou des “ threads kernel ”. non toujours valables partout et dans tous les cas de figure.1 Gestion des “ taches esclaves ” La gestion des “ taches esclaves ” signal´ ees dans le paragraphe 1 induit que le programme “ serveur ” est capable de g´ erer plusieurs actions concourantes. Sur un syst` eme Unix l’usage de processus est une bonne solution dans un premier choix car ce syst` eme dispose de primitives (APIs) bien rod´ ees pour les g´ erer. La premi` ere passe par l’usage de processus l´ egers ou “ threads ”. Gestion de descripteurs multiples (paragraphes 2. Fonctionnement des processus en arri` ere plan ou “ daemon ” (paragraphe 3) 2. 2. N´ eanmoins. Butenhof pour la programmation des threads. comme le paragraphe suivant le rappelle. Concr` etement il faut disposer d’une machine avec plusieurs processeurs pour avoir. La d´ emarche qui parait la plus naturelle pour impl´ ementer ces “ taches esclaves ” est donc de tirer partie des propri´ et´ es mˆ emes de la gestion des processus du syst` eme d’exploitation. en particulier fork().4) 2. la Bibliographie du chapitre (page 258). Deux autres voies existent. Ce paragraphe donne quelques grandes indications tr` es ´ el´ ementaires que le lecteur soucieux d’acqu´ erir une vraie comp´ etence devra compl´ eter par les lectures indiqu´ ees au dernier paragraphe . La suite du texte va se consacrer ` a´ eclairer les points suivants : 1. vfork() et rfork().6) 3. 2. les taches parall` eles sont toutes concourantes mais l’inverse n’est pas vrai. si elles sont support´ ees) qui s’ex´ ecutent vraiment de mani` ere simultan´ ee donc sur . Notamment il est n´ ecessaire de consulter les ouvrages de W.5.1.4). Stevens pour la partie syst` eme et David R.2. c’est ` a dire qui ont un comportement qui donne l’illusion ` a l’utilisateur que sa requˆ ete est trait´ ee dans un d´ elai raisonnable. Pour conclure il faut pr´ eciser que des taches esclaves ou concourantes peuvent s’ex´ ecuter dans un ordre al´ eatoire mais pas n´ ecessairement en mˆ eme temps. Autrement dit. 2. par exemple. Gestion des “ taches esclaves ” (paragraphes 2. la deuxi` eme par l’usage du signal SIGIO qui autorise ce que l’on nomme la programmation asynchrone (cf 2. l’usage de processus fils n’est pas la panac´ ee car cette solution comporte des d´ esagr´ ements. 2.242 ´ ements sur les serveurs El´ 2 Technologie ´ el´ ementaire De la partie algorithmique d´ ecoulent des questions techniques sur le “ comment le faire ”. R.

Sur une architecture mono-processeur. Le r´ esultat du fork() est la cr´ eation d’un processus fils qui ne diff` ere de son p` ere que par les points suivants : 1. En allant plus loin dans la direction prise par vfork. stime. mais d’examiner l’incidence de ses propri´ et´ es sur l’architecture des serveurs.2 fork. Les compteurs de temps (utime. L’argument d’appel du rfork permet de param` etrer ce qui est effectivement partag´ e ou non. elle est ´ egalement d´ elicate ` a manipuler : deux (ou plus) entit´ es logicielles ex´ ecutant le mˆ eme code et acc´ edant aux mˆ emes donn´ ees sans pr´ ecaution particuli` ere vont tr` es certainement converger vers de s´ erieux ennuis de fonctionnement si le d´ eroulement de leurs op´ erations n’est pas rigoureusement balis´ e. vfork et rfork des processeurs diff´ erents. Si le but du fork dans le processus fils est d’effectuer un exec imm´ ediatement. .fork.) qui sont remis ` a z´ ero 4. le principal d’entre eux. le processus p` ere reste bloqu´ e (le vfork ne retourne pas). Le num´ ero de processus (pid) ainsi que le num´ ero de processus du processus p` ere (ppid) 3. . Celui-ci ne fait que cr´ eer un processus fils sans copier les donn´ ees. Le code de retour de fork : 0 pour le fils. la cons´ equence est que deux processus partagent le mˆ eme espace d’adressage simultan´ ement. Les signaux en attente non transmis ´ egalement Tout le reste est doublonn´ e. notamment la “ stack ” et surtout la “ heap ” qui peuvent ˆ etre tr` es volumineuses et donc rendre cette op´ eration p´ enalisante voire quasi redhibitoire sur un serveur tr` es charg´ e (des milliers de processus et de connexions r´ eseaux). alors il tr` es int´ eressant d’utiliser plutˆ ot le vfork. vfork et rfork Il ne s’agit pas ici de faire un rappel sur la primitive fork() examin´ ee dans le cadre du cours Unix. le pid du fils pour le p` ere 2. le soucis principal de ce type de programme multi-entit´ es est de veiller ` a ce qu’aucune de ses composantes ne puisse changer les ´ etats de clone() sous Linux d’ailleurs l’impl´ ementation actuelle des threads sous Linux emploie cette primitive avec des avantages et beaucoup d’inconv´ enients par rapport ` a ce que pr´ evoit la norme Posix et ` a la gestion des processus 4 3 . le rfork3 autorise la continuation du processus p` ere apr` es le fork. indique au noyau que les deux processus partagent tout l’espace d’adressage. les taches ne peuvent ˆ etre que concourantes ! 243 2. Les verrous (flock) qui ne sont pas transmis 5. durant le temps de son ex´ ecution avant le exec le fils partage strictement les mˆ emes donn´ ees que le p` ere (` a utiliser avec pr´ ecaution). RFMEM. En cons´ equence. En effet. . Jusqu’` a ce que le processus rencontre un exit ou un exec. Si cette derni` ere primitive est tr` es riche de potentialit´ es4 .

L’id´ ee fondatrice des threads est de ne pas faire de fork mais plutˆ ot de permettre le partage de l’espace d’adressage ` a autant de contextes 6 d’ex´ ecution du mˆ eme code que l’on souhaite..c). parceque les entit´ es logicielles pouvent s’ex´ ecuter en parall` ele (architecture multiprocesseurs) et donc il est indispensable que l’acquisition du s´ emaphore qui prot` ege une ressource commune soit une op´ eration atomique.2) est fortement recommand´ e pour s´ erialiser les acc` es aux “ sections critiques ” du code. Autrement dit. Sans thread Avec threads Stack Adresses croissantes Registres. L’usage de mutex (cf paragraphe 2. les “ threads ” Les processus l´ egers ou “threads” sont une id´ ee du milieu des ann´ ees 80. Cette op´ eration de “ v´ erouillage ” elle-mˆ eme pose probl` eme. Thread 1 CP1 f2() f1() 0x00000000 Texte f2() f1() Texte figure XIII.02 Au lieu de cr´ eer un nouveau processus on cr´ ee une nouvelle thread. on parle g´ en´ eralement de pthreads. Sur une machine ayant une architecture mono-processeur. La norme Posix a pos´ e les bases de leur d´ eveloppement durable en 1995 (Posix 1. sans qu’il y ait possibilit´ e que deux (ou plus) entit´ es logicielles tentent avec succ` es de l’acqu´ erir... mais d` es que la machine est construite avec une ar7 chitecture smp (ce qui est de plus en plus le cas avec la banalisation des configurations bi-processeurs et plus) l’usage de threads g´ erables par le noyau devient beaucoup plus int´ eressant car il utilise au mieux les ressources de la 5 6 “ mutual exclusion ” ordre de grandeur de quelques dizaines 7 “ Symmetric Multi Processor ” . ce qui revient (en gros) ` a ajouter un nouveau contexte d’ex´ ecution sur la pile syst` eme dans le processus. C’est toute la probl` ematique des mutex5 .. c’est ` a dire qui s’ex´ ecute en une fois. le premier type de threads est suffisant..244 ´ ements sur les serveurs El´ sa m´ emoire simultan´ ement. Thread 2 CP2 Registres.3 Processus l´ egers. 2. il faut introduire presque obligatoirement un m´ ecanisme de s´ emaphore qui permette ` a l’une des entit´ es logicielles de v´ erouiller l’acc` es ` a telle ou telle ressource m´ emoire pendant le temps n´ ecessaire ` a son usage. CP Registres..

245 8 http ://www. Le probl` eme est tr` es complexe et chaque constructeur d´ eveloppe ses propres strat´ egies. Sur une machine de type smp il faut que le syst` eme d’exploitation supporte les threads kernel pour qu’un mˆ eme processus puisse avoir des sous-taches sur tous les processeurs existants. Actuellement les threads de FreeBSD sont encore du type user land mais un projet tr` es ambitieux et tr` es prometteur (dont l’issue a ´ et´ e repouss´ ee plusieurs fois) est en cours de d´ eveloppement8 . avec True64) et plus recement Hewlett-Packard avec la version 11. Une application avec un grand nombre de threads prend l’avantage sur les autres applications par le fait qu’elle consomme en temps cumul´ e bien plus que les autres processus mono-thread. les “ threads ” machine : un mˆ eme processus pourrait avoir deux threads.freebsd. et d’autre par ne permet pas d’utiliser les r` egles de priorit´ e d´ efinies ´ egalement par POSIX. non toujours disponibles pour des taches au long court.xx d’HP-UX. Du cot´ e des OS libres le probl` eme n’avance pas vite car il monopolise beaucoup de programmeurs de haut niveau.Processus l´ egers. Conclusion : Les threads user land ne s’ex´ ecutent que sur un seul processeur quelle que soit l’architecture de la machine qui les supporte. Cette approche n’est pas satisfaisante car chaque thread est ex´ ecut´ ee dans un processus diff´ erent (pid diff´ erent donc) ce qui est contraire aux recommandations POSIX. on distingue plusieurs familles d’impl´ ementation. une s’ex´ ecutant sur chacun des deux processeurs (ou plus bien entendu.org/smp/ . Ces derni` eres threads sont support´ ees par les constructeurs de machines ` a architectures parall` eles. . Les threads Linux utilisent rfork qui est simple et tr` es efficace. . Le principe ´ etant pos´ e. qui sont g´ er´ ees par le noyau. d’une part. s’il y a plus de processeurs). D’un cot´ e il y a les threads “ user land ” c’est ` a dire qui sont compl` etement g´ er´ ees par le processus utilisateur et de l’autre les threads “ kernel ”. traditionnellement Sun (Solaris) et Compaq (ex Digital.

Pour ˆ etre vraiment asynchrones. Le signal SIGIO est ignor´ e par d´ efaut. Un trop grand nombre d’interruptions possibles nuit ` a l’efficacit´ e du syst` eme (changements de contexte). De plus la distinction entre les causes du signal est difficile ` a faire. il n’est pas re¸ cu pour les mˆ emes raisons selon le protocole employ´ e: UDP : – Arriv´ ee d’un paquet pour la socket – Une erreur TCP : – Une demande de connexion (attente sur un accept) qui arrive – Une d´ econnexion – Une demi-d´ econnexion (shutdown) – Arriv´ ee de donn´ ees sur une socket – Fin de l’´ emission de donn´ ees (buffer d’´ emission vide) sur une socket – Une erreur O` u l’on voit que cette technique.4 Programmation asynchrone Les paragraphes qui pr´ ec` edent utilisent un processus ou une thread pour pouvoir effectuer au moins deux taches simultan´ ement : ´ ecouter le r´ eseau et traiter une (ou plusieurs) requˆ ete(s). du moins en TCP. donc ce signal en TCP est quasi inexploitable. La norme POSIX permet un tel comportement avec les primitives aio read et aio write 9 . ` a l’aide d’un appel ` a la primitive fcntl. qui pr´ evient le processus d’une activit´ e sur un descripteur. Cette technique permet l’´ ecriture du code de petits serveurs bas´ e sur le protocole UDP (En TCP les causes de r´ eception d’un tel signal sont trop nombreuses) sans fork ni thread. ces op´ erations de lecture et d’´ ecriture ne devraient pas ˆ etre assujetties au retour des primitives read ou write9 . il faut demander explicitement au noyau de le recevoir. ignor´ e par d´ efaut. Dans le cas d’un serveur peu sollicit´ e il tout ` a fait envisageable de mettre en œuvre une autre technique appell´ ee “ programmation asynchrone ”. ne peut ˆ etre envisag´ ee pour que pour des serveurs peu sollicit´ es. Une fois activ´ e. La programmation asynchrone s’appuie sur l’usage du signal. par un “ handler ” de signaux. Conclusion : La d´ enomination “ programmation asynchrone ” bas´ ee seulement sur l’usae du signal SIGIO (versus SIGPOLL) est abusive.246 ´ ements sur les serveurs El´ 2. SIGIO (SIGPOLL sur syst` eme V). La gestion des entr´ ees/sorties sur le descripteur en question est alors trait´ ee comme une exception.

Le prototype de select est dans <sys/time. long tv_usec . – Si timeout est une structure existante (pointeur non nul). Le type fd set est d´ ecrit dans <sys/types. Sous Unix cette op´ eration entraˆ ıne une consommation exag´ er´ ee des ressources cpu.La primitive select 247 2. . struct timeval { long tv_sec . Il est absolument d´ econseill´ e dans cette situation de faire du polling. *writefs. comme inetd. FD_SET(int fd.) se trouve par construction dans une situation o` u il doit examiner en mˆ eme temps plusieurs descripteurs (il pourrait s’agir aussi de tubes de communication). ainsi que les macros FD XXX. FD_ISSET(int fd. la primitive retourne imm´ ediatement apr` es avoir test´ e les descripteurs. /* Nombre de micro-secondes. fd_set fd_set fd_set struct FD_ZERO(fd_set *fdset) . writefs et exceptfs et se comporte en fonction de timeout : – Si timeout est une structure existante (pointeur non nul). /* /* /* /* Tous les bits a zero. fd_set *fdset) . si aucun n’est actif le processus est endormi et ne consomme aucune ressource cpu.3 BSD) surveille un ensemble de descripteurs. . Tous les champs de timeout doivent ˆ etre ` a 0 (“ polling ” dans ce cas). Cette activit´ e consisterait ` a examiner chaque descripteur l’un apr` es l’autre dans une boucle infinie qui devrait ˆ etre la plus rapide possible pour ˆ etre la plus r´ eactive possible face aux requˆ etes entrantes. fd_set *fdset) .h> <sys/time. } . fd_set *fdset) .h>. au d´ etriment des autres usagers et services. select retourne quand un des descripteurs est . /* Cf "time. D` es que l’un des descripteurs devient actif (il peut y en avoir plusieurs ` a la fois) le noyau r´ eveille le processus et l’appel de select rend la main ` a la proc´ edure appelante avec suffisemment d’information pour que celle-ci puisse identifier quel(s) descripteur(s) justifie(nt) son r´ eveil ! #include #include <sys/types. FD_CLR(int fd.h> *readfs. timeval *timeout) . et si ses champs sont non nuls. *exceptfs.h>.h" /* Nombre de secondes. La primitive select (4.5 La primitive select Un serveur qui a la charge de g´ erer simultan´ ement plusieurs sockets (serveur multi-protocoles par exemple. Positionne ’fd’ dans ’fdset’ Retire ’fd’ de ’fdset’ Teste la presence de ’fd’ */ */ */ */ */ */ */ int select (int maxfd. La primitive select examine les masques readfs.

readfs descripteurs ` a surveiller en lecture. le programme pr´ ecise quels sont les descripteurs ` a surveiller dans readfs. Remarque : select travaille au niveau de la micro-seconde. maxfd prend ` a l’appel la valeur du plus grand descripteur ` a tester. A l’appel. la primitive est bloquante jusqu’` a ce qu’un descripteur soit prˆ et (ou qu’un signal intervienne). writefs et exceptfs. Au retour. d’o` u un usage possible de timer de pr´ ecision. La primitive renvoie -1 en cas d’erreur (` a tester syst´ ematiquement) . . la primitive pr´ ecise quels sont les descripteurs qui sont actifs dans les champs readfs. Par exemple : – Donn´ ees out-of-band sur une socket. une cause d’erreur classique est la r´ eception d’un signal (errno==EINTR). et en tout cas jamais au del` a de la valeur pr´ ecis´ ee par timeout (cf MAXALARM dans <sys/param.248 ´ ements sur les serveurs El´ prˆ et. Potentiellement un syst` eme BSD (4. Le serveur de serveurs inetd (page 4) est un excellent exemple d’utilisation de la primitive.h>). exceptfs Ce champ permet de traiter des evˆ enements exceptionnels sur les descripteurs d´ esign´ es. Il convient donc de conserver une copie des valeurs avant l’appel si on veut pouvoir les r´ eutiliser ult´ erieurement.3 et versions suivantes) permet d’examiner jusqu’` a 256 descripteurs. ce que ne fait pas sleep (seconde). – Si timeout est un pointeur NULL. writefs descripteurs ` a surveiller en ´ ecriture. – Contrˆ ole du statut sur un pseudo-tty maˆ ıtre. La macro FD ISSET est utile au retour pour tester quel descripteur est actif et dans quel ensemble. writefs et exceptfs. plus un.

La primitive poll 249 2. fds est un pointeur sur la base d’un tableau de nfds structures du type struct pollfd. timeout Est un compteur de millisecondes qui pr´ ecise le comportement de poll : – Le nombre de millisecondes est positif strictement. Les champs events et revents sont des masques de bits qui param` etrent respectivement les souhaits du programmeur et ce que le noyau retourne. – Le nombre de millisecondes est INFTIM (-1). 0 indique l’expiration d’un d´ elai (“ time-out ”). . #include <poll. /* Evenements attendus */ short revents .h> int poll(struct pollfd *fds. la primitive est bloquante. /* Descripteur de fichier */ short events . La primitive retourne imm´ ediatement. La primitive retourne le nombre de descripteurs rendus disponibles pour effectuer des op´ erations d’entr´ ee/sortie. unsigned int nfds. On utilise principalement : POLLIN POLLOUT POLLERR POLLHUP nfds Taille du vecteur. /* Evenements observes */ } . Quand le temps pr´ evu est ´ ecoul´ e. On s’apper¸ coit imm´ ediatement que la valeur du param` etre de timeout n’est pas compatible ni en forme ni en comportement entre select et poll. – 0. la primitive retourne dans le code de l’utilisateur mˆ eme si aucun ´ evˆ enement n’est intervenu. struct pollfd { int fd . int timeout). mais avec une approche diff´ erente.6 La primitive poll La primitive poll (System V) permet la mˆ eme chose que la primitive select. -1 indique une condition d’erreur.

mais : – ils ne sont pas rattach´ es ` a un terminal particulier (ils sont en “ arri` ere plan ”) . sous ceux d’un pseudo-utilisateur sans mot de passe ni shell d´ efini. Nemeth. Le processus fils est alors d´ etach´ e du terminal. Changer de r´ epertoire courant. Appeler la primtive setsid pour que le processus courant devienne “ leader ” de groupe (il peut y avoir un seul processus dans un groupe) .250 ´ ements sur les serveurs El´ 3 Fonctionnement des daemons Sous Unix les serveurs sont impl´ ement´ es le plus souvent sous forme de daemons10 . lors de l’ex´ ecution des shell-scripts de configuration (par exemple ` a partir de /etc/rc) . mieux. – ils s’ex´ ecutent le plus souvent avec les droits du “ super-utilisateur ”. le source ci-apr` es est un exemple de programmation de daemon. daemons have no particular bias towards good or evil. La raison principale est que ce type de processus est le plus adapt´ e ` a cette forme de service. comme nous allons l’examiner. Modifier le masque de cr´ eation des fichiers umask = 0 pour que le troisi` eme argument de open ne soit pas biais´ e par la valeur du umask lorsque cette primitive sert aussi ` a cr´ eer des fichiers . 3. 2. g´ en´ eralement la racine (/) ou tout autre r´ epertoire ` a la convenance de l’application . 5. Synder & Seebass. 3. les appels ` a la fonction syslog font r´ ef´ erence ` a un autre daemon nomm´ e syslogd que nous examinons au paragraphe suivant. 4. – ils sont le plus souvent lanc´ es au d´ emarrage du syst` eme.” 10 . 1 et 2 (entr´ ee et sorties standards n’ont plus de sens pour un processus d´ etach´ e d’un terminal). et en particulier 0. Si l’on en croit la premi` ere ´ edition de “ UNIX System Administration Handbook ”. – ils ne s’arrˆ etent en principe jamais (sauf bien sˆ ur avec le syst` eme !). Ex´ ecuter un fork. Fermer tous les descripteurs devenus inutiles. pp 403-404 :“Many people equate the word ’daemon’ with the word ’demon’ implying some kind of Satanic connection between UNIX and the underworld. La conception d’un daemon suit les r` egles suivantes : 1. ’Daemon’ is actually a much older form of ’demon’ . This is an egregious misunderstanding. terminer l’ex´ ecution du p` ere et continuer celle du fils qui est alors adopt´ e par init (traditionnellement c’est le processus N◦ 1). voire. but rather serve to help define a person’s character or personality.1 Programmation d’un daemon Les daemons sont des processus ordinaires. ce que l’on peut visualiser avec un ps -auxw (versus ps -edalf sur un syst` eme V) en examinant la colonne TT : elle contient ? ? .

Pour dialoguer avec ce daemon un programme doit utiliser les fonctionnalit´ es que le lecteur trouvera tr` es bien d´ ecrites dans “man syslog”.. . Le fichier /etc/syslog. openlog("diablotin". (void)sleep(1) . /* Repertoire de travail. je me transforme en demon !\n") . */ (void)umask(0) . ."Attention. default : exit(EX_OK) .4 en donne un aper¸ cu rapide. Pour pallier ` a cette d´ eficience un daemon est sp´ ecialis´ e dans 11 l’´ ecoute des autres daemons (´ ecoute passive :).h> <sys/types. il s’agit de syslogd . */ (void)printf("Je suis infernal.c. exit(EX_OK) . /* Devenir chef de groupe.Daemon syslogd 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 251 /* $Id: diable.h> <errno.2 Daemon syslogd Du fait de leur fonctionnement d´ etach´ e d’un terminal. (void)setsid() .conf est le fichier standard de configuration du daemon syslogd.h> <syslog. La figure 3 suivante sch´ ematise le circuit de l’information dans le cas d’une utilisation de syslogd."Je me tue !\n") . (void)close(1) .h> <unistd.LOG_PID|LOG_NDELAY. exit (1) . closelog() . (void)syslog(LOG_INFO. */ case 0 : /* Le futur "demon"... */ #include #include #include #include #include #include #include <stdio.2 2002/01/08 21:12:50 fla Exp $ * * Diablotin : exemple de démon miniature. */ (void)chdir("/") .h> <sys/stat. /* erreur du "fork". Il est constitu´ e de lignes de deux champs : un d´ eclencheur 11 Ce rˆ ole strat´ egique lui vaut d’ˆ etre lanc´ e le premier et d’ˆ etre stopp´ e le dernier .h> <stdlib.LOG_USER) . (void)close(0) .v 1.c 3.\n") . } } diable.).. sinon le paragraphe 3. (void)close(2) . syslog(LOG_INFO. je suis un vrai ’daemon’. les daemons ne peuvent plus d´ elivrer directement de message par les canaux habituels (perror.h> int main() { switch (fork()) { case −1 : perror("fork") .

daemon. uucp.252 ´ ements sur les serveurs El´ (selector) et une action.debug signifie les messages de niveau DEBUG pour le syst` eme de routage du courrier. Dans les syslog plus ´ evolu´ es l’administrateur a la possibilit´ e de d´ erouter tous les messages contenant un nom de programme ( !nom du prog) ou un nom de machine (+nom de machine) L’action est soit : – Un fichier d´ esign´ e par un chemin absolu. processus 1 processus 2 processus 3 /dev/log syslogd distant (msg UDP) Noyau kill −HUP ‘cat /var/run/syslog.conf /var/log/XXXX /dev/console syslogd distant (msg UDP) terminal utilisateur figure XIII. syslog. – Un nom de machine distante (@machine. – Une liste de logins d’utilisateurs. Entre ces deux champs un nombre quelconque de tabulations.pid‘ syslogd /etc/syslog. lpr.03 Si les conditions du d´ eclencheur sont remplies l’action est ex´ ecut´ ee. plus pr´ ecisement : Le d´ eclencheur est un filtre qui associe un type de daemon avec un niveau de message. news. notice. alert. authpriv. et debug. Les mots clefs possibles pour le type de daemon sont auth.fla. signifie n’importe quel mot clef. user. . Par exemple mail.debug. crit. comme dans mail. Un point (·) s´ epare les deux parties du filtre. Une ´ etoile ( ) ` a la place. mail. .fr) – Tous les utilisateurs connect´ es avec une ´ etoile . . Une ´ etoile ( ) signifie n’importe lequel. kern. et local0 ` a local7. comme /var/log/syslog. err. Le niveau de message est l’un des mots clefs suivants : emerg. warning. cron.domaine. comme root.

auth. facility Est l’´ etiquette par d´ efaut des futurs messages envoy´ es par syslog.4 Fonctions syslog Les prototypes et arguments des fonctions : #include <syslog.conf /dev/console /var/log/messages /var/log/maillog /var/log/lpd-errs /var/cron/log root root root * |/usr/local/bin/traitinfo /var/log/diablotin. je suis un vrai ’daemon’. Identifier chaque message avec le pid.* *.kern.info !diablotin *.info.mail..lpr.notice..3 Fichier syslog.crit mail. const char *message.kern. . Comme dans l’exemple de “ diablotin ”. et dans le fichier /var/log/diablotin..debug *.notice.err.notice.log : .auth. Ouverture imm´ ediate de la connexion avec syslogd. int facility) . un programme commence par d´ eclarer son intention d’utiliser le syst` eme de log en faisant appel ` a la fonction openlog : logopt Donne la possibilit´ e de pr´ eciser o` u le message est envoy´ es et dans quelle condition.alert *. . void closelog(void) . logopt LOG LOG LOG LOG CONS NDELAY PERROR PID description Ecriture sur /dev/console.debug.info lpr.. void syslog(int priority. Jan 27 18:52:03 glups diablotin[20254]: Je me tue ! .emerg *...* R´ esultat de l’ex´ ecution de diablotin sur la machine glups.err *..log Exemple de fichier /etc/syslog.auth.crit *.info cron.h> void openlog(const char *ident. 3. Ecriture d’un double du message sur stderr. Jan 27 18:52:02 glups diablotin[20254]: Attention.conf 253 3.conf : *.Fichier syslog.mail.debug.) . int logopt..

compos´ e d’un niveau d’urgence pr´ ecis´ e par le tableau ci-dessous (niveaux d´ ecroissants) et d’une ´ etiquette optionnelle. . Probl` emes de mat´ eriels Erreurs. Messages d’avertissement. prise dans le tableau ci-dessus . Messages qui ne sont pas des erreurs. Messages du noyau. Intervention imm´ ediate requise. Puis chaque appel ` a la fonction syslog est compos´ e d’un message (g´ en´ er´ e par l’application) et d’un code de priorit´ e.254 facility LOG LOG LOG LOG LOG LOG LOG LOG LOG LOG LOG LOG AUTH AUTHPRIV CRON DAEMON KERN LPR MAIL NEWS SYSLOG USER UUCP LOCAL0 description ´ ements sur les serveurs El´ Services d’authentification. comme gated. Informations sans cons´ equence. Idem ci-dessus. Messages du daemon syslogd lui-mˆ eme. Messages du gestionnaire de courrier. elle prime alors sur celle pr´ ecis´ ee lors du openlog. Messages des processus utilisateur (defaut). Messages du syst` eme de transfert de fichiers. Messages du gestionnaire de “ news ”. Messages du gestionnaire d’imprimante. Le daemon qui g` ere les proc´ edures batch. Tous les daemons du syst` eme. priority LOG LOG LOG LOG LOG LOG LOG LOG EMERG ALERT CRIT ERR WARNING NOTICE INFO DEBUG description Une condition de “ panic system ”. Messages pour le debug. Enfin le closelog mat´ erialise la fin d’utilisation de ce syst` eme dans le code. R´ eserv´ e pour un usage local.

3 de BSD. celle de serveur de serveurs : “ The Internet superserver — inetd ”. La version 4. Bien sˆ ur cela sous entend que le programmeur de ce service ait pr´ evu ce fonctionnement. Il permet ` a un seul processus (celui d’inetd) d’attendre de multiples demandes de connexions au lieu d’avoir 1 processus par type de connexion. Cette strat´ egie r´ eduit d’autant le nombre de processus. Le prix ` a payer pour une telle souplesse est ´ elev´ e. /etc/rc par exemple. Inetd fournit essentiellement deux services principaux : 1.3 de BSD a apport´ e une simplification en introduisant une nouvelle notion. . D` es le d´ ebut de son ex´ ecution il se transforme en daemon (cf paragraphe IV. 4. on peut remarquer que lanc´ es au d´ emarrage de la machine. . chacun surveillant son ou ses ports de communication. Avant la version 4.4 Exemple de “ daemon ” inetd 255 4 Exemple de “ daemon ” inetd Dans cette partie nous allons ´ etudier un serveur de serveurs nomm´ e inetd qui est un tr` es bel exemple pour conclure ce chapitre. g´ en´ eralement rep´ er´ e par le vocabulaire “ stand alone ”.5. L’inconv´ enient de cette strat´ egie est la consommation importante de ressources surtout avec le nombre croissant des services r´ eseaux “ de base ”. Ce chapitre pourra se prolonger par la lecture du code source C d’inetd. puisqu’il est ´ egalement multiprotocoles et multi-services. Il simplifie l’´ ecriture des serveurs eux-mˆ emes.1 Pr´ esentation de inetd Sous Unix on peut imaginer facilement que chacun des services r´ eseaux offerts soient programm´ es comme un daemon. seuls diff` erent les traitements propres aux serveurs eux-mˆ emes c’est ` a dire ceux qui rel` event du protocole de l’application. c’est comme cela que tous les services fonctionnaient. puisqu’il g` ere toute la prise en charge de la connexion. Les serveurs lisent les requˆ etes sur leur entr´ ee standard et ´ ecrivent la r´ eponse sur leur sortie standard. C’est un daemon que peuvent utiliser tous les serveurs TCP/UDP. tous ces processus effectuent des op´ erations similaires (cf 3). inetd est invoqu´ e au d´ emarrage de la machine. “ rlogin ”. Un mˆ eme service peut y ˆ etre enregistr´ e et accessible en udp comme en tcp. De plus il combine des caract´ eristiques particuli` eres. Le probl` eme est que pour faire fonctionner les services de base du r´ eseau on devait maintenir en m´ emoire (primaire en “ ram ” ou secondaire sur la zone de “ swap ”) un grand nombre de processus souvent compl` etement inutiles ` a un instant donn´ e. inetd invoque fork puis exec pour pratiquement tous les services qu’il offre (cf lecture de code). ou encore “ telnet ” fait l’objet d’un processus daemon (“ daemon ”). simplement au cas ou. Un tel fonctionnement existe. Avec cette strat´ egie. dans les scripts de lancement. Inetd est un serveur parall` ele en mode connect´ e ou data-gramme. 2. chaque service comme “ ftp ”.3) et lit un . Sur les Unix ` a architecture Berkeley. De plus. avec une ou plusieurs sockets.

– Les lignes bien form´ ees sont constitu´ ees de 7 champs. socket () Pour chaque services bind () listen () (socket TCP) select () accept() (socket TCP) fork () père close () (socket TCP) fils close() descr. cependant. connect´ ee (stream) ou non (dgram).04 Le fichier /etc/inetd.04 montre l’architecture g´ en´ erale (tr` es simplifi´ ee) de fonctionnement. La figure XIII. sur certains sites et pour des raisons de s´ ecurit´ e.256 ´ ements sur les serveurs El´ fichier de configuration g´ en´ eralement nomm´ e /etc/inetd.1 et 2 close (socket) setgid () setuid () (si non root) exec () (du serveur) trouvé dans /etc/inetd. il peut ne pas l’ˆ etre. – Les lignes vides ne sont pas prises en compte.conf est organis´ e de la mani` ere suivante : – Un # en d´ ebut de ligne indique un commentaire.conf. il est lisible normalement par tous. Chaque ligne bien form´ ee d´ ecrit un serveur. . Description des champs : 1. C’est grˆ ace ` a lui que inetd connait le num´ ero de port ` a employer 2.conf figure XIII. qui doit ´ egalement se trouver dans le fichier /etc/services. autres que la socket. Ce fichier est en ASCII. dup () socket vers 0. Le nom du service. Le type de socket. comme pour un shellscript.

4. Le protocole qui doit ˆ etre tcp ou udp et doit en tout cas se trouver dans le fichier /etc/protocols. Ce dernier fichier donne une correspondance num´ erique aux diff´ erents protocoles. Les arguments transmis ` a cet ex´ ecutable lors du exec. comme celle d’HP. Le nom du propri´ etaire (pour les droits ` a l’ex´ ecution). 6. limitent ce nombre). wait ou nowait suivant que le serveur est it´ eratif ou parall` ele. 5.Exemple de “ daemon ” inetd 3. 257 . mais ce n’est pas une r` egle g´ en´ erale. Le chemin absolu pour d´ esigner l’ex´ ecutable du serveur. il y en a 20 au maximum dans les impl´ ementations Berkeley de inetd (certaines re-´ ecritures. 7. Le plus souvent c’est root.

258 ´ ements sur les serveurs El´ 5 Bibliographie Pour la partie architecture/configuration des serveurs : – W. Stevens — “ Internetworking with TCP/IP – Volume III ” (BSD Socket version) — Prentice All — 1993 – Stephen A. syslog. Richard McDougall — “ Solaris Internals ” — Sun Microsystems Press — 2001 – Uresh Vahalia — “ Unix Internals. Richard Stevens — “ Advanced Programming in the UNIX Environment ” — Addison–Wesley — 1992 – Douglas E.conf. — 1996 Et pour aller plus loin dans la compr´ ehension des m´ ecanismes internes : – McKusick.4 BSD Operating System ” — Addison Wesley — 1996 – Jim Mauro. Dirsk Buttlar & Jacqueline Proulx Farell — “ Pthreads programming ” – O’Reilly & Associates. Bostik. Richard Stevens — “ Unix Network Programming ” — Prentice All — 1990 – W. Butenhof — “ Programming with POSIX Threads ” — Addison–Wesley — 1997 – Bradford Nichols. Richard Stevens — “ Unix Network Programming ” — Volume 1 & 2 — Second edition — Prentice All — 1998 – W. Karels. syslogd et syslog. Pour la programmation des threads : – David R. Comer – David L. Rago — “ Unix System V Network Programming ” — Addison–Wesley — 1993 – Man Unix de inetd. Inc. Quaterman — “ The Design and implementation of the 4. the new frontiers ” — Prentice Hall — 1996 .

32 Application Program Interface.0. 34 Adresse IP. 107 bases whois. 32 ARP. 14. 177. 121 . voir Address Family AFNIC. voir IP adresse IP priv´ ee. 246 aio write. 14 10Base5. 55 Fonctionnement. 14--15 RJ45. voir ouverture active adresse de loopback. 241 Algorithme concourant . 240 algorithme de routage. 222 Berkeley Internet Name Domain. 23. 209--210 active open. 52 SENDER HA.Mode connect´ e. 240 Algorithme it´ eratif . 53 PROTOCOL TYPE. 243 fork. 200 rfork. 242 socket. 52 OPERATION. 50 Format du datagramme. 246 close. 52 arp. 52. 52 TARGET HA.Index aio read. 32 AF.2. 242. 222 bcopy. 202. 13. 125 Association Fran¸ caise pour le Nommage Internet en Coop´ eration.3. 13--14 10BaseT. 52 HARDWARE TYPE. 32 Algorithme concourant . 9 802. 9 accept. 203 exec. 203.0. 106 bcmp. 52 TARGET ADR. voir commande Arpanet. 32 adresse IP publique. 3 Authentication Header.Mode connect´ e. 250 open. 239 alias IP. voir Association Fran¸ caise pour le Nommage Internet en Coop´ eration AfriNIC. 199 ARIN. 50.Mode datagramme. 41. 200. 200 10Base2. 200 read. voir routage Algorithme It´ eratif . 52 Proxy arp. 52 HLEN 1. 181 base de donn´ ees distribu´ ee. 242. 53 SENDER ADR. 201 vfork. 51. 34 802.Mode data-gramme.1. 175 API. 52 HLEN 2. 243 write. 14 127. voir Application Program Interface APNIC.

189 ipfw. 222 cache dns. 194 netstat -rn. 19 VLAN. 248 en-t^ ete 802. 105 DNSSEC. 215. 62 sendmail. 200 DHCP. Crocker. 250 route. 19 BSD 4. 105 Douglas E. voir Classless InterDomain Routing circuit virtuel. 96 connect. 255 bzero. 23 DATA.2/802. 108 domaine. 121 natd. 132 datagramme. 4 concentrateur. 199 BSD 4. 62 httptunnel. 84. 62. 83 David H. 19--20 ISH. 129 sshd. 238 Classless InterDomain Routing. voir dns dynamique EINTR. 37 close.3.1c. 18 Cyclades. 206 Bind Operations Guide. 78 Encapsulating Security Payload. 12 ARP. 204--205. voir Berkeley Internet Name Domain bind. 9. 23 daemon. 177 routed. 116 diablotin. 85 UDP. 181 . 55 IGMP. 83. 181. 210 closelog. 111 CIDR. 253 commande arp -a. 221 BIND. 200. 127 CSMA/CD. 115 ping. 63 nsupdate. 177 inetd. 237. 127 named. 226 traceroute. voir serveur de noms dns dynamique. 58 IP. 114 domain completion. 189 mutt. 213. 177 syslogd. 107 INDEX commutateur. 216. 104 dynamic update. 187. 20 Commutation de paquets. 205 CRLF. 127 descripteur de socket. 250 tcpdump. 115 dyndns. voir serveur concourant congestion avoidance. 189. 122 BOG. 51 gated. 178. 115 DNS.3. 255--257 init. 96 congestion window. 52 TCP. 52 Ethernet. 250 ipf. 247. 41 Dave Clark. 178 ps. 253 Diffie-Hellman. 10 ICMP. voir Bind Operations Guide brodcast. 17 concurrent server. 37 big endian. 177 ifconfig.260 BGP-4. Comer. 44 RARP. 250--251 Darpa. 107.

conf. 247 fen^ etres glissantes. voir 10Base2 Ethernet standard. 37--38 classe A. 10 format d’une trame. 40. 33 classe B.conf. 177. 129. 143 in-addr. 9. 113 inaddr. 85. voir commande gateway. voir pile FIFO Firefox. 252 /var/log/syslog. 40 Internet Key Exchange. 121 inverse queries. 256 /etc/nsswitch. 32. 9 collision. voir question inverse IP. 248 FD SET. 31--41 CIDR.root. 205.conf.boot. 228 gif. 92 Fibre optique. 247 FD ZERO. 43 adresse. 103. 256 /etc/syslog. 247 FD ISSET. 107 gated. voir 10Base5 FAI. voir Fournisseur d’Acc` es Internet fcntl. 226.x vs Ethernet. voir Internet Corporation for Assigned Names and Numbers IEEE802. 117.conf. 24 Fournisseur d’Acc` es Internet. voir passerelle generic tunnel interface. 33 261 .conf. 121 named. 33 classe C. 121 named. 228. 80 ICANN. voir trame full duplex. 246 FD CLR. 226 gethostbyname. 227. 228 getservbyname. 117. 14 hub. 223 Interface de ‘‘ loopback ’’. 110 syslog.arpa. 108. 223 /etc/inetd.conf. 247. 11 IETF. 112 resolv. 70 Internet Corporation for Assigned Names and Numbers. 203 Fully Qualified Domain Name.INDEX Ethernet. 110 /etc/hosts.firewall. 15 fichier /etc/bootptab.arpa. 223 inet ntoa. 108. 228 getprotobynumber. 190 /etc/resolv. 224 getprotobyname. 108. 177 gethostbyaddr. 119 frame. 131 HUB. 110. 113--119 index addr. 228 getservbyport. 189. 219. 79. 252 named. 250 /etc/rc. 212. 257 /etc/rc. 108--109 /etc/services. 53 /etc/host. 37 IMAP. voir Fully Qualified Domain Name. 110 /etc/protocols. 9--11 ‘‘ transceiver ’’. 253 FIFO.conf. voir concentrateur IANA. 10 Ethernet fin. 32 FQDN. 181 Internet Software Consortium. 3. voir generic tunnel interface HELO.

229 ISC. voir IP payload compression mode transport. 46 FLAG. voir Security Association SPI. 184 Konqueror. 45. 46 PADDING. 57 ‘‘ Source Quench ’’. 55 TYPE. 45. 48. 57 Format des messages. 55 IDENTIFICATION. 180--184 AH. 48 fragmentation. 209 little endian. 46 PROTOCOL. voir Authentication Header ESP. 45. 28. 57 ‘‘ router advertisement ’’. 58 protocole. 55. 47. 182 mode tunnel. 62 ‘‘ Router solicitation ’’.262 classe exp´ erimentale. 108. 83 Jonathan B. 104. 23 . voir Internet Key Exchange IPcomp. 34. 93. 47 ‘‘ More fragment ’’. 33 Louis Pouzin. 39--41 sous-r´ eseaux. 184. 49 INDEX TTL. 49 IGMP. 60 TYPE OF SERVICE. 221 Local Internet Registry. 45 TOTAL LENGTH. 34 de broadcast. 48 ‘‘ Don’t Fragment bit ’’. 77. 176 OFFSET. 77 HEADER CHECKSUM. 68 ‘‘ router sollicitation ’’. voir Local Internet Registry listen. 40. 49 FLAGS. 44 IP aliasing. Postel. 49 HLEN. 75. 189 IPsec. 32 LAN. voir serveur it´ eratif Jon Postel. 7--8 libc. 23. 54 ‘‘ Destination Unreachable ’’. 24 LACNIC. 68 CHECKSUM. 213. 48. 45. voir Security Parameter Index ipv6. voir Initial Sequence Number ISO 3166. 121 LIR. 76 R´ eassemblage. 56 ‘‘ Echo Reply ’’. 182 SA. 49 OPTIONS. 57 ‘‘ Time exceeded ’’. 3. 56 ‘‘ Redirect ’’. 45. 48 SOURCE ADDRESS. 28. 35--36 unicast. 45 VERS. 59 MTU. voir Internet Software Consortium ISN. 45. 45. 45--47. 57. 57. 129 KAME. 44 ICMP. voir alias ip IP payload compression. 189 IPFIREWALL VERBOSE. 48 FRAGMENT OFFSET. 106 iterative server. 56 ‘‘ Echo Request ’’. 38 multicast. 181 IPFIREWALL. 110. 43. 34 DESTINATION ADDRESS. voir Encapsulating Security Payload IKE. 55 CODE.

8. 115 memcmp. 180. 136 openlog. 39. 27 transport. 44. 40 groupe. 221. 133 multi-homed. 223 nommage absolu. 8 Mbone. 19 224. 9 donn´ ees. 133 MTA. 200. 24 Mozilla. 5 pr´ esentation. 107 notify. 212 network byte order.0. voir Network Information Center NIS.0. 5. 68 224. 221 poids fort. 4 PF. 5. 223 message. 122 name server control utility. 108. 37 ouverture active. 219 num´ ero de service. 24 netstat. 41 routeur. 5 application. 105 name daemon control program. 41 passerelle. 5 donn´ ee. 24 NBO. 117 NSF. 122 National Science Foundation. 206 mode connect´ e. 223 memset. 68 224. 125 MAN. 5 r´ eseau. 212. 206. 203. 133 MUA.2. 5 OSPF.1.255. 41 mode connect´ e. 89 OSI 7 couches de l’. 77.0. 221 263 . 26. voir name daemon control program Netscape.0. 106 NIC. 107 nommage relatif. 39. voir IP IGMP mutex. voir National Science Foundation num´ ero de port. 60 md5. 203. voir Protocol Family pile ARPA. 88 paires torsad´ ees. 12 LLC. 238 Mosaic. 12 MAC. 132 mailing-list. 104. voir ouverture passive Paul Baran. 238 pile FIFO. 88 ouverture passive. 238 mode datagramme. 84. 226 Network Information Center. voir num´ ero de port open mail relay. 202.0. voir commande network Byte Order. voir 10BaseT paquet. voir network Byte Order ndc.0. 20--21. 41 multicast. 84. 39 IGMP. 5 session. 60 adresse MAC. 77 poids faible. 223 memcpy. 24 MSA. 253 orderly release. 208 datagramme. 59. 244 nœeud. 20 passive open. 75. 12 physique.INDEX MAIL.

132. 208 recv. 115 RFC 2930. voir r´ ep´ eteur Requests For Comments.264 Point to Point Protocol. 185 RFC 1919. 181 RFC 2405. 177. 18--19 POP. 181 RFC 2406. 23 RFC 793. 181 RFC 2451. 35 RFC 1918. 11. voir num´ ero de port Post Office Protocol. 53. 132 r´ ep´ eteur. voir RR. 83 RFC 821. 50 RFC 867. 108. 142 RFC 2030. 134. 80 RFC 1878. 55 bootp. 249 pont. 208 readv. 53 dhcp. 249 polling. 75 RFC 791. 95 RFC 903. 247 POLLOUT. 125. 181 RFC 2364. 34. 249 POLLHUP. 142 port. 176 RFC 2535. 40. 86 RFC 1034. 143 RFC 2136. 181 RFC 2402. 112 quintuplet. 37 RIPE. 58 RFC 1631. 39. 107. 203. 219 repeater. 25 resolver. 249 POLLERR. voir R´ eseaux IP europ´ een . 38 RFC 950. 185 RFC 1700. voir routage RIP-2. 249 POLLIN. 77. 181 RFC 2409. 32 RARP. voir Post Office Protocol. 117 RFC 1042. 127 RFC 826. 115 RFC 768. 32 relay mail. 84. 142 PPP. 32. 129 RFC 822. 205 QUIT. voir Requests For Comments RFC 1025. 9 RFC 896. 16--17 r´ eseau d’interconnexion. 180. 177 r´ eseau virtuel. 54 RFC 1256. 208 recvmsg. 223 Resource Record. 176 RFC 2401. 212 RFC 894. 113 RFC 1035. 133 RFC 2516. 53 RCPT. 53 RFC 922. 138 INDEX RFC. 208 Regional Internet Registries. 181 RFC 2476. 208 recvfrom. 35. 115 RFC 2144. 9 RFC 1112. 185 RFC 1939. voir Point to Point Protocol primary server. 68 RFC 1700. 110. 219 RIP. 136 read. voir serveur principal querie reverse. 142 poll. voir question inverse question inverse. 135 remote procedure call. 41 R´ eseaux IP europ´ een. 116 RFC 2845. 108--109.

105. 182 select. 91 routage. 120 KEY. 204 265 . 120 RTT. 206--207 serveur concourant. 129 sliding windows. 119 SOA. 202 PF IPX. 228 IPPROTO UDP. voir round trip time s-mail. 37 d´ ecouverte de routeurs. 68 redirection. 202 PF ISO. 112 setsid. 117. 138 NS. 118 TXT. 118--119 PTR. 203 source gethostbyname. 117. 62 routed. 135--137 Spanning Tree Protocol. 247--248 send. 125 sans fil. 228 PF APPLETALK. 87. 202 PF SNA. 246 Simple Mail Transfert Protocol. 116. 119 CNAME. 210 SIGIO. 119. 237 serveur principal. 203. 206--207 sendmsg. 90 socket. 96 SMTP. voir Spanning Tree Protocol structure sockaddr. voir serveur racine round trip time. voir serveur secondaire Security Association. 202 PF INET6. 117. 224 spam. 203 SOCK RAW. 238 serveur de noms. 120 HINFO. 242. 203.c. voir commande RPC. voir remote procedure call RR. 120 WKS. 61 OSPF. voir inetd serveur it´ eratif. 223 serveur de serveurs. 246 SIGPOLL. 68 direct. 202 PF INET. 61--69 algorithme de. 105. 202 SOCK DGRAM. 112. 202 PF LOCAL. 105. 203. 182 Security Parameter Index. 69 RIP. 112 serveur racine. 61 dynamique. voir 10BaseT rndc. 228 IPPROTO IP. 66 indirect. 19 static nat. 203 IPPROTO TCP. 18 secondary server. 202 PF CCITT. 117. 228 IPPROTO RAW. 250 shutdown.INDEX RIR. 202--203 IPPROTO ICMP. voir fen^ etres glissantes slow start. voir Simple Mail Transfert Protocol SO LINGER. voir name server control utility root name server. voir Regional Internet Registries RJ45. 64 table de. 65 classless. 187 STP. 206--207 sendto. 112 serveur secondaire. 67 statique. 120 MX. 203 SOCK STREAM. 117. 117 A.

95 WAN. 86 ACNOWLEDGMENT NUMBER. 85 Initial Sequence Number. 206--207 writev. 86 WINDOW. 85 OFFSET. 204 subnet address. 105 zone reverse. 86 mss. 106 trame. 113 . 210 SYN. 251--252 table de routage. 86 DESTINATION PORT. voir inetd Thick Ethernet. 23 UUCP. 78 MESSAGE LENGTH. Richard Stevens. 93 the internet superserver. 87 RESERVED. 245 threads user land. 85 URGENT POINTER.266 structure sockaddr in. 86. 87 zone. 86 FIN. 176 Twisted Pair. 41 Transaction Key. 117 Transport Layer Interface. 86 SEQUENCE NUMBER. 115 transfert de zone. 114. 242 TKERY. voir routage TCP. 180 VPN. voir 10Base5 Thin Ethernet. 87. 83 ACKNOWLEDGEMENT NUMBER. voir 10Base2 threads kernel. 86. voir Transaction SIGnature Tunnel IP. voir Transport Layer Interface INDEX top levels domains. 206--207 wscale. 86 RST. 93 URGENT POINTER. 86 PUSH. 245 three-way handshake. 86. 115 Transaction SIGnature. 85. voir 10BaseT UDP. voir commande syslogd. 114 TLD. 78 DESTINATION PORT. 78 SOURCE PORT. 78 umask. voir top levels domains TLI. 87 PADDING. 199 TSIG. voir Adresse de sous-r´ eseau switch. 85 CHECKSUM. 86. 89 time sharing. 8 wireless. voir sans fil write. voir commutateur syslog. 89 SOURCE PORT. voir Transaction Key TKEY. 250 Universit´ e de Berkeley. 182 W. 129 Virtual Private Network. 75 CHECKSUM. 122. 86 ACK. 93 nop. 253 syslogd. 86 CODE. 87 timestamp. 85 OPTIONS. voir Virtual Private Network. 85.