You are on page 1of 8

frameip.

com

http://www.frameip.com/entete-tcp/

Entte TCP Par _SebF

1 - Dfinition du protocole
2 - Structure de l'entte
3 - Mode de transfert
3.1 - Ouverture de session
3.2 - Transfert des donnes
3.3 - Fermeture de session
3.4 - Fermeture brutale de connexion
4 - La fentre coulissante
5 - Dfinition des diffrents champs
5.1 - Port source
5.2 - Port destination
5.3 - Numro de squence
5.4 - Numro de l'accus de rception
5.5 - Offset
5.6 - Rserv
5.7 - Flags
5.8 - Fentre
5.9 - Checksum
5.10 - Pointeur de donne urgente
5.11 - Options
5.12 - Bourrage
6 - Discussion autour de la documentation
7 - Suivi du document

1 - Dfinition du protocole
Le protocole TCP est bas en couche 4. Il ouvre une session et effectue lui-mme le control d'erreur. Il
est alors appel "mode connect". Vous trouverez tous les dtails du protocole TCP dans la Rfc 793.

2 - Structure de l'entte
Voici la structure de l'entte TCP bas sur 20 octets.

Voici le complment de l'entte TCP qui est optionnelle bas sur 4 octets.

3 - Mode de transfert
Voici les diffrents types de communication bass sur le mode connect de TCP :

3.1 - Ouverture de session


==> SYN=1 - ACK=0 - SeqNum=100 - AckNum=xxx
<== SYN=1 - ACK=1 - SeqNum=300 - AckNum=101
==> SYN=0 - ACK=1 - SeqNum=101 - AckNum=301

3.2 - Transfert des donnes


==> ACK=1 - SeqNum=101 - AckNum=301 - Data=30 octets
<== ACK=1 - SeqNum=301 - AckNum=131 - Data=10 octets
==> ACK=1 - SeqNum=131 - AckNum=311 - Data=5 octets
<== ACK=1 - SeqNum=311 - AckNum=136 - Data=10 octets

3.3 - Fermeture de session


<== ACK=1 - FIN=1 - SeqNum=321 - AckNum=136
==> ACK=1 - FIN=0 - SeqNum=136 - AckNum=321

3.4 - Fermeture brutale de connexion


1re cas possible :
==> ACK=1 - RST=0 - SeqNum=200 - AckNum=400
<== ACK=0 - RST=1 - SeqNum=400 - ACKNum=xxx
2nd cas possible :
<== ACK=0 - RST=0 - SeqNum=200 - Data=30 octets
==> ACK=0 - RST=1 - SeqNum=230 - Data=xxx

4 - La fentre coulissante
La fentre coulissante, plus connue sous le nom de "Sliding Windows" est employe pour transfrer des
donnes entre les htes. La fentre dfinit le volume de donnes susceptibles d'tre passes via une
connexion TCP, avant que le rcepteur n'envoie un accus de rception. Chaque ordinateur comporte
une fentre d'mission et une fentre de rception qu'il utilise pour buffriser les donnes en continu,
sans devoir attendre un accus de rception pour chaque paquet. Cela permet au rcepteur de recevoir

les paquets dans le dsordre et de profiter des dlais d'attente pour rorganiser les paquets. La fentre
mettrice contrle les donnes mises, si elle ne reoit pas d'accus de rception au bout d'un certain
temps, elle retransmet le paquet.
Considrations sur le dbit :
TCP a t conu pour offrir des performances optimales en prsence de conditions de liaison varies et
les systmes d'exploitations comportent des amliorations telles que celles prenant en charge la RFC
1323. Le dbit rel d'une liaison dpend d'un certain nombre de variables, mais les facteurs les plus
importants sont les suivants :
Vitesse de la liaison (bits par seconde pouvant tre transmis)
Retard de propagation
Dimension de la fentre (quantit de donnes n'ayant pas fait l'objet d'un accus de rception et
qui peuvent tre en attente sur une connexion TCP)
Fiabilit de la liaison
Encombrement du rseau et des priphriques intermdiaires
MTU du parcours
Voici quelques considrations fondamentales sur le calcul du dbit TCP :
La capacit d'un canal de communication est gale la bande passante multiplie par le temps de
transmission aller-retour. Elle est connue sous le nom de produit bande passante-retard. Si la liaison est
fiable, pour obtenir des performances optimales, la dimension de la fentre doit tre suprieure ou gale
la capacit du canal de communication, de manire permettre la pile d'envoi de le remplir. La plus
grande dimension de fentre pouvant tre spcifie, en raison du champ de 16 bits de l'en-tte TCP, est
de 65535. Des fentres plus larges peuvent toutefois tre ngocies grce au redimensionnement des
fentres.
Le dbit ne peut jamais excder la taille de la fentre divise par le temps de transmission aller-retour.
Si la liaison n'est pas fiable ou est encombre et que des paquets sont perdus, l'utilisation fentre de
taille suprieure ne garantit pas ncessairement un meilleur dbit. Windows 2000 prend en charge non
seulement le dimensionnement des fentres, mais galement les accuss de rception slectifs (SACK,
dcrits dans la RFC 2018) pour amliorer les performances au sein d'environnements qui prsentent
des pertes de paquets. Il prend galement en charge l'horodatage (dcrit dans la RFC 1323) pour une
meilleure valuation RTT.
Le retard de propagation dpend de la vitesse de la lumire, des latences de l'quipement de
transmission, etc. Le retard de transmission dpend donc de la vitesse du support.
Pour un parcours spcifique, le retard de propagation est fixe, mais le retard de transmission dpend de
la taille du paquet. des vitesses rduites, le retard de transmission constitue un facteur limitatif. des
vitesses leves, le retard de propagation peut devenir un facteur de limitation.
En rsum, les piles TCP/IP peuvent s'adapter la plupart des conditions de rseau et fournir
dynamiquement le meilleur dbit et la meilleure fiabilit possibles pour chaque connexion. Les essais de
mise au point manuelle sont souvent contre-productifs, sauf lorsqu'un ingnieur rseau qualifi procde
pralablement une tude prcise du flux de donnes.

