SNT Internet

Identification

Infoforall

2 - Protocole TCP


Nous allons aujourd'hui voir un peu plus dans le détail le principe de l'un des protocoles d'Internet : le protocole TCP.

Evaluation ✎ : questions 01-02-03-04-07-08-09-14

Documents de cours :

1 - Protocole TCP : segmentation

Revoyons d'abord le cheminement et la surveillance des paquets IP sur Internet :

Animation sur TCP
CLIQUEZ SUR L'IMAGE POUR LANCER L'ANIMATION
Protocole : TCP (et +) Adresse : PORT DATA d'un programme SEGMENT TCP Port SRC 443 Port DST 2050 SEQ 4 SUI 2 Flags : ACK CS : 15241 PAQUET IP IP DST 25.25.25.5 IP SRC 45.45.45.2 TRAME (Ethernet ou Wifi) SEQUENCE INTIALE MAC DST MAC SRC CheckSum selon le type de trame Couche RESEAU Protocole : IP (et +) Adresse : IP Message : PAQUET Couche LIAISON Protocole : WLAN ... Adresse : MAC Message : TRAME Couche Application Firefox Couche Application Serveur HTTP Communication prog A Comm. prog B A B Rq TCP Rp1 TCP Rp2 TCP vide TCP Ack4 TCP ? A TCP IP Trame B TCP IP Trame data SRC 2050 DST 443 SEQ data SRC 24945 DST 443 SEQ data SRC DST CS data SEQ SUI F vide SEQ SUI F SRC 2050 DST 443 F ACK SUI 2 SEQ 1 CS XXXXX

Si vous êtes sur cette page, vous avez certainement ceci dans la barre de navigation :

https://www.infoforall.fr/act/snt/les-protocoles-tcp-et-ip/

Nous avons donc :

  • Le protocole
    • https://www.infoforall.fr/act/snt/les-protocoles-tcp-et-ip/
  • Le nom du serveur à joindre
    • https://www.infoforall.fr/act/snt/les-protocoles-tcp-et-ip/
  • L'adresse absolue de la ressource
    • https://www.infoforall.fr/act/snt/les-protocoles-tcp-et-ip/

En réalité, on doit identifier les programmes par des identifiants nommés PORTS.

Le numéro de PORT d'un serveur HTTP est 80.

Le numéro de PORT d'un serveur HTTPS est 443.

Ici, vous n'avez jamais à donner le PORT car votre navigateur Web (Firefox, Chrome, Edge...) détecte que vous voulez joindre un serveur HTTPS et rajoute le 443 tout seul :

https://www.infoforall.fr:443/act/snt/les-protocoles-tcp-et-ip/

✎ 01° QCM : Que va rajouter le navigateur si on tape ceci :

http://monsite.com

  • A : http://monsite.com:8000
  • B : http://monsite.com:80
  • C : http://monsite.com:443
  • D : http://monsite.com:PORT

Le PORT est donc une adresse identifiant un programme sur un ordinateur identifié lui par son adresse IP. Le PORT est un simple nombre entier allant de 0 à 65535.

Les programmes-serveurs courants bénéficient d'un PORT inférieur à 1024.

Et que vaut le PORT qui identifie votre navigateur lorsque vous lancer une requête ? L'ordinateur lui attribue un numéro aléatoire (non attribué à ce moment sur cet ordinateur) entre 1024 et la valeur maximale.

Firefox envoie donc une requête pour le programme 443. Il y place d'ailleurs son propre numéro de PORT. Ca permettra au serveur de savoir à quel programme répondre.

Le problème est que des programmes, il y en a un bon nombre que peuvent demander à communiquer en même temps.

Nous allons voir comment le protocole TCP gère la situation.

Protocole TCP - la segmentation (1/3)

Le premier grand intérêt de TCP est qu'il peut segmenter un gros message initial en plusieurs sous-messages si nécessaire.

Imaginons deux programmes A et B désirant communiquer. Si on ne faisait rien, ça donnerait cela :

Le programme B devrait atteindre que A ai fini pour envoyer ses propres communications...

La solution ? Décomposer la communication en petits messages et envoyer les messages et gérer l'alternance lorsque plusieurs programmes veulent communiquer sur le même créneau.

7 6 5 4 3 2 1 4 3 2 1

Cela permet d'alterner entre les messages de plusieurs applications et ainsi de permettre à plusieurs applications de communiquer en 'même temps'.

1 2 3 4 5 6 7 1 2 3 4

A l'émission, le protocole TCP se charge donc de décomposer les communications des applications pour en faire des messages numérotés.

Par contre, si on ne fait que cela, on va avoir un problème : les étiquettes sont visibles à l'écran mais il n'y a aucune information réeelle de numérotation (1,2,3..) ou d'identité de l'émetteur (A ou B) sur les messages.

A l'écran :

1 2 3 4 5 6 7 1 2 3 4

En réalité :

Donc pas moyen de savoir qui envoie quoi et dans quel ordre on doit les placer à la réception.

