Linux Networking-concepts HOWTO <author>Rusty Russell &nl; Traduit par Emmanuel Roger<tt><htmlurl name="flynux@freegates.be" url="mailto:flynux@freegates.be"></tt>&nl; <date>v1.0.1 Lundi 1er Mai 16:19:12 CST 2000, traduction du 26 Août 2002 <abstract> Ce document décrit ce qu'est un réseau (comme Internet), et les bases de son fonctionnement. </abstract> <!-- Table of contents --> <toc> <!-- Begin the document --> <sect>Introduction <p> Bienvenue, ami lecteur. <p> J'ai écrit un nombre conséquent de HOWTOs sur les réseaux dans le passé, et il m'est apparu qu'il y avait une sacré pile de jargon dans ceux-ci. J'avais donc trois choix: mes deux autres choix étaient d'une part d'ignorer le problème ou d'autre part d'expliquer les termes partout. Ni l'un ni l'autre n'étaient satisfaisant. <p> La principale <bf>qualité</bf> des logiciels libres est que vous avez la possibilité d'explorer et de jouer avec les systèmes que vous utilisez. Je crois que permettre aux gens d'avoir cette liberté est un but noble; pas seulement parce que cela permet aux gens de se sentir plus forts (comme le fait de reconstruire un moteur) mais parce que la nature même de l'Internet moderne et des logiciels libres vous permet de partager votre expérience avec des millions de gens. <p> Mais on doit bien démarrer quelque part, alors allons-y. <p>(C) 2000 Paul `Rusty' Russell. Sous licence GNU GPL. <sect>Qu'est ce qu'un `<em>réseau informatique</em>'?<label id="definition-computer-network"> <p><label id="definition-node"> Un réseau informatique est juste un ensemble de trucs qui permettent à des noeuds de se parler entre eux (par `<em>noeuds</em>' on entend ordinateurs, imprimantes, distributeurs de coca ou n'importe quoi dans le genre). La <bf>façon</bf> dont ils sont connectés n'a pas vraiment d'importance: vous pouvez utiliser des fibres optiques ou bien des pigeons voyageurs. Évidemment, certains choix sont meilleurs que d'autres (surtout si vous avez un chat). <p><label id="definition-sub-network"> En général, si vous connectez juste deux ordinateurs entre eux, on ne peux pas réellement appeler ça un réseau; vous avez vraiment besoin d'en avoir au moins trois pour avoir un réseau. C'est un peu comme le mot `groupe': deux personnes forment un couple mais à partir de trois on appelle ça un `groupe'. De plus, les réseaux sont souvent reliés entre eux, pour former de plus gros réseaux; chaque petit réseau (appelé un `sous-réseau') peut faire partie d'un plus grand réseau. <p><label id="definition-network-link"> La connexion entre deux ordinateurs est souvent appelée un `lien réseau'. S'il y a un câble qui sort de l'arrière de votre machine et que celui-ci va vers une autre machine, c'est un lien réseau. <p>Il y a quatre choses à prendre en compte lorsqu'on parle d'un réseau informatique: <descrip> <tag>taille: Quelle taille ça a ?</tag> <label id="definition-LAN"> Si vous avez connecté chez vous vos quatre ordinateurs ensembles, vous avez ce que l'on peut appeler un LAN (Local Area Network). Si vous devez marcher pour aller voir les autres machines, en général on appelle ça un LAN, peu importe le nombre de machines qui y sont connectées, et comment vous avez construit le réseau. <label id="definition-WAN"> <p>A l'autre bout du spectre se trouvent les WAN (Wide Area Network). Si vous avez un ordinateur à Lahore au Pakistan, un à Birmingham en Angleterre, et un autre à Santiago au Chili, et que vous vous arrangez pour les connecter, alors vous obtenez ce que l'on appelle un WAN. <tag>Topologie: Quelle forme ça a ?</tag> <label id="definition-topology"> Construisons une carte du réseau: les lignes sont <ref id="definition-network-link" name="les liens réseau">, et chaque point est un noeud. Il est possible que chaque ligne mène à un noeud central comme une grosse étoile, ce qui veut dire que chacun communique à travers ce point (<label id="definition-star-topology">`réseau en étoile'): <tscreen><verb> o o o \_ | _/ \|/ o-----o-----o _/|\_ / | \ o o o </verb></tscreen> <p>Il est aussi possible que tout le monde communique en ligne, comme ceci: <tscreen><verb> o------o------o-------o--------o | | | | | o | | o | o </verb></tscreen> <p>Ou peut-être avez-vous trois sous-réseaux connectés via un noeud: <tscreen><verb> o o | o--o--o | | | o--o--o--o--o o \ | o------o / | o--o--o--o--o o | | | o | o--o o </verb></tscreen> <p>Vous verrez beaucoup de topologies comme celles-ci dans la vie réelle, et parfois certaines seront beaucoup plus compliquées. <tag>Physique: Qu'est-ce qui le compose ?</tag> <label id="definition-sneakernet"> La seconde chose à prendre en compte est le matériel avec lequel est inter-connecté votre réseau. Le moins cher est sans doute le `<em>sandalenet</em>' dans lequel des gens, souvent mal habillés, portent des disquettes d'une machine a l'autre. Le <em>sandalenet</em> est pratiquement toujours un <ref id="definition-LAN" name="LAN">. Les disquettes coûtent moins de 1 Euro, et une solide paire de sandales peut se trouver pour 20 Euros. <p><label id="definition-modem"> Le lien réseau le plus souvent utilisé pour un usage domestique est le '<em>modem</em>' (MODulateur/DEModulateur), il permet de transformer une ligne téléphonique standard en un lien réseau. Il transforme les données envoyées par l'ordinateur en sons et écoute les sons envoyés à l'autre bout de la ligne pour les retransformer en données compréhensibles par l'ordinateur. Comme vous pouvez l'imaginer, ce n'est pas très efficace. En partie parce que les lignes téléphoniques n'ont pas été conçues pour cela. Mais le modem est populaire car les lignes de téléphone sont répandues et abordables: les modems se vendent pour moins de 50 Euros, et les lignes téléphoniques coûtent en général quelques centaines d'Euros par an. <p> <label id="definition-ethernet"> <label id="definition-UTP"> <label id="definition-10base2"> <label id="definition-10baseT"> <label id="definition-100baseT"> <label id="definition-coax"> <label id="definition-gigabit-ethernet"> <label id="definition-terminator"> <label id="definition-hub"> La façon la plus commune de connecter des machines dans un LAN est d'utiliser une liaison Ethernet. Il existe en plusieurs versions (listées du plus vieux au plus récent): Thinwire/Coax/10base2, UTP (Unshielded Twisted Pair)/10baseT et UTP/100baseT. L'Ethernet gigabit (le nom 1000baseT commence a devenir lourd) commence à être déployé aussi. Le fil 10base2 est généralement du câble coaxial noir, avec des connecteurs en T à visser: chacun est connecté à une grande ligne avec un `terminateur' à chaque extrémité. L'UTP est généralement du câble bleu, avec des connecteurs téléphone transparents à clipser dans des prises: chaque câble relie un noeud à un concentrateur (<em>hub</em>) central. Le câble coûte quelques Euros par mètre, et les cartes 10baseT/10base2 (la plupart ont des connecteurs des deux types) sont difficiles à trouver neuf, les cartes 100baseT, qui peuvent aussi communiquer en 10baseT, sont dix fois plus rapide, et coûtent environ 30 Euros. <p><label id="definition-fiber"> A l'autre bout du spectre on trouve la fibre optique; un fin filament de verre continu enrobé dans un revêtement protecteur qui peut être utilisée pour relier des continents. La fibre coûte des milliers d'Euros. <p><label id="definition-network-interface">On appelle habituellement chaque connexion à un noeud une `<em>interface réseau</em>', ou `<em>interface</em>' pour faire plus court. Linux a des noms comme `<tt>eth0</tt>' pour la première interface Ethernet, et `<tt>fddi0</tt>' pour la première interface fibre. La commande `<tt>/sbin/ifconfig</tt>' les liste. <tag>Le protocole: Quelle langue ça parle ?</tag> <label id="definition-protocol"> La dernière chose à prendre en compte est le langage qu'on utilise. Quand deux <ref id="definition-modem" name="modems"> parlent entre eux via une ligne téléphonique, ils ont besoin de s'entendre sur la signification de chaque son, autrement, ils ne se comprendraient pas. Cette convention est appelée un `protocole'. Au fur et à mesure que l'on inventait de nouvelles façon d'encoder les signaux numériques en sons plus courts, on créait de nouveaux protocoles. La plupart des modems essayent plusieurs de ces protocoles avant d'en trouver un que leur collègue à l'autre bout du fil connaît aussi. <p>Un autre exemple est le réseau <ref id="definition-100baseT" name="100baseT"> mentionné ci-dessus: Il utilise les mêmes <ref id="definition-network-link" name="liens réseau"> physiques (<ref id="definition-UTP" name="UTP">) que le <ref id="definition-10baseT" name="10baseT"> précédant, mais communique dix fois plus vite. <label id="definition-link-level-protocol"> <label id="definition-hop"> <p>Ces protocoles sont appelés des protocoles de niveau '<em>lien</em>', c'est à dire qu'ils interviennent dans un voisinage réseau qui ne dépasse pas un '<em>saut</em>' autour de l'ordinateur. Le mot '<em>protocole</em>' peut aussi se référer à d'autres conventions, comme nous le verrons par la suite. </descrip> <sect>Qu'est ce que l'`Internet'?<label id="definition-internet"> <p>L'Internet est un <ref id="definition-WAN" name="WAN"> qui recouvre le globe entier: c'est le plus grand réseau informatique qui existe depuis le commencement des temps. Le terme `<em>internetworking</em>' fait référence à la connexion de réseaux indépendants pour en construire un plus grand, ainsi `<em>Internet</em>' est uniquement un tas de sous-réseaux connectés entre eux. <p>À présent, si on regarde la liste ci-dessus, on peut se demander : Quelle est la taille de l'Internet, quelle langue y parle-t-on, et de quoi est-il fait ? <p>La taille est implicite: il est global. <p>Les détails physiques sont variés: chaque petit sous-réseau est connecté différemment, avec une topologie et une nature différente. Les essais pour le cartographier se sont généralement soldés par de cuisants échecs. <p>Les protocoles utilisés par chaque lien sont très variés : on y trouve tous les <ref id="definition-link-level-protocol" name="protocoles de lien"> dont nous avons parlés ci-dessus et bien plus encore. <sect1>Comment fonctionne l'Internet? <p>La question se pose: comment tous les noeuds d'Internet peuvent ils communiquer s'ils utilisent tous des protocoles de lien différents? <label id="definition-network-protocol"> <p>La réponse est plutôt simple : on a besoin d'un autre protocole qui contrôle comment les choses transitent à travers le réseau. Le protocole de lien décrit comment aller d'un noeud à l'autre s'ils sont connectés directement: le `protocole réseau' nous dit comment aller d'un point à l'autre dans le réseau en passant par plusieurs liens si nécessaire. <label id="definition-internet-protocol"> <label id="definition-IP"> <label id="definition-IPv4"> <label id="definition-IPv6"> <p>Pour l'Internet, le protocole réseau est l'<em>Internet Protocol</em> (version 4), ou `<em>IP</em>'. Ce n'est pas le seul protocole (l'AppleTalk d'Apple , l'IPX de Novell, le DECNet de Digital et le NetBEUI de Microsoft) mais c'est le plus couramment adopté. Il y a une nouvelle version d'IP appelée IPv6, mais elle n'est pas encore très commune. <label id="definition-router"> <p>Donc pour envoyer un message d'une partie du globe à l'autre, votre ordinateur le transcrit en Protocole Internet, l'envoie à votre modem, qui utilise un protocole modem de lien pour l'envoyer au modem auquel il est connecté, qui est probablement relié à un serveur de terminaux (basiquement une grosse boite de modems), qui l'envoie à un noeud à à'intérieur du réseau de votre prestataire, qui l'envoie à un plus gros noeud, qui l'envoie au noeud suivant... et ainsi de suite. Un noeud qui connecte deux réseaux ou plus est appelé un `<em>routeur</em>': il aura une <ref id="definition-network-interface" name="interface"> pour chaque réseau. <label id="definition-protocol-stack"> <p>Nous appelons ce champ de protocoles une `pile de protocole', généralement représentée comme ceci: <tscreen><verb> [ Application: Gère le porn ] [ Couche Application : sers le porn ] | ^ v | [ TCP: Gère la retransmission ] [ TCP: Gère la retransmission ] | ^ v | [ IP: Gère le routage ] [ IP: Gère le routage ] | ^ v | [ Lien: Gère un seul saut ] [ Link: Gère un seul saut ] | | +---------------------------------------+ </verb></tscreen> <label id="definition-transmission-control-protocol"> <label id="definition-TCP"> Ainsi, dans le diagramme, on voit Netscape (l'application en haut à gauche) qui télécharge une page Web d'un serveur Web (l'application en haut à droite). Pour faire cela, il va utiliser le `<em>Transmission Control Protocol</em>' ou `<em>TCP</em>': plus de 90% du trafic Internet de nos jours est du TCP, comme pour les Emails et le Web. <p>Netscape envoie donc une requête pour une connexion TCP au serveur Web distant: tout cela est géré par la couche TCP, qui ensuite le transmet à la couche IP, qui trouve où le paquet doit aller, et l'envoie à la couche lien appropriée, qui le transmet à l'autre bout du lien. <p>Une fois le paquet arrivé, la couche lien l'envoie à la couche IP, qui voit qu'il est destiné à cet hôte (si ce n'est pas le cas, il sera redirigé vers une couche lien différente pour aller au noeud suivant), le transmet à la couche TCP, qui l'envoie au serveur. <p>On a alors la situation suivante: <enum> <item> L'application (Netscape, ou le serveur Web à l'autre bout) décide à qui il veut parler et ce qu'il veut envoyer. <label id="definition-packets"> <item> La couche TCP envoie des paquets spéciaux pour engager la conversation avec l'autre bout, ensuite il encapsule les données dans un `<em>paquet</em>' TCP: le paquet est juste un terme pour désigner un bloc de données qui passe à travers un réseau. La couche TCP dirige ce paquet vers <label id="definition-retransmission"> la couche IP: elle continue à l'envoyer à la couche IP jusqu'à ce que la couche TCP à l'autre bout réponde qu'elle l'a reçu. On appelle cela, la `<em>retransmission</em>', celle-ci est basée sur des règles complexes qui contrôlent l'instant de retransmission, les temps d'attentes, etc. Elle numérote aussi chaque paquet, ce qui permet à l'autre bout de réordonner les paquets. <label id="definition-routing"> <item> La couche IP regarde la destination du paquet, et en déduit à quel noeud suivant envoyer le paquet. On appelle cela le `<em>routage</em>', et cela va du plus simple (si vous avez un modem et pas de cartes réseau, tout les paquets sortent par le modem) au plus complexe (si vous avez 15 grands réseaux directement connectés à votre machine). </enum> <sect>Cette chose IP <label id="definition-route"> <label id="definition-ip-address"> <p>Donc le rôle de la couche IP est de décider comment `router' les paquets vers leur destination finale. Pour rendre cela possible, chaque interface sur le réseau a besoin d'une `adresse IP'. Une adresse IP est constituée de quatre nombres séparés par des points, comme `167.216.245.249'. Chaque nombre est compris entre zéro et 255. <p>Les interfaces sur le même réseau tendent à avoir des adresses IP voisines. Par exemple, `167.216.245.250' est situé près de la machine qui a l'adresse `167.216.245.249'. Souviens-toi aussi qu'un routeur est un noeud avec des interfaces sur plus d'un réseau, donc le routeur aura une adresse IP différente pour chaque interface. <label id="definition-default-route"> <p>De plus, la couche IP du noyau Linux garde une table des différentes `routes', qui décrit comment accéder aux différents groupes d'adresses IP. La plus simple de ces routes est appelée la route par défaut (`<em>default route</em>'): si la couche IP ne sait pas trop, c'est par là qu'elle enverra le paquet. On peut voir une liste des routes en utilisant la commande `/sbin/route'. <p>Les routes peuvent pointer soit vers un lien, soit vers un noeud particulier qui est connecté à un autre réseau. Par exemple, quand vous appelez votre prestataire, votre route par défaut pointera vers le lien modem, parce que c'est par là que vous pouvez joindre le monde entier. <tscreen><verb> Modem de Modem du ~~~~~~~~ Rusty prestataire { } o------------------o { Le Net } { } ~~~~~~~~ </verb></tscreen> Mais si votre machine est connectée en permanence à Internet, c'est un peu plus compliqué. Dans le diagramme ci-dessous ma machine peut parler directement aux machines de Tridge et de Paul, et au pare-feu, mais elle a besoin de savoir que les paquets qui sont destinés au reste du monde doivent passer par le pare-feu, qui les enverra plus loin. Cela veut dire que vous avez besoin de deux routes: une qui dit `si c'est sur mon réseau, envoie-les directement' et une route par défaut qui dit `sinon, envoie-les au pare-feu'. <tscreen><verb> o Machine de | Tridge ~~~~~~~~ Machine de | { } Rusty o--------+-----------------o--{ Le Net } | Pare-feu { } | ~~~~~~~~ o Machine de Paul </verb></tscreen> <sect1>Les Groupes d'Adresses IP: Les Masques Réseaux <p><label id="definition-network-address"> Il y a un dernier détail : Il existe une notation standard pour les groupes d'adresses IP, parfois appelée une `adresse réseau'. Exactement comme un numéro de téléphone qui peut être divisé en un préfixe et le reste, on peut diviser les adresses IP en un préfixe réseau et le reste. <p>Il est habituel d'entendre parler du `réseau 1.2.3', ce qui fait en fait référence aux 256 adresses de 1.2.3.0 à 1.2.3.255. Ou, si ce n'est pas suffisant, du `réseau 1.2' qui veut dire : toutes les adresses IP de 1.2.0.0 à 1.2.255.255. <label id="definition-network-mask"> <label id="definition-netmask"> <p>Habituellement on n'écrit pas `1.2.0.0 - 1.2.255.255'. On le raccourcie en `1.2.0.0/16'. Ce `/16' (masque réseau ou <em>netmask</em>) requiert quelques explications. <p>Les nombres entre les points dans une adresse IP sont en réalité 8 chiffres binaires (de 00000000 à 11111111). On les écrit sous forme décimale pour qu'ils soient plus lisibles. Le `/16' veut dire que les 16 premiers chiffres binaires sont l'adresse du réseau. En d'autres termes, la partie `1.2.' est l'adresse du réseau (rappellez-vous : chaque chiffre décimal représente 8 chiffres binaires). Ce qui veut dire que chaque adresse IP commençant par `1.2.' fait partie du réseau: `1.2.3.4' et `1.2.3.50' en font partie, mais pas `1.3.1.1'. <p>Pour rendre la vie plus facile, on utilise en général des réseaux se terminant par `/8', `/16' et `/24'. Par exemple `10.0.0.0/8' est un gros réseau contenant les adresses de 10.0.0.0 à 10.255.255.255 ( plus de 16 millions d'adresses!). 10.0.0.0/16 est plus petit, contenant seulement les adresses de 10.0.0.0 à 10.0.255.255. 10.0.0.0/24 est encore plus petit, contenant les adresses de 10.0.0.0 à 10.0.0.255. <p>Pour rendre les choses encore plus confuses, il y a une autre manière d'écrire les masques réseaux. On peut les écrire comme les adresses IP : <tscreen><verb> 10.0.0.0/255.0.0.0 </verb></tscreen> <label id="definition-broadcast-address"> <p>Enfin, l'adresse IP la plus haute dans le réseau est réservée comme une `adresse de diffusion' ('<em>broadcast address</em>'), qui peut être utilisée pour envoyer un message à tout le monde dans le réseau en une fois. <p>Voici une table des masques réseaux: <tscreen><verb> Forme Forme #Max de Commentaire Courte Complète Machines /8 /255.0.0.0 16,777,215 Appelé `un réseau de classe A' /16 /255.255.0.0 65,535 Appelé `un réseau de classe B' /17 /255.255.128.0 32,767 /18 /255.255.192.0 16,383 /19 /255.255.224.0 8,191 /20 /255.255.240.0 4,095 /21 /255.255.248.0 2,047 /22 /255.255.252.0 1,023 /23 /255.255.254.0 511 /24 /255.255.255.0 255 Appelé `un réseau de classe C' /25 /255.255.255.128 127 /26 /255.255.255.192 63 /27 /255.255.255.224 31 /28 /255.255.255.240 15 /29 /255.255.255.248 7 /30 /255.255.255.252 3 </verb></tscreen> <sect>Noms de Machines et Adresses IP <p>Ainsi, chaque interface sur chaque noeud a une adresse IP. On réalisa assez rapidement que les humains n'avaient pas la mémoire des nombres, il a donc été décidé (exactement comme pour les numéros de téléphone) d'avoir un répertoire de noms. Mais comme on utilise des ordinateurs de toutes façons, il est plus pratique que ce soit l'ordinateur qui convertisse automatiquement les noms pour nous. <label id="definition-DNS"> <p>De là est né le Système des Noms de Domaines (DNS). Il y a des noeuds qui ont des adresses IP connues de tous auxquels les programmes peuvent demander la conversion des noms en adresses IP. A peu près tous les programmes que vous allez utiliser sont capables de faire cela, c'est pour cela que vous pouvez taper `www.linuxcare.com' dans Netscape au lieu de `167.216.245.249'. <label id="definition-name-server"> <p>De fait, vous avez besoin de l'adresse IP d'au moins un de ces `serveurs de noms': habituellement ils sont rassemblés dans le fichier `/etc/resolv.conf'. <label id="definition-UDP"> <label id="definition-user-datagram-protocol"> <p>Comme les requêtes et les réponses DNS sont plutôt petites (1 paquet chacune), le protocole TCP n'est pas vraiment utilisé : il permet d'assurer les retransmissions automatiques, le réordonnancement des paquets et la tolérances aux pertes de paquets, mais avec un surcoût sur le nombre de paquets envoyés. À la place, on utilise le `User Datagram Protocol' (UDP) qui est plus simple car il n'offre pas les garanties de TCP dont nous n'avons pas l'utilité ici. <sect>Différents Services: Email, Web, FTP, Serveur de Noms <p>Dans l'exemple précédent, nous avons vu comment Netscape envoie une requête TCP à un serveur Web tournant sur un autre noeud. Mais imaginez que le noeud qui fait tourner un serveur Web dispose aussi d'un serveur de courrier électronique, d'un serveur FTP et d'un serveur de noms: comment savoir à quel serveur est destinée la connexion TCP? <label id="definition-port"> <label id="definition-destination-port"> <p>C'est pour ça que le TCP et l'UDP possèdent le concept de `ports'. Chaque paquet contient un espace mémoire où il stocke son '<em>port de destination</em>', qui dit à quel service le paquet est adressé. Par exemple, le port TCP 25 est le serveur mail, et le port TCP 80 le serveur Web (bien qu'on puisse parfois trouver des serveurs Web sur des ports différents). Une liste de ports peut être trouvée dans `/etc/services'. <p>De même, lorsque deux fenêtres Netscape accèdent chacune à une partie différente d'un même site Web, comment fait la machine Linux pour distinguer quels paquets TCP sont destinés à un Netscape plutôt qu'à l'autre ? <label id="definition-source-port"> <p>C'est ici que le `port source' entre en jeu: chaque nouvelle connexion TCP reçoit un port source différent, pour que chacune puisse être différenciée, même si elles sont dirigées vers la même adresse IP et le même port de destination. Habituellement le premier port source donné sera le port 1024 et sera incrémenté au fur et à mesure des connexions. <sect>Interface de connexion: PPP <p> <label id="definition-PPP"> <label id="definition-point-to-point-protocol"> <label id="definition-ppp-daemon"> Quand vous composez le numéro de votre prestataire sur votre modem et que vous vous connectez au modem de votre prestataire, le noyau ne fait pas que lui envoyer des paquets IP. Il y a un protocole appelé `Protocole Point-à-Point' ou `PPP', qui est utilisé pour négocier avec l'autre bout avant qu'un paquet de données ne soit envoyé. Ce protocole est utilisé par le prestataire pour identifier l'appelant : sur votre machine Linux, un programme appelé le `démon PPP' gère votre partie de la négociation. <label id="definition-dynamic-ip-address"> <label id="definition-static-ip-address"> <p>Parce qu'il y a beaucoup d'utilisateurs de modems dans le monde, ils n'ont en général pas leur propre adresse IP : la plupart des prestataire vous en assigneront une quand vous les appellerez (le démon PPP l'obtiendra pendant la négociation). On appelle souvent cela une `<em>adresse IP dynamique</em>', à l'inverse d'une `adresse IP statique' qui sont des adresses permanentes. Habituellement une adresse IP statique est assignée à chaque modem du prestataire; à chaque appel, vous vous connectez à un modem différent du pool de modems, et vous recevez donc une adresse IP différente. <sect>A quoi ressemblent les paquets <label id="definition-packet-sniffer"> <p>Pour les gens exceptionnellement curieux (et curieusement exceptionnels), voici une description de ce à quoi les paquets ressemblent. Il y a plusieurs outils pour regarder ces paquets entrer et sortir de votre machine Linux. Le plus commun est `<em>tcpdump</em>' (qui comprend plus que le protocole TCP de nos jours), mais il en existe un plus joli: `ethereal'. De tels programmes sont appelés des `renifleurs de paquets'. <label id="definition-packet-header"> <label id="definition-packet-body"> <p>Le début de chaque paquet indique où il va, d'où il vient, le type du paquet, et d'autres détails administratifs. Cette partie est appelée l'`en-tête' du paquet. Le reste du paquet qui contient les données à transmettre, est appelée le `corps' du paquet. <label id="definition-IP-header"> <p>Ainsi, tout paquet IP commence par un `en-tête IP' longue d'au moins 20 octets. Cela ressemble à ça (le diagramme a été honteusement copié à partir de la RFC 791): <tscreen><verb> 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Version| IHL |Type de Service| Longueur Totale | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Identification |Flags| Fragment Offset | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Temps de vie | Protocole | Header Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Adresse de la Source | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Adresse de la Destination | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Options | Remplissage | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ </verb></tscreen> Les champs importants sont le protocole, qui indique si c'est un paquet TCP (numéro 6), un paquet UDP (numéro 17) ou autre, l'adresse IP source, et l'adresse IP de destination. <label id="definition-TCP-header"> <p>Maintenant, si le champ protocole indique que c'est un paquet TCP, alors un en-tête TCP suivra immédiatement cet en-tête IP. L'en-tête TCP est aussi long de 20 octets au moins: <tscreen><verb> 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Port Source | Port Destination | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Numéro de Séquence | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Numéro d'Acquittement | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Data | |U|A|P|R|S|F| | | Offset| Réservé |R|C|S|S|Y|I| Fenêtre | | | |G|K|H|T|N|N| | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Checksum | Pointeur Urgent | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Options | Remplissage | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Données | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ </verb></tscreen> Les champs les plus importants sont ici le port source, et destination, qui disent à quel service le paquet est destiné (d'où il vient, dans le cas de paquets de réponses). Les numéros de séquence et d'acquittement sont utilisés pour garder les paquets dans l'ordre, et pour dire à l'autre bout quels paquets ont été reçus. Les labels ACK, SYN, RST et FIN sont des bits utilisés pour négocier l'ouverture (SYN), l'acquittement (ACK) et la fermeture (RST ou FIN) des connexions. <p>À la suite de cet en-tête vient le message réel que l'application a envoyé (le corps du paquet). La taille d'un paquet IP normal est au maximum de 1500 octets. Ce qui veut dire que la place maximum réservée aux données est 1460 octets (20 octets pour l'en-tête IP, et 20 autres pour l'en-tête TCP). Soit, plus de 97%. <sect>Résumé <p>Ainsi, l'Internet moderne utilise des paquets IP pour communiquer, et la plupart de ces paquets IP encapsulent des paquets TCP. Des noeuds spéciaux appelés `routeurs' connectent tout les petits réseaux entre eux, formant ainsi de plus grands réseaux, et passent les paquets vers leur destination. La plupart des machines normales sont seulement attachées à un seul réseau (c'est-à-dire possèdent une seule interface), et ne sont donc pas des routeurs. <p>Chaque interface a une adresse IP unique, qui ressemble à `1.2.3.4': les interfaces d'un même réseau ont des adresses IP voisines, avec le même préfixe, comme pour les numéros de téléphone d'une même zone. Les adresses réseaux ressemblent aux adresses IP, avec un `/' pour dire combien de chiffres binaires font partie du préfixe, par exemple `1.2.0.0/16', veut dire que les deux premiers chiffres décimaux (ou les 16 premiers chiffres binaires) sont l'adresse réseau. <p>Les machines disposent de noms par le Service de Noms de Domaines: les programmes demandent aux serveurs de noms de leur donner l'adresse IP, étant donnée un nom comme `www.linuxcare.com'. Cette adresse IP est ensuite utilisée comme l'adresse IP destination pour parler à ce nom. <p>Rusty est vraiment mauvais pour écrire de la documentation, et spécialement lorsqu'il s'adresse à des débutants. <p>Profitez-en! <p>Rusty. <sect>Remerciements <p>Remerciements à Alison pour avoir lu le premier brouillon, et m'avoir dit quel bordel c'était, de la façon la plus gentille possible. <sect>Index <p> <itemize> <item> <ref id="definition-100baseT" name="100baseT"> <item> <ref id="definition-10base2" name="10base2"> <item> <ref id="definition-10baseT" name="10baseT"> <item> <ref id="definition-broadcast-address" name="Adresse de diffusion"> <item> <ref id="definition-coax" name="Coax, Cable coaxial"> <item> <ref id="definition-computer-network" name="Réseau d'ordinateurs"> <item> <ref id="definition-default-route" name="Route par défaut"> <item> <ref id="definition-destination-port" name="Port de destination"> <item> <ref id="definition-DNS" name="DNS, Service de Noms de Domaines"> <item> <ref id="definition-dynamic-ip-address" name="Adresse IP Dynamique"> <item> <ref id="definition-ethernet" name="Ethernet"> <item> <ref id="definition-fiber" name="Fibre"> <item> <ref id="definition-gigabit-ethernet" name="Ethernet Gigabit"> <item> <ref id="definition-hop" name="Hop"> <item> <ref id="definition-hub" name="Hub"> <item> <ref id="definition-internet" name="Internet"> <item> <ref id="definition-IP" name="IP, Protocole Internet"> <item> <ref id="definition-ip-address" name="Adresse IP"> <item> <ref id="definition-IP-header" name="En-tête IP"> <item> <ref id="definition-IPv4" name="IPv4, IP version 4"> <item> <ref id="definition-IPv6" name="IPv6, IP version 6"> <item> <ref id="definition-LAN" name="LAN, Local Area Network"> <item> <ref id="definition-link-level-protocol" name="Protocole de niveau lien"> <item> <ref id="definition-modem" name="Modem"> <item> <ref id="definition-name-server" name="Serveur de noms"> <item> <ref id="definition-netmask" name="Masque réseau"> <item> <ref id="definition-network-address" name="Adresse Réseau, masque réseau"> <item> <ref id="definition-network-interface" name="Interface réseau, interface"> <item> <ref id="definition-network-link" name="Lien réseau"> <item> <ref id="definition-network-protocol" name="Protocole réseau, protocole"> <item> <ref id="definition-node" name="Noeud"> <item> <ref id="definition-packet-body" name="Corps du paquet"> <item> <ref id="definition-packet-header" name="En-tête du paquet"> <item> <ref id="definition-packet-sniffer" name="Sniffeur de paquets"> <item> <ref id="definition-packets" name="Paquet"> <item> <ref id="definition-port" name="Port, Port TCP, Port UDP"> <item> <ref id="definition-PPP" name="PPP, Protocole Point-à-Point"> <item> <ref id="definition-ppp-daemon" name="Démon PPP"> <item> <ref id="definition-protocol-stack" name="Pile de protocole"> <item> <ref id="definition-retransmission" name="Retransmission"> <item> <ref id="definition-route" name="Route"> <item> <ref id="definition-router" name="Routeur"> <item> <ref id="definition-routing" name="Routage"> <item> <ref id="definition-sneakernet" name="Réseau sandalettes"> <item> <ref id="definition-source-port" name="Port source"> <item> <ref id="definition-star-topology" name="Topologie étoile"> <item> <ref id="definition-static-ip-address" name="Adresse IP statique"> <item> <ref id="definition-sub-network" name="Sous-réseau"> <item> <ref id="definition-TCP" name="TCP, Transmission Control Protocol"> <item> <ref id="definition-TCP-header" name="En-tête TCP"> <item> <ref id="definition-terminator" name="Terminateur"> <item> <ref id="definition-topology" name="Topology, Topologie"> <item> <ref id="definition-UDP" name="UDP, User Datagram Protocol"> <item> <ref id="definition-UTP" name="UTP, Pair torsadée non-blindée"> <item> <ref id="definition-WAN" name="WAN, Wide Area Network"> </itemize> </article>