Table des matières

LES APPLICATIONS TCP/IP : COUCHE 4 DU MODELE OSI

MODÈLE CLIENT/SERVEUR

Les applications réseaux fonctionnent sur le modèle client/serveur. Sur la machine serveur un processus serveur (daemon) traite les requêtes des clients. Client et serveur dialoguent en échangeant des messages qui contiennent des requêtes et des réponses.

Prenons par exemple « telnet » :

FONCTIONNEMENT DU MODELE CLIENT-SERVEUR

L'ADRESSAGE DES APPLICATIFS : LES PORTS

Une fois le datagramme transmis à l'hôte destinataire, il doit parvenir à l'utilisateur (si le système est multi-utilisateur) et à l'application visée (si le système est multi-tâches).

Des numéros de port (entre 0 et 1023) sont réservés pour les applications « standards : les ports « bien connus » (Well Known Ports), ils ont été assignés par l'IANA. Sur la plupart des systèmes ils peuvent être seulement employés par des processus du système (ou root) ou par des programmes exécutés par les utilisateurs privilégiés (liste complète : http://www.iana.org/assignments/port-numbers ou dans le fichier /etc/services ).

D'autres numéros de port sont disponibles pour les applications développées par les utilisateurs (1024 à 65535).

Exemples de ports bien connus :

On identifie le protocole de communication entre applications par un numéro de protocole et l'application par un numéro de port.

Par exemple, les serveurs HTTP dialoguent de manière traditionnelle par le port 80 :

http ://www.sncf.com <=> http :// www.sncf.com:80

Les numéros de protocole et de port sont inclus dans le datagramme.

Une fois la connexion établie entre le client et le serveur, ceux-ci peuvent s'échanger des informations selon un protocole défini selon l'applicatif.

Le client soumet des requêtes auxquelles répondra le serveur. Ce mode de communication s'appuie sur la couche “socket”. Cette couche est une interface entre la couche présentation et transport. Elle permet la mise en place du canal de communication entre le client et le serveur. On peut schématiquement dire qu'un socket fournit un ensemble de fonctions. Ces fonctions permettent à une application client/serveur d'établir un canal de communication entre 2 ou plusieurs machines, qui utilisent un protocole de transport (TCP ou UDP) et un port de communication.

CONNAITRE LES PORTS OUVERTS SUR UNE MACHINE

Utilisation de la commande "netstat"

hannibal@box:~$ sudo -s 
[sudo] password for hannibal: 
root@box:~# netstat -a 
Connexions Internet actives (serveurs et établies) 
Proto Recv-Q Send-Q Adresse locale          Adresse distante        Etat      
tcp        0      0 localhost:domain        *:*                     LISTEN     
tcp        0      0 localhost:ipp           *:*                     LISTEN     
tcp        0      0 *:17500                 *:*                     LISTEN     
tcp        0      0 box.local:41716         77.67.4.17:http         TIME_WAIT  
tcp        0      0 box.local:54051         91-237-218-231-una:http TIME_WAIT  
tcp        0      0 box.local:58571         91.226.182.240:http     TIME_WAIT  
tcp        0      0 box.local:54361         77.67.28.75:http        ESTABLISHED 
tcp        0      0 box.local:38180         77.67.4.10:http         TIME_WAIT  
tcp        0      0 box.local:33337         star-01-04-lhr2.fa:http TIME_WAIT  
tcp        0      0 box.local:42219         lhr08s03-in-f1.1e:https TIME_WAIT  
tcp        0      0 box.local:59577         clpubs.chat-cool.o:http TIME_WAIT  
tcp        0      0 box.local:36281         lhr08s03-in-f13.1e:http ESTABLISHED 
tcp        0      0 box.local:54362         77.67.28.75:http        ESTABLISHED 
tcp        0      0 box.local:40194         lhr08s03-in-f28.1e:http ESTABLISHED 
tcp        0      0 box.local:50544         77.67.4.43:http         TIME_WAIT  
tcp        0      0 box.local:47347         sjc-not11.sjc.drop:http ESTABLISHED

La commande « netstat » permet de lister les connexions internet actives, de connaître les numéros de ports et l'état des connexions.

