Tcpip 1
Tcpip 1
Support de cours
Protocoles TCP/IP
Réalisé par :
Jamel Eddine SAIDI : Technologue
Youssef BEN BRAHEM : Technologue
Département Technologies de l’Informatique
AU : 2015/2016
Fiche descriptive de la matière
Nombre Heures/Semestre : 21 h
Coefficient : 1.5
Objectifs du cours :
- Comprendre les étapes d’encapsulation dans l’architecture TCP/IP.
- Saisir l’interaction entre les protocoles, les services et les applications.
- Savoir les notions de base de l’administration des réseaux avec SNMP.
- Comprendre les concepts et l'architecture de base du protocole TCP/IP, ainsi que les
protocoles TCP/IP connexes ( NAT, PAT….).
Évaluations
- Devoir surveillé de 1 heure, à la fin du chapitre Les modes de transmission.
- Examen final écrit de 1 heure et demie sur tout le programme.
Moyens Pédagogiques :
- Support de cours.
Volume horaire :
1 heures et demi.
I. Introduction
Les En 1969 aux États Unis, l'agence gouvernementale DARPA lance un projet de
réseau expérimental, basé sur la commutation de paquets. Ce réseau, nommé ARPANET, fut
construit dans le but d'étudier les technologies de communications, indépendamment de toute
contrainte commerciale. Un grand nombre de techniques de communication par modems
datent de cette époque.
L'expérience d'ARPANET est alors si concluante que toutes les organisations qui lui
sont rattachées l'utilisent quotidiennement pour leurs messages de service.
Le développement d'ARPANET ne s'arrête pas pour autant, les bases des protocoles
TCP/IP sont développées à ce moment, donc après qu’ARPANET soit opérationnel.
En Juin 1978 Jon Postel définit IPv4 et en 1981 IP est standardisé dans la RFC.
En 1983 les protocoles TCP/IP sont adoptés comme un standard militaire et toutes les
machines sur le réseau commencent à l'utiliser. Pour faciliter cette reconversion, la DARPA
demande à l'université de Berkeley d'implémenter ces protocoles dans leur version (BSD)
d'unix. Ainsi commence le mariage entre ce système d'exploitation et les protocoles TCP/IP.
L'apport de l'Université de Berkeley est majeur, tant au niveau théorique (concept des
sockets) qu'au niveau de l'utilisateur, avec des utilitaires très homogènes qui s'intègrent
parfaitement au paradigme d'usage existant.
Depuis cette époque, un nouveau terme est apparu pour désigner cette interconnexion de
réseaux, l'Internet, avec un `` i '' majuscule.
Le succès de cette technologie est alors très important et suscite un intérêt croissant de
la part d'acteurs très divers,
Depuis 1990, ARPANET n'est plus, pourtant le terme Internet demeure il désigne
maintenant un espace de communication qui englobe la planète tout entière. Des millions de
sites partout sur la surface du globe y sont connectés.
Depuis 1994, l'Internet s'est ouvert au commerce, surtout avec l'apparition en 1991 d'un
nouvel outil de consultation, le `` World Wide Web '' ou `` Web '' et ses interfaces populaires :
Netscape, Mozilla, Firefox, ...
Depuis 1995, pour faire face à sa popularité fortement croissante et aux demandes de
transactions sécurisées, le protocole évolue et une nouvelle version, la version 6, est définie et
en cours de déploiement expérimental.
Les protocoles désignés par TCP/IP ont également envahi les réseaux locaux eux-
mêmes, car il est plus facile d'utiliser les mêmes protocoles en interne et en externe.
Pour les utilisateurs, l'accès à l'Internet est possible à l'aide d'une collection de
programmes spécialisés si faciles à utiliser que l'on peut ignorer tout (ou presque) de leur
fonctionnement interne. Seuls les programmeurs d'applications réseaux et les administrateurs
de systèmes ont besoin d'en connaître les arcanes.
C'est un protocole ouvert, les sources (C) en sont disponibles gratuitement et ont été
développés indépendamment d'une architecture particulière, d'un système d'exploitation
particulier, d'une structure commerciale propriétaire. Ils sont donc théoriquement
transportables sur n'importe quel type de plate-forme, ce qui est prouvé de nos jours.
Le mode d'adressage est commun à tous les utilisateurs de TCP/IP quelle que soit la
plate-forme qui l'utilise. Si l'unicité de l'adresse est respectée, les communications aboutissent
même si les hôtes sont aux antipodes.
Les protocoles de hauts niveaux sont standardisés ce qui permet des développements
largement répandus et interopérables sur tous types de machines.
Les majeures parties des informations relatives à ces protocoles sont publiées dans les
RFCs (Requests For Comments). Les RFCs contiennent les dernières versions des
spécifications de tous les protocoles TCP/IP, ainsi que bien d'autres informations comme des
L’avantage d’un tel réseau est sa simplicité de réalisation interne : ce sont les équipements
terminaux qui mettent en œuvre les fonctions de contrôle. La figure 3 montre l’acheminement
des datagrammes entre les équipements A et D.
communication. Ensuite, le réseau transmet tous les paquets de données jusqu’au destinataire,
en se référant au circuit virtuel précédemment établi (l’émetteur n’a plus besoin de préciser
l’adresse du destinataire dans chaque paquet). Lorsque le dialogue se termine, un des
utilisateurs indique au réseau qu’il souhaite libérer la connexion. Pour dialoguer avec un autre
équipement (ou le même), il faut déclencher une nouvelle ouverture de connexion.
Le service avec connexion est couplé avec la notion de circuit virtuel. À l’ouverture de la
connexion, le réseau détermine le chemin que tous les paquets emprunteront par la suite. Ce
chemin s’appelle « circuit virtuel ». Il s’agit d’un circuit car on utilise les mêmes principes
que dans la commutation de circuits ; il est virtuel puisqu’une connexion ne monopolise une
liaison entre commutateurs que pendant le temps de transfert d’un paquet. Une fois le paquet
transmis, la liaison est utilisable par un autre circuit virtuel. La liaison entre deux
commutateurs transporte donc plusieurs circuits virtuels entre des équipements terminaux
totalement différents. De ce fait, l’utilisation du support de transmission est beaucoup plus
efficace que dans le cas de la commutation de circuits.
L’avantage d’un réseau à circuits virtuels est sa fiabilité : comme les paquets d’un même
circuit virtuel suivent le même chemin, il suffit de conserver l’ordre des paquets sur chaque
tronçon du chemin pour conserver globalement l’ordre des paquets sur le circuit virtuel.
L’opérateur du réseau peut donc garantir une certaine qualité de service (taux d’erreur,
contrôle de séquence et de flux…), au prix d’une plus grande complexité de réalisation et de
gestion du réseau.
Objectifs spécifiques
Plan du chapitre
I. Protocole IP.
V. IPv6.
Volume horaire :
6 heures.
V. Protocole IP
IP est l'acronyme de `` Internet Protocol '', il est défini dans la RFC 791 et a été conçu
en 1980.
3. Structure de l'en-tête
Les octets issus de la couche de transport et encapsulés à l'aide d'un en-tête IP avant
d'être propagés vers la couche réseau (Ethernet par exemple), sont collectivement nommés ``
datagramme IP '', datagramme Internet ou datagramme tout court. Ces datagrammes ont une
taille maximale liée aux caractéristiques de propagation du support physique, c'est le ``
Maximum Transfer Unit '' ou MTU.
• IP ne donne aucune garantie quant au bon acheminement des données qu'il envoie. Il
n'entretient aucun dialogue avec une autre couche IP distante.
• Chaque datagramme est géré indépendamment des autres datagrammes même au sein
du transfert des octets d'un même fichier. Cela signifie que les datagrammes peuvent être
mélangés, dupliqués, perdus ou altérés !
Ces problèmes ne sont pas détectés par IP et donc il ne peut en informer la couche de
transport.
• L'en-tête IP minimale fait 5 mots de 4 octets, soit 20 octets. S'il y a des options la taille
maximale peut atteindre 60 octets.
4. Description de l'en-tête
VERS : 4 bits qui spécifient la version du protocol IP. L'objet de ce champ est la
vérification que l'émetteur et le destinataire des datagrammes sont bien en phases avec la
même version. Actuellement c'est la version 4 qui est principalement utilisé sur l'Internet,
bien que quelques implémentations de la version 6 existent et soient déjà en
expérimentationV2.
HLEN : 4bits qui donnent la longueur de l'en-tête en mots de 4 octets. La taille
standard de cette en-tête fait 5 mots, la taille maximale fait : (23 + 22 + 21 + 20) x 4 = 60
octetsV3
TOTAL LENGTH : Donne la taille du datagramme, en-tête plus données. S'il y
fragmentation (voir plus loin) il s'agit également de la taille du fragment (chaque
datagramme est indépendant des autres).
La taille des données est donc à calculer par soustraction de la taille de l'en-tête. 16 bits
autorisent la valeur 65535...La limitation vient le plus souvent du support physique
(MTU) qui impose une taille plus petite, sauf sur les liaisons de type `` hyperchannel ''.
TYPE OF SERVICE,IDENTIFICATION, FLAGS et FRAGMENT OFFSET :
Ces mots sont prévus pour contrôler la fragmentation des datagrammes. Les données
sont fragmentées car les datagrammes peuvent avoir à traverser des réseaux avec des
MTU plus petits que celui du premier support physique employé.
TTL : `` Time To Live '' 8 bits, 255 secondes maximum de temps de vie pour un
datagramme sur le net.
Prévu à l'origine pour décompter un temps, ce champ n'est qu'un compteur décrémenté
d'une unité à chaque passage dans un routeur.Couramment la valeur de départ est 32 ou
même 64. Son objet est d'éviter la présence de paquets fantômes circulant indéfiniment...
Si un routeur passe le compteur à zéro avant délivrance du datagramme, un message
d'erreur ICMP est renvoyé à l'émetteur avec l'indication du routeur. Le paquet en lui-
même est perdu.
PROTOCOL : 8 bits pour identifier le format et le contenu des données, un peu
comme le champ `` type '' d'une trame Ethernet. Il permet à IP d'adresser les données
extraites à l'une ou l'autre des couches de transport.
HEADER CHECKSUM : 16 bits pour s'assurer de l'intégrité de l'en-tête. Lors du
calcul de ce `` checksum '' ce champ est à 0. A la réception de chaque paquet, la couche
calcule cette valeur, si elle ne correspond pas à celle trouvée dans l'en-tête le datagramme
est oublié (`` discard '') sans message d'erreur.
SOURCE ADDRESS : Adresse IP de l'émetteur, à l'origine du datagramme.
DESTINATION ADDRESS : Adresse IP du destinataire du datagramme.
5. Fragmentation IP - MTU
La couche de liaison (Couche 2 `` Link '') impose une taille limite, le `` Maximum
Transfer Unit ''. Par exemple cette valeur est de 1500 pour une trame Ethernet, elle peut être
de 256 avec SLIP (`` Serial Line IP '') sur liaison série (RS232...).
Il existe une exception à cette opération, due à la présence active du bit `` Don't
Fragment bit '' du champ FLAGS de l'en-tête IP. La présence à 1 de ce bit interdit la
fragmentation dudit datagramme par la couche IP qui en aurait besoin. C'est une situation de
blocage, la couche émettrice est tenue au courant par un message ICMP `` Fragmentation
needed but don't fragment bit set '' et bien sûr le datagramme n'est pas transmis plus loin.
a) Fragmentation
Quand un datagramme est fragmenté, il n'est réassemblé que par la couche IP
destinatrice finale. Cela implique trois remarques :Cette opération est absolument transparente
pour les couches de transport qui utilisent IP.
Les données doivent faire un multiple de 8 octets, sauf pour le dernier fragment,
évidement.
Le champ TOTAL LENGTH change.
Chaque fragment est un datagramme indépendant, susceptible d'être à son tour
fragmenté.
Figure 5:fragmentation.
b) Réassemblage
Tous les datagrammes issus d'une fragmentation deviennent des datagrammes IP
comme (presque) les autres.
Ils arrivent à destination, peut être dans le désordre, dupliqués. IP doit faire le tri.
Il y a suffisamment d'information dans l'en-tête pour réassembler les fragments
épars.
Mais si un fragment manque, la totalité du datagramme est perdu car aucun
mécanisme de contrôle n'est implémenté pour cela dans IP.
C'est la raison principale pour laquelle il faut absolument éviter de fragmenter
un datagramme IP !
Le problème à résoudre est issu de la constatation qu'une adresse IP n'a de sens que pour
la suite de protocole TCP/IP ; celle-ci étant indépendante de la partie matérielle il faut avoir
un moyen d'établir un lien entre ces deux constituants.
La norme Ethernet (vs IEEE) suppose l'identification unique de chaque carte construite
et vendue .Sur une même liaison physique (lire plus loin `` même LAN ''), Ethernet par
exemple, deux machines peuvent communiquer implique qu'elles connaissent leurs adresses
physiques respectives.
Lors du premier échange entre 2 machines d'un même LAN, si les adresses physiques
ne sont pas déjà connues, la solution à ce problème passe par l'usage du protocole ARP.
1. Fonctionnement
Il n'est pas besoin d'utiliser ARP préalablement à chaque échange, car heureusement le
résultat est mémorisé.
En règle générale la durée de vie d'une adresse en mémoire est de l'ordre de 20 minutes et
chaque utilisation remet à jour ce compteur.
2. Format du datagramme
Le datagramme ci-dessus est encapsulé dans une trame physique du type 0x0806
Normalement une machine qui démarre obtient son adresse IP par lecture d'un fichier
sur son disque dur (ou depuis sa configuration figée dans une mémoire non volatile).
Pour certains équipements cette opération n'est pas possible voire même non souhaitée
par l'administrateur du réseau
Pour communiquer en TCP/IP une machine a besoin d'au moins une adresse IP, l'idée de
ce protocole est de la demander au réseau.
Le protocole RARP est adapté de ARP : l'émetteur envoie une requête RARP spécifiant
son adresse physique dans un datagramme de même format que celui de ARP et avec une
adresse de `` broadcast '' physique.
Toutes les stations en activité reçoivent la requête, celles qui sont habilités à répondre
(serveurs RARP) complètent le datagramme et le renvoient directement (`` unicast '') à
l'émetteur de la requête puisqu’elles connaissent son adresse physique.
Nous avons vu que le protocole IP ne vérifie pas si les paquets émis sont arrivés à leur
destinataire dans de bonnes conditions.
Les paquets circulent d'une passerelle vers un autre jusqu'à en trouver une qui puisse les
délivrer directement à un hôte. Si une passerelle ne peut router ou délivrer directement un
paquet ou si un événement anormal arrive sur le réseau comme un trafic trop important ou une
machine indisponible, il faut pouvoir en informer l'hôte qui a émis le paquet. Celui-ci pourra
alors réagir en fonction du type de problème rencontré.
Il peut y avoir des ruptures de lignes de communication, des machines peuvent être à
l'arrêt, en pannes, déconnectées du réseau ou incapables de router les paquets parce qu'en
surcharge. Des paquets IP peuvent alors ne pas être délivrés à leur destinataire et le protocole
IP lui-même ne contient rien qui puisse permettre de détecter cet échec de transmission.
C'est pourquoi est ajouté systématiquement un mécanisme de gestion des erreurs connu
sous le doux nom d’ICMP. Il fait partie de la couche IPV6 et porte le numéro de protocole 1.
Ainsi, quand un message d'erreur arrive pour un paquet émis, c'est la couche IP elle-
même qui gère le problème, la plupart des cas sans en informer les couches supérieures.
Initialement prévu pour permettre aux passerelles d'informer les hôtes sur des erreurs de
transmission, ICMP n'est pas restreint aux échanges passerelles-hôtes, des échanges entres
hôtes sont tout à fait possibles. Le même mécanisme est valable pour les deux types
d'échanges.
Il est important de bien voir que puisque les messages ICMP sont encapsulés dans un
datagramme IP, ICMP n'est pas considéré comme un protocole de niveau plus élevé.
La raison de l'utilisation d'IP pour délivrer de telles informations, est que les messages
peuvent avoir à traverser plusieurs réseaux avant d'arriver à leur destination finale. Il n'était
donc pas possible de rester au niveau physique du réseau (à l'inverse de ARP ou RARP).
CHECKSUM : est utilisé avec le même mécanisme de vérification que pour les
datagrammes IP mais ici il ne porte que sur le message ICMP (rappel : le checksum de l'en-
tête IP ne porte que sur son en-tête et non sur les données véhiculées).
En addition, les messages ICMP donnent toujours l'en-tête IP et les 64 premiers bits (les
deux premiers mots de quatre octets) du datagramme qui est à l'origine du problème, pour
permettre au destinataire du message d'identifier quel paquet est à l'origine du problème.
Une machine envoie un message ICMP `` echo request '' pour tester si son destinataire
est accessible. N'importe quelle machine qui reçoit une telle requête doit formuler un message
ICMP `` echo reply '' en retour.
Quand une passerelle ne peut pas délivrer un datagramme IP, elle envoie un message
ICMP « destination unreachable » à l'émetteur.
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ôte, il est rejeté.
Un paquet arrive « trop vite » quand la machine qui doit le lire est congestionnée, trop
de trafic à suivre...
Dans ce cas la machine en question envoie un paquet ICMP « source quench » qui est
interprété de la façon suivante :
Les tables de routage (voir le paragraphe 6) des stations restent assez statiques durant de
longues périodes. Le système d'exploitation les lit au démarrage sur le système de fichiers et
l'administrateur en change de temps en temps les éléments.
Si entre deux modifications une destination change d'emplacement, la donnée initiale dans la
table de routage peut s'avérer incorrecte.
Les passerelles connaissent de bien meilleures routes que les hôtes eux-mêmes, ainsi quand
une passerelle détecte une erreur de routage, elle fait deux choses :
Chaque datagramme contient un champ TTL dit « TIME TO LIVE » appelé aussi « hop count
».
Afin de prévenir le cas où un paquet circulerait à l'infini d'une passerelle à une autre, chaque
passerelle décrémente ce compteur, rejette le paquet quand le compteur arrive à zéro et envoie
un message ICMP à l'émetteur pour le tenir au courant.
IX. IPv6
1. Introduction
Le protocole IP a été conçu, il y a plus d’une vingtaine d’années, pour connecter des
millions d’ordinateurs. Depuis quelques années, IP est victime de son succès et ne permet plus
de répondre à la demande de connexion de milliards de machines informatisées dont
disposeront les internautes de demain.
Il est important de souligner que les changements des protocoles comme TCP ou IP
affectent fatalement les applications existantes. En conséquence, de tels changements doivent
être effectués avec précaution et seulement quand ils deviennent nécessaires.
2. Apport d'IPv6
IPv6 a été conçu comme une évolution de IPv4 et non comme un changement radical
du protocole IP. Par conséquent, les applications fonctionnant sous IPv4 devraient fonctionner
normalement sous IPv6.
Les changements entre IPv4 et IPv6 peuvent être classées de la manière suivante :
3. Adressage
a) Types d’adresses
IPv6 définit trois types d’adresses :
- Unicast : une adresse pour chaque interface (équipement). Un paquet envoyé à une
adresse unicast est délivré à une seule interface.
- Anycast : une adresse désigne un groupe d’interfaces. Un paquet envoyé à une adresse
anycast est délivré à une des interfaces identifiées par l’adresse anycast.
Il n’y a pas d’adresses Broadcast, comme dans IPv4, car leur fonction est réalisée par
les adresses multicast. De plus, la fonction broadcast est pénalisante, car elle nécessite un
certain traitement pour chaque nœud, même si celui-ci va ignorer le paquet diffusé en
broadcast. Le multicast cible certains nœuds seulement, ce qui est plus économique.
L’adressage IPv6 permet de regrouper les adresses hiérarchiquement, par réseau, par
fournisseur d’accès Internet, géographiquement, par société, etc. De tels regroupements
devraient permettre de diminuer la taille des tables de routage et d’accélérer le traitement au
niveau des routeurs.
Le type spécifique d’une adresse est indiqué par les premiers bits de cette adresse. Par
exemple, les préfixes suivants sont définis :
- une forme hexadécimale abrégée qui ressemble à la forme précédente mais dans
laquelle les valeurs X égales à 0 sont condensées comme dans l’exemple suivant (attention
l’abréviation :: ne peut apparaître qu’une seule fois dans une adresse) : 1 :0 :0 :0 :0 :0 :0 :15
s’écrit en forme condensée 1 ::15.
- une forme permettant le rapprochement entre adresses IPv4 et adresses IPv6 qui s’écrit
sous la forme : X :X :X :X :X :X :d.d.d.d où chaque X représente une valeur sur 16 bits et
chaque d représente une valeur sur 8 bits. Par exemple au lieu d’écrire l’adresse IPv4 0 :0 :0
:0 :0 :0 :194 :12 :5 :01 avec des zéros on l’écrit de la manière suivante ::194.12.5.01.
Une adresse IPv6 qui contient une adresse IPv4 commence par une série de 96 bits à zéro.
-0 :0 :0 :0 :0 :0 :0 :0 (ou ::) est appelée adresse non spécifiée. Elle ne doit être assignée à
aucun nœud et ne peut être utilisée comme adresse de destination.
010 TLA(13 bits) NLA (32 bits) SLA(16 bits) Id Interface (64 bits)
- TLA (Top Level Aggregator) : les TLA identifient les grands opérateurs internationaux.
- NLA (Next Level Aggregation) : les NLA identifient les opérateurs intermédiaires
échangeant leur interconnectivité en des points d’interconnexion. NLA constitue un
identificateur de site (ou domaine).
- SLA (Site Level Aggregator) : permet de hiérarchiser le plan d’adressage de site (définir les
sous-réseaux).
- identificateur d’interface.
Par exemple, un site non encore connecté à Internet peut utiliser ces adresses, ce qui lui
évitera de demander un préfixe de réseau. C’est en quelque sorte des adresses IP privées. Les
routeurs ne doivent pas transmettre des paquets avec ce type d’adresse en dehors du site
concerné. Plusieurs sous-réseaux peuvent être identifiés dans un site.
Les adresses anycast sont syntaxiquement indistinguables des adresses unicast. Lorsqu’une
adresse unicast est attribuée à plus d’une interface, elle devient une adresse anycast et le nœud
auquel cette adresse est attribuée doit être configuré pour savoir qu’il s’agit d’une adresse
anycast.
Un usage prévu pour les adresses anycast est l’identification des groupes des routeurs
appartenant à une entreprise fournissant un accès à Internet, ce qui permet de banaliser l’accès
aux routeurs de cette entreprise. L’expérience de l’utilisation large des adresses anycast reste
pour le moment assez limitée.
4. Format de paquet
Les paquets IPv6 ont la forme générale suivante :
- Indentificateur de flux : utilisé pour marquer les paquets pour lesquels un traitement spécial
doit être fait par les routeurs,
- Nombre de sauts : nombre de sauts (de routeurs) restant pour le paquet avant destruction.
On notera qu’il n’y a plus de bits de contrôle (“check sum”) de l’entête du paquet comme
dans le cas de IPv4. La raison est que les réseaux physiques sont de meilleure qualité
aujourd’hui, ils vérifient eux-mêmes les erreurs de transmission sur les trames qui contiennent
les paquets. Par conséquent, supprimer le contrôle des erreurs sur l’entête diminue le temps de
calcul des paquets par les nœuds intermédiaires.
Pour se prémunir contre des paquets routés par erreur (erreur non détectée par le réseau
physique) un contrôle doit être fait au niveau transport. La solution retenue actuellement
consiste à effectuer un contrôle (en utilisant des bits de contrôle calculés par la source et
contrôlés par la destination) par la couche transport.
Objectifs spécifiques
I. Protocole UDP.
Volume horaire :
4 heures et demi
X. Protocole UDP
1. Introduction
UDP est l'acronyme de « User Datagram Protocol », il est défini dans la RFC 768
[Postel 1980]. Les données encapsulées dans un entête UDP sont des « paquets UDP ».
Au niveau de la couche Internet les datagrammes sont routés d'une machine à une autre
en fonction des bits de l'adresse IP qui identifient le numéro de réseau. Lors de cette opération
aucune distinction n'est faite entre les services ou les utilisateurs qui émettent ou reçoivent des
datagrammes, ie tous les datagrammes sont mélangés.
Pour le système Unix, les programmes sont identifiés de manière unique par un numéro
de processus, mais ce numéro est éphémère, non prévisible à distance, il ne peut servir à cette
fonction.
Pour communiquer avec un service distant, il faut donc avoir connaissance de son
numéro de port, en plus de l'adresse IP de la machine elle-même.
2. Description de l'entête
Un paquet UDP est conçu pour être encapsulé dans un datagramme IP et permettre un
échange de données entre deux applications, sans échange préliminaire. Ainsi, si les données
à transmettre n'obligent pas IP à fragmenter, un paquet UDP génère un datagramme IP et,
c'est tout !
UDP est simplement une interface au-dessus d'IP, ainsi l'émission des messages se fait-
elle sans garantie de bon acheminement. Plus généralement, tous les défauts d'IP recensés au
chapitre précédent sont applicables à UDP.
Plus particulièrement, les paquets à destination d'une application UDP sont conservés
dans une pile de type FIFO. Si l'application destinatrice ne les « consomme » pas assez
rapidement, les plus anciens paquets risquent d'être écrasés par les plus récents... Un risque
supplémentaire (par rapport aux propriétés d'IP déjà connues) de perte de données.
UDP est aussi désigné comme un mode de transport « non connecté », ou encore mode
datagramme, par opposition à TCP ou SCTP que nous examinerons dans les prochains
chapitres.
Parmi les utilisations les plus courantes d'UDP, on peut signaler le serveur de noms,En
local d'autres applications très utiles comme TFTP ou NFS sont également susceptibles
d'employer UDP.
réponse. La valeur zéro (0) indique qu'il est inutilisé, 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, repérés par une série de ports bien connus ou « well known port
numbers », pour pouvoir dialoguer avec les autres machines de l'Internet (vs Intranet). Sur une
machine Unix, cette liste de services est placée dans le fichier /etc/services et lisible par tous
les utilisateurs et toutes les applications.
XI.
1. Caractéristiques de TCP
TCP contient un mécanisme pour assurer le bon acheminement des données. Cette
possibilité est absolument indispensable dès lors que les applications doivent transmettre de
gros volumes de données et de façon fiable.
Il faut préciser que les paquets de données sont acquittés de bout en bout et non de point
en point. D'une manière générale le réseau assure l'acheminement et les extrémités le contrôle.
Le protocole TCP permet l'établissement d'un circuit virtuel entre les deux points qui
échangent de l'information. On dit aussi que TCP fonctionne en mode connecté (par
opposition à UDP qui est en mode non connecté ou encore mode datagramme).
Avant le transfert les 2 applications se mettent en relation avec leurs OS respectifs, les
informent de leurs désirs d'établir ou de recevoir une communication.
Pratiquement, l'une des deux applications doit effectuer un appel que l'autre doit
accepter.
Une fois ces préliminaires établis, les modules de protocole informent les applications
respectives que la connexion est établie et que le transfert peut débuter.
Durant le transfert, le dialogue entre les protocoles continue, pour vérifier le bon
acheminement des données.
Conceptuellement, pour établir une connexion -- un circuit virtuel -- il faut avoir réunis
les éléments du quintuplet :
L'ensemble de ces cinq éléments définit un circuit virtuel unique. Que l'un d'eux change
et il s'agit d'une autre connexion !
Aux deux extrémités du circuit virtuel, les applications s'envoient des volumes de
données absolument quelconques, allant de 0 octet à des centaines (ou plus) de Mo.
À la réception, le protocole délivre les octets exactement comme ils ont été envoyés.
TCP est indépendant vis à vis des données transportées, c'est un flux d'octets non
structuré sur lequel il n'agit pas.
Le protocole autorise la clôture du flot dans une direction tandis que l'autre continue à
être active. Le circuit virtuel est rompu quand les deux parties ont clos le flux.
2. Description de l'en-tête
La figure suivante montre la structure d'un en-tête TCP. Sa taille normale est de 20
octets, à moins que des options soient présentes.
TCP numérote chaque octet transmis en incrémentant ce nombre 32 bits non signé. Il
repasse à 0 après avoir atteint 232 - 1 (4 294 967 295).
Pour le premier octet des données transmis ce nombre est incrémenté de un, et ainsi de
suite...
Numéro d'acquittement: C'est un numéro qui identifie la position du dernier octet reçu
dans le flux entrant.
Off : pour OFFSET, il s'agit d'un déplacement qui permet d'atteindre les données
quand il y a des options. Codé sur 4 bits, il s'agit du nombre de mots de 4 octets qui
composent l'en-tête. Le déplacement maximum est donc de 60 octets (24-1 x 4 octets).
Dans le cas d'un en-tête sans option, ce champ porte la valeur 5. 10 mots de 4 octets
sont donc possibles pour les options.
RES : Six bits réservés pour un usage futur !
Code : Six bits pour influer sur le comportement de TCP en caractérisant l'usage du
segment :
URG Le champ `` URGENT POINTER '' doit être exploité.
ACK : Le champ `` ACNOWLEDGMENT NUMBER '' doit être exploité.
PSH : C'est une notification de l'émetteur au récepteur, pour lui indiquer que
toutes les données collectées doivent être transmises à l'application sans attendre
les éventuelles données qui suivent.
RST : Re-initialisation de la connexion
SYN : Le champ `` SEQUENCE NUMBER '' contient la valeur de début de
connexion.
FIN : L'émetteur du segment a fini d'émettre.
En fonctionnement normal un seul bit est activé à la fois mais ce n'est pas une
obligation. La RFC 1024 [Postel 1987] décrit l'existence de paquets tcp dénommés ``
Christmas tree '' ou `` paquet kamikaze '' comprenant les bits SYN+URG+PSH+FIN !
Fenêtre : Le flux TCP est contrôlé de part et d'autre pour les octets compris dans une
zone bien délimitée et nommée `` fenêtre ''. La taille de celle-ci est définie par un
entier non signé de 16 bits, qui en limite donc théoriquement la taille à 65 535 octets
(ce n'est pas complètement exact, voir plus loin l'option wscale).
Chaque partie annonce ainsi la taille de son buffer de réception. Par construction,
l'émetteur n'envoie pas plus de données que le récepteur ne peut en accepter.
Options : C'est un paramétrage de TCP. Sa présence est détectée dès lors que
l'OFFSET est supérieur à 5.
Une fois achevée cette phase nommée `` three-way handshake '', les deux applications
sont en mesure d'échanger les octets qui justifient l'établissement de la connexion.
La raison est qu'une connexion TCP est `` full-duplex '', ce qui implique que les données
circulent indépendamment dans un sens et dans l'autre. Les deux directions doivent donc
pouvoir être interrompues indépendamment l'une de l'autre.
La connexion est véritablement terminée quand les deux applications ont effectué ce
travail. Il y a donc échange de 4 paquets pour terminer la connexion.
Au total, sans compter les échanges propres au transfert des données, les deux couches
TCP doivent gérer 7 paquets, il faut en tenir compte lors de la conception des applications !
Clôture abrupte
L'extrémité qui arrête brutalement la connexion émet un paquet assorti du bit , après
avoir (ou non) envoyé les derniers octets en attente. Ce paquet clôt l'échange. Il ne reçoit
aucun acquittement. RST
L'extrémité qui reçoit le paquet de reset (bit RST), transmet les éventuelles dernières
données à l'application et provoque une sortie d'erreur du type `` Connection reset par peer ''
pour la primitive de lecture réseau. Comme c'est le dernier échange, si des données restaient à
transmettre à l'application qui a envoyé le elles peuvent être détruites.
4. Contrôle du transport
Le bon acheminement des données applicatives est assuré par un mécanisme
d'acquittement des paquets, comme nous avons déjà pu l'examiner partiellement au
paragraphe précédent.
a) Mécanisme de l'acquittement
Le temps qui s'écoule entre l'émission d'un paquet et la réception de son acquittement
est le RTT, il doit donc être inférieur à 2 x MSL. Il est courant sur l'Internet actuel d'avoir un
RTT de l'ordre de la seconde. Il faut noter que le RTT est la somme des temps de transit entre
chaque routeur et du temps passé dans les diverses files d'attente sur les routeurs.
b) Fenêtres glissantes
Cette attente de l'acquittement est pénalisante, sauf si on utilise un mécanisme de «
fenêtres glissantes », comme le suggère la figure :
Objectifs spécifiques
I. Introduction
V. Le port forwarding.
Volume horaire :
7 heures et demi.
I. Introduction
Le terme NAT représente les initiales de « Network Address Translation », ou «
Traduction d'Adresse Réseau » en français. Mais il est souvent utilisé pour représenter
différents concepts que nous allons différencier, notamment NAT statique, NAT dynamique,
PAT, IP masquerading, etc.
On parlera de SNAT quand c'est l'adresse source du paquet qui est modifiée, et de
DNAT quand il s'agit de l'adresse destination
1. Le principe
La NAT statique, se base sur l'association de n adresses avec n adresses. C'est-à-dire
qu'à une adresse IP interne, on associe une adresse IP externe. Dans ce cas, la seule action qui
sera effectuée par le routeur sera de remplacer l'adresse source ou destination par l'adresse
correspondante.
Ainsi, une machine ayant une adresse privée ne pourra pas recevoir de réponse à ses
requêtes sans un mécanisme supplémentaire.
Ainsi, un routeur (la plupart du temps la passerelle d'accès à Internet) va modifier dans
l'en-tête IP du paquet l'adresse source 10.0.0.1 pour mettre une adresse valide sur Internet
193.22.35.43 (dans notre exemple, on choisit volontairement une adresse supplémentaire pour
ne pas prendre la même que le routeur, ce qui l'empêcherait, lui, de pouvoir dialoguer sur
Internet).
Ainsi, la machine 1 est vue de l'Internet avec l'adresse 193.22.35.43. S'il s'agit d'un
serveur web, il suffit d'envoyer une requête HTTP vers cette adresse pour obtenir le site web.
La NAT statique nous a permis de rendre une machine accessible sur Internet alors
qu'elle possédait une adresse privée. On a simplement fait une association entre une adresse
privée et une adresse publique : 10.0.0.1 <--> 193.22.35.43
D'autre part, tant qu'à donner une adresse publique par machine, pourquoi ne pas leur
donner cette adresse directement plutôt que de passer par un intermédiaire ?
À cette question, on peut apporter plusieurs éléments de réponse. D'une part, il est
souvent préférable de garder un adressage uniforme en interne et de ne pas mêler les adresses
publiques aux adresses privées. Ainsi, si on doit faire des modifications, changements,
interventions sur le réseau local, on peut facilement changer la correspondance entre les
adresses privées et les adresses publiques pour rediriger les requêtes vers un serveur en état de
marche.
a) Proxy ARP
Les problèmes montrés ne sont pas toujours rencontrés lors de l'implémentation de la
NAT statique. Si celle-ci est bien faite, tous les mécanismes décrits devraient être
implémentés de façon transparente pour l'utilisateur.
Un premier problème rencontré est celui de la redirection d'un paquet vers l'adresse
virtuelle de la NAT statique.On considérera l'exemple précédent auquel on ajoute le premier
routeur rencontré sur Internet.
Le paquet est NATé au niveau du routeur avec comme adresse source 193.22.35.43,
ainsi, le site web www.isetsbz.edu renvoie sa réponse vers cette adresse. Le paquet est routé
sur Internet et arrive sur le routeur Internet (celui qui précède le routeur de l'entreprise ou du
particulier).
Celui-ci regarde l'adresse de destination et observe qu'elle se situe sur le même réseau
qu'une de ses interfaces. Ainsi, elle a maintenant besoin de l'adresse MAC de la machine
193.22.35.43 pour lui envoyer le paquet.
Elle fait donc une requête ARP en demandant « Quelle est l'adresse MAC de la machine
ayant 193.22.35.43 comme adresse IP ? » Or, sur ce réseau, aucune machine n'a cette adresse
puisqu'il s'agit d'une adresse virtuelle. Il faut donc que le routeur (193.22.35.42) réponde lui-
même à cette requête ARP. C'est ce que l'on appelle faire proxy ARP.
Quand vous faites de la NAT statique, le proxy ARP est souvent automatiquement
implémenté, cependant, il est bon de connaître ce mécanisme si ce n'est pas le cas.
Soit une route spécifique existe pour cette adresse pour rediriger le paquet vers le réseau
interne, soit ce n'est pas le cas, et il sera renvoyé sur l'interface externe du routeur, étant donné
que l'adresse de destination appartient au même réseau que son interface externe 193.22.35.42
!
Pour que la NAT fonctionne, il faut donc qu'il y ait une route spécifique vers le réseau
interne. Ou alors que la règle de NAT inverse soit implémentée avant le routage, comme ça
l'adresse destination sera 10.0.0.1 qui sera routée correctement vers le réseau interne.
1. Principe
La NAT dynamique est aussi appelée IP masquerading. Contrairement à la NAT
statique, la NAT dynamique associe une seule adresse à n adresses (ou pour être plus précis,
m adresses à n adresses, les adresses pour sortir étant choisies dans un pool). Ainsi, on peut
associer une adresse publique à n adresses privées et permettre ainsi à un grand nombre de
machines ayant des adresses privées d'accéder à Internet !
Par contre, nous verrons que cette méthode possède quelques inconvénients. Et
contrairement à la NAT statique, le routeur qui effectue la NAT devra à la fois modifier les
adresses IP mais aussi les ports TCP/UDP (ce que l'on appelle PAT, Port Address
Translation).
sbz.edu par exemple, celle-ci le renvoie vers l'adresse 193.22.35.42. Le routeur reçoit donc ce
paquet et voit que l'adresse de destination est lui-même !
Comment peut-il alors savoir si le paquet est pour lui ou une machine en interne ?
C'est grâce aux ports TCP/UDP qu'il va pouvoir faire la différence. Ainsi, si une
machine en interne fait une requête avec comme port TCP source 2356, le routeur pourra
savoir que lorsqu'il recevra un paquet avec comme port destination 2356, il faut le rediriger
vers la machine en interne qui a initialisé la connexion.
La question qui se pose que se passe-t-il si deux machines du réseau interne initialisent
des connexions avec le même port TCP/UDP ? Tout a été prévu pour pallier ce problème. En
fait, le routeur remplace le port TCP/UDP source par un nouveau qu'il choisit lui-même.
Ainsi, comme c'est lui qui les choisit, il n'en choisira pas deux identiques, et pourra identifier
chacune des connexions.
Il garde ces informations de correspondance bien au chaud dans une table NAT.
Et voilà. On peut ainsi masquer autant de machines que l'on veut derrière une seule
adresse publique !
Effectivement, si la NAT dynamique marche, c'est parce que le routeur qui fait la NAT
reçoit les informations de la machine en interne (adresse IP, port TCP/UDP). Par contre, il
n'aura aucune de ces informations si la connexion est initialisée de l'extérieur... Le paquet
arrivera avec comme adresse de destination le routeur, et le routeur ne saura pas vers qui
rediriger la requête en interne.
La NAT dynamique ne permet donc que de sortir sur Internet, et non pas d'être
joignable. Elle est donc utile pour partager un accès Internet, mais pas pour rendre un serveur
accessible.
De plus, étant donné que l'on peut « cacher » un grand nombre de machines derrière une
seule adresse publique, cela permet de répondre à notre problème de pénurie d'adresses.
Par ailleurs, les machines n'étant pas accessibles de l'extérieur, cela donne un petit plus
au niveau de la sécurité.
Sans le savoir, si vous avez chez vous un routeur fourni par votre fournisseur d'accès et
que votre machine a une adresse en 192.168.X.X, vous n'êtes pas directement joignable par
les vilains pirates d'Internet !
a) ICMP
La NAT dynamique demande l'utilisation des ports TCP/UDP, cependant, tous les
protocoles utilisés sur un réseau n'utilisent pas obligatoirement ces ports, notamment les
protocoles ICMP, PPTP, Netbios, etc.
Une méthode spécifique doit être implémentée pour permettre la NAT du trafic ICMP.
Pour cela, au lieu de se baser sur les ports TCP/UDP, on peut se baser sur l'identifiant
ICMP présent dans l'en-tête du message ICMP.
Ainsi, le mécanisme est exactement le même, mis à part que l'on utilise cet identifiant,
plutôt que les ports TCP/UDP.
Par ailleurs, certains paquets ICMP contiennent dans leur donnée des informations
concernant les datagrammes IP qui ont causé l'erreur. Le routeur faisant la NAT doit donc
aussi modifier les informations contenues dans la donnée pour que l'information apportée à la
machine émettrice soit pertinente.
b) Ftp
Le protocole FTP a un fonctionnement un peu particulier. Il utilise deux connexions en
parallèle. L'une pour le contrôle de la connexion, l'autre pour le transfert des données.
Le FTP peut fonctionner selon deux modes différents, actifs ou passifs. En mode passif,
pas de problème, les connexions sont initialisées de l'intérieur pour chacun de ces deux
canaux. Par contre, pour le mode actif, la connexion de contrôle est d'abord initialisée de
l'intérieur, et quand des données sont demandées, c'est le serveur qui initialise la connexion de
données à partir de l'extérieur. Et comme nous le savons, il n'est pas possible d'initialiser de
connexion à partir de l'extérieur du réseau avec de la NAT dynamique.
Un autre problème du protocole FTP est qu'il contient des données se rapportant aux
adresses des machines. Ainsi quand les adresses sont NATées, cela pose problème...
Il est donc utile d'utiliser la NAT statique quand vous voulez rendre une application
disponible sur Internet, comme un serveur web, mail ou un serveur FTP.
Elle est donc utile pour économiser les adresses IP et donner un accès à Internet à des
machines qui n'ont pas besoin d'être joignables de l'extérieur (comme la plupart des
utilisateurs). D'autre part, même quand on possède assez d'adresses IP, il est souvent
préférable de faire de la NAT dynamique pour rendre les machines injoignables directement
de l'extérieur.
Comment rendre joignables les machines de mon réseau local alors que je n'ai qu'une seule
adresse publique ??
Explication du problème :
Nous avons vu que dans le cas de la NAT dynamique, les machines du réseau local ne
pouvaient pas être jointes de l'extérieur. Cela est plutôt un plus pour la sécurité, mais si l'on
doit offrir des services comme un serveur FTP ou web, ça devient problématique.
C'est notamment le cas quand on possède un accès ADSL ou câble : une seule adresse
publique vous est fournie, et il devient alors compliqué de rendre disponibles plusieurs
serveurs du réseau local.
V. Le port forwarding.
Le port forwarding consiste à rediriger un paquet vers une machine précise en fonction
du port de destination de ce paquet.
Ainsi, lorsque l'on n'a qu'une seule adresse publique avec plusieurs machines derrière en
adressage privé, on peut initialiser une connexion de l'extérieur vers l'une de ses machines
(une seule par port TCP/UDP).
Enseignant : Jamel Eddine SAIDI - Youssef BEN BRAHEM 47
ISETSBZ Protocoles TCP/IP – TI2-RSI
Prenons l'exemple précédent et disons que la machine 10.0.0.1 possède un serveur web.
Maintenant, on configure le routeur pour qu'il redirige les connexions arrivant sur le port 80
vers la machine 10.0.0.1. Et hop, on rend notre machine ayant une adresse privée disponible
depuis l'extérieur !
Ainsi, le port forwarding nous a permis de rendre nos machines du réseau local
joignables d'Internet, même si l'on ne possède qu'une seule adresse IP publique !
1. Le port mapping
Le port mapping est un peu équivalent au port forwarding. Il consiste simplement à
rediriger la requête sur un port différent que celui demandé. Par exemple, si l'on fait tourner
un serveur web sur le réseau local sur le port 8080 et qu'on veut le rendre accessible pour les
internautes, on redirige le port 80 vers notre serveur sur le port 8080. Ainsi, les clients
externes auront l'impression de s'adresser à un serveur sur le port usuel pour le web, 80.
Ainsi, on a vu que l'on ne pouvait associer qu'une adresse de machine à un port donné.
Si l'on possède plusieurs serveurs web en local et que l'on veut les rendre accessibles, il faudra
trouver une autre astuce...
Bibliographie
[1] A.Tanenbaum : "Computer Networks", 4th ed., Prentice-Hall, 2002 et "Réseaux",
4è ed, Pearson Education, 2003.
[2] L.L. Peterson, B.S. Davie : "Computer Networks", 4th edition, Morgan Kaufmann,
2007.
[3] D. Dromard, D. Seret : "Architecture des réseaux", Pearson Education, 2006.
[4]Cours CCNA exploration
.
--