5 - Dfinition des diffrents champs


5.1 - Port source
Le champ Port source est cod sur 16 bits et correspond au port relatif l'application en cours sur la
machine source.

5.2 - Port destination


Le champ Port destination est cod sur 16 bits et correspond au port relatif l'application en cours sur la

machine de destination.
Vous trouverez la liste des ports TCP officialises par l'IANA, organisation grant mondialement les
adressage IP.

5.3 - Numro de squence


Le champ Numro de squence est cod sur 32 bits et correspond au numro du paquet. Cette valeur
permet de situer quel endroit du flux de donnes le paquet, qui est arriv, doit se situer par rapport aux
autres paquets.

5.4 - Numro de l'accus de rception


Le champ Numro de squence est cod sur 32 bits et dfinit un acquittement pour les paquets reus.
Cette valeur signale le prochain numro de paquet attendu. Par exemple, si il vaut 1500, cela signifie
que tous les Datagrammes <1500 ont t reus

5.5 - Offset
Le champ Offset est cod sur 4 bits et dfinit le nombre de mots de 32 bits dans l'entte TCP. Ce champ
indique donc o les donnes commencent.

5.6 - Rserv
Le champ Rserv est cod sur 6 bits et il servira pour des besoins futurs. Ce champ doit tre marqu
0. Au jour d'aujourd'hui, on peut considrer que les besoins futurs se transforment en un champ non
utilis.

5.7 - Flags
- Le champ URG est cod sur 1 bit et indique que le champ Pointeur de donne urgente est utilis.
- Le champ ACK est cod sur 1 bit et indique que le numro de squence pour les acquittements est
valide.
- Le champ PSH est cod sur 1 bit et indique au rcepteur de dlivrer les donnes l'application et de
ne pas attendre le remplissage des tampons.
- Le champ RST est cod sur 1 bit et demande la rinitialisation de la connexion.
- Le champ SYN est cod sur 1 bit et indique la synchronisation des numros de squence.
- Le champ FIN est cod sur 1 bit et indique fin de transmission.

5.8 - Fentre
Le champ Fentre "Windows" est cod sur 16 bits et correspond au nombre d'octets partir de la
position marque dans l'accus de rception que le rcepteur est capable de recevoir. Le destinataire ne
doit donc pas envoyer les paquets aprs Numro de squence + Window.

5.9 - Checksum
Le champ Checksum est cod sur 16 bits et reprsente la validit du paquet de la couche 4 TCP.
Le Checksum est constitu en calculant le complment 1 sur 16 bits de la somme des complments
1 des octets de l'en-tte et des donnes pris deux par deux (mots de 16 bits). Si le message entier
contient un nombre impair d'octets, un 0 est ajout la fin du message pour terminer le calcul du
Checksum. Cet octet supplmentaire n'est pas transmis. Lors du calcul du Checksum, les positions des
bits attribus celui-ci sont marques 0.
Le Checksum couvre de plus, une pseudo en-tte de 96 bits prfixe l'en-tte TCP. Cette pseudo entte comporte les adresses Internet sources et destinataires, le type de protocole et la longueur du
message TCP (incluant la data). Ceci protge TCP contre les erreurs de routage.

La longueur TCP compte le nombre d'octets de l'en-tte TCP et des donnes du message, en excluant
les 12 octets de la pseudo en-tte.
Voici un exemple de fonction permettant le calcul du checksum TCP. Elle est identique celle de UDP.

