Web Analytics

See also ebooksgratis.com: no banners, no cookies, totally FREE.

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
Privacy Policy Cookie Policy Terms and Conditions
Transmission Control Protocol - Wikipédia

Transmission Control Protocol

Un article de Wikipédia, l'encyclopédie libre.

Vous avez de nouveaux messages (diff ?).
Pile de protocoles
[Modifier]
Application
Présentation
Session
Transport
Réseau
Liaison
Physique
Modèle OSI

Le Transmission Control Protocol (TCP, « protocole de contrôle de transmissions »), est un protocole de transport fiable, en mode connecté, documenté dans la RFC 793 de l'IETF.

Dans le modèle TCP/IP, TCP est situé entre la couche de réseau (généralement le protocole IP), et la couche application. Les applications transmettent des flux d'octets sur le réseau. TCP découpe le flux d'octets en segments, dont la taille dépend de la MTU du réseau sous-jacent (couche liaison de données).

Sommaire

[modifier] Fonctionnement

Une session TCP fonctionne en trois phases :

  • l'établissement de la connexion ;
  • les transferts de données ;
  • la fin de la connexion.

L'établissement de la connexion se fait par une poignée de main en trois temps. La rupture de connexion, elle, utilise une poignée de main en quatre temps. Pendant la phase d'établissement de la connexion, des paramètres comme le numéro de séquence sont initialisés afin d'assurer la transmission fiable (sans perte et dans l'ordre) des données.

[modifier] Structure d'un segment TCP

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
Port Source
Port destination
Numéro de séquence
Numéro d'acquittement
Taille de l'en-tête
réservé
ECN
URG
ACK
PSH
RST
SYN
FIN
Fenêtre
Somme de contrôle
Pointeur de données urgentes
Options
Remplissage
Données


