Skip to main content

À partir d'OpenVOS 17.1, le STCP prend en charge l'horodatage, l'acquittement sélectif et les options TCP de mise à l'échelle des fenêtres. Cela permettra un flux de données plus efficace lorsque les segments TCP sont abandonnés ou lors de l'envoi de données sur une connexion à haut débit de retard (une connexion sur un lien où la bande passante minimale * latence globale > 65536). L'effet de ces changements est transparent pour les applications, mais il y a quelques éléments à prendre en compte lors de l'utilisation de packet_monitor.

Tout d'abord, lorsque le STCP envoie une demande de connexion, le segment TCP (SYN) contient désormais 16 octets supplémentaires.

17:41:26.533 Xmit Ether Dst 00:23:54:52:18:6e  Src 00:00:a8:41:34:56 Type 0800
+(IP)
IP   Ver/HL 45, ToS  0, Len   3c, ID a789, Flg/Frg    0, TTL 3c,  Prtl  6
          Cksum  f2f6, Src a4984dd9, Dst a4984d32
TCP from 164.152.77.217.55423 to 164.152.77.50.7777
    seq  3825990103, ack     n.a., window  8192, 20 data bytes, flags Syn.
    X/Off 0a, Flags 02, Cksum b717,  Urg-> 0000
     offset 0  .  .  .  4  .  .  .   8  .  .  .  C  .  .  .  0...4... 8...C...
      0     2  4  5 b4  3  3  6  4   2  8  a 32 2d bc 85  0  <<<4<<<< <<<2-<>
     10     0  0  0  0
