Protocole TCP-IP

I) Introduction

Tout le monde a déja entendu le mot "TCP/IP" sur internet. Par contre, peu de gens en connaissent vraiment le fonctionnement. et pourtant, la majorité des transferts réseaux utilise ce protocole. De plus, il est évident qu'avant de se lancer dans la recherche de failles sur des systèmes, il est indispensable de connaitre au moins un minimum du fonctionnement du réseau.

TCP/IP regroupe différent protocoles, permettant aux ordinateurs de partager leurs ressources à travers un réseau. Il a été dévellopé par des chercheurs dans le cadre de ARPAnet. TCP signifie "Transfer Control Protocol", et IP, "Internet Protocol".

II) What is TCP/IP ?

TCP/IP est un ensemble de protocoles. Chaque protocole a une fonction différente. Par exemple, le SMTP (Send Mail Transfer Protocol) est un protocole servant à l'envoie de email. Le FTP (File Transfer Protocol), sert lui à envoyer des fichiers, comme par exemple des pages Web...

Au début, le net était encore peu connu. On rencontrait donc des gros ordinateurs, qui était totalement "autosuffisant". Maintenant, avec le dévellopement du réseau, on a vu s'ajouter des stations de travail spécifiques, pouvant excuter des taches spécialisées.

De ce fait, les users qui ont besoin de service qui n'étaient pas disponibles sur leur machine, peuvent désormais faire appel au autres systemes du réseau. C'est de là qu'est né le modele "client/serveur", que tout le monde utilise aujourd'hui...

Un serveur est un systemes qui fournit des services au autres utilisateurs du réseau, et un client est un système qui utilise ces service. L'exemple le plus connu est sans aucun doute IRC. En effet, grace à votre client mIRC, vous vous connectez sur le Serveur de Undernet, puis vous nous rejoignez sur #Tipiak :)

Voici les différents serveurs que l'on trouve le plus souvent :

** Systeme de fichiers repartis ou Network File System (NFS)
** Impression à distance : pas la peine de vous expliquer ça ...
** Execution à distance : permet de faire executer un programme sur une autre machine.
** Serveurs de noms : Par exemple les Yellow Page (YP) de Sun.
** Serveurs de terminaux : les exemples les plus connus sont Telnet et Rlogin


III) Fonctionnement

TCP/IP est un ensemble de protocole (voir plus haut...) organisé en couches. En général, les applications TCP/IP utilisent quatres couches:

** Le port d'application (ftp, smtp, telnet, dns, rlogin, ...)
** Le type de protocole (TCP, UDP ...)
** Une IP qui fournit les service nécessaire pour envoyer les datagrammes.
** Le protocol nécessaire (Ethernet, Point Par Point, ...)

Etant donné que TCP/IP est uun ensemble de réseaux connectés entre eux par des passerelles (gateways), l'utilisateur doit avoir la possibilitée d'accès aux ressources d'un de ces réseaux, si il veut consulter un site par exemple.

De ce fait, il envoie des datas à un serveur, pour l'informer de quelquechose (message, ...). Ces datas passent alors par différent réseaux avant d'arriver à destination. Seulement le routage doit rester invisible, pour des raisons de sécurité. C'est pourquoi le destinataire ne connait que l'adresse de l'expéditeur. Elle est de la forme : "195.6.8.121".

Cette adresse est en fait un nobre de 32 bits, écrit sous forme de quatres nombres décimaux, chacun représentant 8 bits. La plupart du temps, la structure de cette adresse vous donne des indications pour atteindre le systeme.

Le transfert de l'information se fait par l'envoi de plusieurs datagrammes, un datagramme étant un ensemble de donné envoyé comme un seul message. Par exemple, si vous voulez envoyez un fichier de 15000 octets, celui-ci sera découpé en plusieurs datas de 500 octets, puis réassemblé à la fin. Il est donc possible que la data 7 arrive avant le data 5, ou que des datas se perdent en route...


IV) Les différentes couches

Comme on vient de le voir, les datagrammes doivent être transformées avant, et après leur envoi. Pour cela, on à recours à deux protocoles:

** TCP (Transfer Control Protocol) : il sert à découper, assembler et classer les datas.
** IP (Internet Protocol) : il sert au routage des datagrammes.

A) Le niveau TCP

Voici le schema d'un datagramme TCP :