Signification des champs :

  • Port source : Numéro du port source
  • Port destination : Numéro du port destination
  • Numéro de séquence : Numéro de séquence du premier octet de ce segment
  • Numéro d'acquittement : Numéro de séquence du prochain octet attendu
  • Taille de l'en-tête : Longueur de l'en-tête en mots de 32 bits (les options font partie de l'en-tête)
  • Réservé : Réservé pour un usage futur
  • ECN : signale la présence de congestion, voir RFC 3168
  • Drapeaux
    • URG : Signale la présence de données URGentes
    • ACK : Signale que le paquet est un accusé de réception (ACKnowledgement)
    • PSH : Données à envoyer tout de suite (PuSH)
    • RST : Rupture anormale de la connexion (ReSeT)
    • SYN : Demande de SYNchronisation ou établissement de connexion
    • FIN : Demande la fin de la connexion
  • Fenêtre : Taille de fenêtre demandée, c'est-à-dire le nombre d'octets que le récepteur souhaite recevoir sans accusé de réception
  • Checksum : Somme de contrôle calculé sur l'ensemble de l'en-tête TCP et des données, mais aussi sur un pseudo en-tête (extrait de l'en-tête IP)
  • Pointeur de données urgentes : Position relative des dernières données urgentes
  • Options : Facultatives
  • Remplissage : Zéros ajoutés pour aligner les champs suivants du paquet sur 32 bits, si nécessaire
  • Données : Séquences d'octets transmis par l'application (par exemple: +OK POP3 server ready, ...)

[modifier] Établissement d'une connexion

Agrandir

Même s'il est possible, pour deux systèmes, d'établir une connexion entre eux simultanément, dans le cas général, un système ouvre un 'socket' (point d'accès à une connexion TCP) et se met en attente passive de demandes de connexion d'un autre système. Ce fonctionnement est communément appelé ouverture passive, et est utilisé par le côté serveur de la connexion. Le côté client de la connexion effectue une ouverture active en envoyant un segment SYN au serveur, ce qui constitue la première étape de la poignée de mains en trois temps. Le serveur doit répondre à un segment SYN valide par un segment SYN/ACK. Enfin, le client répond au serveur avec un segment ACK, complétant la poignée de main en trois temps, et donc la phase d'établissement de la connexion.

[modifier] Transferts de données

Pendant la phase de transferts de données, certains mécanismes clefs permettent d'assurer la robustesse et la fiabilité de TCP. En particulier, les numéros de séquence sont utilisés afin d'ordonner les segments TCP reçus et de détecter les données perdues, les checksums permettent la détection d'erreurs, et les acquittements, ainsi que les temporisations, permettent la détection des segments perdus ou retardés.

Pendant la phase d'établissement de la connexion, les numéros de séquence initiaux sont échangés par les deux interlocuteurs. Ces numéros de séquence sont utilisés pour décompter les données dans le flux d'octets. On trouve toujours deux de ces nombres dans chaque segment TCP, qui sont le numéro de séquence et le numéro d'acquittement. Le numéro de séquence représente le propre numéro de séquence de l'émetteur TCP, tandis que le numéro d'acquittement représente le numéro de séquence du destinataire. Afin d'assurer la fiabilité de TCP, le destinataire doit acquitter les segments reçus en indiquant qu'il a reçu toutes les données du flux d'octets jusqu'à un certain numéro de séquence. Une amélioration de TCP, nommée acquittement sélectif (selective acknowlegement ou SACK), autorise le destinataire TCP à acquitter des blocs de données reçus dans le désordre.

Grâce aux numéros de séquence et d'acquittement, les systèmes terminaux peuvent remettre les données reçues dans l'ordre à l'application destinataire. Les numéros de séquence sont des nombres entiers non signés sur 32 bits, qui reviennent à zéro après avoir atteint 2^32-1. Le choix du numéro de séquence initial est une des clefs de la robustesse et de la sécurité des connexions TCP.

Une somme de contrôle sur 16 bits, constituée par le complément à un de la somme des compléments à un de tous les éléments d'un segment TCP (en-tête et données), est calculée par l'émetteur, et incluse dans le segment émis. Le destinataire recalcule la somme de contrôle du segment reçu, et si elle correspond à la somme de contrôle reçue, on considère que le segment a été reçu intact et sans erreur.

La somme de contrôle en complément à un utilisée par TCP est relativement peu fiable selon les standards modernes. Ceci restreint l'utilisation de TCP à des réseaux offrant des taux d'erreurs faibles. Si TCP était redéfini aujourd'hui, on utiliserait probablement un CRC sur 32 bits au lieu du mécanisme actuel. Ce manque de fiabilité de la somme de contrôle est partiellement compensé par l'utilisation fréquente d'un CRC ou d'un meilleur contrôle d'intégrité au niveau 2 (couche liaison de données), au-dessous de TCP et IP, comme par exemple dans les trames PPP ou Ethernet. Toutefois, cela ne signifie pas que la somme de contrôle TCP est redondante: des études sur le trafic Internet ont montré qu'on rencontre couramment des erreurs matérielles et logicielles qui introduisent des erreurs dans les paquets entre les nœuds protégés par des CRC, et que le principe de somme de contrôle de bout en bout de TCP détecte la plupart de ces erreurs.

Les acquittements des données émises, ou l'absence d'acquittements, sont utilisés par les émetteurs pour interpréter de façon implicite l'état du réseau entre les systèmes finaux. À l'aide de temporisations, les émetteurs et destinataires TCP peuvent modifier le comportement du flux de données. C'est ce qu'on appelle généralement le contrôle de flux.

TCP utilise un certain nombre de mécanismes afin d'obtenir une bonne robustesse et des performances élevées. Ces mécanismes comprennent l'utilisation d'une fenêtre glissante, l'algorithme de démarrage lent (slow start), l'algorithme d'évitement de congestion (congestion avoidance), les algorithmes de retransmission rapide (fast retransmit) et de récupération rapide (fast recovery), etc. Des recherches sont menées actuellement afin d'améliorer TCP pour traiter efficacement les pertes, minimiser les erreurs, gérer la congestion et être rapide dans des environnements très haut débit.

[modifier] Terminaison d'une connexion

La phase de terminaison d'une connexion utilise une poignée de main en quatre temps, chaque extrémité de la connexion effectuant sa terminaison de manière indépendante. Ainsi, la fin d'une connexion nécessite une paire de segments FIN et ACK pour chaque extrémité.

[modifier] Ports TCP

TCP utilise la notion de numéro de port pour identifier les applications. À chaque extrémité de la connexion TCP est associé un numéro de port sur 16 bits assigné à l'application émettrice ou réceptrice. Les ports peuvent faire partie de trois catégories de base : les ports bien connus, les ports enregistrés et les ports dynamiques/privés. Les ports bien connus sont assignés par l'IANA (Internet Assigned Numbers Authority) et sont souvent utilisés par des processus système ou ayant des droits privilégiés. Les applications bien connues qui fonctionnent en tant que serveur et sont en attente de connexions utilisent généralement ces types de ports. Exemples : FTP (21), Telnet (23), SMTP (25) et HTTP (80). Les ports enregistrés sont généralement utilisés par des applications utilisateur comme ports sources éphémères pour se connecter à un serveur, mais ils peuvent aussi identifier des services non enregistrés par l'IANA. Les ports dynamiques/privés peuvent aussi être utilisés par des applications utilisateur, mais plus rarement. Ils n'ont pas de sens en dehors d'une connexion TCP particulière.

[modifier] Développement de TCP

TCP est un protocole assez complexe, et en évolution. Même si des améliorations significatives ont été apportées au cours des années, son fonctionnement de base a peu changé depuis le RFC 793, publié en 1981. Le RFC 1122 (Host Requirements for Internet Hosts), a clarifié un certain nombre de pré-requis pour l'implémentation du protocole TCP. Le RFC 2581 (TCP Congestion Control), l'un des plus importants de ces dernières années, décrit de nouveaux algorithmes utilisés par TCP pour éviter les congestions. En 2001, le RFC 3168 a été écrit afin de présenter un mécanisme de signalisation des congestions (explicit congestion notification ou ECN), et s'ajoute à la liste des RFCs importants qui complètent la spécification originale. Au début du XXIe siècle, TCP est utilisé approximativement pour 95% de tout le trafic Internet. Les applications les plus courantes qui utilisent TCP sont HTTP/HTTPS (world wide web), SMTP/POP3/IMAP (messagerie) et FTP (transfert de fichiers). Son utilisation très répandue est la preuve de la qualité de la conception réalisée par ses créateurs originaux..

[modifier] Alternatives à TCP

Toutefois, TCP n'est pas approprié pour de nombreuses applications, et de nouveaux protocoles de transport sont créés et déployés afin de combler certaines de ses lacunes. Par exemple, de nombreuses applications temps-réel n'ont pas besoin, et peuvent même souffrir, des mécanismes de transport fiable de TCP. Dans ce type d'applications, il est souvent préférable de gérer les pertes, erreurs ou congestions, plutôt que d'essayer de les éviter. Les applications de diffusion multimédia (audio et vidéo, etc), ou certains jeux multi-joueurs en temps-réel, par exemple, n'utilisent pas TCP. Toute application qui ne nécessite pas la fiabilité de TCP, ou a un besoin limité en fonctionnalité, peut choisir de ne pas l'utiliser. Dans de nombreux cas, UDP (User datagram protocol) peut être utilisé à la place de TCP lorsque seuls les services de multiplexage applicatifs sont requis.

[modifier] Voir aussi

[modifier] Liens internes

[modifier] Liens externes

Static Wikipedia (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2006 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia February 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu