Reseau: CP3 (fr)
Reseau: CP3 (fr)

théorie CP3

Directory

Contrôle principal III

1. Matière

couche 4 (transport)

  • rôles
  • arguments dans le choix de TCP ou UDP
  • notion de protocole sûr et de protocole sûr à fenêtre
  • le cas particulier du transport du DNS (usuellement UDP, parfois besoin de TCP)
  • TCP
    • champ principaux des entêtes et leur rôle
    • ouverture et fermeture de la connexion
    • savoir utiliser le diagramme d’état
    • rôle des ports
    • principes de la fenêtre et des confirmations (acquittements)
    • importance de la minuterie de retransmission
    • congestion (définition)
  • UDP
  • les sockets
    • rôle
    • opérations (appels systèmes) de base et cycle de vie
  • sécurité
  • décodages des couches 4 à 2 (évt. protocole de couche 7 aussi)

couche 7

  • principes
  • DNS (fonctionnement général, protocoles couche 4, type d’enregistrements principaux, concept de délégation)
  • E-mail (architecture, protocoles SMTP, POP, IMAP, format d’un e-mail, format MIME, sécurité, SPAM)

2. Résumé: rôles de la couche 4

  • assurer le transport fiable de bout en bout d’un réseau (TCP)
  • multiplexage (identifiction des services couche 7) via le concept de port
  • optimisation de la performance
    • bonne utilisation du débit disponible
    • gestion des congestions
  • en fonction des besoins de l’application
    • mode connecté ou non connecté
    • mode caractère (stream, flux) ou message
    • tout ou partie des fonctions de la couche

Transport fiable

  • protocol sûr
    • détection d’erreurs et retransmission
    • assurer l’ordre de livrison et l’absence de doublons
    • constrôle de flux (ne pas surcharger le destinataire)
  • complémentarité avec la couche 2 (portée différente!)

TCP et UDP

  • aspects communs:
    • utilisent les services de IP (envoi à une machine)
    • permettent l’adressage de services applicatifs (ports)
    • transmission duplex (bidirectionnelle) possible
    • les deux sont best effort (IP sans QoS)
      • TCP a une phase de connextion

Besoin des applications

  • quel protocole de couche 4 pour la téléphonie sur IP et pourqoi?
  • quel protocole de couche 4 pour des requêtes SQL sur une base de données et pouqoi

Les ports

  • un numéro de port identifie une application d’une machine
  • l’application appelante doit connaître le numéro de port de l’application appelée: well known ports:
port protocole
7 Echo
21 FTP
23 Telnet
80 HTTP (www)
161 SNMP
9 Discard
22 SSH
25 SMTP
110 POP3
443 HTTPS
  • tout échnge UDP ou connextion TCP nécessite deux numéros de port (comme tout datagramme IP a deux adresses IP)
  • le numéro de port de l’appelant est en général choisi dynamiquement dans la plage non privilégiée 1023 (ports fantômes ou dynamiques)

Identification d’une connexion

  • une machine doit pouvoir identifier ses connexions TCP ou un échange UDP de façon unique: la combinaison suivante est utilisée:
    • adresse IP locale
    • numéro de port local
    • adresse IP distante
    • noméro de port distant
  • plusieurs connexions ou échanges d’un client sur la même application d’un même serveur sont différenciès par les numéros de port locaux (côté client)

3. UDP (User Datagram Protocol)

Le protocole UDP (User Datagram Protocol) est un protocole non orienté connexion de la couche transport du modèle TCP/IP. Ce protocole est très simple étant donné qu’il ne fournit pas de contrôle d’erreurs (il n’est pas orienté connexion…).

  • un utilisteur d’UDP doit compter avec les événements suivants:
    • les données peuvent être perdues
    • les mêmes données peuvent arriver plusieurs fois
    • l’ordre des données peut être modifié
    • le déstinataire peut être surchargé par les données de l’émetteur
    • les données ne peuvent dépasser le MTU

format des messages

  • port source et destination: identification des applications émettrices et destinataires
  • message lenght: (longueur en bytes. y.c l’entête)
  • checksum: chiffre de contrôle pour tout le message

applications typiques

  • TFTP (Trivial file transfer protocol)
    • téléchargement de configuration ou de firmwares en systèmes embarqués DNS (Domain name system, aussi en TCP)
  • NFS (Network file system - UNIX)
  • SMNP (Simple networ management protocol) *RTP (realtime transport protocol - données multimedia)

