1 - Les différents protocoles de communications
A - IP ( internet protocol )
Vous avez certainement déjà vu une adresse IP. Il s'agit d'une suite de 4 nombres de 0 à 255
qui définissent un PC ou quoi que ce soit sur un réseau. Ex: 213.10.53.65
Dans un réseau, local ou externe, chaque PC a son adresse IP à elle.
Dans un packet, il y a 2 IPs:
- l'ip source : qui défini par qui a été envoyé le packet
- l'ip destinataire : qui permet aux passerelles de router le packet vers le bon PC
Une IP contient plusieurs données :
- la version : Version du protocol TCP/IP.
- le ToS : Type of Service. Cette variable permet soit de :
- minimiser le délai.
- minimiser le débit.
- minimiser le coût monétaire.
- l'ID : Identificateur.
- FragOff : Offset de fragmentation(division en plusieurs packets)
- TTL : Durée de vie (Time To Live)
C'est le nombre de machine que le packet est autorisé a
traverser avant de tomber en timeout et d'être détruit.
- dest : adresse IP de destination.
- source : adresse IP source.
B - UDP ( user datagram protocol )
a. Définition et Entête
Ce protocole permet aux applications d'échanger des messages a travers le réseau
avec un minimum de surchage (en-tete simplifiée comparé au TCP ;))
car l'UDP permet d'échanger des données sans connection.
<------------------ Bits ----------------->
|0 |16 |31
-------------------------------------------
| Port Source | Port Destination |
-------------------------------------------
| Taille | Somme de Controle |
-------------------------------------------
| Zone des Données.... |
-------------------------------------------
L'UDP est un protocole "Non fiable" car il ne comprend aucun mécanisme de sécurité
pour vérifier si ce qui a été envoyé est correctement arrivé là où il doit être ou s'il a été
envoyé par qui il doit être envoyé :)
Ce protocole est donc pratique pour les applications qui envoyent beaucoup de données
non personnelles car comme l'entête des packets sont simplifié, on économise des octets
et le débit est dont supérieur. Il faut quand même ajouter que l'UDP incorpore une IP
pour définir la source et le destinataire.
b. Les Ports UDP
Numéro CODE Nom Description
0 -- Réserver
7 ECHO Echo Echo
9 DISCARD Discard Détruire
11 USERS Systat Utilisateur actifs
13 DAYTIME Daytime Horodateur
15 - Netstat Qui est actif, ou Netstat
17 QUOTE Qotd Fuseau horaire
19 CHARGEN Chargen Générateur de caractères
37 TIME Time Heure
42 NAMESERVERNameserver Machine serveur de noms
43 NICKNAME Whois Qui est-ce ;)) ?
53 DOMAIN Nameserver Serveur de nom de domaines
67 BOOTPS Bootps Serveur de protocole de bootstrap
68 BOOTPC Bootpc Client de protocole de bootstrap
69 TFTP Tftp Trivial FTP -
111 NTP Ntp Network Time Protocol
123 - Snmp Moniteur d'administration de réseau SNMP
161 - Snmp-trap Trappes SNMP
512 - Biff Communication satellites UNIX
513 - Who Démon UNIX "who"
514 - Syslog Journalisation système
520 RIP Rip Routing Information Protocole
525 - Timed Démon d'horodate
C. TCP : Transmission Control protocol
a. Définition
TCP constitue un service de remise assez fiable en mode connecté.
Il permet aux applications de ne pas avoir à se précoccuper de problèmes
de fiabilité en s'adressant directement aux couches de remise non fiable.
b. Les 5 Caracteristique du TCP
Orientation connexion
Le service transfère tous les flots de données emis par la station de départ.
Circuits Virtuels
Lorsqu'une machine désire s'adresser à une autre, il y a établissement d'un
circuit virtuel, comme avec une communication téléphonique facturée par FT :)
(=> reseau commuté). Les deux machines participantes peuvent se rendre compte
d'une coupure de connection et en informer les applications concernées :)
Transfert Tamponnés
Le Logiciel de communication peut décomposer arbitrairement les messages
émis par la station de départ. Lorsqu'il juge qu'un datagramme peut etre rempli,
il procède a l'emission. Si l'emetteur souhaite que la transmission soit effectuée
sans attente de remplissage, il utilise un ordre 'push' pour forcer l'emission.
Connexions non structurées
La structuration des informations émises et reçues est controlée par les applications,
non par TCP. Il existe aucun moyen pour indiquer que tel ou tel message représente
un type d'information en particulier.
Connexions Full Duplex
Les communications bidirectionnelles et simultanées. Ceci permet notamment
d'appliquer des techniques comme lePiggy Backing (Transmission simultanée
de données et d'acquitements)
c. Fiabilité
Le TCP assure une certaine sécurité au moyen d'un système d'acquitement/retransmission
Exemple de transmission réussie :
*************** *******************
*Emission1 *------------| * *
* * |->* Reception1 *
* * * *
*Reception * <--------------* Emission *
*acquitement1 * * Acquitement 1 *
* * * *
*Emission2 *--------------> * Reception 2 *
* * * *
* * |------------* Emission *
*Reception * <-| * Acquitement 2 *
*acquitement2 * * *
*************** *******************
Exemple de problème de transmission :
*************** *******************
*Emission1 *------- Perte * *
* * Paquet * Aquitement 1 *
* * * Non Transmis *
*Activation * * *
*Temporisation * * *
* * * *
* ...... * * *
* * * *
*Temporisation * * *
*Ecoulée * * *
* * * *
*Réemission 1 *------------| * *
* * |->* Reception1 *
* * * *
*Reception * <--------------* Emission *
*acquitement1 * * Acquitement 1 *
*************** *******************
d. La Fenetre => Nan c pas Windows :)
Si l'emetteur est obligé d'attendre un acquittement avant d'emettre le paquet suivant,
il va en résulter une perte d'efficacité importante. Afin de réduire cette perte de temps,
le principe de la fenêtre glissante est utilisée.
L'emetteur peut alors envoyer un petit nombre de paquets avant d'être contraint
d'attendre l'acquitemment du premier d'entre eux.
Exemple :
Envoi des 5 premiers paquets
*******************************
*_____________________________*________________
* * |
* 1 2 3 4 5 * 6 7 8 |
*---------------------------------------------------*---------------------------|
*******************************
Récéption de l'accusé du 1, de la fenêtre avance :)
************************
______*______________________ *__________
| * * |
| 1 * 2 3 4 5 6 * 7 8 |
|------------*-------------------------------------- *------------------|
************************
Plus la dimension de la fenetre est importante, plus le débit est élevé jusqu'à saturation du réseau :)
Les performances en sont d'autant plus amélioré car la bande passantes est alors mieux exploité.
e. Ports et Connexions
TCP permet a plusieurs processus d'applications de communiquer entre eux simultanément.
Tout comme UDP, il procède à un démultiplexages (répartition si on simplifie ;))
des messages reçus et utilise un numéro de port pour adresser une destination
donnée sur une machine. TCP est basé sur une notion de connexion, aussi il utilise
une paire (machine, port) pour indentifier une extrémité connexion.
Plusieurs connexions peuvent partager une extrémité de connexion aux messages
entrant, il n'y a donc pas d'ambiguité :)
f. Ouverture active/passives
Une application placée a l'une des extrémités indique a l'OS qu'elle accepte des demande
de connexion entrantes. Ce processus est appelé Ouverture Passive (un peu comme
le mode Listen de Winsock :)). A l'autre extrémité, l'aplication effectue une demande
d'ouverture active auprès de son système. Les deux modules TCP commmuniquent
pour établir et tester la connexion entre les deux machines/processus.
g. Segments de Données.
Les flots de données sont perçu par TCP comme des séquences d'octets diviséés
en segment, à fin de transmission. Chaque segment est, en principe, transmis dans
un seul datagramme. La fenetre d'anticipation (vous savez le gros machin en ASCII + haut :))
est utilisée pour transmettre les segments et donc assurer une meilleur performance
des communications.
Voici la structure d'un Segment TCP :
_____________________________________
|0 |4 |10 |16 |24 |31
|------------|------------|-------------|------------|-------------|
| Port TCP soure | Port destination |
|--------------------------------------|--------------------------|
| Numéro de Séquence |
|----------------------------------------------------------------|
| Numéro d'accusé de reception |
|----------------------------------------------------------------|
|Lgr |Réservé | Bits | Fenètre |
|Entête | | Code | |
|------------|-----------|--------------|-------------------------|
| Total de contrôle | Pointeur |
| | D'urgence |
|--------------------------------------|-----------|-------------|
| Option (éventuelles) |Bourrage |
|-------------------------------------------------|--------------|
| Données |
| ... |
|---------------------------------------------------------------|
(Hummm...c'est autre chose que l'UDP :))
L'entète TCP est composée de différent champs :
Les Champs Port Source/Destination
Ils identifient les ports utilisés pour la connexion à chaque extrémité,
identifiant les deux applications.
Le Champs N° d'accusé de récéption
Il indique le numéro du prochain octet attendu par le recepteur.
Il fonctionne donc en sens inverse du N° de sequence.
Le Champs Lgr d'entete
Il fournit la longueur de l'entête TCP exprimée en multiple de 32 bits.
Il est indispensable dans la mesure ou le champs option est de taille variable.
Le champs Bits Code
Suivant le cas, les segments peuvent transporter :
- Des données
- Des accusés de récéption
- Des demande d'établissement de connexion
Les 6 bits de ce champ identifient le type et donc le contenu du segment TCP.
Bit De gauche Signification (drapeau
à droite établi)
--------------------------------------------------------------------
urg | Pointeur de données urgente Valide |
--------------------------------------------------------------------
Ack | Champs d'accusé de récéption valide |
--------------------------------------------------------------------
Psh | Push Requis |
--------------------------------------------------------------------
Rst | Ré-initialisation de connection |
--------------------------------------------------------------------
Syn | Synchronisation des N° de sequences |
--------------------------------------------------------------------
Fin | Fin de données de l'émetteur |
--------------------------------------------------------------------
Le Champs Fenètre
Il indique la taille du tampon de récéption et permet donc de connaitre
la quantité de données acceptable à chaque emission de segment
(exprimé sous forme d'un entier de 32 bits :))
Emission Hors Bande
Il est indispensable de pouvoir emettre et recevoir des signaux hors bande
afin de pouvoir notamment traiter les demandes d'interruption de processus
notamment en provenance des utilisateur. Il serait dans le cas contraire
impossible de terminer un processus lecteur de données.
Lors de la réception d'un segment disposant du drapeau 'Données urgente',
celui ci est transmis sans consideration de positionement dans le flot;
TCP doit informer toutes applications connecté à ce port de basculer
en mode Urgent, état qu'elle conservera jusqu'à achevement du traitement
des données urgente.
Le Champs Option
Lors de l'etablissement de la connection, les deux parties doivent négocier
la taille maximale de Segment (MMS pour les intimes ;)). Sur les machines
à faible débit, celle-ci doit étre ajusté de manière a remplir le segment.
- Extrémités de connexion placées sur un même réseau. La MMS est
fixée de façon à fixer la taille du datagramme IP à celle de la MTU.
- Extrémités de connexion placées sur Deux réseaux différent. Il est
suggéré d'employer un MTU de 536, soit une taille de 576 diminué
de la taille standard des entêtes IP et TCP (40 :).
Le Champs Total de Contrôle
La logique est la même que celle employée pour l'UDP :
- Ajout d'une pseudo entête complémenté à zéro pour ajuster la taille
à un multiple de 16 bit.
- Calcul du total de contrôle sur le segment obtenu sans tenir compte
des zéros et champ de contrôle reputé à zéro.
- Complément à un de la somme des complément à 1
_________________________________
|0 8 16 31|
|---------------------------------------------------------|
| Adresse IP Source |
|---------------------------------------------------------|
| Adresse IP destination |
|-------------------|----------------|---------------------|
| Zero | Protocole | Longueur TCP |
|-------------------|----------------|---------------------|
Accusé de récéption/émission
Ils contiennent toujours le numéro du prochain octet attendu par le récépteur.
Celui-ci réorganise les séquences. Il accuse toujours récéption du plus long flot
de données qu'il a pu recevoir. L'emetteur est donc tenu, au fur et à mesure,
au courant de l'état du transfert.
h. Etablissement d'une connexion TCP
La connexion débute à l'aide d'une séquence de synchronisation et d'émission d'accusés :
**************************** ***************************
* Emetteur ******************* *Recepteur******************
**************************** ***************************
* Emission segment syn(n) * ----------| * *
* * |->*Reception segment syn(n) *
* * |----------*Emission segment *
* Reception Segment *<-| *Syn(n) et Ack(n+1 *
* Syn(n) et Ack(n+1) * * *
* Emission segment Ack(m+1) * ----------| * *
* * |->*Reception segment *
* * *Ack(m+1) *
* * * *
**************************** ***************************
Ce processus permet de s'assurer que les deux connexions sont prêtes a émettre
et à recevoir des données et initialisent le numéro de séquence.
l. Fermeture d'une connexion TCP
Les processus en présence peuvent fermer une connexion par la primitive close().
Le logiciel TCP envoie alors un segment où le bit FIN est positionné.
Il libère un des deux canaux de communication.
Le logiciel receveur envoie l'accusé de reception FIN et indique à l'application
destinatrice qu'il n'y a plus de donnée à lire eof().
La communication est alors fermée entièrement.
D - ICMP ( Internet Control and error Message Protocol )
a. Définition
Le protocole Internet ( IP ;)) dispose d'un mécanisme de traitement des erreurs
nommé ICMP. Les messages circulent dans la parties reservé aux données
dans un datagramme IP, tout comme les info ordinaire :). Ils sont transmis
au logiciel Ip directement (si ça interesse kkun ;))
b. L'en-tete ICMP
Cette entete est constitués de 3 champs qui ne bouge jamais :)
________________________________________________
|Champs | Longueurs | Description |
-------------------------------------------------------------------------------------
|Type | 8 Bits | Indique le type de message |
|Code | 8 Bits | Information supplémentaire |
| | |sur le type de messages |
|Total de Controle | 16 Bits | CheckSum de controle |
------------------------------------------------------------------------------------
Le Champs Type
N° Type Signification
-----------------------------------------------------------------------------------------------------------
0 Reponse d'echo.
3 Destination inaccessible
4 Limitation de source (regulation du flux)
5 Changement de Route
8 Demande D'echo.
11 Expiration de Delais
12 Problème de paramètre avec un datagramme
13 Demande Estampille de Temps
14 Reponse d'estampille de Temps
15 Demande d'informations (périmés)
16 Reponse d'informations (Périmés)
17 Demande de Masque
18 Reponse de Masque
-----------------------------------------------------------------------------------------------------------
Le Champs Code
N° Type Signification
-----------------------------------------------------------------------------------------------------------
0 Réseau Inaccessible
1 Machine Inaccessible
2 Protocole Inaccessible
3 Port Inaccessible
4 Fragmention requise et bit DF
5 Echec de Routage source
6 Réseau destination inconnu
7 Machine de destination inconnue
8 Machine source isolée
9 Interdiction admnistrative de dialoguer avec le réseau demandé
10 Interdiction admnistrative de dialoguer avec la machine demandé
11 Réseau inaccessible pour le service demandé.
12 Machine inaccessible pour le service demandé.
-----------------------------------------------------------------------------------------------------------
Note : Les messages ICMP qui rendrent compte d'erreurs, renvoient toujours
les 64 premiers bits du datagramme Fautif :)
Un chtti exemple :
___________________________________
| 8 | 16 | 31|
--------------------------------------------------------------
| Type(3) | Code (0-5) | Checksum de |
| | | Contrôle |
--------------------------------------------------------------
| Tout à Zero |
--------------------------------------------------------------
| Entête internet + 64 bits du |
| datagramme fautif |
--------------------------------------------------------------
| ..... |
--------------------------------------------------------------
c. Messages ICMP
Limitation du Débit de la source.
Lorsqu'une passerelle est saturée par l'émission de datagrammes en provenance d'un certain
émeteur, elle lui envoie un message ICMP de limitation de débit.
Aucun message n'indique la fin de limitation de débit. L'emetteur diminue progressivement
son débit jusqu'à ce que la passerelle cesse de lui expédier des messages de limitation.
Elle reprend alors progressivement son débit initial
______________________________________
| 8 | 16 | 31 |
------------------------------------------------------------------
| Type(4) | Code (0) | Checksum de |
| | | Controle |
------------------------------------------------------------------
| Tout a Zero |
------------------------------------------------------------------
| En-tete internet + 64 bits du |
| datagramme fautif |
------------------------------------------------------------------
| ..... |
------------------------------------------------------------------
Redirection
Si une passerelle s'apperçoit qu'une machine utilise une route non optimale, elle lui envoie
un message destiné a effectuer la correction :
______________________________________
| 8 | 16 | 31|
------------------------------------------------------------------
| Type(3) | Code (0-5) | Checksum de |
| | | Controle |
------------------------------------------------------------------
| Adresse Ip de la passerelle |
------------------------------------------------------------------
| En-tete internet + 64 bits du |
| datagramme fautif |
------------------------------------------------------------------
| ..... |
------------------------------------------------------------------
Délai Excessif
Si une passerelle détecte uen boucle de routage ou un délai excessivement long,
elle procèdera à la destruction du datagramme et expédiera un message qui ressemble à ça :
______________________________________
| 8 | 16 | 31|
------------------------------------------------------------------
| Type(5) | Code (0-3) | Checksum de |
| | | Controle |
------------------------------------------------------------------
| Tout a Zero |
------------------------------------------------------------------
| En-tete internet + 64 bits du |
| datagramme fautif |
------------------------------------------------------------------
| ..... |
------------------------------------------------------------------
Problème de Paramètres
Si une passerelle détecte un problème non traité par les messages précedents,
comme par exemple une erreur d'en-tete, elle expédie un message du type suivant :
______________________________________
| 8 | 16 | 31|
------------------------------------------------------------------
| Type(4) | Code (0) | Checksum de |
| | | Controle |
------------------------------------------------------------------
| Tout a Zero |
------------------------------------------------------------------
| En-tete internet + 64 bits du |
| datagramme fautif |
------------------------------------------------------------------
| ..... |
------------------------------------------------------------------
Le champs pointeur indique l'emplacement de l'octet fautif dans le datagramme
ayant posé problème. La valeur de code 1 indique qu'une option obligatoire
était manquante dans le datagramme. Dans ce cas là le champs pointeur n'est pas utilisé.
Synchronisation des horloges et estimation du temps de Transit
Les protocoles de la famille TCP/IP peuvent permettre de synchroniser les bases de temps
des différentes machines interconnectées. Le message aura alors la structure suivante :
______________________________________
| 8 | 16 | 31|
------------------------------------------------------------------
| Type(4) | Code (0) | Checksum de |
| | | Controle |
------------------------------------------------------------------
| Identificateur | Numéro de Sequence |
------------------------------------------------------------------
| Horodotage de l'émetteur |
------------------------------------------------------------------
| Horodotage de l'émetteur |
------------------------------------------------------------------
| Horodotage de l'émetteur |
------------------------------------------------------------------
Pour les programmeurs en C/C++, j'ai aussi rajouté une liste tirée de Noway :
-----------------------------------------------------------------------------------------------------------------------------------------
Type Code Type en C Code en C Description
-----------------------------------------------------------------------------------------------------------------------------------------
8 0 ICMP_ECHO 0 Requete echo (ping)
0 0 ICMP_ECHOREPLY 0 Reponse echo (ping)
-----------------------------------------------------------------------------------------------------------------------------------------
13 0 ICMP_TSTAMP 0 Requete d'estampille horaire
14 0 ICMP_TSTAMPREPLY 0 Reponse d'estampille horaire
-----------------------------------------------------------------------------------------------------------------------------------------
17 0 ICMP_MASKREQ 0 Requete de masque d'addresse
18 0 ICMP_MASKREPLY 0 Reponse de masque d'addresse
-----------------------------------------------------------------------------------------------------------------------------------------
15 0 ICMP_IREQ 0 demande d'informations (obsolete)
16 0 ICMP_IREQREPLY 0 reponse d'informations (obsolete)
-----------------------------------------------------------------------------------------------------------------------------------------
9 0 ICMP_ROUTERADVERT Avertissement d'un routeur
10 0 ICMP_ROUTERSOLICIT Solicitation d'un routeur
-----------------------------------------------------------------------------------------------------------------------------------------
5 0 ICMP_REDIRECT ICMP_REDIRECT_NET Redirection reseau
5 1 ICMP_REDIRECT ICMP_REDIRECT_HOST Redirection machine
5 2 ICMP_REDIRECT ICMP_REDIRECT_TOSNET Redirection ToS et reseau
5 3 ICMP_REDIRECT ICMP_REDIRECT_TOSHOST Redirection ToS et machine
-----------------------------------------------------------------------------------------------------------------------------------------
3 0 ICMP_UNREACH ICMP_UNREACH_NET Reseau destination inaccessible
3 1 ICMP_UNREACH ICMP_UNREACH_HOST Machine destination inaccessible
3 2 ICMP_UNREACH ICMP_UNREACH_PROTOCOL Protocole inaccessible
3 3 ICMP_UNREACH ICMP_UNREACH_PORT Port destination inaccessible
3 4 ICMP_UNREACH ICMP_UNREACH_SRCFAIL Echec du routage relache(loose source
routing)
3 5 ICMP_UNREACH ICMP_UNREACH_NEEDFRAG Fragmentation necessaire
3 6 ICMP_UNREACH ICMP_UNREACH_NET_UNKNOWN Reseau destination inconnu
3 7 ICMP_UNREACH ICMP_UNREACH_HOST_UNKNOWNMachine destination inconnue
3 8 ICMP_UNREACH ICMP_UNREACH_ISOLATED Machine source isolée
3 9 ICMP_UNREACH ICMP_UNREACH_NET_PROHIB Reseau destination administrativement
interdit
3 10 ICMP_UNREACH ICMP_UNREACH_HOST_PROHIB Machine destination administrativement interdite
3 11 ICMP_UNREACH ICMP_UNREACH_TOSNET ToS inaccessible sur ce reseau
3 12 ICMP_UNREACH ICMP_UNREACH_TOSHOST ToS inaccessible sur cette machine
3 13 ICMP_UNREACH 13 Communication administrativement interdite par filtrage
3 14 ICMP_UNREACH 14 Violation de la precedence de la machine
3 15 ICMP_UNREACH 15 Coupure de la precedence pendant le transit
-----------------------------------------------------------------------------------------------------------------------------------------
11 0 ICMP_TIMXCEED ICMP_TIMXCEED_INTRANS TTL a 0 pendant le transit
11 1 ICMP_TIMXCEED ICMP_TIMXCEED_REASS TTL a 0 pendant le reassemblage
-----------------------------------------------------------------------------------------------------------------------------------------
12 0 ICMP_PARAMPROB 0 Erreur dans le header IP
12 1 ICMP_PARAMPROB ICMP_PARAMPROB_OPTABSENT Option requise manquante
-----------------------------------------------------------------------------------------------------------------------------------------
4 0 ICMP_SRCQUENCH 0 Demande de diminution du débit
-----------------------------------------------------------------------------------------------------------------------------------------
By KoP et Nos-K