Transport Control Protocol : protocole à contrôle de
transport.
Ou TCP/IP.
Besoin
Définir un protocole réseau standard et fiable pour l'échange de documents sur le Web (pages HTML)
Conception
TCP est basé sur IP (encapsulé dans les datagrammes IP).
Implémentation
Un segment TCP contient :
Section |
Octet |
Contenu
|
Commentaire |
En-tête |
0-1 |
Port source |
|
|
2-3 |
Port destination |
|
|
4-7 |
Numéro de séquence |
|
|
8-11 |
Numéro d'accusé-réception |
|
|
12-13 |
Hlen (3 bits) + Réservé (5 bits) + Code (4 bits) |
|
|
14-15 |
Fenêtre |
Groupe d'envois auquel appartient ce paquet |
|
16-17 |
Somme de contrôle |
|
|
18-19 |
Pointeur urgent |
Où se trouvent les données urgentes |
|
20-22 |
Options |
|
|
23 |
Remplissage |
Des 0 ? |
Données |
24- |
Données |
|
Les API (C, Java) utilisées pour établir des connexions TCP utilisent le principe
de socket.
L'utilisation de sockets TCP implique typiquement les opérations suivantes :
- Création de la socket en mode :
- passif (serveur) : Accepter et attendre les connexions ;
- actif (client) : Contacter l'application distante et s'y connecter.
- Communication établie (bind, listen, connect ou accept)
- Echange de données (
read
/write
ou sendto
/recvfrom
).
- Pour éviter une lecture bloquant infiniment en attente de données ou de fermeture de socket, on peut fixer
un temps d'expiration de la tentative de lecture (l'option Berkeley
SO_TIMEOUT
, en
millisecondes).
- Pour éviter trop de lourdeur des échanges, les paquets sont bufferisés et envoyés que lorsque les accusés
réception des n paquets précédents ont été reçus (système de "fenêtres" ou algorithme de John Nagle : envoi du
paquet 11 quand réception de l'accusé du paquet 1 si la fenêtre est de taille 10 par exemple). Ce système peut
être contourné pour des applications "temps réel" désirant des accusés réception immédiats pour chaque envoi
(via l'option Berkeley
TCP_NODELAY
), par exemple un client de serveur X Unix recevant les mouvements d'une souris.
- Fermeture de la communication (close ou shutdown)
- Envoi de TCP Finish (<FIN>)
- L'autre partie confirme (<ACK><FIN>). Sans confirmation au bout d'un temps moyen de réponse
constaté (ou valeur de l'option Berkekey SO_LINGER), la socket fermante émet un TCP Abort (<RST>) et
ferme unilatéralement.
- La socket fermante reconfirme (<ACK>)
Exemples
Des exemples d'applications utilisant TCP sont :
Description |
Port |
Statut |
TCP |
UDP |
Notes
- Parfois désignée sous le terme de "pile" (de protocoles, ensemble de couches) TCP/IP
- Fiable : contrôle des erreurs
- Garantie du séquencement
- Circuit virtuel
- Transferts bufferisés
- Full duplex
- Utilise la notion de port (16 bits) pour faire communiquer 2 applications sur des machines.
Limitations
- Flux d'information non structuré
Voir
- Unix Network Programming de Richard Stevens (Addison-Wesley)
- Internetworking with TCP/IP Vol. 1, 3ᵉ Edition de Douglas Corner (Prentice Hall)
- Internetworking with TCP/IP Vol. 3 de Douglas Corner (Prentice Hall)
- TCP/IP Illustrated de Richard Stevens (Addison Wesley)
- JavaSoft The Java Tutorial - Custom Networking
: All About Sockets