Description des fonctionnalités TCP de Windows

Cet article décrit les fonctionnalités TCP dans Windows.

Produits concernés : Windows 10 - toutes les éditions, Windows Server 2012 R2
Numéro de la base de connaissances d’origine : 224829

Résumé

Cet article décrit les fonctionnalités TCP suivantes dans Windows :

  • Taille de la fenêtre TCP
  • Options TCP désormais prises en charge
  • Mise à l’échelle Windows - RFC 1323
  • Horodatage - RFC 1323
  • Protection contre les numéros de séquence encapsulés (PAWS)
  • Accusés de réception sélectifs (SACKS) - RFC 2018
  • Comportement de retransmission TCP et retransmission rapide

Les fonctionnalités TCP peuvent être modifiées en modifiant les entrées dans le Registre.

Importante

Les sections, méthodes ou tâches suivantes contiennent des étapes qui vous indiquent comment modifier le Registre. Toutefois, des problèmes graves peuvent se produire si vous modifiez le Registre de façon incorrecte. Par conséquent, veillez à suivre ces étapes scrupuleusement. Pour une meilleure protection, sauvegardez le registre avant de le modifier. Vous pouvez alors le restaurer en cas de problème. Pour plus d’informations sur la procédure de sauvegarde et de restauration du Registre, cliquez sur le numéro ci-dessous pour afficher l’article correspondant dans la Base de connaissances Microsoft :
322756 Comment sauvegarder et restaurer le Registre dans Windows

Taille de la fenêtre TCP

La taille de la fenêtre de réception TCP correspond à la quantité de données de réception (en octets) qui peuvent être mises en mémoire tampon pendant une connexion. L’hôte d’envoi peut envoyer uniquement cette quantité de données avant d’attendre un accusé de réception et une mise à jour de la fenêtre de l’hôte de réception. La pile TCP/IP Windows est conçue pour s’auto-ajuster dans la plupart des environnements et utilise des tailles de fenêtre par défaut supérieures à celles des versions antérieures.

Au lieu d’utiliser une taille de fenêtre de réception par défaut codée en dur, TCP s’ajuste aux incréments pairs de la taille maximale de segment (MSS). Le MSS est négocié pendant la configuration de la connexion. L’ajustement de la fenêtre de réception aux incréments pairs du MSS augmente le pourcentage de segments TCP de taille réelle utilisés pendant les transmissions de données en bloc.

La taille de la fenêtre de réception est déterminée de la manière suivante :

  1. La première demande de connexion envoyée à un hôte distant publie une taille de fenêtre de réception de 16 Ko (16 384 octets).
  2. Une fois la connexion établie, la taille de la fenêtre de réception est arrondie à un incrément pair du MSS.
  3. La taille de la fenêtre est ajustée à quatre fois le MSS, à une taille maximale de 64 Ko, sauf si l’option de mise à l’échelle de fenêtre (RFC 1323) est utilisée.

Remarque

Consultez la section « Mise à l’échelle Windows ».

Pour les connexions Ethernet, la taille de la fenêtre est normalement définie sur 17 520 octets (16 000 octets arrondis à douze segments de 1 460 octets). La taille de la fenêtre peut être réduite lorsqu’une connexion est établie à un ordinateur qui prend en charge les options de tête TCP étendues, telles que les accusés de réception sélectifs (SACKS) et les horodatages. Ces deux options augmentent la taille de l’en-tête TCP à plus de 20 octets, ce qui réduit l’espace pour les données.

Dans les versions précédentes de Windows NT, la taille de fenêtre d’une connexion Ethernet était de 8 760 octets, soit six segments de 1460 octets.

Pour définir la taille de la fenêtre de réception sur une valeur spécifique, ajoutez la valeur TcpWindowSize à la sous-clé de Registre spécifique à votre version de Windows. Pour ce faire, procédez comme suit :

  1. Sélectionnez Démarrerl’exécution>, tapez Regedit, puis sélectionnez OK.

  2. Développez la sous-clé de Registre spécifique à votre version de Windows :

    • Pour Windows 2000, développez la sous-clé suivante : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces

    • Pour Windows Server 2003, développez la sous-clé suivante : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

  3. Dans le menu Modifier , pointez sur Nouveau, puis sélectionnez Valeur DWORD.

  4. Tapez TcpWindowSize dans la zone Nouvelle valeur , puis appuyez sur Entrée

  5. Sélectionnez Modifier dans le menu Modifier .

  6. Tapez la taille de fenêtre souhaitée dans la zone Données de la valeur .

    Remarque

    La plage valide pour la taille de fenêtre est de 0 0x3FFFC000 hexadécimal.

