Description des fonctionnalités TCP 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 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 mise en mémoire tampon pendant une connexion. L’hôte d’envoi peut envoyer uniquement cette quantité de données avant de devoir attendre un accusé de réception et une mise à jour de fenêtre de l’hôte de réception. La pile TCP/IP Windows est conçue pour s’ajuster automatiquement dans la plupart des environnements et utilise des tailles de fenêtres par défaut plus grandes que les 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 à des incréments pairs de la taille de segment maximale (MSS). Le MSS est négocié lors de la configuration de la connexion. L’ajustement de la fenêtre de réception pour des incréments pairs du MSS augmente le pourcentage de segments TCP de taille complète utilisés lors des 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 000 (16 384 octets).
  2. Lorsque la connexion est é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 K, sauf si l’option de mise à l’échelle de fenêtre (RFC 1323) est utilisée.

Remarque

Consultez la section « Mise à l’échelle de 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 réduire 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 entraîne moins d’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 1 460 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émarrer>l’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 de données Valeur .

    Remarque

    La plage valide pour la taille de la 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é Parameters pour définir globalement la taille de la fenêtre pour toutes les interfaces.

Options TCP désormais prises en charge

Auparavant, les options TCP étaient principalement utilisées pour négocier la taille maximale des segments. 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. Une option TCP d’octet unique, qui est utilisée pour indiquer un type d’option spécifique.
  2. Une 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’options.

La liste suivante affiche chaque type d’option TCP, sa longueur, son nom et sa description.

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.

Type : 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 000.

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

Type : 4
Longueur : 2
Option : TCP SACK autorisé
Description : informe d’autres hôtes que les Acks sélectifs sont autorisés.

Type : 5
Longueur : varie
Option : Option TCP SACK
Description : Utilisé par les hôtes pour identifier si des paquets non triés ont été reçus.

Mise à l’échelle de 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 de taille de fenêtre TCP contrôle le flux de données et est limité à 2 octets, soit 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 de mise à l’échelle de la fenêtre représente le nombre de bits à déplacer vers la gauche du champ de taille de fenêtre 16 bits. La valeur d’échelle de fenêtre peut être définie de 0 (aucun 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.
True window size = 65535*2^3

Taille de fenêtre true = 524280

La trace du 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 triple réelle n’est pas la taille de fenêtre mise à l’échelle, conformément à la section 2.2 du RFC 1323 :

« Le champ Fenêtre d’un segment SYN (par exemple, [SYN] ou [SYN,ACK]) lui-même 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 initiale de la fenêtre 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 la fenêtre dans le Registre est entrée comme 269000000 (269 M) en décimale, le facteur de mise à l’échelle pendant la négociation à trois est 13. Un facteur de mise à l’échelle de 12 autorise uniquement une taille de fenêtre 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.
True window size = 65535*2^13
Taille réelle de la fenêtre = 536 862 720

Lorsque la valeur de la taille de 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 prend en charge la nouvelle taille de fenêtre.

La valeur Tcp1323Opts dans la clé de Registre suivante peut être ajoutée pour contrôler les fenêtres de mise à l’échelle et 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 l’Éditeur du Registre.

  2. Dans l’Éditeur 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 Modifier , sélectionnez Modifier.

    Remarque

    La plage valide est 0, 1, 2 ou 3 où :
    0 (désactiver les options RFC 1323)
    1 (é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 aller-retour (RTT). Un minuteur (minuteur de retransmission) 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 l’heure aller-retour. Avec une taille maximale de fenêtre de 65 535 octets, ce taux d’échantillonnage était suffisant. À l’aide de la mise à l’échelle des fenêtres et d’une taille de fenêtre maximale de 1 Gigaoctet, ce taux d’échantillonnage RTT n’est pas suffisant.

L’option Timestamp TCP 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
  • Vérification 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’expiration précis de rtt et de retransmission sont nécessaires pour un débit optimal.

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

TCP Timestamps Option (TSopt) :

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

Le champ d’option d’horodatage 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 les 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 giga-octet par seconde (Gbits/s), les numéros de séquence peuvent être encapsulé en seulement 34 secondes. Si un paquet est retardé, un autre paquet peut potentiellement exister avec le même numéro de séquence. Pour éviter toute confusion entre les 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 appelée 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 pouvait uniquement reconnaître 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. Une fois SACK activé, le récepteur continue d’utiliser le numéro ACK pour reconnaître le bord gauche de la fenêtre de réception, mais il peut également reconnaître 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 (pendant l’établissement de la connexion TCP) pour indiquer qu’elle peut effectuer une opération ACK sélective.

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 du bord gauche et droit du bloc de données.

Kind 4 est l’option Sack-Permitted TCP. Kind 5 est TCP Sack Option. Length est la longueur en octets de cette option TCP.

Tcp SACK autorisé :

Type = 4 Longueur = 2
1 octet 1 octet

Option SACK Tcp :

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

Avec SACK activé (valeur par défaut), un paquet ou une série de paquets peut être supprimé. Le récepteur indique à l’expéditeur quelles données ont été reçues et 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 dans 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 l’Éditeur du Registre.
  2. Recherchez et sélectionnez la clé ci-dessus dans l’Éditeur du Registre, puis sélectionnez Modifier dans le menu Modifier .
  3. Tapez la valeur souhaitée dans la zone de données 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 sélective d’ACK (SACK - RFC 2018) est activée ou non.

La trace network monitor suivante illustre un hôte qui reconnaît 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 d’expiration de retransmission (RTO) est ajusté en continu pour correspondre aux caractéristiques de la connexion à l’aide de 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.

Retransmission rapide

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 retransmission rapide. Lorsqu’un récepteur qui prend en charge la retransmission rapide reçoit des données avec un numéro de séquence au-delà de celui attendu actuel, certaines données ont probablement été supprimées. Pour aider à informer l’expéditeur de cet événement, le récepteur envoie immédiatement un ACK, avec le numéro ACK défini sur le numéro de séquence attendu. Il continuera de le faire pour chaque segment TCP supplémentaire qui arrive. Lorsque l’expéditeur commence à recevoir un flux d’acKs qui reconnaît le même numéro de séquence, un segment peut avoir été supprimé. L’expéditeur renverra 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 des paquets sont fréquemment supprimés.

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

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

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

La valeur TcpMaxDupAcks dans la clé de Registre suivante peut être modifiée pour contrôler le nombre d’acks nécessaires pour démarrer une retransmission 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 l’Éditeur du Registre.
  2. Recherchez et sélectionnez la clé ci-dessus dans l’Éditeur du Registre, puis sélectionnez Modifier dans le menu Modifier .
  3. Tapez la valeur souhaitée dans la zone de données Valeur .

Remarque

La plage valide est de 1 à 3, la valeur par défaut est 2.

Ce paramètre détermine le nombre d’acks en double qui doivent être reçus pour le même nombre séquentiel de données envoyées avant fast retransmit d’être déclenché pour renvoyer le segment qui a été supprimé en transit.