Port Source
Port Destination
Numéro d'ordre
Numéro d'acquitement
Position des données
U|A|P|S|F
Reservé    R|C|S|Y|I    Fenetre 
G|K|H|N|N
Checksum
Données Urgentes
DONNEES

** <Numéro d'acquitement> : le destinataire renvoie un numéro pour confirmer l'arrivée des datagrammes.

** <Fenetre> : utilisé pour controler la taille des données envoyées à chaque instant.

** <Checksum> : c'est un nombre calculé en ajoutant tous les octets du data, le résultat est mis dans l'en-tête. TCP fait aussi le meme calcul. Si les 2 nombres sont différents, c'est qu'il y a eu ne erreur dans le transport et le data est rejeté.

** <Donnéees Urgentes> : désigne les octets qui doivent être envoyés en premiers.

B) Le niveau IP

Comme on l'a vu, TCP envoi les datas à IP, en donnant un aresse de destination. IP doit alors trouver une "route" pour acheminer ces datas à leur destination. Il rajoute sa propre en-tête pour permettre aux passerelles (routeurs) de guider les datas.

Une en-tête IP est composée d'une adresse source, et d'une adresse de destination; mais aussi d'un numéro de protocole (pour identifier si c'est TCP, UDP... qu'il faut utiliser.), ainsi que d'un checksum, différent de celui de TCP.

Voici le schéma d'un paquet IP :

Version
IHL
Type de service
Longueure totale
Identification
Indics
FragOff
Durée de vie
Protocole
Checksum en-tête
ADRESSE SOURCE
ADRESSE DESTINATION
En-tête TCP, suivie de vos données ....

** <Version> : version du protocol TCP/IP.

** <Type de Service> : Type of Service (TOS) : 17- Minimise le délai. / 08- Minimise le débit. / 04- Minimise le cout monétaire.

** <Identification> : identificateur ;)

** <FragOff> : Offset de fragmentation (si il y en a un!)

** <durée De vie> : Time To Live (TTL) : durée que le packet est authorisé à traverser avant qu'il ne tombe en "timeout"...

** <Adresse Source> : C'est cette adresse qu'il faut spooffer ...

** <Adresse Destination> : adresse IP de destination.


C) Le niveau Ethernet

La plupart des réseaux utilisent Ethernet. L'adresse Ethernet est codée sur 48 bits, pour un avoir un très grand choix. Lorsque vous envoyez un packet, toutes les machines le voit passer, il faut donc une en-tête Ethernet pour s'assurer que c'est la bonne machine qui la récupérée.

Voici un schéma d'un packet Ethernet :

Adresse ethernet de destination (les 32 premiers bits)
Dest (16 derniers bits)
Source (16 premiers bits
Type de protocol
En-tête IP, puis en-tête TCP, puis vos données
CHECKSUM ETHERNET

** <Type de protocol> : determine le protocole à utiliser.

** <Checksum Ethernet> : checksum pour verifier si tous les datas sont là.


V) Liste de ports fréquemmment utilisés

# de Port
Protocol
Fonction
0
7
15
20
21
23
25
79
80
110
139
143
513
515
752
753
ICMP
TCP
TCP
TCP
TCP
TCP
TCP
TCP
TCP
TCP
TCP
TCP
TCP
???
UDP
UDP
delivre message d'erreur
echo
netstat
FTP-data
File Transfer Protocol (FTP)
Telnet
Send Mail Transfer Protocol (SMTP)
finger
HyperText Transfer Protocol (HTTP)
POP3 (envoi d'e-mails)
Service de session netbios
IMAP (service d'e-mails)
who
printer
password server
userreg server



VI) Pour plus d'infos ...

** Pour plus d'infos sur TCP/IP, lisez le RFC 1011.
** Pour plus d'infos sur TCP, lisez le RFC 793.
** Pour plus d'infos sur IP, lisez le RFC 791.
** Pour plus d'infos Ethernet, lisez le RFC 826.


VII) Conclusion

Comme conclusion, je vous propose ce petit schéma, qui récapitule de façon (tres) général, tout ce que l'on vient de voir. J'espere que vous avez compris les bases ...

adresse de l'éxpéditeur
adresse du destinataire
n°de sequence
drapeau d'état
données utiles

 
paquet TCP
 
paquet IP