Pour garantir la transmission et la possibilité de leur remettre dans le bon sens, nous allons rajouter des informations autour du message.

Protocole TCP - en-tête TCP (2/3)

Que doit-on rajouter au minimum à chaque message ?

Nous allons rajouter un en-tête TCP que nous allons placer devant le sous-message que nous voulons transmettre :

  • le PORT SRC source : celui du programme émetteur, sans lui l'ordinateur-récepteur ne saura pas à quel programme répondre ! Prenons ici l'exemple d'un programme-émetteur dont le PORT SRC serait 2050.
  • Remarque : vous pouvez zoomer en cliquant sur les segments, ou utiliser CRTL + comme d'habitude.

    1
  • le PORT DST destination : celui du programme-récepteur qu'on veut joindre. Sans lui, l'ordinateur-récepteur ne sera pas auquel de ses programmes le message est destiné. Ici, on veut se connecter à un serveur en https : 443. Sinon, c'est 80 pour du http classique.
  • 1
  • Un système de numérotation de séquences (SEQ) pour signaler au destinataire la place du segment dans l'ensemble.
  • 1
  • Un système d'accusés de réception (SUI) pour signaler le numéro du paquet suivant on veut bien recevoir. Exemple : si SUI vaut 2, cela veut dire qu'on a déjà reçu le segment 1 et qu'on veut bien le 2.
  • 1

Le segment précédent veut donc dire que le programme de PORT 2050 à un segment numéroté 1 pour le programme de PORT 443 et que 2050 est prêt à recevoir le segment numéro 2 de 443 s'il en a un.

Et voilà pour l'essentiel. Par la suite, nous représenterons parfois uniquement l'en-tête TCP par un petit rectangle jaune-orangé noté TCP.

Voici donc le résultat des transformations des communications envoyées par les applications à la couche TRANSPORT :

1 2 3 4 5 6 7 1 2 3 4

✎ 02° Il n'y a plus de couleur dans les segments affichés pour savoir s'ils proviennent des programmes A ou B. Dans le segment ci-dessous, où se trouve l'information permettant de retrouver le programme à l'origine du message ?

4

Question supplémentaire : quel est le numéro de ce segment ?

Pour information, les indications fournies dans le header TCP sur la représentation du segment sont :

  • SRC 24945
  • DST 443
  • SEQ 4

2 - Protocole TCP : garantir la transmission

Nous allons maintenant tenter d'expliquer comme le paquet IP est constuit et comment on parvient à savoir à qui le transmettre.

Transmission d'un flux via TCP (3/3)

TCP permet donc de gérer les flux.

Le principe est simple côté récepteur :

  • Si on reçoit un message numéroté SEG 5 et qu'on a déjà reçu les messages 1-2-3-4, on renvoie un accusé de réception en notant SUI 6 pour dire... qu'on veut bien le 6.
  • Si on reçoit un message numéroté SEG 5 sans avoir reçu tous les messages 1-2-3-4, on ne renvoie pas d'accusé de réception.

Le principe est simple également du côté émetteur :

  • Lorsqu'on émet un message, on attend un certain temps son accusé de réception. S'il n'arrive pas, on renvoie à nouveau le message.

03° Le PORT 443 a reçu uniquement les messages 1, 2 et 3 du PORT 2050 et le message 5 arrive.

Que faut-il faire ?

  • Renvoyer un accusé de réception SUI 3
  • Renvoyer un accusé de réception SUI 5
  • Renvoyer un accusé de réception SUI 6
  • Ne rien faire.

...CORRECTION...

Ne rien faire.

04° Le PORT 443 a reçu uniquement les messages 1, 2, 3 et 5 du PORT 2050 et le message 4 arrive.

Que faut-il faire ?

  • Renvoyer un accusé de réception SUI 3
  • Renvoyer un accusé de réception SUI 5
  • Renvoyer un accusé de réception SUI 6
  • Ne rien faire.

...CORRECTION...

Maitenant, nous avons les messages 1-2-3-4-5.

On accuse réception en demandant le 6 avec SUI 6.

05° Cliquer sur la requête Req en bleue de façon à lancer l'animation et voir le transfert des messages entre FIREFOX qui fait une requête HTTP et le SERVEUR qui renvoie une réponse HTTP.

Rep http Rep TCP Req TCP ACK TCP

06° Le système d'accusés de réception de TCP garantit la bonne transmission du message si elle est possible. Pourquoi TCP ne permet pas par contre de garantie temporelle ?

...CORRECTION...

On sait juste qu'un message est arrivé ou pas. S'il n'est pas arrivé, il faudra le renvoyer, jusqu'à ce qu'il arrive.

3 - FAQ

Pas de question pour le moment

La prochaine activité traitera donc du transfert des paquets IP de routeurs en routeurs.

En effet, si on doit résumer Internet en deux mots, on dirait TCP / IP.

TCP rend la communication fiable.

IP rend la communication possible si elle l'est !

Activité publiée le 30 03 2020
Dernière modification : 06 04 2020
Auteur : ows. h.