4. TCP (Transmission Control Protocol)

  • TCP est un protocol sûr, qui utilise les principes suivants par défaut:
    • protocole a fenètre (de type GO-BACK N)
    • implicit retransmission
  • les messages sont appelés segments
  • on utilise uniquement des confirmations positives (ACK, qui peuvent être >groupés) et un timer (minuteir) est calculé pour chaque segment
  • TCP offre un transport sûr (fiable) des données
    • les données sont transmises exactement une fois (pas de perte, pas de >duplication)
    • pas de modification de l’ordre
    • contrôle de flux

TCP (qui signifie Transmission Control Protocol, soit en français: Protocole de Contrôle de Transmission) est un des principaux protocoles de la couche transport du modèle TCP/IP. Il permet, au niveau des applications, de gérer les données en provenance (ou à destination) de la couche inférieure du modèle (c’est-à-dire le protocole IP). Lorsque les données sont fournies au protocole IP, celui-ci les encapsule dans des datagrammes IP, en fixant le champ protocole à 6 (Pour savoir que le protocole en amont est TCP…). TCP est un protocole orienté connexion, c’est-à-dire qu’il permet à deux machines qui communiquent de contrôler l’état de la transmission. Les caractéristiques principales du protocole TCP sont les suivantes :

  • TCP permet de remettre en ordre les datagrammes en provenance du protocole IP
  • TCP permet de vérifier le flot de données afin d’éviter une saturation du réseau
  • TCP permet de formater les données en segments de longueur variable afin de les “remettre” au protocole IP
  • TCP permet de multiplexer les données, c’est-à-dire de faire circuler simultanément des informations provenant de sources (applications par exemple) distinctes sur une même ligne
  • TCP permet enfin l’initialisation et la fin d’une communication de manière courtoise

Le but de TCP

Grâce au protocole TCP, les applications peuvent communiquer de façon sûre (grâce au système d’accusés de réception du protocole TCP), indépendamment des couches inférieures. Cela signifie que les routeurs (qui travaillent dans la couche Internet) ont pour seul rôle l’acheminement des données sous forme de datagrammes, sans se préoccuper du contrôle des données, car celui-ci est réalisé par la couche transport (plus particulièrement par le protocole TCP).

Lors d’une communication à travers le protocole TCP, les deux machines doivent établir une connexion. La machine émettrice (celle qui demande la connexion) est appelée client, tandis que la machine réceptrice est appelée serveur. On dit qu’on est alors dans un environnement Client-Serveur. Les machines dans un tel environnement communiquent en mode connecté, c’est-à-dire que la communication se fait dans les deux sens.

Pour permettre le bon déroulement de la communication et de tous les contrôles qui l’accompagnent, les données sont encapsulées, c’est-à-dire qu’on ajoute aux paquets de données un en-tête qui va permettre de synchroniser les transmissions et d’assurer leur réception.

Une autre particularité de TCP est de pouvoir réguler le débit des données grâce à sa capacité à émettre des messages de taille variable, ces messages sont appelés segments.

La fonction de multiplexage

TCP permet d’effectuer une tâche importante: le multiplexage/démultiplexage, c’est-à-dire faire transiter sur une même ligne des données provenant d’applications diverses ou en d’autres mots mettre en série des informations arrivant en parallèle.

Ces opérations sont réalisées grâce au concept de ports (ou sockets), c’est-à-dire un numéro associé à un type d’application, qui, combiné à une adresse IP, permet de déterminer de façon unique une application qui tourne sur une machine donnée.

Ces opérations sont réalisées grâce au concept de ports (ou sockets), c’est-à-dire un numéro associé à un type d’application, qui, combiné à une adresse IP, permet de déterminer de façon unique une application qui tourne sur une machine donnée.

Les numéros de séquence et d’acquittement indiquent ou respectivement confirment des séquences d’octets et ne sont pas initialisés à zéro (cf ouverture de connexion et concept de fenêtrage vu plus loin)

  • URG: pointeur de données urgentes actif
  • ACK: le champ ACKNOWLEDGE NUMBER confirme un ou plusieurs segments
  • PSH: les données doivent être envoyées sans attendre à la couche supérieure
  • SYN: synchronisation des numéros de séquence (ouverture de connexion)
  • FIN: cet émetteur a terminé son stream de données
  • RST: ce datagramme n’a pas de lien avec un stream actif (ou pas d’application en écoute)

Fiabilité des transferts

Le protocole TCP permet d’assurer le transfert des données de façon fiable, bien qu’il utilise le protocole IP, qui n’intègre aucun contrôle de livraison de datagramme.

