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