struct pseudo_entete
{
unsigned long ip_source; // Adresse ip source
unsigned long ip_destination; // Adresse ip destination
char mbz; // Champs 0
char type; // Type de protocole (6->TCP et 17->UDP)
unsigned short length; // htons( Taille de l'entete Pseudo + Entete TCP ou UDP + Data )
};
unsigned short calcul_du_checksum(bool liberation, unsigned short *data, int taille)
{
unsigned long checksum=0;
// ********************************************************
// Complment 1 de la somme des complment 1 sur 16 bits
// ********************************************************
while(taille>1)
{
if (liberation==TRUE)
liberation_du_jeton(); // Rend la main la fentre principale
checksum=checksum+*data++;
taille=taille-sizeof(unsigned short);
}
if(taille)
checksum=checksum+*(unsigned char*)data;
checksum=(checksum>>16)+(checksum&0xffff);
checksum=checksum+(checksum>>16);
return (unsigned short)(~checksum);
}
unsigned short calcul_du_checksum_tcp(bool liberation, unsigned long ip_source_tampon, unsigned
long ip_destination_tampon, struct tcp tcp_tampon, char data_tampon[65535])
{
struct pseudo_entete pseudo_tcp;
char tampon[65535];
unsigned short checksum;
// ********************************************************
// Initialisation du checksum
// ********************************************************
tcp_tampon.checksum=0; // Doit tre 0 pour le calcul
// ********************************************************
// Le calcul du Checksum TCP (Idem UDP)
// ********************************************************
// Le calcul passe par une pseudo entete TCP + l'entete TCP + les Data
pseudo_tcp.ip_source=ip_source_tampon;
pseudo_tcp.ip_destination=ip_destination_tampon;
pseudo_tcp.mbz=0;
pseudo_tcp.type=IPPROTO_TCP;
pseudo_tcp.length=htons((unsigned short)(sizeof(struct tcp)+strlen(data_tampon)));
memcpy(tampon,&pseudo_tcp,sizeof(pseudo_tcp));
memcpy(tampon+sizeof(pseudo_tcp),&tcp_tampon,sizeof(struct tcp));
memcpy(tampon+sizeof(pseudo_tcp)+sizeof(struct tcp),data_tampon,strlen(data_tampon));
checksum=calcul_du_checksum(liberation,(unsigned
short*)tampon,sizeof(pseudo_tcp)+sizeof(struct tcp)+strlen(data_tampon));
return(checksum);
}

5.10 - Pointeur de donne urgente


Le champ Pointeur de donne urgente est cod sur 16 bits et communique la position d'une donne
urgente en donnant son dcalage par rapport au numro de squence. Le pointeur doit pointer sur
l'octet suivant la donne urgente. Ce champ n'est interprt que lorsque le Flag URG est marqu 1.
Ds que cet octet est reu, la pile TCP doit envoyer les donnes l'application.

5.11 - Options
Les champs d'options peuvent occuper un espace de taille variable la fin de l'en-tte TCP. Ils
formeront toujours un multiple de 8 bits. Toutes les options sont prises en compte par le Checksum. Un
paramtre d'option commence toujours sur un nouvel octet. Il est dfini deux formats types pour les
options:
- Cas 1 - Option mono-octet.
- Cas 2 - Octet de type d'option, octet de longueur d'option, octet de valeur d'option.
La longueur d'option prend en compte l'octet de type, l'octet de longueur lui-mme et tous les octets de
valeur et est exprime en octet.
La liste d'option peut tre plus courte que ce que l'offset de donnes pourrait le faire supposer. Un octet
de remplissage "Bourrage" devra tre dans ce cas rajout aprs le code de fin d'options.

5.12 - Bourrage
Le champ Bourrage est de taille variable comprise entre 0 et 7 bits. Il permet de combler le champ
option afin d'obtenir une entte TCP multiple de 32 bits. La valeur des bits de bourrage est 0.

6 - Discussion autour de la documentation


Vous pouvez poser toutes vos questions, vos remarques et vos expriences propos de l'entte TCP.
Pour cela, rendez-vous sur le Forum "TCP-IP".

7 - Suivi du document
Le 21 dcembre 2007, par _SebF, ajout du paragraphe "Considrations sur le dbit" dans le chapitre 4
"La fentre coulissante"
Le 12 mars 2004, par _SebF, ajout de la rfrence aux port TCP assigns par l'Iana.
Le 15 novembre 2003, par _SebF, ajout du schma de la pseudo entte.
Le 29 septembre 2003, par _SebF, cration du document.

mot cl : accuse garantie bourrage tous sur tcp mode connecte ack reponse tcp
requete tcp frame tcp protocol tcp fenetre synack control entete tcp donnee adresse
tcp vpn resolution tcp transfert des donnees decouverte tcp liaison tcp tout sur tcp
voip comprendre tcp datagramme transfert Port reserve fermeture de session fiable
negociation tcp datatgrame tcp ouverture de session rst ip numro de sequence
source syn fermeture brutale de connexion tcpip pointeur fin numero rfc 793 champs
urgente destination ipv4 flags la fenetre coulissante mode ipv6 trame tcp definition
protocole tcp reception offset options datagramme tcp sliding window connaitre tcp
couche 4
Copyright 2011-2015 FrameIP TcpIP. Tous droits rservs. Les marques et marques commerciales
mentionnes appartiennent leurs propritaires respectifs. L'utilisation de ce site Web TcpIP implique
l'acceptation des conditions d'utilisation et du rglement sur le respect de la vie prive.
Scurit entreprise Tlphonie entreprise Expert de votre Infrastructure Test ADSL Serinya Operateur
Telecom

Google Adsense

You might also like