{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "57756f8d",
   "metadata": {},
   "source": [
    "# Le protocole TCP"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "39894bd2",
   "metadata": {},
   "source": [
    "> 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."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e2a0377e",
   "metadata": {},
   "source": [
    "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."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "44a2d5cc",
   "metadata": {},
   "source": [
    "## Cliquez, c'est envoyé !"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "346719f4",
   "metadata": {},
   "source": [
    "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."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "47f900f1",
   "metadata": {},
   "source": [
    "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__*."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6a334f61",
   "metadata": {},
   "source": [
    "![diagramme.svg](assets/diagramme.svg)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c7e93427",
   "metadata": {},
   "source": [
    "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.\n",
    "\n",
    "*Quelle solution le commerçant va t-il choisir pour expédier les différents colis ?*"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b8fa76dc",
   "metadata": {},
   "source": [
    "*__Problématiques__* :\n",
    "\n",
    "    - Comment découper la commande pour faire parvenir l'ensemble des éléments ?\n",
    "    - Comment s'assurer que tous les éléments arrivent bien ?"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "41b803a1",
   "metadata": {},
   "source": [
    "__En informatique__\n",
    "\n",
    "Cela fonctionne de la même manière : Arobase souhaite envoyer télécharger un gros fichier depuis un serveur https. Les problèmatiques restent les mêmes : \n",
    "\n",
    "    - Comment découper le fichier ?\n",
    "    - Comment s'assurer que tous les \"morceaux\" de fichiers parviennent à destination ?\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9f539a58",
   "metadata": {},
   "source": [
    "## Deux méthodes d'envoie"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7b47be55",
   "metadata": {},
   "source": [
    "Arobase a le choix entre deux méthodes de livraison :\n",
    "\n",
    "    - Soit l'ensemble des paquets sera livrée en trois jours, avec une numérotation précise de chaque colis\n",
    "    - Soit la commande arrivera dès le lendemain, mais sans aucune garantie de fiabilité"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3cfd70fa",
   "metadata": {},
   "source": [
    "On peut rapprocher ces deux méthodes à deux protocoles de transmission de données :\n",
    "\n",
    "- [x] TCP\n",
    "- [x] UDP"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a45b1f71",
   "metadata": {},
   "source": [
    "### TCP"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "41dc2ae5",
   "metadata": {},
   "source": [
    "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."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ea5d6571",
   "metadata": {},
   "source": [
    "*__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 ?__*"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4c57365f",
   "metadata": {},
   "source": [
    "### UDP"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "69ec521b",
   "metadata": {},
   "source": [
    "Contrairement au protocole TCP, UDP s'affranchit de la numérotation des paquets et n'assure en aucun cas la fiabilité des données transmises."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "03ca29d7",
   "metadata": {},
   "source": [
    "*__Pourquoi, d'après vous, le protocole UDP est-il plus rapide que TCP ?__*\n",
    "\n",
    "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.\n",
    "\n",
    "À votre avis :\n",
    "\n",
    "- Lequel de ces services favorise le TCP ?\n",
    "- Lequel favorise l'UDP ? Pourquoi ?\n",
    "- Que faire si un paquet se perd ?\n",
    "- Que faire si un paquet arrive en double ?"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "19b8912d",
   "metadata": {},
   "source": [
    "## Résumé "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8ed835cd",
   "metadata": {},
   "source": [
    "- TCP et UDP sont des protocoles\n",
    "- TCP permet de s'assurer que les données transmises sont bien arrivées à destination, contrairement à UDP\n",
    "- UDP est plus rapide que TCP mais n'assure en aucun cas la fiabilité de la transmission\n",
    "- Avec le protocole IP, ils forment un modèle informatique appelé TCP/IP"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e6bc030f",
   "metadata": {},
   "source": [
    "## Mais au fait, comment se font ces échanges tcp ?"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f7d24cbb",
   "metadata": {},
   "source": [
    "Voilà comment se déroule un échange entre un client et un serveur TCP.\n",
    "\n",
    "Tout d'abord, le client demande un canal TCP au serveur\n",
    "\n",
    "![blague_1.png](assets/blague_1.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "42c91da4",
   "metadata": {},
   "source": [
    "Puis le serveur se met en mode TCP et envoie les données découpées en paquets :\n",
    "\n",
    "![blague_1.png](assets/blague_2.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1c99b704",
   "metadata": {},
   "source": [
    "Hélas on voit ici que le message était trop long, et que le canal s'est refermé après la durée  choisie par défaut..."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5dfba86d",
   "metadata": {},
   "source": [
    "![blague_1.png](assets/blague_3.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "427c2c7d",
   "metadata": {},
   "source": [
    "Et que se passe t-il dans ce cas ...?"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f0ad0992",
   "metadata": {},
   "source": [
    "![blague_4.png](assets/blague_4.png)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
