> Parmi tous les protocoles employés dans le domaine de l'informatique, on peut très souvent entendre l'un d'entre eux revenir en boucle : IP. Et il se trouve qu'IP a un grand ami, le protocole TCP, avec qui il est très proche.
TCP, ou *Transmission Control Protocol* est toujours associé à IP, sous la dénomination *__TCP/IP__*. Il s'agit d'un membre essentiel d'Internet : il permet de relier les machines entre elles, ainsi que d'assurer l'échange de données, en garantissant l'arrivée à destination de paquets.
## Cliquez, c'est envoyé !
Imaginons que vous souhaitiez acheter quelque chose sur votre site de e-commerce préféré : lorsque vous passez votre commande, vous devez indiquer votre adresse postale, afin d'assurer la livraison jusqu'à votre domicile.
Dans le merveilleux monde d'Internet, c'est la même chose, grâce à l'adresse *__IP__* : chaque machine a la sienne, et vos données peuvent traverser tout le réseau mondial jusqu'à parvenir au bon destinataire : on parle alors de *__routage__*.

Arobase souhaite passer une commande auprès d'une célèbre chaine de magasin de meuble. Hélas, le paquet est trop gros pour être livré en une fois, en effet, le poids maximum d'un colis est de 1,5 kg.
TCP assure une qualité de service, c'est-à-dire qu'il assure le découpage du fichier en plus petits paquets, en permettant le routage des données par quelques chemins que cela soit tout en promettant une reconstitution des fichiers demandés dans le bon ordre, grâce à une numérotation précise des données.
*__Selon vous, qu'est-ce que le routage des paquets (c'est-à-dire le fait de pouvoir disperser les données à travers Internet tout en s'assurant qu'elles parviennent à destination) engendre comme contrainte ?__*
On suppose qu'Arobase souhaite envoyer des fichiers personnels sur son cloud Bobble Drive, et pour patienter, Arobase décide de regarder son jeu favori sur une plateforme de streaming.
Une adresse IP identifie une machine sur le réseau, mais une même machine fait tourner plusieurs services en même temps (navigateur web, messagerie, streaming…). Pour les distinguer, on utilise les **ports**.
Un **port** est un numéro compris entre 0 et 65 535 qui identifie un service particulier sur une machine.
| Port | Service |
|------|---------|
| 80 | HTTP (pages web) |
| 443 | HTTPS (pages web sécurisées) |
| 22 | SSH (connexion distante) |
| 25 | SMTP (envoi d'e-mails) |
| 53 | DNS |
L'association d'une adresse IP et d'un numéro de port s'appelle une **socket**.
> **Exemple** : quand vous accédez à `https://www.google.fr`, votre machine contacte l'adresse IP de Google sur le port **443**. La socket de destination est donc `adresse_IP_google:443`.
---------
## Mais au fait, comment se font ces échanges TCP ?
Avant de transmettre des données, TCP établit une connexion en **3 étapes** — on parle de ***three-way handshake*** (poignée de main en trois temps) :
1.**SYN** — le client envoie une demande de connexion au serveur
2.**SYN-ACK** — le serveur accepte et le confirme
3.**ACK** — le client confirme à son tour : la connexion est établie
Ce n'est qu'après ces 3 échanges que les données commencent à transiter, découpées en **paquets numérotés**.
Le serveur répond **SYN-ACK**, puis envoie les données découpées en paquets. Chaque paquet reçu est **acquitté** (ACK) par le destinataire pour confirmer sa bonne réception :
Ce cours est mis à disposition selon les termes de la [Licence Creative Commons Attribution - Pas d'Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International](http://creativecommons.org/licenses/by-nc-sa/4.0/).
## Vous êtes autorisé à :
- **Partager** — copier, distribuer et communiquer le matériel par tous moyens et sous tous formats
- **Adapter** — remixer, transformer et créer à partir du matériel
## Selon les conditions suivantes :
- **Attribution** — Vous devez créditer l'auteur, intégrer un lien vers la licence et indiquer si des modifications ont été effectuées
- **Pas d'Utilisation Commerciale** — Vous n'êtes pas autorisé à faire un usage commercial de ce matériel
- **Partage dans les Mêmes Conditions** — Si vous remixez ou transformez le matériel, vous devez diffuser vos contributions sous la même licence