À 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.