2015 04 25 Tp3-Ip
2015 04 25 Tp3-Ip
2015 04 25 Tp3-Ip
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software
Foundation; with no Invariant Sections, with no FrontCover Texts, and with no BackCover.
You can obtain a copy of the GNU General Public License : write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 021111307 USA
Permission est accordée de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version
ultérieure publiée par la Free Software Foundation ; sans Sections Invariables ; sans Texte de Première de Couverture, et sans Texte de Quatrième de Couverture.
Vous pouvez obtenir une copie de la GNU General Public License : écrire à la Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 021111307 USA
Le paquet IP
Le format unique du paquet IP, ou datagramme IP, est organisé en champs de 32 bits :
0 7 8 15 16 23 24 31
• Le champ "Version" (4 bits) identifie la version du protocole IP. Elle est fixée actuellement à 4.
• Un champ "Internet Header Length" (4 bits) spécifie la longueur de l’entête en mots de 32 bits. Cette longueur IHL
varie de 5 à 15, 5 étant la longueur normale lorsqu'aucune option n'est utilisée.
• Le champ "Type de service" TOS (8 bits) définit la priorité du paquet et le type de routage souhaité. Cela permet à un
logiciel de réclamer différents types de performance pour un datagramme : délai court, haut débit, haute fiabilité ou
bas prix.
• Le champ "Total Length" (16 bits) définit le nombre d'octets contenus dans le paquet y compris l'entête IP. Puisque ce
champ est codé sur 16 bits, la taille max. d'un paquet IP est de 65535 octets (64 KO).
• Le champ "Identification" (16 bits) contient une valeur entière utilisée pour identifier les fragments d'un datagramme.
Ce champ doit être unique pour chaque nouveau datagramme.
• "Flags" (3 bits) est utilisé pour contrôler la fragmentation des paquets. Le bit de poids faible à zéro indique le dernier
fragment d'un datagramme et est baptisé "More Flag" ou MF bit. Le bit du milieu est appelé "Do not Fragment flag"
ou DF bit. Le bit de poids fort n'est pas utilisé.
• "Fragment Offset" (13 bits) sert à indiquer la position qu'occupait les données de ce fragment dans le message original.
• Le TTL ou "Time To Live" (8 bits) est l'expression en secondes de la durée maximale de séjour du paquet dans un
réseau. Il existe 2 manières de faire baisser cette valeur : lors du réassemblage du paquet dans un routeur, sa valeur est
décrémentée chaque seconde ou alors chaque routeur qui traite ce paquet décrémente le TTL d'une unité (compteur de
routeurs). Si le TTL devient nul, son paquet IP n'est plus relayé : c'est souvent l'indication d'une erreur de paquet qui
boucle. Une utilisation détournée de ce champ permet de tracer la route empruntée par un paquet. En mettant le champ
TTL à 0, le premier routeur rencontré rejette le paquet et signale sa présence en retournant un paquet ICMP d'erreur
vers l'émetteur. On renvoie alors le paquet avec le champ TTL à 1 afin d'atteindre le routeur suivant et ainsi de suite. A
chaque fois, on récupère l'adresse IP du routeur.
• Le champ "Protocole" (8 bits) identifie la couche de transport propre à ce datagramme : 17 pour UDP, 6 pour TCP, 1
pour ICMP, 8 pour EGP, 89 pour OSPF , ... (voir /etc/protocols)
• Le "Header checksum" ou champ de contrôle de l'entête (16 bits) contient le "complément à un" du total "en
complément à un" de tous les mots de 16 bits de l'entête.
• Les adresses IP source et destination sont codées sur 32 bits
• A la rubrique "Options", sont stockées des demandes spéciales pour requérir un routage particulier pour certains
paquets. + le champ "padding" (bourrage) est habituellement rempli de 0 de manière à aligner le début des données sur
un multiple de 32 bits.
Le protocole ICMP (Internet Control Message Protocol RFC 792) utilise les datagrammes IP pour transporter
ses messages.
IP header IP Data
ICMP
Type Code ...
• le contrôle de flux : le récepteur débordé par un émetteur trop rapide, envoie un message ICMP Source
Quench pour arrêter temporairement l’émission
• la détection de destinations inaccessibles dénoncée par un message Destination Unreachable
• la redirection de routes pour avertir une machine hôte d’utiliser un autre gateway.
ICMP fournit d'intéressantes données pour le diagnostic d'opérations du réseau. ICMP utilise des datagrammes
IP pour véhiculer des messages allerretour entre noeuds concernés. Un message d'erreur ICMP est généré par
une machine hôte réalisant qu'il y a un problème de transmission et renvoyé à l'adresse de départ du
datagramme ayant provoqué le problème.
• reçoit, si la machine distante est active (alive), un paquet ICMP "réponse d'écho" (type=0 et
code=0).
0 8 16 24 31
type code checksum
L'entête d'un paquet ICMP a une longueur de 8 octets dont les champs sont les suivants :
• Le champ type sur 1 octet, définis par les RFC 792 et 1256, dont les valeurs indiquant le type de message sont :
0 Réponse d'écho
3 Destination inaccessible
4 Source Quench
5 Redirection
8 Echo request
9 Annonce de routeur
10 Sollicitation de routeur
11 TTL expiré
12 Problème de paramètre
13 Requête Horodatage
14 Réponse d'horodatage
15 Demande d'information
16 Réponse d'information
17 Requête de masque d'adresse
18 Réponse de masque d'adresse
• Le champ somme de contrôle (chechsum) sur 2 octets permet de valider les données
• Le champ donnée complémentaire sur 4 octets est divisé en deux champs de 16 bits contenant :
Les données du paquet ICMP contient d'abord l'entête du paquet IP à l'origine du message (de 20 à 60 octets) puis des
données quelconques.
3
Quand le "type" est par exemple 3 pour destination inaccessible, le "code" précise si c'est le réseau, l'hôte, le protocole ou le port qui
sont inaccessibles :
0 Network unreachable
1 Host unreachable
2 Protocol unreachable
3 Port unreachable
4 Fragmentation needed and do not fragment bit set
5 Source route failed
7 Destination Host unknown
11 Network unreachable for type of service
12 Host unreachable for type of service
13 Communication administratively prohibited
14 Host precedence violation
15 Precedence cutoff in effect
4
Un datagramme Source Quench est identique à celui du type Destination Unreachable. Il sert à contrôler un flux d'informations. Si un
routeur détecte que son réseau ou son processeur ne peut suivre le débit d'une machine hôte émettrice, il envoie à celle ci un message
ICMP incluant la cause du dépassement de capacité.
0 Redirect datagram to go to that network 1 Redirect datagram to reach that host
2 Redirect datagram for that network with that TOS 3 Redirect datagram for that host with that TOS
5
Le datagramme Route change request est utilisé par les routeurs qui connaissent une meilleure route pour atteindre une destination
particulière.
910
Le Router discovery protocol permet à un système d'être averti dynamiquement de la présence de tous les routeurs disponibles
immédiatement sur un réseau LAN. Les messages de type 9, router advertisement, permettent à des routeurs de s'annoncer sur un
réseau à intervalles de 7 à 10 minutes suite à un message de type 10, router sollicitation, émis par une machine hôte.
11
Le message Time exceeded for datagram utilise un datagramme identique à celui du type Destination Unreachable. Un routeur l'utilise
pour signaler à la machine source que la valeur TTL (Time To Live) d'une entête IP a été décrémentée jusqu'à la valeur d'expiration 0,
ce qui revient à dire que le paquet a été écarté probablement à cause d'une boucle infinie dans le routage.
12
Le message ICMP Parameter Problem indique qu'un argument invalide a été utilisé dans le champ Options d'une entête IP.
1314
Le type ICMP 13 pour Time Stamp Request et 14 pour Time Stamp Reply sont utilisés pour interroger l'horloge d'un système distant
afin de s'y synchroniser ou récolter des informations statistiques.
1516
Les messages Information Request est envoyé pour obtenir l'adresse réseau d'une machine hôte donnée. C'est la méthode utilisée par le
protocole SLIP (Serial Line IP) pour allouer une adresse IP à la machine appelante.
1718
Les messages Address Mask Request sont utilisés parallèlement à l'adressage en sous réseau pour découvrir le masque de sousréseau
d'une machine hôte.
La fragmentation
Sur toute machine ou passerelle mettant en oeuvre TCP/IP, une unité maximale de transfert MTU (Maximum
Transfer Unit) définit la taille maximale d'un datagramme transporté sur le réseau physique correspondant.
Si on prend comme exemple un réseau Ethernet, on aura un MTU par défaut de 1500 octets, ce qui correspond
à la longueur maximale du champ DATA d'une trame Ethernet (le minimum étant de 46 octets). On peut
modifier la valeur du MTU pour une interface eth0 avec la commande ifconfig.
Ce n'est pas le rôle de la couche Liaison du modèle OSI (ou Interface pour le modèle DoD) de réaliser la
fragmentation, mais c'est elle qui fixe la valeur du MTU puisqu'elle a en charge le transport des trames sur le
support physique.
Lorsque la taille du datagramme initial est plus grand que la valeur du MTU, la machine ou la passerelle le
fragmente en un certain nombre de fragments transportés par autant de trames sur le support physique. Le
destinataire final reconstitue le datagramme initial à partir de l'ensemble des fragments reçus. On rappelle que
les datagrammes peuvent emprunter des chemins différents pour atteindre une machine destinatrice.
Remarques:
La taille de ces fragments correspond au plus petit MTU emprunté sur le réseau.
Si un seul des fragments est perdu, le datagramme initial est considéré comme perdu.
• FRAGMENT OFFSET : valeur sur 13 bits indiquant le déplcement des données contenues dans le
fragment par rapport au datagramme initial. Cette valeur est toujours un multiple de 8 octets, la taille du
fragment est donc aussi un multiple de 8 octets.
• DF : Don't Fragment
• MF : More Fragments, MF = 1 il y a d'autres fragments
MF = 0 dernier fragment
Chaque fragment a donc une structure identique à celle du datagramme initial, seul les champs FLAGS et
FRAGMENT OFFSET sont spécifiques à chaque fragment.
POSTE POSTE
___.___.___.___ ___.___.___.___
1 . Relever la valeur par défaut affectée au paramètre MTU (Maximum Transfer Unit) pour l'interface eth0. La
repérer sur le schéma de la trame Ethernet_II. Expliquer le rôle de ce paramètre.
Valeur MTU:
Entête Ethernet_II
@ MAC DEST @ MAC SRC TYPE DATA
Rôle:
2 . Modifier la valeur du paramètre MTU (Maximum Transfer Unit) pour l'interface eth0 à 100. Donner la
commande exacte.
3 . On va maintenant envoyer des paquets ICMP avec 300 octets de données : # ping __.__.__.__ -s 300
Estce qu'un paquet ICMP de cette taille peutil être envoyé dans une seule trame Ethernet de MTU 100 ?
4 . Lancer une capture avec tcpdump (ou ethereal) en isolant le transfert généré par le ping précédent.
Combien de trames Ethernet sont émises ?
Exemple de commande tcpdump: tcpdump -e -vvv ether src 00:0C:6E:32:42:3E
Bilan
5 . Expliquer l'influence de la valeur du MTU sur un transfert de 100 MO. Vous pouvez faire le test avec un
fichier.
6 . Quel peut être l'interêt d'un provider Internet de diminuer la valeur du MTU de ces routeurs ?
1 . Emettre 2 paquets avec 272 octets de données. Expliquer la valeur (300) qui est affichée et donc d'où
proviennet ces 28 octets ?
Exemple : PING www.l.google.com (209.85.229.103) 272(300) bytes of data.
3 . Indiquer les différentes longueurs du paquets ICMP et des différents fragments sur le schéma cidessous.
Entête
DATA ICMP
ICMP
4 . Un des fragments, encapsulé par IP, est émis dans une trame Ethernet. Indiquer les différentes longueurs sur
le schéma cidessous.
DATA Ethernet
Entête Entête
Ethernet IP
Remarque : on peut découvrir son MTU « idéal » à partir de cette méthode en demandant que les paquets ne
soient pas fragmentés (M do). Voir aussi la commande tracepath.
7 . En vous aidant de la capture réalisée avec ethereal, compléter le schéma cidessous en précisant : le numéro
de trame, la longueur du fragment et le décodage de l'entête IP. On analysera l'envoi du paquet ICMP.
8 . Indiquer dans quel ordre les datagrammes seront réassemblées par la machine distante. Répondre en
donnant le numéro des trames contenant les datagrammes correspondants.
Bilan
9 . Estce que l'ordre de réception des datagrammes a une importance pour la reconstitution du datagramme
initial ?
10 . Quels sont les champs d'un datagramme qui permettent de réassembler le datagramme initial ?
Remarque:
Remettre un MTU de 1500 à l'interface eth0 à la fin de cette séquence.
NOM
ping, ping6 envoyer des datagrammes ICMP ECHO REQUEST à des hôtes sur un réseau
SYNOPSIS
ping [ LRUbdfnqrvVaA] [ c nombre] [ i intervalle] [ l préchargement] [ p motif] [ s taillepaquet] [ t ttl] [ w heurelimite] [ F
étiquetteflux] [ I interface] [ M conseil] [ Q tos] [ S tamponémission] [ T optionhorodate] [ saut ...] destination
DESCRIPTION
ping utilise le datagramme obligatoire ECHO REQUEST du protocole ICMP pour requérir une réponse ICMP ECHO RESPONSE
d'un hôte ou d'une passerelle. Les datagrammes ECHO REQUEST (« pings ») comportent les entêtes IP et ICMP, suivis d'une «
struct timeval » et d'un nombre arbitraire d'octets de bourrage utilisés pour remplir le paquet.
OPTIONS
...
t ttl Spécifier le champ IP Time to Live.
...
La spécification TCP/IP précise que le champ TTL destiné aux « paquets » TCP devrait être fixé à 60, mais beaucoup de systèmes
utilisent des valeurs plus petites (BSD 4.3 utilise 30, la version 4.2 utilisait 15).
La valeur maximale pour ce champ est de 255, et la plupart des systèmes Unix fixent le champ TTL des paquets ICMP ECHO
REQUEST à 255. C'est pourquoi vous pouvez « pinger » certains hôtes, mais pas les atteindre via telnet(1) ou ftp(1).
Normalement, ping affiche la valeur TTL du paquet qu'il reçoit. Quand un système distant reçoit un paquet ping, il peut faire 3 choses
avec le champ TTL dans sa réponse :
∙ Le fixer à 255 ; [...] Dans ce cas, la valeur TTL du paquet reçu sera de 255 moins
le nombre de routeurs traversés sur le chemin venant du système dis
tant vers l'hôte effectuant le ping.
Si le TTL devient nul, son paquet IP n'est plus relayé (c'est souvent l'indication d'une erreur de paquet qui
boucle). Une utilisation détournée de ce champ permet de tracer la route empruntée par un paquet (commande
traceroute sous Unix/Linux et tracert sous Window$) :
en mettant le champ TTL à 0, le premier routeur rencontré rejette le paquet et signale sa présence
en retournant un paquet ICMP d'erreur vers l'émetteur.
on renvoie alors le paquet avec le champ TTL à 1 afin d'atteindre le routeur suivant et ainsi de suite.
A chaque fois, on récupère l'adresse IP du routeur.
1 . A partir du résultat de la commande ping __.__.__.__ et de la valeur TTL reçu, en déduire le nombre de
routeurs traversés.
2 . Vérifier le nombre de routeurs traversés avec la commande traceroute -nI __.__.__.__ (faire un man
traceroute pour justifier les options utilisés ici).
Remarques :
• Le préambule, composé d'une succession de 1 et de 0, assure la synchronisation du
récepteur sur la trame émise.
• Le délimiteur de trame 10101011 permet de trouver le début du champ d'adresses (les 2
derniers bits émis sont à 1).
On a tendance à considérer que le préambule fait 8 octets et qu'il ne fait pas partie de la trame : il n'est
pas capturé par les analyseurs réseaux et on n'en tient logiquement pas compte dans le calcul du CRC.
Type Protocole
0x0800 IP
0x0806 ARP
0x809B AppleTalk
0x8137 IPX
0x8191 NetBeui
0x0805 X25
Si aucun argument n'est donné, ifconfig affiche simplement l'état des interfaces actuellement définies.
Si seul le paramètre interface est donné, il affiche seulement l'état de l'interface correspondante; si
seul le paramètre a est fourni, il affiche l'état de toutes les interfaces, même celles qui ne sont pas
actives.
ifconfig [interface]
ifconfig interface [aftype] options | adresse ...
Quelques options :
• interface : le nom de l'interface réseau. C'est généralement un nom de pilote suivi d'un
numéro d'ordre comme eth0 pour la première interface Ethernet.
• up : cette option active l'interface. Elle est implicitement spécifiée si une nouvelle
adresse est affectée à l'interface.
• []arp : valide ou invalide l'utilisation du protocole ARP sur cette interface. Si le signe
moins est présent, l'option est invalidée.
• []promisc : valide ou invalide le mode promiscuous, toutes les trames seront reçues
sur cette interface.
Faire un man ifconfig pour obtenir plus d'informations sur la commande ifconfig.
Remarque : Sous Windows, le réglage du paramètre MTU, par exemple, est réalisé souvent
directement dans la base de registre (regedit.exe). Il faut rechercher « MTU » ou l'adresse IP ou encore
Tcpip. Sous windows98, le paramètre est nommé MaxMTU (valeur chaîne) et sous Win2K/XP il se
nomme MTU (DWORD) dans ...\Services\Tcpip\Parameters\Interfaces\nom_interface.