En réalité, le protocole TCP possède un système d’accusé de réception permettant au client et au serveur de s’assurer de la bonne réception mutuelle des données. Lors de l’émission d’un segment, un numéro d’ordre (appelé aussi numéro de séquence) est associé. A réception d’un segment de donnée, la machine réceptrice va retourner un segment de donnée dont le drapeau ACK est à 1 (afin de signaler qu’il s’agit d’un accusé de réception) accompagné d’un numéro d’accusé de réception égal au numéro d’ordre précédent.

De plus, grâce à une minuterie déclenchée dès réception d’un segment au niveau de la machine émettrice, le segment est réexpédié dès que le temps imparti est écoulé, car dans ce cas la machine émettrice considère que le segment est perdu…

Toutefois, si le segment n’est pas perdu et qu’il arrive tout de même à destination, la machine réceptrice saura grâce au numéro d’ordre qu’il s’agit d’un doublon et ne conservera que le dernier segment arrivé à destination…

5. Etablissement d’une connexion

Etant donné que ce processus de communication, qui se fait grâce à une émission de données et d’un accusé de réception, est basé sur un numéro d’ordre (appelé généralement numéro de séquence), il faut que les machines émettrices et réceptrices (client et serveur) connaîssent le numéro d’ordre initial de l’autre machine.

L’établissement de la connexion entre deux applications se fait souvent selon le schéma suivant :

  • Les ports TCP doivent être ouverts
  • L’application sur le serveur est passive, c’est-à-dire que l’application est à l’écoute, en attente d’une connexion
  • L’application sur le client fait une requête de connexion sur le serveur dont l’application est en ouverture passive. L’application du client est dite “en ouverture active

Les deux machines doivent donc synchroniser leurs séquences grâce à un mécanisme communément appelé three ways handshake (poignée de main en trois temps), que l’on retrouve aussi lors de la clôture de session.

Ce dialogue permet d’initier la communication, il se déroule en trois temps, comme sa dénomination l’indique :

  1. Dans un premier temps la machine émettrice (le client) transmet un segment dont le drapeau SYN est à 1 (pour signaler qu’il s’agit d’un segment de synchronisation), avec un numéro d’ordre N, que l’on appelle numéro d’ordre initial du client

  2. Dans un second temps la machine réceptrice (le serveur) reçoit le segment initial provenant du client, puis lui envoie un accusé de réception, c’est-à-dire un segment dont le drapeau ACK est à 1 et le drapeau SYN est à 1 (car il s’agit là encore d’une synchronisation). Ce segment contient le numéro d’ordre de cette machine (du serveur) qui est le numéro d’ordre initial du client. Le champ le plus important de ce segment est le champ accusé de réception qui contient le numéro d’ordre initial du client, incrémenté de 1

  3. Enfin, le client transmet au serveur un accusé de réception aussi, c’est-à-dire un segment dont le drapeau ACK est à 1, dont le drapeau SYN est à zéro (il ne s’agit plus d’un segment de synchronisation). Son numéro d’ordre est incrémenté et le numéro d’accusé de réception représente le numéro d’ordre initial du serveur incrémenté de 1

Suite à cette séquence comportant trois échanges les deux machines sont synchronisées et la communication peut commencer!

Il existe une technique de piratage, appelée spoofing IP, permettant de corrompre cette relation d’approbation à des fins malicieuses !

Youtube

6. Méthode de la fenêtre glissante

Dans de nombreux cas, il est possible de limiter le nombre d’accusés de réception, afin de désengorger le réseau, en fixant un nombre de séquence au bout duquel un accusé de réception est nécessaire. Ce nombre est en fait stocké dans le champ fenêtre de l’en-tête TCP/IP.

On appelle effectivement cette méthode “méthode de la fenêtre glissante” car on définit en quelque sorte une fourchette de séquences n’ayant pas besoin d’accusé de réception, et celle-ci se déplace au fur et à mesure que les accusés de réception sont reçus.

De plus, la taille de cette fenêtre n’est pas fixe. En effet, le serveur peut inclure dans ses accusés de réception en stockant dans le champ fenêtre la taille de la fenêtre qui lui semble la plus adaptée. Ainsi, lorsque l’accusé de réception indique une demande d’augmentation de la fenêtre, le client va déplacer le bord droit de la fenêtre.