2 4 5 b4 option 2 (taille minimale du segment), longueur totale de l'option 4 octets, valeur 05 b4 (1460 décimales) (ces octets ne sont pas nouveaux)
3 3 6 option 3 (échelle de la fenêtre), longueur totale de l'option 3 octets, valeur 6
4 2 option 4 (prise en charge de l'acquittement sélectif), longueur totale 2 octets
8 a 32 2d bc 85 0 0 0 0 option 8 (horodatage), longueur totale 10 octets, heure d'envoi 32 2d bc 85, heure de retour 0 0 0 0
0 option 0 (fin des options)

Deuxièmement, les options envoyées dans un segment de réponse de connexion (SYN/ACK) dépendront de ce que contient le segment SYN de l'hôte distant. Le STCP n'inclura l'option d'accusé de réception sélectif dans sa réponse que si la demande de connexion l'inclut. La réponse n'inclura les options d'échelle de fenêtre et d'horodatage que si la demande de connexion inclut également ces deux options.

14:31:32.145 Rcvd Ether Dst 00:00:a8:42:34:56  Src 00:00:a8:42:52:22 Type 0800
+(IP)
IP   Ver/HL 45, ToS  0, Len   3c, ID  44c, Flg/Frg    0, TTL 3c,  Prtl  6
          Cksum  95e6, Src a4984d80, Dst a4984dd9
TCP from 164.152.77.128.65007 to 164.152.77.217.7777
    seq  3289184624, ack     n.a., window  8192, 20 data bytes, flags Syn.
    X/Off 0a, Flags 02, Cksum 91e8,  Urg-> 0000
     offset 0  .  .  .  4  .  .  .   8  .  .  .  C  .  .  .  0...4... 8...C...
      0     2  4  5 b4  3  3  6  4   2  8  a 30 b8 95 1a  0  <<<4<<<< <<<08><
     10     0  0  0  0                                       <<<<

14:31:32.146 Xmit Ether Dst 00:00:a8:42:52:22  Src 00:00:a8:42:34:56 Type 0800
+(IP)
IP   Ver/HL 45, ToS  0, Len   3c, ID    0, Flg/Frg    0, TTL 3c,  Prtl  6
          Cksum  9a32, Src a4984dd9, Dst a4984d80
TCP from 164.152.77.217.7777 to 164.152.77.128.65007
    seq  3172667591, ack 3289184625, window  8192, 20 data bytes, flags Syn Ack.
    X/Off 0a, Flags 12, Cksum 6b81,  Urg-> 0000
     offset 0  .  .  .  4  .  .  .   8  .  .  .  C  .  .  .  0...4... 8...C...
      0     2  4  5 b4  3  3  6  4   2  8  a  1 35 72 23 30  <<<4<<<< <<<<5r#0
     10    b8 95 1a  0                                       8><<

Par défaut, les hôtes Windows n'incluent que la taille maximale du segment, échelle de fenêtre et reconnaissance sélective soutenue options. Sans l'option d'horodatage dans la demande de connexion, la réponse du STCP ne comprendra pas les options d'horodatage ou d'échelle de fenêtre. Notez que les 1 inclus dans les options de la fenêtre sont les NO-OP et sont utilisés pour faire du nombre d'octets d'option un multiple entier de 4. Le multiple fin des options (0) à la fin des options dans la réponse du STCP sont pour la même raison.

14:54:02.635 Rcvd Ether Dst 00:00:a8:41:34:56  Src 00:23:54:52:18:6e Type 0800
+(IP)
IP   Ver/HL 45, ToS  0, Len   34, ID  a4f, Flg/Frg 4000, TTL 80,  Prtl  6
          Cksum  0c39, Src a4984d32, Dst a4984dd9
TCP from 164.152.77.50.13478 to 164.152.77.217.7777
    seq  3499417963, ack     n.a., window  8192, 12 data bytes, flags Syn.
    X/Off 08, Flags 02, Cksum 65c8,  Urg-> 0000
     offset 0  .  .  .  4  .  .  .   8  .  .  .  C  .  .  .  0...4... 8...C...
      0     2  4  5 b8  1  3  3  8   1  1  4  2              <<<8<<<< <<<<

14:54:02.636 Xmit Ether Dst 00:23:54:52:18:6e  Src 00:00:a8:41:34:56 Type 0800
+(IP)
IP   Ver/HL 45, ToS  0, Len   30, ID b3d5, Flg/Frg    0, TTL 3c,  Prtl  6
          Cksum  e6b6, Src a4984dd9, Dst a4984d32
TCP from 164.152.77.217.7777 to 164.152.77.50.13478
    seq  3986949958, ack 3499417964, window  8192, 8 data bytes, flags Syn Ack.
    X/Off 07, Flags 12, Cksum 85e0,  Urg-> 0000
     offset 0  .  .  .  4  .  .  .   8  .  .  .  C  .  .  .  0...4... 8...C...
      0     2  4  5 b4  4  2  0  0                           <<<4<<

La partie déroutante vient après que la connexion est établie. Le paquet suivant ne contient qu'un octet de données, même si le octets de données Le champ indique 13. Les 12 premiers octets sont deux options NO-OP suivies d'une option d'horodatage. Le champ octet de données est le 0x à la fin.

15:02:36.545 Rcvd Ether Dst 00:00:a8:41:34:56  Src 00:00:a8:42:52:22 Type 0800
+(IP)
IP   Ver/HL 45, ToS  0, Len   35, ID  447, Flg/Frg    0, TTL 3c,  Prtl  6
          Cksum  95f2, Src a4984d80, Dst a4984dd9
TCP from 164.152.77.128.60312 to 164.152.77.217.7777
    seq  2814493687, ack 4102208833, window   128, 13 data bytes, flags Push Ack
+.
    X/Off 08, Flags 18, Cksum c9d0,  Urg-> 0000
     offset 0  .  .  .  4  .  .  .   8  .  .  .  C  .  .  .  0...4... 8...C...
      0     1  1  8  a 2a 28 5d 8f  38 9f e0  a  0           <<<<*(]> 8>`<

Comment puis-je faire la différence entre les options et les données ? Le site X/Off est le nombre de mots de 32 bits dans l'en-tête TCP. S'il n'y a pas d'option, cette valeur est 5, donc une valeur de 8 indique une addition de trois mots de 32 bits ou de 12 octets supplémentaires.

Le paquet suivant n'est qu'un accusé de réception, il ne contient aucune donnée. Notez que le décalage est de nouveau de 8, il y a donc 12 octets d'option et la longueur des données est seulement de 12.

15:02:39.758 Xmit Ether Dst 00:00:a8:42:52:22  Src 00:00:a8:41:34:56 Type 0800
+(IP)
IP   Ver/HL 45, ToS  0, Len   34, ID  48a, Flg/Frg    0, TTL 3c,  Prtl  6
          Cksum  95b0, Src a4984dd9, Dst a4984d80
TCP from 164.152.77.217.7777 to 164.152.77.128.60312
    seq  4102208833, ack 2814493688, window   128, 12 data bytes, flags Ack.
    X/Off 08, Flags 10, Cksum a751,  Urg-> 0000
     offset 0  .  .  .  4  .  .  .   8  .  .  .  C  .  .  .  0...4... 8...C...
      0     1  1  8  a 38 a0  2 91  2a 28 5d 8f              <<<<8 <> *(]>

Le paquet suivant est un exemple de segment contenant un reconnaissance sélective option avec 3 blocs de numéros d'acquittement. Notez que l'option X/Off valeur de 0f indiquant 40 octets supplémentaires ((15 - 5) * 4) dans l'en-tête TCP que packet_monitor signale comme octets de données.

9:52:39.491 Rcvd Ether Dst 00:00:a8:41:34:56  Src 00:04:96:52:21:6f Type 0800
+ (IP)
IP   Ver/HL 45, ToS 60, Len   50, ID   59, Flg/Frg    0, TTL 35,  Prtl  6
          Cksum  4355, Src 866fc8b9, Dst a4984dd9
TCP from 134.111.200.185.ftp-data to 164.152.77.217.53828
    seq  1652086450, ack 3779437719, window  4096, 40 data bytes, flags Ack.
    X/Off 0f, Flags 10, Cksum c834,  Urg-> 0000
     offset 0  .  .  .  4  .  .  .   8  .  .  .  C  .  .  .  0...4... 8...C...
      0     1  1  8  a  2 9e 86 bd  3c 4b dd 57  1  1  5 1a  <<<<<<<< >K<W<<<<
     10    e1 45 f6 77 e1 45 f8 83  e1 45 f2 5f e1 45 f4 6b  <E<w<E<< <E<_<E<k
     20    e1 45 c9 6f e1 45 cb 7b                           <E<o<E<{

Le numéro d'accusé de réception dans l'en-tête TCP est le plus à droite edge des octets reçus en continu. Les blocs de données dans l'option d'accusé de réception sélectif indiquent les blocs de données qui ont été reçus. Les espaces entre les blocs représentent les octets qui n'ont pas été reçus.

Tout cela serait beaucoup plus simple si packet_monitor signalait correctement les options au lieu de les déclarer en tant que données. Le bogue stcp-2963 a été ajouté pour que packet_monitor fasse exactement cela. Il est prévu de corriger ce bogue dans une prochaine version, d'ici là, vous devez faire attention à la valeur X/Off.

L'option de l'échelle de la fenêtre risque d'être la plus déroutante. Le paquet suivant montre une fenêtre de réception de seulement 4096 octets.

9:52:38.975 Rcvd Ether Dst 00:00:a8:41:34:56  Src 00:04:96:52:21:6f Type 0800
+ (IP)
IP   Ver/HL 45, ToS 60, Len   34, ID    8, Flg/Frg    0, TTL 35,  Prtl  6
          Cksum  43c2, Src 866fc8b9, Dst a4984dd9
TCP from 134.111.200.185.ftp-data to 164.152.77.217.53828
    seq  1652086450, ack 3779392131, window  4096, 12 data bytes, flags Ack.
    X/Off 08, Flags 10, Cksum a3cf,  Urg-> 0000
     offset 0  .  .  .  4  .  .  .   8  .  .  .  C  .  .  .  0...4... 8...C...
      0     1  1  8  a  2 9e 86 39  3c 4b dc e3              <<<<<>><K<<<

Il s'agit d'une fenêtre extrêmement petite, mais sa taille est trompeuse car l'échelle de la fenêtre est en vigueur. Comment pouvez-vous le savoir ? La seule façon de le savoir est d'avoir observé la configuration initiale de la connexion. Dans le cas suivant, vous pouvez voir que les segments SYN et SYN-ACK comprennent tous deux le le redimensionnement des fenêtres et dans les deux cas, la valeur de l'échelle est de 6, de sorte que la taille de la fenêtre 4096 (2^12) dans le segment ci-dessus est décalée de 6 bits pour donner la fenêtre réelle de 262144 (2^18 ou 256K) octets.

9:52:38.818 Rcvd Ether Dst 00:00:a8:41:34:56  Src 00:04:96:52:21:6f Type 0800
+ (IP)
IP   Ver/HL 45, ToS 60, Len   3c, ID    5, Flg/Frg    0, TTL 35,  Prtl  6
          Cksum  43bd, Src 866fc8b9, Dst a4984dd9
TCP from 134.111.200.185.ftp-data to 164.152.77.217.53828
    seq  1652086449, ack     n.a., window  8192, 20 data bytes, flags Syn.
    X/Off 0a, Flags 02, Cksum 29fd,  Urg-> 0000
     offset 0  .  .  .  4  .  .  .   8  .  .  .  C  .  .  .  0...4... 8...C...
      0     2  4  2 18  3  3  6  4   2  8  a  2 9e 86 11  0  <<<<<<<< <<<<>><
     10     0  0  0  0

9:52:38.819 Xmit Ether Dst 00:13:d4:59:7a:da  Src 00:00:a8:41:34:56 Type 0800
+ (IP)
IP   Ver/HL 45, ToS  0, Len   3c, ID    a, Flg/Frg    0, TTL 3c,  Prtl  6
          Cksum  3d18, Src a4984dd9, Dst 866fc8b9
TCP from 164.152.77.217.53828 to 134.111.200.185.ftp-data
    seq  3779391082, ack 1652086450, window  8192, 20 data bytes, flags Syn Ack
+.
    X/Off 0a, Flags 12, Cksum 3b87,  Urg-> 0000
     offset 0  .  .  .  4  .  .  .   8  .  .  .  C  .  .  .  0...4... 8...C...
      0     2  4  5 b4  3  3  6  4   2  8  a 3c 4b dc cf  2  <<<<<<<< <<<<<K<
     10    9e 86 11  0                                       >><

Ces options sont sous le contrôle des paramètres du STCP.

comme : list_stcp_params    

Paramètres STCP :

. . . .
IP le plus bas Taille maximale du segment [500-1480] (min_mss) 576
. . . .
taille maximale de la fenêtre d'envoi [4096-1073725440] (max_send_ws) 1073725440
maximum huge windows [>=0] (max_huge_windows) 0
fenêtres énormes actuelles 0
maximum 256k fenêtres [>=0] (max_256k_windows) 25
256 000 fenêtres actuelles 0
. . . . .
Politique TCP RFC-1323 [désactiver/autoriser/demander] (tcp_rfc_1323_policy)
Échelle de la fenêtre demandée par le TCP [0-14] (tcp_window_scale) 6
Politique TCP SACK [désactiver/autoriser/demander] (tcp_SACK_policy) demande

comme :

Le tcp_rfc_1323_policy indique si des horodateurs seront utilisés. Les valeurs des paramètres sont désactivées/autorisées/demandées. La valeur par défaut de request indique que l'option fait partie d'un segment de demande de connexion et que si elle est demandée dans une demande de connexion reçue, elle fera partie du segment de réponse. Une valeur de allow indique que l'option ne fera pas partie d'un segment de demande de connexion mais pourra faire partie d'une réponse, si la demande de connexion reçue l'inclut. La valeur disable indique que l'option ne fera partie d'aucun des deux types de segment. La valeur de disable indique également que l'option d'échelle de fenêtre ne fera pas partie du segment.

Le tcp_window_scale contrôle le paramètre de mise à l'échelle. Une valeur de zéro indique à l'hôte distant que la mise à l'échelle de la fenêtre est prise en charge mais pas celle de la fenêtre du STCP.

15:48:43.409 Rcvd IP   Ver/HL 45, ToS  0, Len   3c, ID  450, Flg/Frg    0, TTL 3
+c,  Prtl  6
          Cksum  95e2, Src a4984d80, Dst a4984dd9
TCP from 164.152.77.128.65410 to 164.152.77.217.7777
    seq  1987362195, ack     n.a., window  8192, 20 data bytes, flags Syn.
    X/Off 0a, Flags 02, Cksum b8b3,  Urg-> 0000
     offset 0  .  .  .  4  .  .  .   8  .  .  .  C  .  .  .  0...4... 8...C...
      0     2  4  5 b4  3  3  6  4   2  8  a 30 ca ac 69  0  <<<4<<<< <<<0J,i
     10     0  0  0  0                                                       

15:48:48.575 Xmit IP   Ver/HL 45, ToS  0, Len   3c, ID    2, Flg/Frg    0, TTL 3
+c,  Prtl  6
          Cksum  9a30, Src a4984dd9, Dst a4984d80
TCP from 164.152.77.217.7777 to 164.152.77.128.65410
    seq  3853608469, ack 1987362196, window  8192, 20 data bytes, flags Syn Ack.
    X/Off 0a, Flags 12, Cksum c550,  Urg-> 0000
     offset 0  .  .  .  4  .  .  .   8  .  .  .  C  .  .  .  0...4... 8...C...
      0     2  4  5 b4  3  3  0  4   2  8  a  1 47 89 66 30  <<<4<< < <<<<G>f0
     10    ca ac 69  0                                       J,i

Le tcp_sack_policy contrôle l'option d'acquittement sélectif. Les valeurs peuvent être désactivées, autorisées, et demandées et signifient exactement la même chose que pour l'option tcp_rfc_1323_policy.

Enfin, grâce à la possibilité de redimensionner les fenêtres, il est possible d'avoir des fenêtres plus grandes que le précédent maximum de 64K , deux nouveaux groupes de taille de fenêtre ont donc été créés. Ceux-ci sont reflétés dans les groupes max_256k_windows et max_huge_windows. Vous pouvez ajuster le nombre maximum de sockets qui peuvent annoncer une fenêtre de 256K ou une fenêtre encore plus grande en définissant les valeurs max_256k_windows ou max_huge_windows.

Le paramètre max_send_ws reflète le fait que la fenêtre de réception maximale possible de l'hôte distant est maintenant de 2^30 (1073725440 est en fait de 2^30 - 2^14). Pour une socket donnée, la taille maximale réelle de la fenêtre d'envoi est le minimum du paramètre max_send_ws et la taille de la fenêtre de réception annoncée pour les hôtes distants.

2024 Stratus Technologies.