Cette valeur n’est pas présente par défaut. Lorsque vous ajoutez la valeur TcpWindowSize, elle remplace l’algorithme de taille de fenêtre par défaut décrit ci-dessus.

Remarque

TcpWindowSize peut également être ajouté à la clé Paramètres pour définir la taille de fenêtre globalement pour toutes les interfaces.

Options TCP désormais prises en charge

Auparavant, les options TCP étaient principalement utilisées pour négocier des tailles de segment maximales. Dans Windows, les options TCP sont utilisées pour la mise à l’échelle des fenêtres, l’horodatage et l’ACK sélectif.

Il existe deux types d’options TCP :

  1. Option TCP à octet unique, utilisée pour indiquer un type d’option spécifique.
  2. Option TCP à plusieurs octets, qui se compose d’un type d’option, d’une longueur d’option et d’une série d’octets d’option.

La liste suivante présente le type, la longueur, le nom et la description de chaque option TCP.

Type : 0
Longueur : 1
Option : Fin de la liste d’options
Description : utilisé lorsque le remplissage est nécessaire pour la dernière option TCP.

Type : 1
Longueur : 1
Option : Aucune opération
Description : Utilisé lorsque le remplissage est nécessaire et que d’autres options TCP suivent dans le même paquet.

Genre : 2
Longueur : 4
Option : Taille maximale du segment
Description : indique la taille maximale d’un segment TCP qui peut être envoyé sur le réseau.

Type : 3
Longueur : 3
Option : Option d’échelle de fenêtre
Description : identifie le facteur de mise à l’échelle à utiliser lors de l’utilisation de tailles de fenêtre supérieures à 64 Ko.

Genre : 8
Longueur : 10
Option : Option d’horodatage
Description : Permet de calculer le temps aller-retour (RTT) des paquets transmis.

Genre : 4
Longueur : 2
Option : TCP SACK autorisé
Description : informe les autres hôtes que lescks sélectifs sont autorisés.

Type : 5
Longueur : varie
Option : Option TCP SACK
Description : utilisée par les hôtes pour déterminer si des paquets en désordre ont été reçus.

Mise à l’échelle Windows

Pour une utilisation plus efficace des réseaux à bande passante élevée, une plus grande taille de fenêtre TCP peut être utilisée. Le champ taille de la fenêtre TCP contrôle le flux de données et est limité à 2 octets, ou à une taille de fenêtre de 65 535 octets.

Étant donné que le champ de taille ne peut pas être développé, un facteur de mise à l’échelle est utilisé. L’échelle de fenêtre TCP est une option utilisée pour augmenter la taille maximale de la fenêtre de 65 535 octets à 1 Gigaoctet.

L’option de mise à l’échelle de fenêtre est utilisée uniquement pendant l’établissement d’une liaison TCP triple. La valeur d’échelle de fenêtre représente le nombre de bits à déplacer vers la gauche du champ de taille de fenêtre de 16 bits. La valeur d’échelle de fenêtre peut être définie de 0 (sans décalage) à 14.

Pour calculer la taille réelle de la fenêtre, multipliez la taille de la fenêtre par 2^S, où S est la valeur d’échelle.

Par exemple :

Si la taille de la fenêtre est de 65 535 octets avec un facteur d’échelle de fenêtre de 3.
Taille réelle de la fenêtre = 65535*2^3

True window size = 524280

La trace moniteur réseau suivante montre comment l’option de mise à l’échelle de fenêtre est utilisée :

TCP: ....S., len:0, seq:725163-725163, ack:0, win:65535, src:1217 dst:139(NBT Session)  
TCP: Source Port = 0x04C1  
TCP: Destination Port = NETBIOS Session Service  
TCP: Sequence Number = 725163 (0xB10AB)  
TCP: Acknowledgement Number = 0 (0x0)  
TCP: Data Offset = 44 (0x2C)  
TCP: Reserved = 0 (0x0000)  
+ TCP: Flags = 0x02 : ....S.  
TCP: Window = 65535 (0xFFFF)  
TCP: Checksum = 0x8565  
TCP: Urgent Pointer = 0 (0x0)  
TCP: Options  
+ TCP: Maximum Segment Size Option  
TCP: Option Nop = 1 (0x1)  
TCP: Window Scale Option  
TCP: Option Type = Window Scale  
TCP: Option Length = 3 (0x3)  
TCP: Window Scale = 3 (0x3)  
TCP: Option Nop = 1 (0x1)  
TCP: Option Nop = 1 (0x1)  
+ TCP: Timestamps Option  
TCP: Option Nop = 1 (0x1)  
TCP: Option Nop = 1 (0x1)  
+ TCP: SACK Permitted Option  

