1. Introduction

Dans le chapitre précédent, nous avons eu l'occasion de voir comment un réseau est construit et quels protocoles de bas niveau (niveau 1 du modèle OSI) sont employés pour transporter ses données « brutes » sur le réseau.

Le réseau Ethernet est le plus employé (avec ATM pour les opérateurs Télécoms). Ici, nous allons nous intéresser au protocole situé juste au-dessus, du moins au plus utilisé d'entre eux : TCP/IP. Ce protocole est en effet omniprésent sur le Net.

Une bonne compréhension de TCP/IP est nécessaire si l'on souhaite d'une part savoir comment les données transitent sur les réseaux et, d'autre part, ne pas être trop perdu dans les règles « sanitaires » qui permettent de mettre nos machines connectées le plus possible à l'abri des agressions. Il existe plusieurs outils de protection (Firewalls en anglais), mais ces outils n'ont qu'un effet psychologique, le plus souvent néfaste d'ailleurs, si l'on n'a aucune compétence pour les paramétrer de façon efficace. Le problème de la sécurité est abordé dans un autre chapitre sur ce site.

Au programme :

  • les adresses logiques de l'Internet Protocol (couche 3 du modèle OSI) ;
  • Les modes connecté (TCP) et non connecté (UDP) (couche 4 du modèle OSI) ;
  • Les protocoles applicatifs (HTTP, FTP, SMTP, POP, etc.) (couche 7 du modèle OSI).

2. Les protocoles

2-1. C'est quoi un protocole ?

Essayons d'en donner une définition satisfaisante…

C'est un mode opératoire qui doit être commun à tous les éléments qui désirent communiquer entre eux. Il n'y a pas de communication possible sans avoir recours à un protocole. Bien entendu, le protocole doit être adapté au type de communication que l'on souhaite mettre en œuvre.

Nous passons notre vie à utiliser des protocoles, heureusement sans en être conscients la plupart du temps.

2-1-1. Rappel

Le modèle OSI définit sept couches. TCP/IP est basé sur le modèle DOD, qui ne comporte que quatre couches, mais en cohérence avec le modèle OSI.

Image non disponible

2-2. Les principaux protocoles rencontrés sur un réseau TCP/IP

2-2-1. Organisation hiérarchique

Image non disponible Nous trouvons ici les protocoles applicatifs. Ce sont des protocoles de haut niveau, destinés à permettre le dialogue entre applications serveurs et clientes. HTTP, FTP, POP et SMTP sont loin d'être les seuls. Ce sont cependant ceux que les internautes utilisent le plus souvent. Parmi l'un des plus « dangereux », il y a TELNET qui permet de piloter une machine à distance.
Image non disponible Ici, ce sont les protocoles orientés transport de données. UDP est dit « sans connexion » et TCP est dit « avec connexion ». Nous verrons plus loin ce que ceci veut dire. Ces protocoles permettent à ceux de la couche 4 de transporter leurs données de façon fiable.
Image non disponible Ce sont ici des protocoles de haut niveau de la couche réseau. IP permet le routage des informations entre réseaux, c'est ici que l'adresse IP est utilisée. ICMP est un protocole de « contrôle » il met à disposition des outils de dépistage d'erreur et de signalisation. C'est un protocole important qui mérite que l'on s'y arrête. Nous en reparlerons plus en détail.
Image non disponible Protocole de plus bas niveau sur le réseau, il assure la bonne gestion du médium (détection de collisions) et permet l'acheminement des informations entre émetteur et destinataire au niveau des adresses MAC. IP s'appuie dessus bien évidemment.

2-2-2. Ethernet

Le vocable « Ethernet » est souvent employé à contresens. Peut-être n'est-il pas inutile de préciser un peu, même si, pour l'utilisateur (qui travaille sur la couche supérieure), ce qu'il se passe sur la couche 1 n'a pas beaucoup de répercussions.

Le mot « Ethernet » fait référence au support de propagation des informations utilisé. Historiquement, de trois types (mais d'autres peuvent être utilisés) :

  • coaxial épais ;
  • coaxial fin (RG58) ;
  • paire torsadée.

Pour être tout à fait précis, la norme qui décrit les réseaux de type Ethernet qui sont utilisés sur la majorité des réseaux locaux est la norme IEEE 802.3.

Cette norme décrit dans le détail le fonctionnement du réseau sur les supports cités précédemment. Elle définit entre autres, le protocole d'émission de données utilisé : le CSMA/CD persistant 1 (qui n'est pas le plus performant).

2-2-2-1. Remarque fine…

Les réseaux France Télécom ne sont pas des réseaux IEEE 802.3, mais des réseaux ATM (Asynchronous Transfer Mode). Le réseau ATM a été développé dans l'optique d'un transport de données de natures diverses (voix, vidéo, informatique…). ATM est capable de gérer finement le partage des ressources d'une dorsale.

Bien que cette technologie soit pas mal controversée, c'est tout de même elle qui est utilisée par notre opérateur « historique » (et d'autres également). Cependant, les trames IEEE 802.3 peuvent être encapsulées sur de l'ATM, TCP/IP peut s'appuyer sur ATM, si bien que nous autres, utilisateurs, « voyons » tout de même un réseau classique de l'Internet. En fait, le Com21 est connecté sur un réseau ATM via le câble.

2-2-3. IP

Internet Protocol.

C'est le protocole dont on parle le plus, il est en effet directement impliqué dans la configuration réseau de l'hôte. C'est lui qui, en fonction de l'adresse IP du destinataire acheminera l'information sur la bonne route.

  • Les considérations relatives à la topologie d'une adresse IP sont vues un peu plus loin dans ce chapitre.
  • Les concepts du routage sont vus dans le chapitre suivant sur ce site.

2-2-4. ICMP

Internet Control Message Protocol.