Par contre, dans le cas d’une diminution, le client ne va pas déplacer le bord droit de la fenêtre vers la gauche mais attendre que le bord gauche avance (avec l’arrivée des accusés de réception).

Stream tcp

  • l’unité de gestion de la fenêtre n’est pas le message mais l’octet
  • l’application lit les données comme elles viennent
  • la grandeur de la fenêtre est variable!
    • le destinataire gère dynamiquement la taille de la fenêtre chez l’émetteur
    • chaque confirmation contient une indication de fenêtre
  • la position dans le flux de données est indiquée par les numéros de séquence (pointeurs)

Le timer

  • TCP travaille en implicit retransmission (confirmation positives seulement)
  • les temps de transfert peuvent varier énormément (LAN, WAN)
  • timer trop petit: retransmissions inutiles
  • timer trop grand: retard dans la découverte des problèmes (attention: GO-BACK N)
  • TCP mesure en permanence les temps de réponse et adapte le timer
  • une moyenne glissante et une variance glissante sont calculées et utilisées pour le calcul du time

Des bouchons dans le réseau (congestion)

  • grâce à la gestion de la fenêtre: pas de surcharge du destinataire
  • un élément du réseau peut tout de même être surchargé (routeur, ligne): congestion
  • c’est d’ailleurs la cause la plus fréquente de retransmission sur WAN
  • l’émetteur réduit sa fenêtre à un segment, chaque fois qu’un segment doit être répété.
  • des extensions TCP existent pour une meilleure gestion des congestions (ECN)

Optimisation du débit de sortie

  • but : plus rapidement, au début d’une connexion, atteindre le débit maximum de sortie
  • on augmente exponentiellement à chaque ACK la taille de fenêtre effective (limitée par la taille annoncée par le destinataire!)
  • en cas de congestion, on note la zone problématique (niveau : moitié): slow start threshold et on repart à 1 segment.
  • l’agrandissement est prudent uniquement dès que la zone de congestion est atteinte (congestion avoidance

ssl.horus.ch

7. Fin d’une connexion

Le client peut demander à mettre fin à une connexion au même titre que le serveur. La fin de la connexion se fait de la manière suivante :

  • Une des machines envoie un segment avec le drapeau FIN à 1, et l’application se met en état d’attente de fin, c’est-à-dire qu’elle finit de recevoir le segment en cours et ignore les suivants

Le procédé assure qu’aucune donnée n’est perdue (graceful close)

  • Après réception de ce segment, l’autre machine envoie un accusé de réception avec le drapeau FIN à 1 et continue d’expédier les segments en cours. Suite à cela la machine informe l’application qu’un segment FIN a été reçu, puis envoie un segment FIN à l’autre machine, ce qui clôture la connexion…

une connexion peut aussi être coupée brutalement (RST = reset). Dans ce cas des données peuvent être perdues

8. Sécurité

  • ni IP ni TCP n’ont de mécanismes de sécurité (droit d’accès, confidentialité…)
  • sans précaution tout est accessible, tout est en clair !
  • attaques potentielles (interception, man-inthe-middle, injection, half-open, …)
  • solutions
    • firewall stateful (contrôle d’accès, validation des entêtes, …)
    • chiffrement/signature : couche 2 : VPN ou 802.1x ; couche 3 : IPSec ; couche 7 : TLS/SSL

9. Sockets

Il s’agit d’un modèle permettant la communication inter processus (IPC - Inter Process Communication) afin de permettre à divers processus de communiquer aussi bien sur une même machine qu’à travers un réseau TCP/IP.

La communication par socket est souvent comparée aux communications humaines. On distingue ainsi deux modes de communication :

  • Le mode connecté (comparable à une communication téléphonique), utilisant le protocole TCP.

    Dans ce mode de communication, une connexion durable est établie entre les deux processus, de telle façon que l’adresse de destination n’est pas nécessaire à chaque envoi de données.

  • Le mode non connecté (analogue à une communication par courrier), utilisant le protocole UDP.

    Ce mode nécessite l’adresse de destination à chaque envoi, et aucun accusé de réception n’est donné.

Les sockets sont généralement implémentés en langage C, et utilisent des fonctions et des structures disponibles dans la librairie <sys/socket.h>.

Conecpt de socket ou prise réseau

L’abstraction programmatique est basée sur le concept de sockets. Un socket est une prise qui permet à une application d’envoyer et de recevoir des données.

  • une connextion TCP est identidiée par 4 valeurs (adresss IP source et destination, ports TCP source et destination).

  • un socket est identifié par une valeur spécifique à l’OS