La taille de fenêtre utilisée dans la négociation tridirectionnel réelle n’est pas la taille de fenêtre mise à l’échelle, conformément à la section 2.2 de la RFC 1323 :

« Le champ Window d’un segment SYN (par exemple, [SYN] ou [SYN,ACK]) n’est jamais mis à l’échelle. »

Cela signifie que le premier paquet de données envoyé après l’établissement d’une liaison triple est la taille réelle de la fenêtre. S’il existe un facteur de mise à l’échelle, la taille de fenêtre initiale de 65 535 octets est toujours utilisée. La taille de la fenêtre est ensuite multipliée par le facteur de mise à l’échelle identifié dans l’établissement d’une liaison triple. Le tableau ci-dessous représente les limites du facteur de mise à l’échelle pour différentes tailles de fenêtre.

Facteur d’échelle Valeur de mise à l’échelle Fenêtre initiale Fenêtre mise à l’échelle
0 1 65535 ou moins 65535 ou moins
1 2 65535 131,070
2 4 65535 262,140
3 8 65535 524,280
4 16 65535 1,048,560
5 32 65535 2,097,120
6 64 65535 4,194,240
7 128 65535 8,388,480
8 256 65535 16,776,960
9 512 65535 33,553,920
10 1024 65535 67,107,840
11 2048 65535 134,215,680
12 4096 65535 268,431,360
13 8192 65535 536,862,720
14 16384 65535 1,073,725,440

Par exemple :

Si la taille de fenêtre dans le Registre est entrée comme 269000000 (269M) en décimal, le facteur de mise à l’échelle pendant la négociation triple est 13. Un facteur de mise à l’échelle de 12 autorise uniquement une taille de fenêtre allant jusqu’à 268 431 360 octets (268 M).

La taille initiale de la fenêtre dans cet exemple est calculée comme suit :
65 535 octets avec un facteur d’échelle de fenêtre de 13.
Taille réelle de la fenêtre = 65535*2^13
True window size = 536,862,720

Lorsque la valeur de la taille de la fenêtre est ajoutée au Registre et que sa taille est supérieure à la valeur par défaut, Windows tente d’utiliser une valeur d’échelle qui s’adapte à la nouvelle taille de fenêtre.

La valeur Tcp1323Opts dans la clé de Registre suivante peut être ajoutée pour contrôler la mise à l’échelle des fenêtres et de l’horodatage :

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters

  1. Dans la barre d’outils, sélectionnez Démarrer>l’exécution, puis tapez Regedit pour démarrer le registre Rédacteur.

  2. Dans la Rédacteur du Registre, sélectionnez Modifier, pointez sur Nouveau, puis sélectionnez Valeur DWORD.

  3. Dans la zone Nouvelle valeur, tapez Tcp1323Opts, appuyez sur Entrée, puis, dans le menu Edition , sélectionnez Modifier.

    Remarque

    La plage valide est 0, 1, 2 ou 3 où :
    0 (désactiver les options RFC 1323)
    1 (mise à l’échelle de fenêtre activée uniquement)
    2 (horodatages activés uniquement)
    3 (les deux options sont activées)

Cette entrée de Registre contrôle les horodatages RFC 1323 et les options de mise à l’échelle des fenêtres. Les horodatages et la mise à l’échelle des fenêtres sont activés par défaut, mais peuvent être manipulés avec des bits d’indicateur. Bit 0 contrôle la mise à l’échelle des fenêtres. Bit 1 contrôle les horodatages.

Timestamps

Auparavant, la pile TCP/IP utilisait un échantillon par fenêtre de données envoyées pour calculer le temps d’aller-retour (RTT). Un minuteur (minuteur de retransmettre) a été défini lors de l’envoi du paquet, jusqu’à ce que l’accusé de réception soit reçu. Par exemple, si la taille de la fenêtre était de 64 240 octets (44 segments complets) sur un réseau Ethernet, un seul paquet sur 44 a été utilisé pour recalculer le temps d’aller-retour. Avec une taille de fenêtre maximale de 65 535 octets, ce taux d’échantillonnage était suffisant. En utilisant la mise à l’échelle des fenêtres et une taille de fenêtre maximale de 1 Gigaoctet, ce taux d’échantillonnage RTT n’est pas suffisant.

L’option Tcp Timestamp peut désormais être utilisée sur des segments (données et ACK) considérés comme appropriés par la pile, pour effectuer des opérations telles que :

  • Calcul RTT
  • case activée PAWS

