A partir de OpenVOS 17.1, STCP soporta la marca de tiempo, el reconocimiento selectivo y las opciones de escalado de ventanas TCP. Esto permitirá un flujo de datos más eficiente cuando se caigan los segmentos TCP o cuando se envíen datos a través de una conexión de gran ancho de banda con retardo (una conexión a través de un enlace en el que el ancho de banda mínimo * latencia total > 65536). El efecto de estos cambios es transparente para las aplicaciones, pero hay algunas cosas que debe tener en cuenta cuando utilice packet_monitor.
En primer lugar, cuando STCP envíe una solicitud de conexión, el segmento TCP (SYN) contendrá ahora 16 bytes adicionales.
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 | opción 2 (tamaño mínimo del segmento), longitud total de la opción 4 bytes, valor 05 b4 (1460 decimal) (estos bytes no son nuevos) |
3 3 6 | opción 3 (escala de ventana), longitud total de la opción 3 bytes, valor 6 |
4 2 | opción 4 (se admite el reconocimiento selectivo), longitud total 2 bytes |
8 a 32 2d bc 85 0 0 0 0 | opción 8 (sello de tiempo), longitud total 10 bytes, tiempo de envío 32 2d bc 85, tiempo de retorno 0 0 0 0 |
0 | opción 0 (fin de las opciones) |
En segundo lugar, las opciones enviadas en un segmento de respuesta de conexión (SYN/ACK) dependerán de lo que contenga el segmento SYN del host remoto. STCP incluirá la opción de acuse de recibo selectivo soportada en su respuesta sólo si la solicitud de conexión la incluye. La respuesta sólo incluirá las opciones de escala de ventana y marca de tiempo si la solicitud de conexión también incluye ambas opciones.
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><<
|
Por defecto, los hosts de Windows sólo incluyen el tamaño máximo del segmento, escala de la ventana y reconocimiento selectivo apoyado opciones. Sin la opción de marca de tiempo en la solicitud de conexión, la respuesta de STCP no incluirá las opciones de marca de tiempo o escala de ventana. Tenga en cuenta que los 1 incluidos en las opciones de la ventana son los NO-OP y se utilizan para hacer que el número de bytes de opción sea un múltiplo entero de 4. El múltiplo fin de las opciones (0's) al final de las opciones en la respuesta de STCP son por la misma razón.
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 parte confusa viene después de que se establece la conexión. El siguiente paquete contiene sólo 1 byte de datos aunque el bytes de datos El campo dice 13. Los primeros 12 bytes son dos opciones de NO-OP seguidas de una opción de marca de tiempo. El byte de datos es el 0x al final.
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>`<
|
¿Cómo puedo diferenciar entre opciones y datos? El X/Off El valor es el número de palabras de 32 bits en el encabezado TCP. Si no hay opciones, este valor es 5, por lo que un valor de 8 indica una adición de tres palabras de 32 bits o 12 bytes más.
El siguiente paquete es sólo un reconocimiento, no contiene datos. Observe que el desplazamiento es de nuevo 8, por lo que hay 12 bytes de opción y la longitud de los datos es sólo 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 <> *(]>
|
El siguiente paquete es un ejemplo de un segmento que contiene una reconocimiento selectivo con 3 bloques de números de reconocimiento. Observe el X/Off valor de 0f que indica 40 bytes adicionales ((15 - 5) * 4) en el encabezado TCP que packet_monitor informa como bytes de datos.
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<{
|
El número de acuse de recibo en la cabecera TCP es el más a la derecha edge de los bytes recibidos continuamente. Los bloques de datos en la opción de acuse de recibo selectivo indican bloques de datos que se han recibido. Los espacios entre los bloques representan los bytes que no se han recibido.
Todo esto sería mucho más sencillo si packet_monitor informara correctamente de las opciones en lugar de informarlas como datos. Se ha añadido el error stcp-2963 para hacer que packet_monitor haga precisamente eso. El error está programado para ser corregido en una futura versión, hasta entonces debe prestar atención al valor X/Off.
La opción de la escala de ventana tiene el potencial de ser la más confusa. El siguiente paquete muestra un ventana de recepción de sólo 4096 bytes.
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<<<
|
Esta es una ventana extremadamente pequeña pero el tamaño es engañoso porque la escala de la ventana está en efecto. ¿Cómo puedes saberlo? La única forma de saberlo es haber observado la conexión inicial establecida. En el siguiente caso se puede ver que tanto el segmento SYN como el SYN-ACK incluyen el escalado de la ventana y en ambos casos el valor de la escala es 6, de modo que el tamaño de la ventana de 4096 (2^12) en el segmento anterior se desplaza en 6 bits para dar la ventana real de 262144 (2^18 o 256K) bytes.
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 >><
|
Estas opciones están bajo el control de los parámetros de STCP.
as: list_stcp_params
Parámetros de STCP:
. . . .
Tamaño máximo del segmento IP más bajo [500-1480] (min_mss) 576
. . . .
tamaño máximo de la ventana de envío [4096-1073725440] (max_send_ws) 1073725440
máximo de ventanas enormes [>=0] (max_huge_windows) 0
actuales enormes ventanas 0
máximo 256k ventanas [>=0] (max_256k_windows) 25
actual 256k ventanas 0
. . . . .
Política TCP RFC-1323 [desactivar/permitir/solicitar] (tcp_rfc_1323_policy) solicitud
Escala de la ventana solicitada por el TCP [0-14] (tcp_window_scale) 6
Política TCP SACK [desactivar/permitir/solicitar] (tcp_SACK_policy) solicitud
como:
|
El tcp_rfc_1323_policy indica si se utilizarán las marcas de tiempo. Los valores de los parámetros son deshabilitar/permitir/solicitar. El valor por defecto de la solicitud indica que la opción forma parte de un segmento de solicitud de conexión y si se solicita en una solicitud de conexión recibida formará parte del segmento de respuesta. El valor de allow indica que la opción no formará parte de un segmento de solicitud de conexión, pero puede formar parte de una respuesta, si la solicitud de conexión recibida la incluye. El valor de deshabilitar indica que la opción no formará parte de ninguno de los dos tipos de segmento. El valor de deshabilitar también indica que la opción de escala de la ventana no formará parte del segmento.
El tcp_escala_ventana controla el parámetro de escala. Un valor cero indica al host remoto que se admite el escalado de la ventana pero no para escalar la ventana de 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
|
El tcp_sack_policy controla la opción de reconocimiento selectivo. Los valores pueden ser deshabilitados, permitidos y solicitados y significan exactamente lo mismo que para la opción tcp_rfc_1323_policy.
Finalmente, con el apoyo de la escalada de ventanas es posible tener ventanas más grandes que el máximo anterior de 64K , por lo que se han creado dos nuevos grupos de tamaño de ventana. Estos se reflejan en los pools de max_256k_windows y max_huge_windows. Se puede ajustar el número máximo de sockets que pueden anunciar una ventana de 256K o una ventana aún más grande estableciendo los valores max_256k_windows o max_huge_windows.
El parámetro max_send_ws refleja el hecho de que el máximo posible de la ventana de recepción del host remoto es ahora 2^30 (1073725440 es en realidad 2^30 - 2^14). Para un socket dado el tamaño máximo real de la ventana de envío con ser el mínimo del parámetro max_send_ws y los hosts remotos anunciados reciben el tamaño de la ventana.