Quand quelqu'un se connecte à un port (une application web sur un serveur par exemple), l'application va passer de l'état LISTEN à l'état ESTABLISHED.

utilisation de "nmap"

nmap est un utilitaire extrêmement puissant.

Attention, ne jamais utiliser nmap sur un réseau dont vous n'êtes pas l'administrateur légitime (ou sans l'autorisation de celui-ci).

J'ai utilisé ici “zenmap”, version graphique de nmap sur ma propre machine. J'aurai pu me satisfaire de nmap en mode commande :

nmap -T4 -A -v 127.0.0.1

ETABLISSEMENT D'UNE CONNEXION TCP

Même s'il est possible pour 2 systèmes d'établir une connexion entre eux simultanément, dans le cas général, un système ouvre une 'socket' (point d'accès à une connexion TCP) et se met en attente passive de demandes de connexion d'un autre système. Ce fonctionnement est communément appelé ouverture passive, et est utilisé par le côté serveur de la connexion. Le côté client de la connexion effectue une ouverture active en 3 temps (poignée de mains -handshaking- en trois temps) :

  1. Le client envoie un segment SYN au serveur,
  2. Le serveur lui répond par un segment SYN/ACK,
  3. Le client confirme par un segment ACK.

On visualise :

CONSOLE 1 :
hannibal@box:~$ wget www.free.fr 
--2012-12-13 17:19:16--  http://www.free.fr/ 
Résolution de www.free.fr (www.free.fr)... 212.27.48.10, 2a01:e0c:1:1599::1 
Connexion vers www.free.fr (www.free.fr)|212.27.48.10|:80... connecté. 
requête HTTP transmise, en attente de la réponse... 301 Moved Permanently 
Emplacement: http://portail.free.fr/ [suivant] 
--2012-12-13 17:19:16--  http://portail.free.fr/ 
Résolution de portail.free.fr (portail.free.fr)... 212.27.48.10, 2a01:e0c:1:1599::1 
Réutilisation de la connexion existante vers www.free.fr:80. 
requête HTTP transmise, en attente de la réponse... 200 OK 
Longueur: 76794 (75K) [text/html] 
Sauvegarde en : «index.html.4» 

100%[======================================>] 76 794       481K/s   ds 0,2s    

2012-12-13 17:19:16 (481 KB/s) - «index.html.4» sauvegardé [76794/76794] 
CONSOLE 2 :
root@box:~# tcpdump -n -i eth0 port http 
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode 
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes 
17:19:16.220143 IP 192.168.0.108.36989 > 212.27.48.10.80: Flags [S], seq 417009659, win 14600, options [mss 1460,sackOK,TS val 8379546 ecr 0,nop,wscale 6], length 0 
17:19:16.255106 IP 212.27.48.10.80 > 192.168.0.108.36989: Flags [S.], seq 2963902162, ack 417009660, win 5840, options [mss 1460,nop,nop,sackOK], length 0 
17:19:16.255146 IP 192.168.0.108.36989 > 212.27.48.10.80: Flags [.], ack 1, win 14600, length 0 

On visualise ici les 3 échanges poignées de main.

TCP ou UDP ?

La couche 4 du modèle OSI utilise 2 protocoles (UDP et TCP) pour satisfaire 2 types de communication :

La première catégorie regroupe une très grande majorité des applications d'Internet, car bon nombre d'entre elles ont besoin que chaque paquet émis soit reçu coûte que coûte ! Ce sont notamment les applications comme le web, la messagerie, le ssh, etc. Si un paquet est perdu, une page web ne pourra pas s'afficher correctement, ce sera pareil pour un mail, etc.

La seconde catégorie concerne les applications de streaming, comme la radio ou la télé sur Internet. Pour une radio en ligne, il est essentiel que les informations soient envoyées en temps réel, le plus rapidement possible. Par contre, si un ou plusieurs paquets sont perdus, on ne va pas arrêter la radio pour autant. L'utilisateur aura des coupures de connexion, mais la radio continuera d'émettre.

On identifie donc ainsi deux besoins bien distincts l'un de l'autre :

C'est pour cela que nous aurons deux protocoles pour la couche 4. Le protocole TCP et le protocole UDP.