À l’aide de ces données, le RTT peut être calculé avec précision avec de grandes tailles de fenêtre. RTT est utilisé pour calculer les intervalles de retransmission. Des délais d’attente rtt et de retransmission précis sont nécessaires pour un débit optimal.

Lorsque l’horodatage TCP est utilisé dans une session TCP, l’émetteur de la session envoie l’option dans son premier paquet de l’établissement d’une liaison tridirectionnel TCP (paquet SYN). Les deux côtés peuvent ensuite utiliser l’option TCP pendant la session.

Option TSopt (Tcp Timestamps) :

Type = 8 Longueur = 10 Valeur TS (Tsval) TS Echo Reply (Tsecr)
1 octet 1 octet 4 octets 4 octets

Le champ d’option timestamp peut être affiché dans une trace du moniteur réseau en développant le champ options TCP, comme indiqué ci-dessous :

TCP: Timestamps Option  
TCP: Option Type = Timestamps  
TCP: Option Length = 10 (0xA)  
TCP: Timestamp = 2525186 (0x268802)  
TCP: Reply Timestamp = 1823192 (0x1BD1D8)

Protection contre les numéros de séquence encapsulés (PAWS)

Le champ numéro de séquence TCP est limité à 32 bits, ce qui limite le nombre de numéros de séquence disponibles. Avec des réseaux à haute capacité et un transfert de données volumineux, il est possible d’encapsuler des numéros de séquence avant qu’un paquet traverse le réseau. Si vous envoyez des données sur un réseau d’un gigaoctet par seconde (Gbits/s), les numéros de séquence peuvent s’encapsuler en seulement 34 secondes. Si un paquet est retardé, un autre paquet peut éventuellement exister avec le même numéro de séquence. Pour éviter toute confusion des numéros de séquence en double, l’horodatage TCP est utilisé comme extension du numéro de séquence. Les paquets ont des horodatages actuels et en cours. Un ancien paquet a un horodatage plus ancien et est ignoré.

Accusés de réception sélectifs (SACK)

Windows introduit la prise en charge d’une fonctionnalité de performances connue sous le nom d’accusé de réception sélectif ou SACK. SACK est particulièrement important pour les connexions qui utilisent de grandes tailles de fenêtre TCP. Avant SACK, un récepteur ne pouvait accepter que le dernier numéro de séquence d’un flux de données contiguë qui avait été reçu, ou le « bord gauche » de la fenêtre de réception. Avec SACK activé, le récepteur continue d’utiliser le numéro ACK pour accuser réception du bord gauche de la fenêtre de réception, mais il peut également accepter d’autres blocs de données reçues individuellement. SACK utilise les options d’en-tête TCP, comme indiqué ci-dessous.

SACK utilise deux types d’options TCP.

L’option de Sack-Permitted TCP est utilisée uniquement dans un paquet SYN (lors de l’établissement de la connexion TCP) pour indiquer qu’elle peut effectuer un ACK sélectif.

La deuxième option TCP, TCP Sack Option, contient un accusé de réception pour un ou plusieurs blocs de données. Les blocs de données sont identifiés à l’aide du numéro de séquence au début et à la fin de ce bloc de données. Il s’agit également des bords gauche et droit du bloc de données.

Le type 4 est l’option tcp Sack-Permitted. Le type 5 est l’option Tcp Sack. Length est la longueur en octets de cette option TCP.

Tcp SACK autorisé :

Type = 4 Longueur = 2
1 octet 1 octet

Option TCP SACK :

Type = 5 Length = Variable
1 octet Bord gauche du premier bloc vers le bord droit du premier bloc
...
Bord gauche du Nième bloc vers le bord droit du Nième bloc

Avec SACK activé (par défaut), un paquet ou une série de paquets peut être supprimé. Le destinataire informe l’expéditeur des données qui ont été reçues et de l’endroit où il peut y avoir des « trous » dans les données. L’expéditeur peut ensuite retransmettre de manière sélective les données manquantes sans retransmission de blocs de données qui ont déjà été reçus avec succès. SACK est contrôlé par le paramètre de Registre SackOpts.

La valeur SackOpts de la clé de Registre suivante peut être modifiée pour contrôler l’utilisation des accusés de réception sélectifs :

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

  1. Dans la barre d’outils, sélectionnez Démarrer>l’exécution, puis tapez Regedit pour démarrer le registre Rédacteur.
  2. Recherchez et sélectionnez la clé ci-dessus dans la Rédacteur registre, puis sélectionnez Modifier dans le menu Modifier.
  3. Tapez la valeur souhaitée dans la zone Données de la valeur .