En termes de sécurité, ce protocole fait peur à beaucoup de monde (parfois à juste titre d'ailleurs), il est cependant fondamental pour le bon fonctionnement de l'Internet. C'est grâce à ce protocole que les anomalies de fonctionnement peuvent être signalées à l'émetteur, afin qu'il puisse essayer d'y remédier.

ICMP génère des messages de types différents, selon la nature du problème à traiter :

Valeur Nom Description
0 Réponse d'écho Rien de plus que la réponse à un PING
3 Destination inaccessible C'est un message intéressant, parce qu'il permet à celui qui le reçoit d'être informé que l'hôte avec lequel il veut communiquer n'est pas accessible. Ça peut souvent éviter à une application de rester « plantée » à attendre une réponse qui ne viendra pas.
4 Étranglement de la source Principalement utilisé par les routeurs, ce signal permet d'expliquer à un hôte qui parle un peu trop qu'il faut qu'il se taise, parce qu'il inonde la file d'attente.
5 Redirection nécessaire Information utile pour la mise à jour des tables de routage.
8 Demande d'écho C'est la question posée à un hôte par la commande PING.
11 TTL Expiré Un paquet est toujours émis avec une durée de vie. Cette durée de vie est décrémentée à chaque nœud qui traite le paquet (d'une durée minimum d'une seconde, ou du temps qu'a mis le paquet à traverser le nœud). Si le paquet arrive en fin de vie, il est jeté et un message ICPM de type 11 est envoyé à l'émetteur. Cette propriété est utilisée dans la commande « tracert » (traceroute sur Linux) pour calculer les temps d'accès sur les diverses passerelles du chemin parcouru.
12 Problème de paramètre Ce message indique qu'il y a une erreur dans le champ d'en-tête du paquet. Ce problème ne peut normalement arriver que dans le cas d'un bogue du logiciel.
13 Requête d'horodatage Assez similaire à la requête d'écho, avec en plus le marquage de l'heure. Ce type d'écho permet de connaître l'heure d'arrivée de la requête et l'heure de départ de la réponse sur l'hôte cible.
14 Réponse d'horodatage.  
17 Requête de masque d'adresse Ces messages sont utilisés pour effectuer des tests au sein d'un réseau ou d'un sous-réseau.
18 Réponse de masque d'adresse.  

2-2-5. Les modes de transport

Les protocoles de la couche transport permettent, comme l'indique le nom de la couche, de mettre à disposition des niveaux supérieurs des outils de transport de données fiables.

Il existe deux modes de transport :

  • le mode connecté (TCP) ;
  • le mode non connecté (UDP).

2-2-5-1. Le mode connecté (TCP)

Dans ce mode, il se met en place un processus de « handshake » (poignée de main) entre le client et le serveur. Ce processus permet d'établir un dialogue à propos du transfert de données. Il y a des accusés réception, des demandes d'émission, etc. qui permettent aux applications de savoir exactement où en est le processus de transfert de données.

Ce protocole est très robuste et permet un transfert de données dans de bonnes conditions. Voir les détails plus loin dans ce chapitre.

Le « handshake » est un concept fondamental dans un protocole de dialogue robuste. En gros, ça veut dire : « Chaque fois que tu envoies un message à son destinataire, assure-toi qu'il l'a reçu et compris”

La lettre recommandée avec accusé de réception est un bon exemple de mode connecté. Si l'émetteur reçoit l'accusé réception, alors il est certain que sa lettre est arrivée à destination.

2-2-5-2. Le mode non connecté (UDP)

C'est un mode simple, de type « on envoie les données et on espère qu'elles arriveront ». Il n'y a pas de « connexion  », au sens où on l'a vu pour le mode connecté. En revanche, il est possible de mettre en place un processus d'acquittement.

Ce mode est utilisé, par exemple, pour les requêtes DNS. Il offre l'avantage d'être moins gourmand en ressources, mais ne peut être efficace pour un transfert de fichiers et en général, pour les transferts de données volumineuses.

Là aussi, vous aurez plus de détails un peu plus loin sur dans cet article.

Dans ce mode, il n'y a pas de « handshake ». Une lettre simple est ici un bon exemple. L'émetteur ne reçoit a priori aucune confirmation de réception.

2-2-6. Les protocoles d'application

Les protocoles d'application sont des protocoles de haut niveau, adaptés aux besoins d'applications spécifiques. Ils s'appuient sur UDP et TCP pour permettre le transfert d'informations entre une application serveur et ses applications clientes.

Il en existe un grand nombre, nous allons effectuer un rapide tour d'horizon de ceux qui sont le plus souvent utilisés.

HTTP Hyper Text Transfert Protocol Ce protocole est utilisé pour la navigation web entre un serveur HTTP et un butineur. Le protocole assure (normalement) qu'un client comme Internet Explorer ou Netscape Communicator peut envoyer des requêtes et recevoir les réponses de serveurs HTTP comme APACHE ou Internet Information Server sans problèmes particuliers. Les ennuis viennent du fait que les clients supportent bien souvent des extensions « propriétaires » du protocole. Ces extensions sont d'ailleurs la plupart du temps entérinées dans les versions successives du protocole, c'est comme ça que tout évolue.
FTP File Transfert Protocol Protocole qui permet d'assurer le transfert de fichiers de façon indépendante des spécificités des NOS (Network Operatind System, pour mémoire). Ainsi, un client FTP sous Windows peut télécharger un fichier depuis un serveur UNIX.
SMTP Simple Mail Transfert Protocol Le protocole qui permet d'acheminer le courrier depuis le serveur SMTP de l'émetteur, jusqu'au serveur SMTP du destinataire, qui le classe dans les boîtes aux lettres de ses clients. (Décrit en détail par ailleurs dans ce site.)
POP3 Post Office Protocol version 3. Le protocole qui permet au client de relever à distance le courrier classé dans sa boîte aux lettres. Également détaillé par ailleurs sur ce site.
IMAP4 Interactive Mail Access Protocol version 4 Normalement, ce protocole devrait prendre la place de POP3. Certains fournisseurs sérieux, comme FREE l'implémentent déjà. Contrairement à POP3 qui ne permet une gestion des messages qu'une fois qu'ils sont rapatriés localement, IMAP propose des fonctionnalités plus fines.
NNTP Network News Transfert Protocol Très proche de SMTP, ce protocole est employé par les forums usenet. Bien que l'usage des forums NNTP n'entre que tardivement dans les mœurs des internautes « débutants », ce moyen de communication offre des avantages incomparables par rapport aux listes de diffusion par exemple.
TELNET C'est le « couteau suisse » du travail à distance. En fait, un client TELNET est une console en mode texte, capable de se connecter sur la plupart des serveurs, comme POP3 ou SMTP. Il devient alors possible d'envoyer et de lire des messages, si l'on connait les commandes inhérentes aux protocoles SMTP et POP3. Un serveur TELNET permet cependant des choses bien plus puissantes et « dangereuses » puisqu'il devient possible de prendre à distance le contrôle d'un hôte. C'est un outil qui permet l'administration distante d'une machine, du moment que l'on est capable d'ouvrir une session et d'acquérir les droits de « super utilisateur  ».

Il en existe bien entendu beaucoup d'autres, il n'est pas, encore une fois, question ici de référencer tous les protocoles applicatifs de la création.

3. L'adresse IP

3-1. Avant de commencer

Il est bon de savoir qu'il existe une adresse « MAC » (Media Access Control), écrite normalement en « dur » dans la ROM de l'interface réseau et donc théoriquement ineffaçable  et infalsifiable (mais ce n'est que la théorie, tous les pirates vous le diront). Cette adresse est réputée unique et décidée par le constructeur de la carte. Elle est la seule adresse exploitée au niveau 2 pour l'identification des hôtes qui dialoguent. Cette méthode ne permettant pas l'interconnexion de réseaux, il va être nécessaire d'ajouter dans la couche supérieure (niveau 3), une adresse logique qui sera attribuée par l'administrateur du réseau, en coordination avec les organismes chargés de gérer l'attribution de ces adresses. Dans le cas qui nous intéresse ici, il s'agit de l'adresse IP.

3-2. Définition d'une adresse IP

Internet Protocol

Il existe déjà sur le Net une multitude de pages qui traitent du sujet, ça ne fait rien, mettons-en une de plus…

Dans sa version 4, IP définit une adresse sur quatre octets. Une partie définit l'adresse du réseau (NetID ou SubnetID suivant le cas), l'autre partie définit l'adresse de l'hôte dans le réseau (HostID). La taille relative de chaque partie varie suivant le masque de (sous-) réseau.

3-2-1. Les classes d'adresses

Bien que cette façon de faire soit désormais obsolète (nous verrons plus loin pourquoi), il reste intéressant de l'étudier, pour mieux comprendre la notion de masque de sous-réseau.

3-2-1-1. Topologie

Hormis la classe D multicast, destinée à faire de la diffusion d'information pour plusieurs hôtes simultanément, il existe trois classes d'adresses IP :

Image non disponible

Comme vous le voyez, la classe A permet de créer peu de réseaux, mais avec beaucoup d'hôtes dans chaque réseau, la classe C faisant l'inverse.

3-2-1-2. Étendue de chaque classe

Comment fait-on pour savoir à quelle classe appartient une adresse ? Il y a deux méthodes pour le savoir :

  • la triviale, qui consiste à apprendre par cœur le tableau ;
  • la subtile, qui consiste à retenir la règle, qui est logique.

Voici donc la règle :

  • la classe est définie par les bits les plus lourds (les plus à gauche) ;
  • le bit le moins signifiant pour la classe est toujours un 0 ;
  • les autres sont tous à 1 ;
  • la classe A est signalée par un seul bit, donc obligatoirement un 0 ;
  • la classe B par deux bits, donc 1 0 ;
  • la classe C par trois bits, donc 1 1 0 ;
  • la classe D (multicast) par 4 bits donc 1 1 1 0.
Image non disponible

Il existe même une classe E, dont les bits les plus lourds sont 11110, qui est « réservée à un usage ultérieur ».

Si l'on arrive à retenir la définition ou son image, ça devient facile de retrouver l'étendue de chaque classe :

Classe Première adresse Dernière adresse
A 0.0.0.1 127.255.255.254
B 128.0.0.1 191.255.255.254
C 192.0.0.1 223.255.255.254
D 224.0.0.1 239.255.255.254

À ce stade, nous pourrions penser qu'il peut y avoir, par exemple, 128 réseaux de classe A, avec la possibilité d'avoir 16 777 216 hôtes dans chaque réseau. C'est bien entendu, un peu plus compliqué que çà.

Il y a déjà quelques adresses que l'on ne peut pas attribuer à un hôte :

  • l'adresse d'hôte =0 (exemple: 192.168.1.0 dans une classe C).
    Par convention, l'adresse IP dont la partie hôte est nulle est réservée à l'identification du réseau ;
  • l'adresse d'hôte avec tous ses bits à 1 (exemple : 192.168.1.255).
    Par convention, cette adresse signifie que tous les hôtes du réseau 192.168.1.0 sont concernés (Adresse de broadcast).

3-2-1-3. Les réseaux privés

Et ce n'est pas tout. Nous savons qu'une adresse Internet doit être unique dans un interréseau. Cette considération, qui ne posait pas trop de problèmes pour des réseaux d'entreprise coupés du reste du monde, devient très restrictive à l'échelle de l'Internet où chaque adresse IP doit être unique à l'échelle planétaire. Ceci représente une contrainte énorme, et qui fait que la pénurie d'adresses IP est une catastrophe annoncée bien plus certaine que celle du bogue de l'an 2000. (Rassurez-vous, le prochain protocole IP v6 prévoit de la marge, il faudra juste tout réapprendre.)

Pour permettre aux entreprises de construire leur réseau privé, il a donc été réservé dans chaque classe A, B et C des adresses de réseaux qui ne sont jamais attribuées sur l'Internet (RFC 1918). Tout paquet de données contenant une adresse appartenant à ces réseaux doit être éliminé par le premier routeur établissant une connexion avec l'Internet.

Ces réseaux privés sont:

Classe Réseaux privés Identification
A 10.0.0.0 Pour les réseaux privés
A 127.0.0.0 Pour l'interface de boucle locale (1)
B 169.254.0.0 à 169.254.255.255 Pour l'autoconfiguration en réseau local (2)
B 172.16.0.0 à 172.31.0.0 Pour les réseaux privés
C 192.168.0.0 à 192.168.255.0 Pour les réseaux privés
(1) L'adresse qui correspond à « localhost ». Cette adresse locale est nécessaire au fonctionnement de la pile IP.
(2) Système « zeroconf » qui permet une allocation dynamique d'adresse IP sur le lien local (IPV4LL).

3-2-2. Le masque de sous-réseau

Le masque de sous-réseau a une importance que peu d'utilisateurs connaissent, elle est pourtant fondamentale. C'est un ensemble de quatre octets destiné à isoler :

  • soit l'adresse de réseau (NetID ou SubnetID) en effectuant un ET logique bit à bit entre l'adresse IP et le masque ;
  • soit l'adresse de l'hôte (HostID) en effectuant un ET logique bit à bit entre l'adresse IP et le complément du masque (!masque).

Les masques de sous-réseau par défaut sont, suivant les classes d'adresses :

Classe Masque par défaut Nombre d'octets pour l'hôte
A 255.0.0.0 3
B 255.255.0.0 2
C 255.255.255.0 1

Par défaut, un masque de sous-réseau englobe donc la totalité de la classe.

Mais pourquoi « sous-réseau » ?

Le principe en est simple : imaginons que nous disposions d'une classe B. Nous disposons donc de deux octets pour les adresses d'hôtes, soit 65 534 hôtes possibles (les adresses x.x.0.0 et x.x.255.255 sont réservées). Ça ferait tout de même beaucoup de machines sur le même réseau. En pareil cas, il est bien préférable d'organiser son réseau logique en plusieurs sous-réseaux, connectés entre eux par des routeurs.

Si par exemple, bien qu'étant en classe B, on choisit comme masque de sous-réseau 255.255.255.0, nous obtiendrons 256 sous-réseaux de 254 hôtes chacun dans le même réseau. Mais il est possible de définir des masques plus subtils.

Deux hôtes, bien qu'appartenant au même réseau logique, s'ils sont placés dans des sous-réseaux logiques différents, ne pourront communiquer entre eux que par l'intermédiaire d'un routeur. Cette solution est très commode pour des réseaux d'entreprise constitués de réseaux locaux distants et même pour des réseaux locaux comportant plusieurs centaines d'hôtes.

3-2-3. Le modèle CIDR

Cette façon de faire aboutit malheureusement à un formidable gaspillage d'adresses IP dans la mesure où, à la belle époque, une entreprise pouvait se voir attribuer une classe complète et n'en utiliser qu'une partie.

Avec ce modèle (Classless InterDomain Routing), la notion de classe n'existe plus, si ce n'est pour les classes réservées à l'usage privé. Les adresses sont désormais distribuées par bloc, sans tenir compte de leur classe originelle.

L'IANA distribue donc désormais des blocs d'adresses contiguës, délimitées par un masque, toujours de 32 bits, dont les x bits de gauche sont à 1 et les autres à 0. Dans ce modèle, un bloc d'adresse se définit ainsi  :

  • adresse.de.base/x

À titre d'exemple, la classe C 192.168.0.0 avec un masque 255.255.255.0 s'écrirait :

  • 192.168.0.0/24

Ici, nous avons toujours deux adresses remarquables :

  • 192.168.0.0 qui symbolise tout le bloc ;
  • 192.168.0.255 qui est l'adresse de broadcast pour ce bloc.

La souplesse de cette méthode CIDR réside dans le fait que l'on peut définir désormais un bloc comme ceci :

  • 192.168.0.0/26

Il existe sur toute bonne distribution GNU/Linux un utilitaire nommé « ipcalc » qui va nous décortiquer ce bloc :

 
Sélectionnez
  1. ~$ ipcalc 192.168.0.0/26 
  2. Address:   192.168.0.0          11000000.10101000.00000000.00 000000 
  3. Netmask:   255.255.255.192 = 26 11111111.11111111.11111111.11 000000 
  4. Wildcard:  0.0.0.63             00000000.00000000.00000000.00 111111 
  5. => 
  6. Network:   192.168.0.0/26       11000000.10101000.00000000.00 000000 
  7. HostMin:   192.168.0.1          11000000.10101000.00000000.00 000001 
  8. HostMax:   192.168.0.62         11000000.10101000.00000000.00 111110 
  9. Broadcast: 192.168.0.63         11000000.10101000.00000000.00 111111 
  10. Hosts/Net: 62                    Class C, Private Internet 

Notez l'inhabituelle adresse de broadcast pour ce bloc. Nous avons donc ici la possibilité d'adresser 62 nœœuds, et l'étendue totale des adresses utilisées (réseau et broadcast compris) est :

 
Sélectionnez
  1. 192.168.0.0 - 192.168.0.63 

Voyons le bloc suivant qui pourrait être tout naturellement :

192.168.0.64/26

 
Sélectionnez
  1. :~$ ipcalc 192.168.0.64/26 
  2. Address:   192.168.0.64         11000000.10101000.00000000.01 000000 
  3. Netmask:   255.255.255.192 = 26 11111111.11111111.11111111.11 000000 
  4. Wildcard:  0.0.0.63             00000000.00000000.00000000.00 111111 
  5. => 
  6. Network:   192.168.0.64/26      11000000.10101000.00000000.01 000000 
  7. HostMin:   192.168.0.65         11000000.10101000.00000000.01 000001 
  8. HostMax:   192.168.0.126        11000000.10101000.00000000.01 111110 
  9. Broadcast: 192.168.0.127        11000000.10101000.00000000.01 111111 
  10. Hosts/Net: 62                    Class C, Private Internet 

3-2-4. Un autre exemple

Sur un réseau privé, nous pourrions prendre les deux classes C 192.168.0.0 et 192.168.1.0. En utilisant un masque de type 255.255.254.0, ceci nous permettra de réunir les deux classes C au sein d'un même réseau logique.

En notation CIRD : 192.168.0.0/23

 
Sélectionnez
  1. ~$ ipcalc 192.168.0.0/23 
  2. Address:   192.168.0.0          11000000.10101000.0000000 0.00000000 
  3. Netmask:   255.255.254.0 = 23   11111111.11111111.1111111 0.00000000 
  4. Wildcard:  0.0.1.255            00000000.00000000.0000000 1.11111111 
  5. => 
  6. Network:   192.168.0.0/23       11000000.10101000.0000000 0.00000000 
  7. HostMin:   192.168.0.1          11000000.10101000.0000000 0.00000001 
  8. HostMax:   192.168.1.254        11000000.10101000.0000000 1.11111110 
  9. Broadcast: 192.168.1.255        11000000.10101000.0000000 1.11111111 
  10. Hosts/Net: 510                   Class C, Private Internet 

Ça fonctionne… Avec quelques restrictions cependant, sur les anciens systèmes. Certaines vieilles piles IP (Windows 95 par exemple) risquent de ne pas accepter les adresses 192.168.0.255 et 192.168.1.0 comme adresses d'hôtes valides (elles devraient être réservées dans un réseau « normal », nous l'avons vu, mais dans le cas d'un bloc constitué comme celui de l'exemple, il est logiquement possible de les utiliser).

3-2-5. Un exemple « vrai » de configuration

Cet exemple appartient désormais au passé, du temps d'un fournisseur d'accès aujourd'hui disparu.

Un client se connecte et récupère l'adresse 62.161.99.115. C'est une adresse de classe A. Nous allons essayer de voir toutes les informations que l'on peut en tirer, au niveau du réseau. « whois » nous dit :

 
Sélectionnez
  1. whois -h whois.geektools.com 62.161.99.115 ... 
  2. Query: 62.161.99.115 
  3. Registry: whois.ripe.net 
  4. Results: 
  5. % Rights restricted by copyright. See http://www.ripe.net/ripencc/pub-services/db/copyright.html 
  6. inetnum: 62.161.96.0 - 62.161.120.255 
  7. ... 

Cette adresse appartient donc au bloc 62.161.96.0 - 62.161.120.255, qui est une portion du réseau de classe A 62.0.0.0.

Voyons maintenant les informations données par le DHCP. (Exemple sous Linux avec PUMP)

 
Sélectionnez
  1. Device eth0 
  2.     IP: 62.161.99.115 
  3.     Netmask: 255.255.248.0 
  4.     Broadcast: 62.161.103.255 
  5.     Network: 62.161.96.0 
  6.     Boot server 62.161.120.11 
  7.     Next server 62.161.120.11 
  8.     Gateway: 62.161.96.1 
  9.   ... 
  10.     Nameservers: 62.161.120.11 
  11.     Renewal time: Thu Feb  1 10:17:57 2001 
  12.     Expiration time: Thu Feb  1 10:25:27 2001 

Le masque de sous-réseau est ici aussi inhabituel

 
Sélectionnez
  1. ~$ ipcalc 62.161.96.0 255.255.248.0 
  2. Address:   62.161.96.0          00111110.10100001.01100 000.00000000 
  3. Netmask:   255.255.248.0 = 21   11111111.11111111.11111 000.00000000 
  4. Wildcard:  0.0.7.255            00000000.00000000.00000 111.11111111 
  5. => 
  6. Network:   62.161.96.0/21       00111110.10100001.01100 000.00000000 
  7. HostMin:   62.161.96.1          00111110.10100001.01100 000.00000001 
  8. HostMax:   62.161.103.254       00111110.10100001.01100 111.11111110 
  9. Broadcast: 62.161.103.255       00111110.10100001.01100 111.11111111 
  10. Hosts/Net: 2046                  Class A 

3-2-6. Exercices

3-2-6-1. À quel sous-réseau appartient l'adresse 62.161.99.115 (SubnetID) ?

Adresse IP 0011 1110 . 1010 0001 . 0110 0011 . 0111 0011
Masque de sous-réseau : 1111 1111 . 1111 1111 . 1111 1000 . 0000 0000
Adresse du sous-réseau: (ET logique) 0011 1110 . 1010 0001 . 0110 0000 . 0000 0000
donc en décimal : 62.161.96.0

L'opération consiste simplement en un ET logique bit à bit entre l'adresse et le masque. Mais on avait déjà la réponse en consultant les informations du client DHCP.

3-2-6-2. Quelle est la partie de l'adresse qui concerne l'hôte (HostID) ?

Adresse IP 0011 1110 . 1010 0001 . 0110 0011 . 0111 0011
Masque de sous-réseau : (complément logique) 0000 0000 . 0000 0000 . 0000 0111 . 1111 1111
HostID : (ET logique) 0000 0000 . 0000 0000 . 0000 0011 . 0111 0011
donc en décimal : 0.0.3.115

L'opération consiste ici en un ET logique entre l'adresse et le complément du masque. Bien entendu, HostID + SubnetID doit reconstituer l'adresse IP, ce qui est bien le cas : (62.161.96.0) + (0.0.3.115) = 62.161.99.115

3-2-6-3. Quelle est la plus petite adresse possible dans ce sous-réseau ?

  • SubnetID+1=62.161.96.1 .
    Qui est d'ailleurs l'adresse de la passerelle, c'est un choix de FTCI, pas une obligation. Toute adresse dans le même sous-réseau aurait aussi bien fait l'affaire.

3-2-6-4. Quelle est la plus grande adresse possible dans ce sous-réseau ?

  • C'est SubnetID+!SubnetMask-1
    Pourquoi ?
    !SubnetMask-1 correspond à la plus grande HostID possible dans ce sous-réseau,
    !SubnetMask correspondant à l'adresse de « l'hôte de broadcast »
SubnetID: 0011 1110 . 1010 0001 . 0110 0000 . 0000 000
Masque de sous-réseau-1 : 0000 0000 . 0000 0000 . 0000 0111 . 1111 1110
Plus grande adresse possible : (+) 0011 1110 . 1010 0001 . 0110 0111 . 1111 1110
donc en décimal : 62.161.103.254
L'opération est une somme binaire. Le résultat était prévisible, une fois encore, en regardant les informations du client DHCP. En effet, l'adresse de broadcast pour le sous-réseau étudié est 62.161.103.255 (HostID avec tous les bits à 1).

C'est bien, n'est-ce pas, de pouvoir donner une explication rationnelle à tous ces paramètres IP plus ou moins obscurs à première vue…

4. Les sockets

4-1. Une oreille dans chaque port

4-1-1. Adresse, port et socket

Imaginons la situation suivante (fréquente sur des petits réseaux).

Un seul « serveur » (entendez par là une machine) héberge plusieurs services bien connus des internautes :

  • un serveur web (HTTP) ;
  • un serveur de fichiers (FTP) ;
  • un serveur de messagerie (SMTP et POP3).

Tous ces services cohabitent donc sur un hôte disposant d'une seule adresse IP, disons 62.161.120.45 (pour fixer les idées) et fonctionnent sans problème. Vous êtes-vous posé la question de savoir par quel prodige tout ne se mélange pas ? Comment se fait-il que le navigateur du client qui invoque l'URL http://62.161.120.45/default.html voit bien arriver la page demandée, alors que le client qui se connecte sur le serveur POP 62.161.120.45 va pouvoir y récupérer son courrier ?

Plus fort encore, pendant qu'un client consulte la page http://62.161.120.45/default.html, un autre consulte http://62.161.120.45/sommaire.html. Et chaque client reçoit bien la page qu'il demande…

Grâce aux ports ! Les ports sont des numéros d'identification qui permettent de spécifier le service concerné. Ce numéro de port est écrit sur deux octets, ce qui donne 65 535 ports possibles (parce que le port 0 n'est, à ma connaissance, pas utilisé).

La combinaison « adresse IP:numéro de port »  constitue ce que l'on appelle une « socket » (qui veut dire à peu près « connecteur » en anglais).

Une socket identifie pleinement le service qui est concerné sur une machine donnée.

4-1-2. Le serveur et le client

Les serveurs ont une fonction particulière : ils doivent envoyer des informations pertinentes aux clients qui en réclament. Comme un serveur ne convient pas d'un rendez-vous avec le client, il doit rester attentif en permanence pour ne pas risquer de rater une question. Pour ce faire, on y installe des « daemons », petits programmes qui tournent en tâche de fond et qui écoutent continuellement  sur un numéro de port donné. Il y a des conventions pour attribuer ces ports sur des services connus, par exemple le port 80 pour HTTP, le port 110 pour POP3, le port 21 pour FTP. Il faut qu'il y ait des conventions de ce genre pour que les clients puissent atteindre ces services.

Lorsque l'on écrit http://62.161.120.45, on ne spécifie pas de port ; sous-entendu, il s'agit du port 80 parce que l'on invoque un service HTTP. Il serait possible d'écrire : http://62.161.120.45:80 Ici, on spécifie le port. Certaines protections triviales consistent justement à forcer un service à ne pas employer le port standard. Un administrateur pourrait décider de mettre son serveur HTTP à l'écoute du port 88. Dans ce cas, si l'utilisateur n'est pas au courant de cette particularité, il ne pourra pas accéder à ce serveur (sauf s'il dispose d'un scanner de ports et qu'il découvre la supercherie).

Image non disponible

En revanche, le client qui émet la requête ne dispose pas de port d'écoute attitré. Ce n'est pas un serveur, c'est un client ; il n'a donc rien à écouter d'autre que les réponses à ses questions. Il faut donc, lorsqu'il envoie sa requête, qu'il spécifie sur quel port il va écouter la réponse, de manière à ce que le serveur puisse construire une socket efficace pour ladite réponse.

Vous êtes-vous demandé par quel miracle, si vous ouvrez deux fois votre navigateur pour afficher deux pages différentes sur le même serveur, les informations ne se mélangent pas ?

C'est parce que les deux sessions du navigateur indiquent des ports de réponse différents ! C'est le NOS du client qui choisit les ports de réponse en fonction de ceux qui sont disponibles sur la machine.

Image non disponible

4-1-3. Un port d'écoute est une porte ouverte

Lorsqu'un port est ouvert à l'écoute sur un  service serveur, c'est une porte ouverte par laquelle un intrus peut entrer.

Ce détail nous mène directement aux problèmes de sécurité et d'intrusions. Mais ne mélangeons pas tout, cette affaire est traitée ailleurs sur ce site.

4-2. Quelques infos supplémentaires

4-2-1. NAT, PAT et autres mascarades

Nous y reviendrons plus loin dans le chapitre consacré au routage, mais tant qu'on est dans les ports, autant dire quelques mots de ces techniques.

  • NAT (Network Address Translation) est une faculté dont dispose un routeur, de modifier les adresses IP des émetteurs lors du passage des datagrammes entre deux réseaux. Ça ne nous intéresse pas directement ici.
  • PAT (Port Access Translation) est une fonction qui permet de changer au passage le numéro de port dans le datagramme. Ça peut paraître tordu, mais il existe une foule d'applications possibles pour cette propriété.
  • MASQUERADE, qui est un mélange des deux (NAT, PAT) est une fonction très intéressante pour connecter tout un réseau local construit sur une classe IP privée à l'Internet. La passerelle utilisera son IP publique (côté Internet) pour faire du NAT sur les adresses privées du réseau local et fera également du PAT pour savoir à qui il faudra transmettre les réponses.
  • Le principe de fonctionnement et la façon de construire une telle passerelle sont décrits dans le chapitre MASQUERADE, ailleurs sur ce site.

4-2-2. La liste des ports réservés

Le mieux est de consulter la RFC 1700 qui définit les ports d'écoute standards.

(Pour mémoire, un site de référence pour ce genre d'informations : http://www.iana.org/)

Ceux qui désirent consulter la liste exhaustive des « ports bien connus », peuvent le faire plus loin dans ce document.

5. Mode connecté, la connexion TCP

Le mode connecté de TCP n'est pas d'une grande simplicité. Il est conçu pour être robuste et tient compte des possibilités et des risques des grands réseaux maillés, à savoir :

  • les paquets peuvent circuler de la source vers la cible par des chemins différents (dans ce cas, ils arrivent sur la cible dans le désordre) ;
  • il peut s'en perdre en route ;
  • certains paquets peuvent arriver corrompus ;
  • etc.

TCP en revanche ne prend hélas pas en compte, ou très peu, les problèmes de piratage.

L'exemple est pris sur mon réseau local, mais le principe reste rigoureusement le même sur l'Internet. La manipulation sur le réseau local m'évite d'avoir à faire un filtrage plus ou moins pénible.

5-1. La séquence en gros

 
Sélectionnez
  1. No. Time    Source              Destination        Proto Info 
  2.  1 0.000000 00:20:18:b9:49:37   ff:ff:ff:ff:ff:ff   ARP  Who has 192.168.0.250? Tell 192.168.0.10 
  3.  2 0.000277 00:20:18:61:90:e3   00:20:18:b9:49:37   ARP  192.168.0.250 is at 00:20:18:61:90:e3 
  4.  3 0.000474 chris.maison.mrs    gateway1.maison.mrs TCP  1927 > pop3 [SYN] 
  5.  4 0.000885 gateway1.maison.mrs chris.maison.mrs    TCP  pop3 > 1927 [SYN, ACK] 
  6.  5 0.001111 chris.maison.mrs    gateway1.maison.mrs TCP  1927 > pop3 [ACK] 
  7.  6 0.049836 gateway1.maison.mrs chris.maison.mrs    POP  Response: +OK 
  8.  7 0.050586 chris.maison.mrs    gateway1.maison.mrs POP  Request: USER chris 
  9.  8 0.050998 gateway1.maison.mrs chris.maison.mrs    TCP  pop3 > 1927 [ACK] 
  10.  9 0.051511 gateway1.maison.mrs chris.maison.mrs    POP  Response: +OK 
  11. 10 0.051979 chris.maison.mrs    gateway1.maison.mrs POP  Request: PASS babaorum 
  12. 11 0.060769 gateway1.maison.mrs chris.maison.mrs    TCP  pop3 > 1927 [ACK] 
  13. 12 0.159888 gateway1.maison.mrs chris.maison.mrs    POP  Response: +OK Mailbox open, 0 messages 
  14. 13 0.160799 chris.maison.mrs    gateway1.maison.mrs POP  Request: STAT 
  15. 14 0.161552 gateway1.maison.mrs chris.maison.mrs    POP  Response: +OK 0 0 
  16. 15 0.162801 chris.maison.mrs    gateway1.maison.mrs POP  Request: QUIT 
  17. 16 0.167987 gateway1.maison.mrs chris.maison.mrs    POP  Response: +OK Sayonara 
  18. 17 0.168562 chris.maison.mrs    gateway1.maison.mrs TCP  1927 > pop3 [FIN, ACK] 
  19. 18 0.168957 gateway1.maison.mrs chris.maison.mrs    TCP  pop3 > 1927 [ACK] 
  20. 19 0.169465 gateway1.maison.mrs chris.maison.mrs    TCP  pop3 > 1927 [FIN, ACK] 
  21. 20 0.169698 chris.maison.mrs    gateway1.maison.mrs TCP  1927 > pop3 [ACK] 

Pas moins de 20 trames, pour constater qu'il n'y a pas de nouveau courrier !

5-2. TCP en détail

5-2-1. Un petit coup d'ARP…

Les séquences 1 et 2 ne sont pas inintéressantes, bien que ne faisant pas directement partie du protocole TCP. C'est de l'ARP, ça vient de la couche basse d'Ethernet,

  • Trame 1 :
    Mon poste n'a pas en mémoire la correspondance MAC Address/IP pour le serveur. Il pose donc la question sur un broadcast ARP :
    À qui appartient l'adresse IP 192.168.0.250 (le serveur) ? répondez à 192.168.0.10 (mon poste).
  • Trame 2 :
    Le serveur répond :
    192.168.0.250 à la MAC Address:00:20:18:61:90:e3

Si, sans trop attendre, je lance la commande ARP sur mon poste, voici le résultat :

 
Sélectionnez
  1. E:\> arp -a 
  2.  
  3. Interface : 192.168.0.10 on Interface 0x4000003 
  4. Adresse Internet Adresse physique Type 
  5. 192.168.0.250 00-20-18-61-90-e3 dynamique** 

Au bout d'un « certain temps » sans servir, cette ligne sera effacée de la mémoire. Rappelons qu'à l'intérieur d'un réseau, la couche d'accès physique (la plus basse du modèle DOD)  utilise exclusivement les adresses MAC.

5-2-2. Et la connexion TCP

5-2-2-1. Établissement de la connexion

Accrochez-vous, c'est un peu compliqué :)

Il faut d'abord savoir que les connexions TCP mettent en œuvre deux pointeurs de 32 bits, respectivement appelés :

  • Sequence number ;
  • Acknowledgment number.

Ces deux pointeurs permettent le suivi des paquets :

  • l'accusé réception pour la source pour chaque paquet émis ;
  • la remise en ordre des paquets reçus sur la cible.

D'autres pointeurs permettent également de fiabiliser la connexion, comme le checksum. Nous n'allons pas rentrer dans tous les détails, d'autres sites sur l'Internet le font déjà très bien. Le point particulier des numéros de séquence et d'acquittement va en revanche être regardé de près, parce qu'il est utilisé pour une attaque particulièrement redoutable : le « spoofing ».

Par ailleurs, un ensemble de « flags » (drapeaux, bits significatifs d'un état particulier) permet de donner des informations sur la nature du paquet.

Voyons ce que les livres disent.

L'établissement d'une connexion se fait en trois temps :

Image non disponible
1 2 3
Le client envoie une séquence de synchronisation, avec un numéro de séquence. Le Flag « SYN » est positionné Le serveur répond par une acceptation dans laquelle il renvoie :
- un numéro d'acquittement égal au numéro de séquence qu'il a reçu+1 ;
- un numéro de séquence. Les flags SYN et ACK sont positionnés.
Le client acquitte la réponse en envoyant :
- un numéro d'acquittement égal au numéro de séquence envoyé par le serveur +1 ;
- un numéro de séquence égal au numéro d'acquittement envoyé par le serveur.

Mais voyons cela sur l'exemple::

 
Sélectionnez
  1. Frame 3 (62 on wire, 62 captured) 
  2.    Arrival Time: Oct 12, 2000 11:19:15.3756 
  3.     Time delta from previous packet: 0.000197 seconds 
  4.     Frame Number: 3 
  5.     Packet Length: 62 bytes 
  6.     Capture Length: 62 bytes 
  7. Ethernet II 
  8.     Destination: 00:20:18:61:90:e3 (00:20:18:61:90:e3) 
  9.     Source: 00:20:18:b9:49:37 (00:20:18:b9:49:37) 
  10.     *** //Au niveau Ethernet, nous trouvons les deux adresses MAC 
  11.     Type: IP (0x0800) 
  12. Internet Protocol 
  13.     Version: 4 
  14.     Header length: 20 bytes 
  15.     Differentiated Services Field: 0x00 (DSCP 0x00: Default) 
  16.         0000 00.. = Differentiated Services Codepoint: Default (0x00) 
  17.         .... ..00 = Currently Unused: 0 
  18.     Total Length: 48 
  19.     Identification: 0x7624 
  20.     Flags: 0x04 
  21.         .1.. = Don't fragment: Set 
  22.         ..0. = More fragments: Not set 
  23.     Fragment offset: 0 
  24.     Time to live: 128 
  25.     Protocol: TCP (0x06) 
  26.     *** C'est bien un protocole TCP 
  27.     Header checksum: 0x024f (correct) 
  28.     Source: chris.maison.mrs (192.168.0.10) 
  29.     Destination: gateway1.maison.mrs (192.168.0.250) 
  30. Transmission Control Protocol, Src Port: 1927 (1927), Dst Port: pop3 (110) 
  31.     Source port: 1927 (1927) 
  32.     *** Le port du client (l'émetteur de cette trame) 
  33.     Destination port: pop3 (110) 
  34.     *** Le port de destination (110 pour POP3) 
  35.     Sequence number: 3662573346 
  36.     *** Et un numéro de séquence (à mémoriser pour la suite). 
  37.     Header length: 28 bytes 
  38.     Flags: 0x0002 (SYN) 
  39.         ..0. .... = Urgent: Not set 
  40.         ...0 .... = Acknowledgment: Not set 
  41.         .... 0... = Push: Not set 
  42.         .... .0.. = Reset: Not set 
  43.         .... ..1. = Syn: Set 
  44.         *** C'est bien une requête « SYN » 
  45.         .... ...0 = Fin: Not set 
  46.     Window size: 16384 
  47.     Checksum: 0x6f64 
  48.     Options: (8 bytes) 
  49.         Maximum segment size: 1460 bytes 
  50.         NOP 
  51.         NOP 
  52.         SACK permitted 

La seconde doit être la réponse du serveur POP. Normalement, c'est un ACK (Acknowledgment, Acceptation de la synchronisation du client, suivi d'une demande de synchronisation du numéro de séquence du serveur), c'est ce que disent les livres. Voyons ça :

 
Sélectionnez
  1. Frame 4 (62 on wire, 62 captured) 
  2.     Arrival Time: Oct 12, 2000 11:19:15.3760 
  3.     Time delta from previous packet: 0.000411 seconds 
  4.     Frame Number: 4 
  5.     Packet Length: 62 bytes 
  6.     Capture Length: 62 bytes 
  7. Ethernet II 
  8.     Destination: 00:20:18:b9:49:37 (00:20:18:b9:49:37) *** Le client 
  9.     Source: 00:20:18:61:90:e3 (00:20:18:61:90:e3)      *** Le serveur 
  10.     Type: IP (0x0800) 
  11. Internet Protocol 
  12.     Version: 4 
  13.     Header length: 20 bytes 
  14.     Differentiated Services Field: 0x00 (DSCP 0x00: Default) 
  15.         0000 00.. = Differentiated Services Codepoint: Default (0x00) 
  16.         .... ..00 = Currently Unused: 0 
  17.     Total Length: 48 
  18.     Identification: 0x088a 
  19.     Flags: 0x04 
  20.         .1.. = Don't fragment: Set 
  21.         ..0. = More fragments: Not set 
  22.     Fragment offset: 0 
  23.     Time to live: 64 
  24.     Protocol: TCP (0x06) 
  25.     Header checksum: 0xafe9 (correct) 
  26.     Source: gateway1.maison.mrs (192.168.0.250) 
  27.     Destination: chris.maison.mrs (192.168.0.10) 
  28. Transmission Control Protocol, Src Port: pop3 (110), Dst Port: 1927 (1927) 
  29.     Source port: pop3 (110) 
  30.     *** Le serveur continue sur le port 110 
  31.     Destination port: 1927 (1927) 
  32.     *** Et répond bien sur le port ouvert par le client 
  33.     Sequence number: 4089248825 
  34.     *** Le numéro de séquence proposé par le serveur 
  35.     Acknowledgement number: 3662573347 
  36.     *** Rappelez-vous, le n° de séquence du client était 3662573346 
  37.     *** Le numéro d'acquittement est 3662573346 + 1 
  38.     Header length: 28 bytes 
  39.     Flags: 0x0012 (SYN, ACK) 
  40.         ..0. .... = Urgent: Not set 
  41.         ...1 .... = Acknowledgment: Set 
  42.         *** Nous avons bien un acquittement de la part du serveur 
  43.         .... 0... = Push: Not set 
  44.         .... .0.. = Reset: Not set 
  45.         .... ..1. = Syn: Set 
  46.         *** Et une demande de synchronisation (sur le numéro de séquence 4089248825) 
  47.         .... ...0 = Fin: Not set 
  48.     Window size: 32120 
  49.     Checksum: 0x41e4 
  50.     Options: (8 bytes) 
  51.         Maximum segment size: 1460 bytes 
  52.         NOP 
  53.         NOP 
  54.         SACK permitted 

Ici, nous devrions trouver un acquittement du client sur le numéro de séquence 4089248825

 
Sélectionnez
  1. Frame 5 (60 on wire, 60 captured) 
  2.     Arrival Time: Oct 12, 2000 11:19:15.3762 
  3.     Time delta from previous packet: 0.000226 seconds 
  4.     Frame Number: 5 
  5.     Packet Length: 60 bytes 
  6.     Capture Length: 60 bytes 
  7. Ethernet II 
  8.     Destination: 00:20:18:61:90:e3 (00:20:18:61:90:e3) 
  9.     Source: 00:20:18:b9:49:37 (00:20:18:b9:49:37) 
  10.     *** C'est bien le client qui répond au serveur 
  11.     Type: IP (0x0800) 
  12. Internet Protocol 
  13.     Version: 4 
  14.     Header length: 20 bytes 
  15.     Differentiated Services Field: 0x00 (DSCP 0x00: Default) 
  16.         0000 00.. = Differentiated Services Codepoint: Default (0x00) 
  17.         .... ..00 = Currently Unused: 0 
  18.     Total Length: 40 
  19.     Identification: 0x7625 
  20.     Flags: 0x04 
  21.         .1.. = Don't fragment: Set 
  22.         ..0. = More fragments: Not set 
  23.     Fragment offset: 0 
  24.     Time to live: 128 
  25.     Protocol: TCP (0x06) 
  26.     Header checksum: 0x0256 (correct) 
  27.     Source: chris.maison.mrs (192.168.0.10) 
  28.     Destination: gateway1.maison.mrs (192.168.0.250) 
  29. Transmission Control Protocol, Src Port: 1927 (1927), Dst Port: pop3 (110) 
  30.     Source port: 1927 (1927) 
  31.     Destination port: pop3 (110) 
  32.     *** Les ports ne sont toujours pas changés 
  33.     Sequence number: 3662573347 
  34.     *** souvenez-vous: « Acknowledgement number: 3662573347 » 
  35.     Acknowledgement number: 4089248826 
  36.     *** comme tout à l'heure, 4089248825 + 1 
  37.     Header length: 20 bytes 
  38.     Flags: 0x0010 (ACK) 
  39.         ..0. .... = Urgent: Not set 
  40.         ...1 .... = Acknowledgment: Set 
  41.         *** Il n'y a bien qu'un acquittement. 
  42.         .... 0... = Push: Not set 
  43.         .... .0.. = Reset: Not set 
  44.         .... ..0. = Syn: Not set 
  45.         .... ...0 = Fin: Not set 
  46.     Window size: 17520 
  47.     Checksum: 0xa7b0 

C'est bien comme dans les livres, ouf !

5-2-2-2. La transmission des données

Que disent les livres ? Ils disent que maintenant, les échanges de données vont se faire.

  • Le flag PUSH sert à signaler à TCP qu'il doit transmettre les données reçues aux couches supérieures.
  • Chaque paquet aura :
    • pour numéro d'acquittement le numéro de séquence du dernier paquet reçu, augmenté du nombre d'octets de données qu'il contenait ;
    • pour numéro de séquence le numéro d'acquittement du dernier paquet reçu.

Sur le protocole POP3, c'est le serveur qui va envoyer un message de bienvenue. La trame qui suit doit donc provenir du serveur, elle doit contenir :

  • un acquittement du numéro de séquence de la trame précédente :3662573347, puisque la trame 5 ne contenant pas de données ;
  • un numéro de séquence égal au numéro d'acquittement de la trame précédente :4089248826.
 
Sélectionnez
  1. Frame 6 (103 on wire, 103 captured) 
  2.     Arrival Time: Oct 12, 2000 11:19:15.4249 
  3.     Time delta from previous packet: 0.048725 seconds 
  4.     Frame Number: 6 
  5.     Packet Length: 103 bytes 
  6.     Capture Length: 103 bytes 
  7. Ethernet II 
  8.     Destination: 00:20:18:b9:49:37 (00:20:18:b9:49:37) 
  9.     Source: 00:20:18:61:90:e3 (00:20:18:61:90:e3) 
  10.     Type: IP (0x0800) 
  11. Internet Protocol 
  12.     Version: 4 
  13.     Header length: 20 bytes 
  14.     Differentiated Services Field: 0x00 (DSCP 0x00: Default) 
  15.         0000 00.. = Differentiated Services Codepoint: Default (0x00) 
  16.         .... ..00 = Currently Unused: 0 
  17.     Total Length: 89 
  18.     Identification: 0x088b 
  19.     Flags: 0x04 
  20.         .1.. = Don't fragment: Set 
  21.         ..0. = More fragments: Not set 
  22.     Fragment offset: 0 
  23.     Time to live: 64 
  24.     Protocol: TCP (0x06) 
  25.     Header checksum: 0xafbf (correct) 
  26.     Source: gateway1.maison.mrs (192.168.0.250) 
  27.     Destination: chris.maison.mrs (192.168.0.10) 
  28.     *** C'est bien le serveur qui répond. 
  29. Transmission Control Protocol, Src Port: pop3 (110), Dst Port: 1927 (1927) 
  30.     Source port: pop3 (110) 
  31.     Destination port: 1927 (1927) 
  32.     Sequence number: 4089248826 
  33.     Acknowledgement number: 3662573347 
  34.     *** Nous partons bien sur les numéros de séquence et d'acquittement définis 
  35.     Header length: 20 bytes 
  36.     Flags: 0x0018 (PSH, ACK) 
  37.         ..0. .... = Urgent: Not set 
  38.         ...1 .... = Acknowledgment: Set 
  39.         *** L'acquittement au paquet précédent est donné 
  40.         .... 1... = Push: Set 
  41.         *** Il va y avoir des données... 
  42.         .... .0.. = Reset: Not set 
  43.         .... ..0. = Syn: Not set 
  44.         .... ...0 = Fin: Not set 
  45.     Window size: 32120 
  46.     Checksum: 0xa343 
  47. Post Office Protocol 
  48.     Response: +OK 
  49.     Response Arg: POP3 gateway1.maison.mrs v7.64 server ready 
  50.     *** Et voilà les données. 

Pour le moment, tout se passe encore conformément aux écritures. Voyons la suite.

Le paquet précédent contient les données :

+OK POP3 gateway1.maison.mrs v7.64 server ready

Ceci nous fait 47 octets (il ne faut pas oublier de compter les espaces, ce sont des caractères comme les autres). Il ne faut pas oublier non plus qu'une ligne de texte se termine par les caractères CR (retour à la ligne) et LF (saut de ligne), ce qui nous fait deux caractères de plus, soit au total 49 octets.

Normalement :

  • le numéro d'acquittement du prochain paquet devrait donc être 4089248826+49=4089248875 (séquence + 49) ;
  • le numéro de séquence devrait être 3662573347.

Le client doit maintenant envoyer son login. Nous devrions donc trouver un PUSH et un ACK.

 
Sélectionnez
  1. Frame 7 (66 on wire, 66 captured) 
  2.     Arrival Time: Oct 12, 2000 11:19:15.4257 
  3.     Time delta from previous packet: 0.000750 seconds 
  4.     Frame Number: 7 
  5.     Packet Length: 66 bytes 
  6.     Capture Length: 66 bytes 
  7. Ethernet II 
  8.     Destination: 00:20:18:61:90:e3 (00:20:18:61:90:e3) 
  9.     Source: 00:20:18:b9:49:37 (00:20:18:b9:49:37) 
  10.     Type: IP (0x0800) 
  11. Internet Protocol 
  12.     Version: 4 
  13.     Header length: 20 bytes 
  14.     Differentiated Services Field: 0x00 (DSCP 0x00: Default) 
  15.         0000 00.. = Differentiated Services Codepoint: Default (0x00) 
  16.         .... ..00 = Currently Unused: 0 
  17.     Total Length: 52 
  18.     Identification: 0x7626 
  19.     Flags: 0x04 
  20.         .1.. = Don't fragment: Set 
  21.         ..0. = More fragments: Not set 
  22.     Fragment offset: 0 
  23.     Time to live: 128 
  24.     Protocol: TCP (0x06) 
  25.     Header checksum: 0x0249 (correct) 
  26.     Source: chris.maison.mrs (192.168.0.10) 
  27.     Destination: gateway1.maison.mrs (192.168.0.250) 
  28.     *** C'est bien le client qui s'adresse au serveur 
  29. Transmission Control Protocol, Src Port: 1927 (1927), Dst Port: pop3 (110) 
  30.     Source port: 1927 (1927) 
  31.     Destination port: pop3 (110) 
  32.     Sequence number: 3662573347 
  33.     *** Oui, c'est l'Acknowledgment number du paquet précédent 
  34.     Acknowledgement number: 4089248875 
  35.     *** OUI!!! C'est le Sequence number du paquet précédent augmenté de 49 
  36.     Header length: 20 bytes 
  37.     Flags: 0x0018 (PSH, ACK) 
  38.         ..0. .... = Urgent: Not set 
  39.         ...1 .... = Acknowledgment: Set 
  40.         *** voici l'ACK... 
  41.         .... 1... = Push: Set 
  42.         *** et voilà le PUSH, donc il y aura des données 
  43.         .... .0.. = Reset: Not set 
  44.         .... ..0. = Syn: Not set 
  45.         .... ...0 = Fin: Not set 
  46.     Window size: 17471 
  47.     Checksum: 0x0da4 
  48. Post Office Protocol 
  49.     Request: USER 
  50.     Request Arg: chris 
  51.     *** Ce sont les données. 

Tout s'est passé comme prévu.

Bien. Comme nous connaissons par cœur le protocole POP, nous savons que le serveur va envoyer la réponse « +OK » et une invite à communiquer le mot de passe.

Nous devrions trouver :

  • un ACK et un PUSH ;
  • un Sequence number égal à l'Acknowledgment number du paquet  précédent ;
  • un Acknowledgment number égal au Sequence number du paquet précédent +12 (comptez les octets de données du paquet précédent).
 
Sélectionnez
  1. Frame 8 (60 on wire, 60 captured) 
  2.     Arrival Time: Oct 12, 2000 11:19:15.4261 
  3.     Time delta from previous packet: 0.000412 seconds 
  4.     Frame Number: 8 
  5.     Packet Length: 60 bytes 
  6.     Capture Length: 60 bytes 
  7. Ethernet II 
  8.     Destination: 00:20:18:b9:49:37 (00:20:18:b9:49:37) 
  9.     Source: 00:20:18:61:90:e3 (00:20:18:61:90:e3) 
  10.     Type: IP (0x0800) 
  11. Internet Protocol 
  12.     Version: 4 
  13.     Header length: 20 bytes 
  14.     Differentiated Services Field: 0x00 (DSCP 0x00: Default) 
  15.         0000 00.. = Differentiated Services Codepoint: Default (0x00) 
  16.         .... ..00 = Currently Unused: 0 
  17.     Total Length: 40 
  18.     Identification: 0x088c 
  19.     Flags: 0x04 
  20.         .1.. = Don't fragment: Set 
  21.         ..0. = More fragments: Not set 
  22.     Fragment offset: 0 
  23.     Time to live: 64 
  24.     Protocol: TCP (0x06) 
  25.     Header checksum: 0xafef (correct) 
  26.     Source: gateway1.maison.mrs (192.168.0.250) 
  27.     Destination: chris.maison.mrs (192.168.0.10) 
  28.     *** C'est bien le serveur qui répond. 
  29. Transmission Control Protocol, Src Port: pop3 (110), Dst Port: 1927 (1927) 
  30.     Source port: pop3 (110) 
  31.     Destination port: 1927 (1927) 
  32.     Sequence number: 4089248875 
  33.     Acknowledgement number: 3662573359 =3662573347+12. Toujours normal, 12 octets de données dans le paquet précédent. 
  34.     Header length: 20 bytes 
  35.     Flags: 0x0010 (ACK) 
  36.         ..0. .... = Urgent: Not set 
  37.         ...1 .... = Acknowledgment: Set 
  38.         *** Voici ACK... 
  39.         .... 0... = Push: Not set 
  40.         *** Mais il n'y a pas de PUSH, donc pas de données? 
  41.         .... .0.. = Reset: Not set 
  42.         .... ..0. = Syn: Not set 
  43.         .... ...0 = Fin: Not set 
  44.     Window size: 32120 
  45.     Checksum: 0x6e6b 

Ben non, il n'y a pas eu de données. Comme on est parfaitement certain que le serveur doit en envoyer (parce que l'on connaît le protocole POP3 par cœur), c'est que c'est encore le serveur qui va parler…

 
Sélectionnez
  1. Frame 9 (95 on wire, 95 captured) 
  2.     Arrival Time: Oct 12, 2000 11:19:15.4266 
  3.     Time delta from previous packet: 0.000513 seconds 
  4.     Frame Number: 9 
  5.     Packet Length: 95 bytes 
  6.     Capture Length: 95 bytes 
  7. Ethernet II 
  8.     Destination: 00:20:18:b9:49:37 (00:20:18:b9:49:37) 
  9.     Source: 00:20:18:61:90:e3 (00:20:18:61:90:e3) 
  10.     Type: IP (0x0800) 
  11. Internet Protocol 
  12.     Version: 4 
  13.     Header length: 20 bytes 
  14.     Differentiated Services Field: 0x00 (DSCP 0x00: Default) 
  15.         0000 00.. = Differentiated Services Codepoint: Default (0x00) 
  16.         .... ..00 = Currently Unused: 0 
  17.     Total Length: 81 
  18.     Identification: 0x088d 
  19.     Flags: 0x04 
  20.         .1.. = Don't fragment: Set 
  21.         ..0. = More fragments: Not set 
  22.     Fragment offset: 0 
  23.     Time to live: 64 
  24.     Protocol: TCP (0x06) 
  25.     Header checksum: 0xafc5 (correct) 
  26.     Source: gateway1.maison.mrs (192.168.0.250) 
  27.     Destination: chris.maison.mrs (192.168.0.10) 
  28.     *** Oui, c'est encore le serveur 
  29. Transmission Control Protocol, Src Port: pop3 (110), Dst Port: 1927 (1927) 
  30.     Source port: pop3 (110) 
  31.     Destination port: 1927 (1927) 
  32.     Sequence number: 4089248875 
  33.     Acknowledgement number: 3662573359 
  34.     *** Et les numéros sont identiques au paquet précédent (normal, pas de données dans le paquet précédent) 
  35.     Header length: 20 bytes 
  36.     Flags: 0x0018 (PSH, ACK) 
  37.         ..0. .... = Urgent: Not set 
  38.         ...1 .... = Acknowledgment: Set 
  39.         .... 1... = Push: Set 
  40.         *** Ce coup-ci, il y a des données. 
  41.         .... .0.. = Reset: Not set 
  42.         .... ..0. = Syn: Not set 
  43.         .... ...0 = Fin: Not set 
  44.     Window size: 32120 
  45.     Checksum: 0x6428 
  46. Post Office Protocol 
  47.     Response: +OK 
  48.     Response Arg: User name accepted, password please 
  49.     *** Les voilà! 

Et voilà. Le client va envoyer son mot de passe, le dialogue continue.

 
Sélectionnez
  1. Frame 10 (68 on wire, 68 captured) 
  2.     Arrival Time: Oct 12, 2000 11:19:15.4271 
  3.     Time delta from previous packet: 0.000468 seconds 
  4.     Frame Number: 10 
  5.     Packet Length: 68 bytes 
  6.     Capture Length: 68 bytes 
  7. Ethernet II 
  8.     Destination: 00:20:18:61:90:e3 (00:20:18:61:90:e3) 
  9.     Source: 00:20:18:b9:49:37 (00:20:18:b9:49:37) 
  10.     Type: IP (0x0800) 
  11. Internet Protocol 
  12.     Version: 4 
  13.     Header length: 20 bytes 
  14.     Differentiated Services Field: 0x00 (DSCP 0x00: Default) 
  15.         0000 00.. = Differentiated Services Codepoint: Default (0x00) 
  16.         .... ..00 = Currently Unused: 0 
  17.     Total Length: 54 
  18.     Identification: 0x7627 
  19.     Flags: 0x04 
  20.         .1.. = Don't fragment: Set 
  21.         ..0. = More fragments: Not set 
  22.     Fragment offset: 0 
  23.     Time to live: 128 
  24.     Protocol: TCP (0x06) 
  25.     Header checksum: 0x0246 (correct) 
  26.     Source: chris.maison.mrs (192.168.0.10) 
  27.     Destination: gateway1.maison.mrs (192.168.0.250) 
  28.  
  29.     *** C'est bien le client 
  30. Transmission Control Protocol, Src Port: 1927 (1927), Dst Port: pop3 (110) 
  31.     Source port: 1927 (1927) 
  32.     Destination port: pop3 (110) 
  33.     Sequence number: 3662573359 
  34.     *** = Acknowledgement number précédent 
  35.     Acknowledgement number: 4089248916 
  36.     *** = Sequence number précédent augmenté de 41, nous avons compris le principe 
  37.     Header length: 20 bytes 
  38.     Flags: 0x0018 (PSH, ACK) 
  39.         ..0. .... = Urgent: Not set 
  40.         ...1 .... = Acknowledgment: Set 
  41.         .... 1... = Push: Set 
  42.         *** Il va y avoir des données. 
  43.         .... .0.. = Reset: Not set 
  44.         .... ..0. = Syn: Not set 
  45.         .... ...0 = Fin: Not set 
  46.   Window size: 17430 
  47.   Checksum: 0x8f50 
  48. Post Office Protocol 
  49.     Request: PASS 
  50.     Request Arg: epikoi 
  51.  
  52.     *** M**** alors! le mot de passe circule en clair ! 
  53.         rassurez-vous, ce n'est pas le bon que vous lisez :-) 
  54.         Mais le mot de passe circule vraiment en clair. Stupéfiant non?//** 

Bien. Il ne reste plus que 10 trames à regarder mais maintenant, ça va devenir monotone. Je vous laisse les analyser tout seul. Je vous conseille tout de même les trames 17, 18 19 et 20 qui servent à fermer proprement la connexion. C'est une procédure importante qui permet au serveur « d'oublier » cette connexion.

 
Sélectionnez
  1. Frame 11 (60 on wire, 60 captured) 
  2.     Arrival Time: Oct 12, 2000 11:19:15.4359 
  3.     Time delta from previous packet: 0.008790 seconds 
  4.     Frame Number: 11 
  5.     Packet Length: 60 bytes 
  6.     Capture Length: 60 bytes 
  7. Ethernet II 
  8.     Destination: 00:20:18:b9:49:37 (00:20:18:b9:49:37) 
  9.     Source: 00:20:18:61:90:e3 (00:20:18:61:90:e3) 
  10.     Type: IP (0x0800) 
  11. Internet Protocol 
  12.     Version: 4 
  13.     Header length: 20 bytes 
  14.     Differentiated Services Field: 0x00 (DSCP 0x00: Default) 
  15.         0000 00.. = Differentiated Services Codepoint: Default (0x00) 
  16.         .... ..00 = Currently Unused: 0 
  17.     Total Length: 40 
  18.     Identification: 0x088e 
  19.     Flags: 0x04 
  20.         .1.. = Don't fragment: Set 
  21.         ..0. = More fragments: Not set 
  22.     Fragment offset: 0 
  23.     Time to live: 64 
  24.     Protocol: TCP (0x06) 
  25.     Header checksum: 0xafed (correct) 
  26.     Source: gateway1.maison.mrs (192.168.0.250) 
  27.     Destination: chris.maison.mrs (192.168.0.10) 
  28. Transmission Control Protocol, Src Port: pop3 (110), Dst Port: 1927 (1927) 
  29.     Source port: pop3 (110) 
  30.     Destination port: 1927 (1927) 
  31.     Sequence number: 4089248916 
  32.     Acknowledgement number: 3662573373 
  33.     Header length: 20 bytes 
  34.     Flags: 0x0010 (ACK) 
  35.         ..0. .... = Urgent: Not set 
  36.         ...1 .... = Acknowledgment: Set 
  37.         .... 0... = Push: Not set 
  38.         .... .0.. = Reset: Not set 
  39.         .... ..0. = Syn: Not set 
  40.         .... ...0 = Fin: Not set 
  41.     Window size: 32120 
  42.     Checksum: 0x6e34 
  43.  
  44. Frame 12 (84 on wire, 84 captured) 
  45.     Arrival Time: Oct 12, 2000 11:19:15.5350 
  46.     Time delta from previous packet: 0.099119 seconds 
  47.     Frame Number: 12 
  48.     Packet Length: 84 bytes 
  49.     Capture Length: 84 bytes 
  50. Ethernet II 
  51.     Destination: 00:20:18:b9:49:37 (00:20:18:b9:49:37) 
  52.     Source: 00:20:18:61:90:e3 (00:20:18:61:90:e3) 
  53.     Type: IP (0x0800) 
  54. Internet Protocol 
  55.     Version: 4 
  56.     Header length: 20 bytes 
  57.     Differentiated Services Field: 0x00 (DSCP 0x00: Default) 
  58.         0000 00.. = Differentiated Services Codepoint: Default (0x00) 
  59.         .... ..00 = Currently Unused: 0 
  60.     Total Length: 70 
  61.     Identification: 0x088f 
  62.     Flags: 0x04 
  63.         .1.. = Don't fragment: Set 
  64.         ..0. = More fragments: Not set 
  65.     Fragment offset: 0 
  66.     Time to live: 64 
  67.     Protocol: TCP (0x06) 
  68.     Header checksum: 0xafce (correct) 
  69.     Source: gateway1.maison.mrs (192.168.0.250) 
  70.     Destination: chris.maison.mrs (192.168.0.10) 
  71. Transmission Control Protocol, Src Port: pop3 (110), Dst Port: 1927 (1927) 
  72.     Source port: pop3 (110) 
  73.     Destination port: 1927 (1927) 
  74.     Sequence number: 4089248916 
  75.     Acknowledgement number: 3662573373 
  76.     Header length: 20 bytes 
  77.     Flags: 0x0018 (PSH, ACK) 
  78.         ..0. .... = Urgent: Not set 
  79.         ...1 .... = Acknowledgment: Set 
  80.         .... 1... = Push: Set 
  81.         .... .0.. = Reset: Not set 
  82.         .... ..0. = Syn: Not set 
  83.         .... ...0 = Fin: Not set 
  84.     Window size: 32120 
  85.     Checksum: 0x8064 
  86. Post Office Protocol 
  87.     Response: +OK 
  88.     Response Arg: Mailbox open, 0 messages 
  89.  
  90. Frame 13 (60 on wire, 60 captured) 
  91.     Arrival Time: Oct 12, 2000 11:19:15.5359 
  92.     Time delta from previous packet: 0.000911 seconds 
  93.     Frame Number: 13 
  94.     Packet Length: 60 bytes 
  95.     Capture Length: 60 bytes 
  96. Ethernet II 
  97.     Destination: 00:20:18:61:90:e3 (00:20:18:61:90:e3) 
  98.     Source: 00:20:18:b9:49:37 (00:20:18:b9:49:37) 
  99.     Type: IP (0x0800) 
  100. Internet Protocol 
  101.     Version: 4 
  102.     Header length: 20 bytes 
  103.     Differentiated Services Field: 0x00 (DSCP 0x00: Default) 
  104.         0000 00.. = Differentiated Services Codepoint: Default (0x00) 
  105.         .... ..00 = Currently Unused: 0 
  106.     Total Length: 46 
  107.     Identification: 0x7628 
  108.     Flags: 0x04 
  109.         .1.. = Don't fragment: Set 
  110.         ..0. = More fragments: Not set 
  111.     Fragment offset: 0 
  112.     Time to live: 128 
  113.     Protocol: TCP (0x06) 
  114.     Header checksum: 0x024d (correct) 
  115.     Source: chris.maison.mrs (192.168.0.10) 
  116.     Destination: gateway1.maison.mrs (192.168.0.250) 
  117. Transmission Control Protocol, Src Port: 1927 (1927), Dst Port: pop3 (110) 
  118.     Source port: 1927 (1927) 
  119.     Destination port: pop3 (110) 
  120.     Sequence number: 3662573373 
  121.     Acknowledgement number: 4089248946 
  122.     Header length: 20 bytes 
  123.     Flags: 0x0018 (PSH, ACK) 
  124.         ..0. .... = Urgent: Not set 
  125.         ...1 .... = Acknowledgment: Set 
  126.         .... 1... = Push: Set 
  127.         .... .0.. = Reset: Not set 
  128.         .... ..0. = Syn: Not set 
  129.         .... ...0 = Fin: Not set 
  130.     Window size: 17400 
  131.     Checksum: 0x05d6 
  132. Post Office Protocol 
  133.     Request: STAT 
  134.  
  135. Frame 14 (63 on wire, 63 captured) 
  136.     Arrival Time: Oct 12, 2000 11:19:15.5366 
  137.     Time delta from previous packet: 0.000753 seconds 
  138.     Frame Number: 14 
  139.     Packet Length: 63 bytes 
  140.     Capture Length: 63 bytes 
  141. Ethernet II 
  142.     Destination: 00:20:18:b9:49:37 (00:20:18:b9:49:37) 
  143.     Source: 00:20:18:61:90:e3 (00:20:18:61:90:e3) 
  144.     Type: IP (0x0800) 
  145. Internet Protocol 
  146.     Version: 4 
  147.     Header length: 20 bytes 
  148.     Differentiated Services Field: 0x00 (DSCP 0x00: Default) 
  149.         0000 00.. = Differentiated Services Codepoint: Default (0x00) 
  150.         .... ..00 = Currently Unused: 0 
  151.     Total Length: 49 
  152.     Identification: 0x0890 
  153.     Flags: 0x04 
  154.         .1.. = Don't fragment: Set 
  155.         ..0. = More fragments: Not set 
  156.     Fragment offset: 0 
  157.     Time to live: 64 
  158.     Protocol: TCP (0x06) 
  159.     Header checksum: 0xafe2 (correct) 
  160.     Source: gateway1.maison.mrs (192.168.0.250) 
  161.     Destination: chris.maison.mrs (192.168.0.10) 
  162. Transmission Control Protocol, Src Port: pop3 (110), Dst Port: 1927 (1927) 
  163.     Source port: pop3 (110) 
  164.     Destination port: 1927 (1927) 
  165.     Sequence number: 4089248946 
  166.     Acknowledgement number: 3662573379 
  167.     Header length: 20 bytes 
  168.     Flags: 0x0018 (PSH, ACK) 
  169.         ..0. .... = Urgent: Not set 
  170.         ...1 .... = Acknowledgment: Set 
  171.         .... 1... = Push: Set 
  172.         .... .0.. = Reset: Not set 
  173.         .... ..0. = Syn: Not set 
  174.         .... ...0 = Fin: Not set 
  175.     Window size: 32120 
  176.     Checksum: 0x8d62 
  177. Post Office Protocol 
  178.     Response: +OK 
  179.     Response Arg: 0 0 
  180.  
  181. Frame 15 (60 on wire, 60 captured) 
  182.     Arrival Time: Oct 12, 2000 11:19:15.5379 
  183.     Time delta from previous packet: 0.001249 seconds 
  184.     Frame Number: 15 
  185.     Packet Length: 60 bytes 
  186.     Capture Length: 60 bytes 
  187. Ethernet II 
  188.     Destination: 00:20:18:61:90:e3 (00:20:18:61:90:e3) 
  189.     Source: 00:20:18:b9:49:37 (00:20:18:b9:49:37) 
  190.     Type: IP (0x0800) 
  191. Internet Protocol 
  192.     Version: 4 
  193.     Header length: 20 bytes 
  194.     Differentiated Services Field: 0x00 (DSCP 0x00: Default) 
  195.         0000 00.. = Differentiated Services Codepoint: Default (0x00) 
  196.         .... ..00 = Currently Unused: 0 
  197.     Total Length: 46 
  198.     Identification: 0x7629 
  199.     Flags: 0x04 
  200.         .1.. = Don't fragment: Set 
  201.         ..0. = More fragments: Not set 
  202.     Fragment offset: 0 
  203.     Time to live: 128 
  204.     Protocol: TCP (0x06) 
  205.     Header checksum: 0x024c (correct) 
  206.     Source: chris.maison.mrs (192.168.0.10) 
  207.     Destination: gateway1.maison.mrs (192.168.0.250) 
  208. Transmission Control Protocol, Src Port: 1927 (1927), Dst Port: pop3 (110) 
  209.     Source port: 1927 (1927) 
  210.     Destination port: pop3 (110) 
  211.     Sequence number: 3662573379 
  212.     Acknowledgement number: 4089248955 
  213.     Header length: 20 bytes 
  214.     Flags: 0x0018 (PSH, ACK) 
  215.         ..0. .... = Urgent: Not set 
  216.         ...1 .... = Acknowledgment: Set 
  217.         .... 1... = Push: Set 
  218.         .... .0.. = Reset: Not set 
  219.         .... ..0. = Syn: Not set 
  220.         .... ...0 = Fin: Not set 
  221.     Window size: 17391 
  222.     Checksum: 0xffce 
  223. Post Office Protocol 
  224.     Request: QUIT 
  225.  
  226. Frame 16 (68 on wire, 68 captured) 
  227.     Arrival Time: Oct 12, 2000 11:19:15.5431 
  228.     Time delta from previous packet: 0.005186 seconds 
  229.     Frame Number: 16 
  230.     Packet Length: 68 bytes 
  231.     Capture Length: 68 bytes 
  232. Ethernet II 
  233.     Destination: 00:20:18:b9:49:37 (00:20:18:b9:49:37) 
  234.     Source: 00:20:18:61:90:e3 (00:20:18:61:90:e3) 
  235.     Type: IP (0x0800) 
  236. Internet Protocol 
  237.     Version: 4 
  238.     Header length: 20 bytes 
  239.     Differentiated Services Field: 0x00 (DSCP 0x00: Default) 
  240.         0000 00.. = Differentiated Services Codepoint: Default (0x00) 
  241.         .... ..00 = Currently Unused: 0 
  242.     Total Length: 54 
  243.     Identification: 0x0891 
  244.     Flags: 0x04 
  245.         .1.. = Don't fragment: Set 
  246.         ..0. = More fragments: Not set 
  247.     Fragment offset: 0 
  248.     Time to live: 64 
  249.     Protocol: TCP (0x06) 
  250.     Header checksum: 0xafdc (correct) 
  251.     Source: gateway1.maison.mrs (192.168.0.250) 
  252.     Destination: chris.maison.mrs (192.168.0.10) 
  253. Transmission Control Protocol, Src Port: pop3 (110), Dst Port: 1927 (1927) 
  254.     Source port: pop3 (110) 
  255.     Destination port: 1927 (1927) 
  256.     Sequence number: 4089248955 
  257.     Acknowledgement number: 3662573385 
  258.     Header length: 20 bytes 
  259.     Flags: 0x0018 (PSH, ACK) 
  260.         ..0. .... = Urgent: Not set 
  261.         ...1 .... = Acknowledgment: Set 
  262.         .... 1... = Push: Set 
  263.         .... .0.. = Reset: Not set 
  264.         .... ..0. = Syn: Not set 
  265.         .... ...0 = Fin: Not set 
  266.     Window size: 32120 
  267.     Checksum: 0x3cde 
  268. Post Office Protocol 
  269.     Response: +OK 
  270.     Response Arg: Sayonara 
  271.  
  272. Frame 17 (60 on wire, 60 captured) 
  273.     Arrival Time: Oct 12, 2000 11:19:15.5437 
  274.     Time delta from previous packet: 0.000575 seconds 
  275.     Frame Number: 17 
  276.     Packet Length: 60 bytes 
  277.     Capture Length: 60 bytes 
  278. Ethernet II 
  279.     Destination: 00:20:18:61:90:e3 (00:20:18:61:90:e3) 
  280.     Source: 00:20:18:b9:49:37 (00:20:18:b9:49:37) 
  281.     Type: IP (0x0800) 
  282. Internet Protocol 
  283.     Version: 4 
  284.     Header length: 20 bytes 
  285.     Differentiated Services Field: 0x00 (DSCP 0x00: Default) 
  286.         0000 00.. = Differentiated Services Codepoint: Default (0x00) 
  287.         .... ..00 = Currently Unused: 0 
  288.     Total Length: 40 
  289.     Identification: 0x762a 
  290.     Flags: 0x04 
  291.         .1.. = Don't fragment: Set 
  292.         ..0. = More fragments: Not set 
  293.     Fragment offset: 0 
  294.     Time to live: 128 
  295.     Protocol: TCP (0x06) 
  296.     Header checksum: 0x0251 (correct) 
  297.     Source: chris.maison.mrs (192.168.0.10) 
  298.     Destination: gateway1.maison.mrs (192.168.0.250) 
  299. Transmission Control Protocol, Src Port: 1927 (1927), Dst Port: pop3 (110) 
  300.     Source port: 1927 (1927) 
  301.     Destination port: pop3 (110) 
  302.     Sequence number: 3662573385 
  303.     Acknowledgement number: 4089248969 
  304.     Header length: 20 bytes 
  305.     Flags: 0x0011 (FIN, ACK) 
  306.         ..0. .... = Urgent: Not set 
  307.         ...1 .... = Acknowledgment: Set 
  308.         .... 0... = Push: Not set 
  309.         .... .0.. = Reset: Not set 
  310.         .... ..0. = Syn: Not set 
  311.         .... ...1 = Fin: Set 
  312.     Window size: 17377 
  313.     Checksum: 0xa789 
  314.  
  315. Frame 18 (60 on wire, 60 captured) 
  316.     Arrival Time: Oct 12, 2000 11:19:15.5441 
  317.     Time delta from previous packet: 0.000395 seconds 
  318.     Frame Number: 18 
  319.     Packet Length: 60 bytes 
  320.     Capture Length: 60 bytes 
  321. Ethernet II 
  322.     Destination: 00:20:18:b9:49:37 (00:20:18:b9:49:37) 
  323.     Source: 00:20:18:61:90:e3 (00:20:18:61:90:e3) 
  324.     Type: IP (0x0800) 
  325. Internet Protocol 
  326.     Version: 4 
  327.     Header length: 20 bytes 
  328.     Differentiated Services Field: 0x00 (DSCP 0x00: Default) 
  329.         0000 00.. = Differentiated Services Codepoint: Default (0x00) 
  330.         .... ..00 = Currently Unused: 0 
  331.     Total Length: 40 
  332.     Identification: 0x0892 
  333.     Flags: 0x04 
  334.         .1.. = Don't fragment: Set 
  335.         ..0. = More fragments: Not set 
  336.     Fragment offset: 0 
  337.     Time to live: 64 
  338.     Protocol: TCP (0x06) 
  339.     Header checksum: 0xafe9 (correct) 
  340.     Source: gateway1.maison.mrs (192.168.0.250) 
  341.     Destination: chris.maison.mrs (192.168.0.10) 
  342. Transmission Control Protocol, Src Port: pop3 (110), Dst Port: 1927 (1927) 
  343.     Source port: pop3 (110) 
  344.     Destination port: 1927 (1927) 
  345.     Sequence number: 4089248969 
  346.     Acknowledgement number: 3662573386 
  347.     Header length: 20 bytes 
  348.     Flags: 0x0010 (ACK) 
  349.         ..0. .... = Urgent: Not set 
  350.         ...1 .... = Acknowledgment: Set 
  351.         .... 0... = Push: Not set 
  352.         .... .0.. = Reset: Not set 
  353.         .... ..0. = Syn: Not set 
  354.         .... ...0 = Fin: Not set 
  355.     Window size: 32120 
  356.     Checksum: 0x6df2 
  357.  
  358. Frame 19 (60 on wire, 60 captured) 
  359.     Arrival Time: Oct 12, 2000 11:19:15.5446 
  360.     Time delta from previous packet: 0.000508 seconds 
  361.     Frame Number: 19 
  362.     Packet Length: 60 bytes 
  363.     Capture Length: 60 bytes 
  364. Ethernet II 
  365.     Destination: 00:20:18:b9:49:37 (00:20:18:b9:49:37) 
  366.     Source: 00:20:18:61:90:e3 (00:20:18:61:90:e3) 
  367.     Type: IP (0x0800) 
  368. Internet Protocol 
  369.     Version: 4 
  370.     Header length: 20 bytes 
  371.     Differentiated Services Field: 0x00 (DSCP 0x00: Default) 
  372.         0000 00.. = Differentiated Services Codepoint: Default (0x00) 
  373.         .... ..00 = Currently Unused: 0 
  374.     Total Length: 40 
  375.     Identification: 0x0893 
  376.     Flags: 0x04 
  377.         .1.. = Don't fragment: Set 
  378.         ..0. = More fragments: Not set 
  379.     Fragment offset: 0 
  380.     Time to live: 64 
  381.     Protocol: TCP (0x06) 
  382.     Header checksum: 0xafe8 (correct) 
  383.     Source: gateway1.maison.mrs (192.168.0.250) 
  384.     Destination: chris.maison.mrs (192.168.0.10) 
  385. Transmission Control Protocol, Src Port: pop3 (110), Dst Port: 1927 (1927) 
  386.     Source port: pop3 (110) 
  387.     Destination port: 1927 (1927) 
  388.     Sequence number: 4089248969 
  389.     Acknowledgement number: 3662573386 
  390.     Header length: 20 bytes 
  391.     Flags: 0x0011 (FIN, ACK) 
  392.         ..0. .... = Urgent: Not set 
  393.         ...1 .... = Acknowledgment: Set 
  394.         .... 0... = Push: Not set 
  395.         .... .0.. = Reset: Not set 
  396.         .... ..0. = Syn: Not set 
  397.         .... ...1 = Fin: Set 
  398.     Window size: 32120 
  399.     Checksum: 0x6df1 
  400.  
  401. Frame 20 (60 on wire, 60 captured) 
  402.     Arrival Time: Oct 12, 2000 11:19:15.5448 
  403.     Time delta from previous packet: 0.000233 seconds 
  404.     Frame Number: 20 
  405.     Packet Length: 60 bytes 
  406.     Capture Length: 60 bytes 
  407. Ethernet II 
  408.     Destination: 00:20:18:61:90:e3 (00:20:18:61:90:e3) 
  409.     Source: 00:20:18:b9:49:37 (00:20:18:b9:49:37) 
  410.     Type: IP (0x0800) 
  411. Internet Protocol 
  412.     Version: 4 
  413.     Header length: 20 bytes 
  414.     Differentiated Services Field: 0x00 (DSCP 0x00: Default) 
  415.         0000 00.. = Differentiated Services Codepoint: Default (0x00) 
  416.         .... ..00 = Currently Unused: 0 
  417.     Total Length: 40 
  418.     Identification: 0x762b 
  419.     Flags: 0x04 
  420.         .1.. = Don't fragment: Set 
  421.         ..0. = More fragments: Not set 
  422.     Fragment offset: 0 
  423.     Time to live: 128 
  424.     Protocol: TCP (0x06) 
  425.     Header checksum: 0x0250 (correct) 
  426.     Source: chris.maison.mrs (192.168.0.10) 
  427.     Destination: gateway1.maison.mrs (192.168.0.250) 
  428. Transmission Control Protocol, Src Port: 1927 (1927), Dst Port: pop3 (110) 
  429.     Source port: 1927 (1927) 
  430.     Destination port: pop3 (110) 
  431.     Sequence number: 3662573386 
  432.     Acknowledgement number: 4089248970 
  433.     Header length: 20 bytes 
  434.     Flags: 0x0010 (ACK) 
  435.         ..0. .... = Urgent: Not set 
  436.         ...1 .... = Acknowledgment: Set 
  437.         .... 0... = Push: Not set 
  438.         .... .0.. = Reset: Not set 
  439.         .... ..0. = Syn: Not set 
  440.         .... ...0 = Fin: Not set 
  441.     Window size: 17377 
  442.     Checksum: 0xa788 

Ce qu'il est intéressant d'étudier, c'est le mécanisme des numéros de séquence et d'acquittement. Parce que celui qui va être capable de prédire la séquence de ces numéros, s'il dispose d'outils qui savent bricoler les trames, pourra se faire passer pour un autre dans un dialogue TCP existant. C'est ce qu'on appelle le « spoofing », méthode de piratage délicate mais dangereuse.

Vous avez également la RFC 793 dont une traduction en français est disponible ici :

6. Mode non connecté, le protocole UDP

User Datagram Protocol. Ici, la discussion se fait sans trop de précautions. Le principe est le suivant :

  • celui qui doit parler s'adresse à son interlocuteur, la plupart du temps en posant une question, directement, sans vérifier que l'interlocuteur est présent et peut répondre ;
  • si la réponse ne vient pas, l'initiateur décidera de la stratégie à appliquer. En général, il n'y a pas trop de solutions :
    • répéter la question au même interlocuteur,
    • répéter la question à un autre interlocuteur (c'est le cas par exemple des résolutions de noms),
    • abandonner et arrêter le dialogue.

Parmi les usages les plus connus du mode sans connexion (UDP), notons :

  • la résolution des noms ou la résolution inverse des adresses (DNS) ;
  • la recherche d'une adresse IP dynamique (DHCP) ;
  • la plupart des jeux en réseau.

En général, partout où le paquet de données à transmettre peut tenir dans un seul datagramme.

À titre d'exemple, nous allons regarder ça sur quelque chose de nouveau : le protocole NTP (Network Time Protocol). C'est un protocole applicatif qui permet à un hôte de synchroniser son horloge sur un serveur de temps.

L'exemple est pris sous Linux par la commande :

 
Sélectionnez
  1. #ntpdate ntp0.oleane.net 

Comme d'habitude, le sniffer ne perd rien de la conversation…

 
Sélectionnez
  1. No. Source           Destination      Protocol Info 
  2. 16  193.248.36.34    ntp0.oleane.net  NTP      NTP 
  3. 17  ntp0.oleane.net  193.248.36.34    NTP      NTP 
  4. 18  193.248.36.34    ntp0.oleane.net  NTP      NTP 
  5. 19  ntp0.oleane.net  193.248.36.34    NTP      NTP 
  6. 20  193.248.36.34    ntp0.oleane.net  NTP      NTP 
  7. 21  ntp0.oleane.net  193.248.36.34    NTP      NTP 
  8. 22  193.248.36.34    ntp0.oleane.net  NTP      NTP 
  9. 23  ntp0.oleane.net  193.248.36.34    NTP      NTP 

À première vue, nous constatons un dialogue entre le client (193.248.36.34) et le serveur ntp0.oleane.net.

L'objectif est ici, non pas de décortiquer le protocole NTP, encore que ce ne soit pas sans intérêt, mais d'observer un dialogue UDP. Voyons donc le détail.

On peut retrouver ci-dessous le protocole, , la source et la destination ainsi que les données transmises, dans l'organisation décrite par le protocole NTP

 
Sélectionnez
  1. Frame 16 (86 on wire, 86 captured) 
  2.     ... 
  3.     Protocol: UDP (0x11) 
  4.     Header checksum: 0x40a6 (correct) 
  5.     Source: Mix-Marseille-107-1-34.abo.wanadoo.fr (193.248.36.34) 
  6.     Destination: ntp0.oleane.net (194.2.0.28) 
  7. User Datagram Protocol 
  8.     Source port: ntp (123) 
  9.     Destination port: ntp (123) 
  10.     Length: 56 
  11.     Checksum: 0x5b48 
  12. Network Time Protocol 
  13.     Flags: DB 
  14.         11.. .... = Leap Indicator: alarm condition (clock not synchronized) 
  15.         ..01 1... = Version number: NTP Version 3 
  16.         .... .011 = Mode: client 
  17.     Peer Clock Stratum: unspecified or unavailable (0) 
  18.     Peer Pooling Interval: 4 (16 sec) 
  19.     Peer Clock Precision: 0,015625 sec 
  20.     Root Delay:    1,0000 sec 
  21.     Clock Dispersion:    1,0000 sec 
  22.     Reference Clock ID: Unindentified reference source '' 
  23.     Reference Clock Update Time: NULL 
  24.     Originate Time Stamp: NULL 
  25.     Receive Time Stamp: NULL 
  26.     Transmit Time Stamp: 2001-06-13 12:36:30,1227 UTC 
  27.  
  28. Frame 17 (76 on wire, 76 captured) 
  29.     ... 
  30.     Protocol: UDP (0x11) 
  31.     Header checksum: 0xa111 (correct) 
  32.     Source: ntp0.oleane.net (194.2.0.28) 
  33.     Destination: Mix-Marseille-107-1-34.abo.wanadoo.fr (193.248.36.34) 
  34. User Datagram Protocol 
  35.     Source port: ntp (123) 
  36.     Destination port: ntp (123) 
  37.     Length: 56 
  38.     Checksum: 0xa367 
  39. Network Time Protocol 
  40.     Flags: 1C 
  41.         00.. .... = Leap Indicator: no warning 
  42.         ..01 1... = Version number: NTP Version 3 
  43.         .... .100 = Mode: server 
  44.     Peer Clock Stratum: secondary reference (2) 
  45.     Peer Pooling Interval: 4 (16 sec) 
  46.     Peer Clock Precision: 0,000004 sec 
  47.     Root Delay:    0,0130 sec 
  48.     Clock Dispersion:    0,1491 sec 
  49.     Reference Clock ID: 49.110.238.145 
  50.     Reference Clock Update Time: 2001-06-13 12:33:43,8840 UTC 
  51.     Originate Time Stamp: 2001-06-13 12:36:30,1227 UTC 
  52.     Receive Time Stamp: 2001-06-13 12:35:18,4244 UTC 
  53.     Transmit Time Stamp: 2001-06-13 12:35:18,4246 UTC 
  54.  
  55. Frame 18 (86 on wire, 86 captured) 
  56.     ... 
  57.     Protocol: UDP (0x11) 
  58.     Header checksum: 0x40a5 (correct) 
  59.     Source: Mix-Marseille-107-1-34.abo.wanadoo.fr (193.248.36.34) 
  60.     Destination: ntp0.oleane.net (194.2.0.28) 
  61. User Datagram Protocol 
  62.     Source port: ntp (123) 
  63.     Destination port: ntp (123) 
  64.     Length: 56 
  65.     Checksum: 0x5a96 
  66. Network Time Protocol 
  67.     Flags: DB 
  68.         11.. .... = Leap Indicator: alarm condition (clock not synchronized) 
  69.         ..01 1... = Version number: NTP Version 3 
  70.         .... .011 = Mode: client 
  71.     Peer Clock Stratum: unspecified or unavailable (0) 
  72.     Peer Pooling Interval: 4 (16 sec) 
  73.     Peer Clock Precision: 0,015625 sec 
  74.     Root Delay:    1,0000 sec 
  75.     Clock Dispersion:    1,0000 sec 
  76.     Reference Clock ID: Unindentified reference source '' 
  77.     Reference Clock Update Time: NULL 
  78.     Originate Time Stamp: NULL 
  79.     Receive Time Stamp: NULL 
  80.     Transmit Time Stamp: 2001-06-13 12:36:30,1879 UTC 
  81.  
  82. Frame 19 (76 on wire, 76 captured) 
  83.     ... 
  84.     Protocol: UDP (0x11) 
  85.     Header checksum: 0xa10d (correct) 
  86.     Source: ntp0.oleane.net (194.2.0.28) 
  87.     Destination: Mix-Marseille-107-1-34.abo.wanadoo.fr (193.248.36.34) 
  88. User Datagram Protocol 
  89.     Source port: ntp (123) 
  90.     Destination port: ntp (123) 
  91.     Length: 56 
  92.     Checksum: 0x66a1 
  93. Network Time Protocol 
  94.     Flags: 1C 
  95.         00.. .... = Leap Indicator: no warning 
  96.         ..01 1... = Version number: NTP Version 3 
  97.         .... .100 = Mode: server 
  98.     Peer Clock Stratum: secondary reference (2) 
  99.     Peer Pooling Interval: 4 (16 sec) 
  100.     Peer Clock Precision: 0,000004 sec 
  101.     Root Delay:    0,0130 sec 
  102.     Clock Dispersion:    0,1491 sec 
  103.     Reference Clock ID: 49.110.238.145 
  104.     Reference Clock Update Time: 2001-06-13 12:33:43,8840 UTC 
  105.     Originate Time Stamp: 2001-06-13 12:36:30,1879 UTC 
  106.     Receive Time Stamp: 2001-06-13 12:35:18,5105 UTC 
  107.     Transmit Time Stamp: 2001-06-13 12:35:18,5106 UTC 

Etc.

Ce n'est pas nécessaire de voir la suite pour montrer ce qui est important ici. Contrairement à ce qui a été vu en mode connecté avec TCP :

  • toute la partie « synchronisation » entre l'hôte et le client n'existe pas ici ;
  • le client pose tout de suite sa « question”, en fait, ce n'est pas vraiment une question, le client se contente de dire :
    alarm condition (clock not synchronized).
    Suivi de quelques indicateurs nuls et de la date UTC dont il dispose ;
  • le serveur répond simplement en envoyant son heure UTC et quelques autres paramètres destinés à informer sur la précision de la date qu'il donne ;
  • ce dialogue va s'arrêter lorsque le client estimera qu'il dispose de toutes les informations nécessaires pour synchroniser son horloge dans de bonnes conditions. (Je vous laisse étudier le protocole NTP en détail, si ça vous intéresse.) ;
  • notez que le dialogue s'arrête sans signalisation particulière, ce qui n'est pas le cas en mode connecté où le signal FIN doit être envoyé et confirmé ;
  • notez également que les informations à transmettre sont entièrement contenues dans un seul datagramme. Dans un tel cas, le protocole UDP est tout à fait acceptable et plus léger que le mode connecté.

Vous pouvez trouver d'autres exemples de dialogue UDP dans les paragraphes DNS et DHCP sur ce site.

7. Well known ports

Voici donc la liste des ports « officiels » utilisés par les serveurs courants.

WELL KNOWN PORT NUMBERS
CacherSélectionnez

8. Remerciements Developpez

Vous pouvez retrouver l'article original ici : L'Internet Rapide et Permanent. Christian Caleca a aimablement autorisé l'équipe « Réseaux » de Developpez.com à reprendre son article. Retrouvez tous les articles de Christian Caleca sur cette page.

Nos remerciements à ClaudeLELOUP et sevyc64 pour la relecture orthographique de cet article.

N'hésitez pas à commenter cet article ! Commentez Donner une note à l'article (5)