TCP TCP est le protocole de transmission IP le plus répandu nécessitant l'établissement d'une session de communication entre deux hôtes ou un hôte et un serveur et utilisant des accusés de réception pour s'assurer de la réussite de l'acheminement de données entre les interlocuteurs. Cas d'utilisation Contrairement à UDP, TCP permet l'établissement d'une session entre un client et un serveur. Ceci permet entre autres la retransmission partielle de données en cas de perte de données puisque chaque bloc de donnée est identifié par un numéro de séquence et que le client fait parvenir un accusé de réception pour chaque bloc de données transmis assurant par conséquent une connexion plus fiable mais nécessitant plus d'étapes avant le transfert d'une donnée. Ce protocole est donc mieux adapté qu'UDP au transfert d'un large volume de données lorsque la latence n'est pas un enjeu pour la connexion à établir.                     On pourrait penser ici au téléchargement d'une page web ou d'un fichier par HTTP(S) ou (S)FTP, à l'envoi d'un courriel par SMTP ou même à l'écoute d'un flux audio (ex. Spotify) / vidéo (ex. YouTube/Netflix) si celui-ci n'est pas en direct puisque la latence n'y est pas un enjeu mais la qualité de livraison le devient. Dans le cas de la transmission de ces flux audio/vidéo, une partie des données est téléchargée à l'avance dans une mémoire tampon (buffer) et sera téléchargée en "chunks" ou blocs au fur et à mesure que la lecture du média se poursuivra. Fonctionnement Le numéro de protocole Internet de TCP est #6. Avant de transférer des données entre deux hôtes ou un hôte et un serveur, il est nécessaire pour les deux partis d'établir une session pour maintenir un suivi des données transmises, à transmettre, reçues et à retransmettre. Structure d'en-tête Une en-tête TCP est considérablement plus longue et plus complexe qu'une en-tête UDP. En plus des ports de source et destination, elle contient, entre autres, un numéro de séquence, du numéro de séquence attendu ensuite, et d'un identifiant de type de paquet (flag, ex. SYN, ACK, FIN, RST, etc.). Dans l'exemple suivant, la connexion est déjà établie et il s' agit du 37 paquet acheminé du client vers le serveur confirmant la réception de la 85e partie de la donnée à transférer. On y voit aussi dans les "Flags" la mention "FIN". Cette mention indique au serveur que le client désire clore sa connexion auprès du serveur. Transmission Control Protocol, Src Port: 62928, Dst Port: 53, Seq: 37, Ack: 85, Len: 0 Source Port: 62928 Destination Port: 53 Sequence Number: 37 (relative sequence number) Sequence Number (raw): 743751263 Acknowledgment Number: 85 (relative ack number) Acknowledgment number (raw): 287489219 0101 .... = Header Length: 20 bytes (5) Flags: 0x011 (FIN, ACK) Window: 65434 Checksum: 0x3188 [unverified] Urgent Pointer: 0 Échange de poignée de main Pour établir la connexion entre un hôte et un serveur, le client doit tout d'abord envoyer une demande de connexion au serveur. Ce paquet sera identifié par la mention "SYN" pour "synchronisation". Le serveur répondra ensuite avec une validation de la synchronisation ou un "SYN-ACK" pour "Synchronization Acknowledgement". Le client répondra ensuite par un "ACK" ou "Acknowledgement" pour indiquer au serveur que la session est bien établie. Transfert de données Une fois la connexion établie, le transfert de données peut être entâmé. À chaque donnée reçue, le client fera parvenir au serveur un accusé de réception. Plusieurs données peuvent être transférées au sein d'une unique session. Fermeture de la session À la fin du transfert de la donnée, le client pourra faire parvenir un "FIN" ou "Final" au serveur pour lui indiquer la fin de la session. Si le serveur désire rompre la connexion prépaturément avec le client, il fera parvenir un "RST" ou "Reset" pour couper la connexion.