Remarque

La valeur binaire valide est 0 ou 1, la valeur par défaut est 1. Ce paramètre détermine si la prise en charge d’ACK sélectif (SACK - RFC 2018) est activée ou non.

La trace moniteur réseau suivante illustre un hôte qui accuse réception de toutes les données jusqu’au numéro de séquence 54857341, ainsi que les données du numéro de séquence 54858789-54861685. Les données manquantes sont de 54857341 à 54858788.

TCP: .A...., len:0, seq:925104-925104, ack:54857341, win:32722, src:1242 dst:139  
TCP: Source Port = 0x04DA  
TCP: Destination Port = NETBIOS Session Service  
TCP: Sequence Number = 925104 (0xE1DB0)  
TCP: Acknowledgement Number = 54857341 (0x3450E7D)  
TCP: Data Offset = 44 (0x2C)  
TCP: Reserved = 0 (0x0000)  
+ TCP: Flags = 0x10 : .A....  
TCP: Window = 32722 (0x7FD2)  
TCP: Checksum = 0x4A72  
TCP: Urgent Pointer = 0 (0x0)  
TCP: Options  
TCP: Option Nop = 1 (0x1)  
TCP: Option Nop = 1 (0x1)  
+ TCP: Timestamps Option  
TCP: Option Nop = 1 (0x1)  
TCP: Option Nop = 1 (0x1)  
TCP: SACK Option  
TCP: Option Type = 0x05  
TCP: Option Length = 10 (0xA)  
TCP: Left Edge of Block = 54858789 (0x3451425)  
TCP: Right Edge of Block = 54861685 (0x3451F75)

Comportement de retransmission TCP et retransmission rapide

Retransmission TCP

En guise d’examen du comportement de retransmission normal, TCP démarre un minuteur de retransmission lorsque chaque segment sortant est transmis au protocole IP (Internet Protocol). Si aucun accusé de réception n’a été reçu pour les données d’un segment donné avant l’expiration du minuteur, le segment est retransmis.

Le délai de retransmission (RTO) est ajusté en continu pour correspondre aux caractéristiques de la connexion à l’aide des calculs srtt (Smoothed Round Trip Time) comme décrit dans RFC 793. Le minuteur d’un segment donné est doublé après chaque retransmission de ce segment. À l’aide de cet algorithme, TCP s’ajuste au délai normal d’une connexion.

Retransmettre rapidement

TCP retransmet les données avant l’expiration du minuteur de retransmission dans certaines circonstances. La cause la plus courante est une fonctionnalité appelée retransmite rapide. Lorsqu’un récepteur qui prend en charge la retransmite rapide reçoit des données dont le numéro de séquence est supérieur au numéro attendu actuel, certaines données ont probablement été supprimées. Pour aider à informer l’expéditeur de cet événement, le destinataire envoie immédiatement un ACK, avec le numéro ACK défini sur le numéro de séquence qu’il attendait. Il continuera à le faire pour chaque segment TCP supplémentaire qui arrive. Lorsque l’expéditeur commence à recevoir un flux de clés ACK qui accuse réception du même numéro de séquence, un segment a peut-être été supprimé. L’expéditeur renvoie immédiatement le segment attendu par le récepteur, sans attendre l’expiration du minuteur de retransmission. Cette optimisation améliore considérablement les performances lorsque les paquets sont fréquemment supprimés.

Par défaut, Windows renvoie un segment dans les conditions suivantes :

  • Il reçoit trois AK pour le même numéro de séquence : un ACK et deux doublons.
  • Le numéro de séquence est en retard sur le numéro actuel.

Ce comportement est contrôlable avec le paramètre de TcpMaxDupAcks Registre.

La valeur TcpMaxDupAcks de la clé de Registre suivante peut être modifiée pour contrôler le nombre de clés ACK nécessaires au démarrage d’une retransmite rapide :

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

  1. Dans la barre d’outils, sélectionnez Démarrer>l’exécution, puis tapez Regedit pour démarrer le registre Rédacteur.
  2. Recherchez et sélectionnez la clé ci-dessus dans la Rédacteur registre, puis sélectionnez Modifier dans le menu Modifier.
  3. Tapez la valeur souhaitée dans la zone Données de la valeur .

Remarque

La plage valide est comprise entre 1 et 3, la valeur par défaut est 2.

Ce paramètre détermine le nombre de clés ACL en double qui doivent être reçues pour le même numéro séquentiel de données envoyées avant fast retransmit que ne soit déclenché pour renvoyer le segment qui a été supprimé en transit.