Compartir a través de


Descripción de las características tcp de Windows

En este artículo se describen las características de TCP en Windows.

Número de KB original: 224829

Resumen

En este artículo se describen las siguientes características tcp en Windows:

  • Tamaño de la ventana TCP
  • Ahora se admiten las opciones de TCP
  • Escalado de Windows: RFC 1323
  • Marca de tiempo - RFC 1323
  • Protección contra números de secuencia ajustados (PAWS)
  • Confirmaciones selectivas (SACKS) - RFC 2018
  • Comportamiento de retransmisión TCP y retransmisión rápida

Las características TCP se pueden cambiar cambiando las entradas del Registro.

Importante

Las secciones, métodos o tareas siguientes contienen pasos que indican cómo modificar el Registro. Sin embargo, pueden producirse graves problemas si modifica el Registro de manera incorrecta. Por lo tanto, asegúrese de que sigue estos pasos con atención. Para la protección añadida, realice una copia de seguridad del Registro antes de modificarlo. Después, puede restaurar el registro si se produce un problema. Para obtener más información acerca de cómo realizar una copia de seguridad y restaurar el Registro, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
322756 Hacer una copia de seguridad del Registro y restaurarlo en Windows

Tamaño de la ventana TCP

El tamaño de la ventana de recepción TCP es la cantidad de datos de recepción (en bytes) que se pueden almacenar en búfer durante una conexión. El host de envío solo puede enviar esa cantidad de datos antes de que deba esperar una confirmación y una actualización de ventana del host receptor. La pila TCP/IP de Windows está diseñada para ajustarse automáticamente en la mayoría de los entornos y usa tamaños de ventana predeterminados mayores que las versiones anteriores.

En lugar de usar un tamaño de ventana de recepción predeterminado codificado de forma rígida, TCP se ajusta a incluso incrementos del tamaño máximo de segmento (MSS). MsS se negocia durante la configuración de la conexión. Ajustar la ventana de recepción a incluso incrementos de MSS aumenta el porcentaje de segmentos TCP de tamaño completo usados durante las transmisiones masivas de datos.

El tamaño de la ventana de recepción se determina de la siguiente manera:

  1. La primera solicitud de conexión enviada a un host remoto anuncia un tamaño de ventana de recepción de 16 000 (16 384 bytes).
  2. Cuando se establece la conexión, el tamaño de la ventana de recepción se redondea hasta un incremento par del MSS.
  3. El tamaño de la ventana se ajusta a cuatro veces el MSS, a un tamaño máximo de 64 K, a menos que se use la opción de escalado de ventanas (RFC 1323).

Nota:

Consulte la sección "Escalado de Windows".

En el caso de las conexiones Ethernet, el tamaño de la ventana normalmente se establecerá en 17 520 bytes (16 000 segmentos redondeados hasta doce segmentos de 1460 bytes). El tamaño de la ventana puede reducirse cuando se establece una conexión a un equipo que admite opciones de encabezado TCP extendidas, como confirmaciones selectivas (SACKS) y marcas de tiempo. Estas dos opciones aumentan el tamaño del encabezado TCP a más de 20 bytes, lo que da como resultado menos espacio para los datos.

En versiones anteriores de Windows NT, el tamaño de la ventana de una conexión Ethernet era de 8 760 bytes o seis segmentos de 1460 bytes.

Para establecer el tamaño de la ventana de recepción en un valor específico, agregue el valor TcpWindowSize a la subclave del Registro específica de la versión de Windows. Para ello, siga los pasos que se indican a continuación:

  1. Seleccione Iniciar>ejecución, escriba Regedity, a continuación, seleccione Aceptar.

  2. Expanda la subclave del Registro específica de la versión de Windows:

    • Para Windows 2000, expanda la siguiente subclave: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces

    • Para Windows Server 2003, expanda la subclave siguiente: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

  3. En el menú Editar, seleccione Nuevo y a continuación, Valor DWORD.

  4. Escriba TcpWindowSize el cuadro Nuevo valor y presione Entrar.

  5. Seleccione Modificar en el menú Editar .

  6. Escriba el tamaño de ventana deseado en el cuadro Datos de valor .

    Nota:

    El intervalo válido para el tamaño de ventana es de 0 0x3FFFC000 hexadecimal.

Este valor no está presente de forma predeterminada. Al agregar el valor TcpWindowSize, invalida el algoritmo de tamaño de ventana predeterminado descrito anteriormente.

Nota:

TcpWindowSize también se puede agregar a la clave Parameters para establecer el tamaño de ventana globalmente para todas las interfaces.

Ahora se admiten las opciones de TCP

Anteriormente, las opciones tcp se usaban principalmente para negociar tamaños máximos de segmento. En Windows, las opciones TCP se usan para el escalado de ventanas, la marca de tiempo y la ACK selectiva.

Hay dos tipos de opciones tcp:

  1. Una única opción TCP de octeto, que se usa para indicar un tipo de opción específico.
  2. Una opción TCP de varios octetos, que consta de un tipo de opción, una longitud de opción y una serie de octetos de opción.

En la lista siguiente se muestran cada tipo de opción TCP, longitud, nombre y descripción.

Tipo: 0
Longitud:1
Opción: Fin de la lista de opciones
Descripción: se usa cuando se necesita relleno para la última opción TCP.

Tipo: 1
Longitud:1
Opción: Sin operación
Descripción: se usa cuando se necesita relleno y se siguen más opciones de TCP dentro del mismo paquete.

Tipo: 2
Longitud:4
Opción: Tamaño máximo del segmento
Descripción: indica el tamaño máximo de un segmento TCP que se puede enviar a través de la red.

Tipo: 3
Longitud: 3
Opción: Opción de escala de ventanas
Descripción: identifica el factor de escalado que se va a usar al usar tamaños de ventana mayores de 64 000.

Tipo: 8
Longitud: 10
Opción: Opción de marca de tiempo
Descripción: se usa para ayudar a calcular el tiempo de ida y vuelta (RTT) de los paquetes transmitidos.

Tipo: 4
Longitud:2
Opción: TCP SACK permitido
Descripción: informa a otros hosts de que se permiten las acks selectivas.

Tipo: 5
Longitud: varía
Opción: Opción SACK de TCP
Descripción: se usa en hosts para identificar si se han recibido paquetes desordenados.

Escalado de Windows

Para un uso más eficaz de redes de ancho de banda alto, se puede usar un tamaño de ventana TCP mayor. El campo tamaño de ventana TCP controla el flujo de datos y está limitado a 2 bytes o un tamaño de ventana de 65 535 bytes.

Dado que el campo de tamaño no se puede expandir, se usa un factor de escalado. La escala de ventanas TCP es una opción que se usa para aumentar el tamaño máximo de la ventana de 65 535 bytes a 1 Gigabyte.

La opción de escalado de ventanas solo se usa durante el protocolo de enlace bidireccional TCP. El valor de escala de ventana representa el número de bits a desplazamiento izquierdo del campo de tamaño de ventana de 16 bits. El valor de escala de ventanas se puede establecer de 0 (sin desplazamiento) a 14.

Para calcular el tamaño de ventana verdadero, multiplique el tamaño de la ventana por 2^S, donde S es el valor de escala.

Por ejemplo:

Si el tamaño de la ventana es de 65 535 bytes con un factor de escala de ventana de 3.
Tamaño de ventana true = 65535*2^3

Tamaño de ventana true = 524280

El siguiente seguimiento de Network Monitor muestra cómo se usa la opción de escalado de ventanas:

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  

El tamaño de ventana usado en el protocolo de enlace bidireccional real no es el tamaño de la ventana que se escala, según la sección 2.2 de RFC 1323:

"El campo Ventana de un SYN (por ejemplo, un segmento [SYN] o [SYN,ACK]) nunca se escala".

Significa que el primer paquete de datos enviado después del protocolo de enlace triple es el tamaño real de la ventana. Si hay un factor de escalado, siempre se usa el tamaño inicial de la ventana de 65 535 bytes. A continuación, el tamaño de la ventana se multiplica por el factor de escala identificado en el protocolo de enlace triple. En la tabla siguiente se representan los límites del factor de escalado para varios tamaños de ventana.

Factor de escala Valor de escalado Ventana inicial Escalado de ventanas
0 1 65535 o menos 65535 o menos
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

Por ejemplo:

Si el tamaño de la ventana del Registro se escribe como 2690000000 (269M) en decimal, el factor de escalado durante el protocolo de enlace triple es 13. Un factor de escalado de 12 solo permite un tamaño de ventana de hasta 268 431 360 bytes (268M).

El tamaño inicial de la ventana en este ejemplo se calcularía de la siguiente manera:
65 535 bytes con un factor de escala de ventana de 13.
Tamaño de ventana true = 65535*2^13
Tamaño de ventana true = 536 862 720

Cuando el valor de tamaño de ventana se agrega al Registro y su tamaño es mayor que el valor predeterminado, Windows intenta usar un valor de escala que admite el nuevo tamaño de ventana.

El valor Tcp1323Opts de la siguiente clave del Registro se puede agregar para controlar el escalado de ventanas y la marca de tiempo:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters

  1. En la barra de herramientas, seleccione Iniciar>ejecución y escriba Regedit para iniciar el Editor del Registro.

  2. En el Editor del Registro, seleccione Editar, seleccione Nuevo y, a continuación, seleccione Valor DWORD.

  3. En el cuadro Nuevo valor, escriba Tcp1323Opts, presione ENTRAR y, a continuación, en el menú Editar , seleccione Modificar.

    Nota:

    El intervalo válido es 0, 1, 2 o 3, donde:
    0 (deshabilitar las opciones de RFC 1323)
    1 (solo escala de ventanas habilitada)
    2 (solo marcas de tiempo habilitadas)
    3 (ambas opciones habilitadas)

Esta entrada del Registro controla las marcas de tiempo RFC 1323 y las opciones de escalado de ventanas. Las marcas de tiempo y el escalado de ventanas están habilitadas de forma predeterminada, pero se pueden manipular con bits de marca. Escalado de ventanas de controles bit 0 . Bit 1 controla las marcas de tiempo.

Marcas de tiempo

Anteriormente, la pila TCP/IP usaba un ejemplo por ventana de datos enviados para calcular el tiempo de ida y vuelta (RTT). Se estableció un temporizador (temporizador de retransmisión) cuando se envió el paquete, hasta que se recibió la confirmación. Por ejemplo, si el tamaño de la ventana era de 64 240 bytes (44 segmentos completos) en una red Ethernet, solo se usó uno de cada 44 paquetes para recalcular el tiempo de ida y vuelta. Con un tamaño máximo de ventana de 65.535 bytes, esta frecuencia de muestreo era suficiente. Con el escalado de ventanas y un tamaño máximo de ventana de 1 Gigabyte, esta frecuencia de muestreo RTT no es suficiente.

La opción marca de tiempo TCP ahora se puede usar en segmentos (datos y ACK) que la pila considera adecuada para realizar operaciones como:

  • Cálculo de RTT
  • Comprobación de PAWS

Con estos datos, el RTT se puede calcular con precisión con tamaños de ventana grandes. RTT se usa para calcular intervalos de retransmisión. Se necesitan tiempos de espera de RTT y retransmisión precisos para un rendimiento óptimo.

Cuando se usa la marca de tiempo TCP en una sesión TCP, el originador de la sesión envía la opción en su primer paquete del protocolo de enlace bidireccional TCP (paquete SYN). Después, cualquiera de los lados puede usar la opción TCP durante la sesión.

Opción tcp timestamps (TSopt):

Kind = 8 Longitud = 10 Valor de TS (Tsval) Respuesta de eco de TS (Tsecr)
1 byte 1 byte 4 bytes 4 bytes

El campo de opción de marca de tiempo se puede ver en un seguimiento del Monitor de red expandiendo el campo opciones tcp, como se muestra a continuación:

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

Protección contra números de secuencia ajustados (PAWS)

El campo número de secuencia TCP está limitado a 32 bits, lo que limita el número de números de secuencia disponibles. Con redes de alta capacidad y una transferencia de datos grande, es posible encapsular números de secuencia antes de que un paquete recorra la red. Si envía datos en una red de un giga byte por segundo (Gbps), los números de secuencia podrían encapsularse en tan solo 34 segundos. Si se retrasa un paquete, podría existir un paquete diferente con el mismo número de secuencia. Para evitar confusiones de números de secuencia duplicados, la marca de tiempo TCP se usa como una extensión para el número de secuencia. Los paquetes tienen marcas de tiempo actuales y de progreso. Un paquete antiguo tiene una marca de tiempo anterior y se descarta.

Confirmaciones selectivas (SACK)

Windows presenta compatibilidad con una característica de rendimiento conocida como Confirmación selectiva o SACK. SACK es especialmente importante para las conexiones que usan grandes tamaños de ventana TCP. Antes de SACK, un receptor solo podía reconocer el número de secuencia más reciente de un flujo de datos contiguo que se había recibido o el "borde izquierdo" de la ventana de recepción. Con SACK habilitado, el receptor sigue usando el número ACK para confirmar el borde izquierdo de la ventana de recepción, pero también puede confirmar otros bloques de datos recibidos individualmente. SACK usa las opciones de encabezado TCP, como se muestra a continuación.

SACK usa dos tipos de opciones tcp.

La opción TCP Sack-Permitted solo se usa en un paquete SYN (durante el establecimiento de la conexión TCP) para indicar que puede hacer ACK selectivo.

La segunda opción TCP, opción Sack tcp, contiene la confirmación de uno o varios bloques de datos. Los bloques de datos se identifican mediante el número de secuencia al principio y al final de ese bloque de datos. También se conoce como el borde izquierdo y derecho del bloque de datos.

El tipo 4 es la opción permitida por TCP Sack. El tipo 5 es la opción de saco TCP. Length es la longitud en bytes de esta opción TCP.

Tcp SACK permitido:

Tipo = 4 Longitud = 2
1 byte 1 byte

Opción Tcp SACK:

Kind = 5 Length = Variable
1 byte Borde izquierdo del primer bloque al borde derecho del primer bloque
...
Borde izquierdo del bloque Nth al borde derecho del bloque Nth

Con SACK habilitado (valor predeterminado), se puede quitar un paquete o una serie de paquetes. El receptor informa al remitente de qué datos se han recibido y dónde pueden haber "agujeros" en los datos. Después, el remitente puede retransmitir selectivamente los datos que faltan sin una retransmisión de bloques de datos que ya se han recibido correctamente. SACK se controla mediante el parámetro del Registro SackOpts.

El valor SackOpts de la siguiente clave del Registro se puede editar para controlar el uso de confirmaciones selectivas:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

  1. En la barra de herramientas, seleccione Iniciar>ejecución y escriba Regedit para iniciar el Editor del Registro.
  2. Busque y seleccione la clave anterior en el Editor del Registro y, a continuación, seleccione Modificar en el menú Editar.
  3. Escriba el valor deseado en el cuadro Datos de valor .

Nota:

El valor binario válido es 0 o 1, el valor predeterminado es 1. Este parámetro controla si la compatibilidad con ACK selectivo (SACK - RFC 2018) está habilitada.

El siguiente seguimiento de Network Monitor muestra un host que reconoce todos los datos hasta el número de secuencia 54857341, además de los datos del número de secuencia 54858789-54861685. Los datos que faltan van de 54857341 a 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)

Comportamiento de retransmisión TCP y retransmisión rápida

Retransmisión tcp

Como revisión del comportamiento normal de la retransmisión, TCP inicia un temporizador de retransmisión cuando cada segmento de salida se entrega al Protocolo de Internet (IP). Si no se ha recibido ninguna confirmación para los datos de un segmento determinado antes de que expire el temporizador, se retransmite el segmento.

El tiempo de espera de retransmisión (RTO) se ajusta continuamente para que coincida con las características de la conexión mediante cálculos de tiempo de ida y vuelta (SRTT) suavizados, tal como se describe en RFC 793. El temporizador de un segmento determinado se duplica después de cada retransmisión de ese segmento. Con este algoritmo, TCP se ajusta al retraso normal de una conexión.

Retransmisión rápida

TCP retransmite los datos antes de que expire el temporizador de retransmisión en algunas circunstancias. La causa más común es una característica conocida como retransmisión rápida. Cuando un receptor que admite la retransmisión rápida recibe datos con un número de secuencia más allá del esperado actual, es probable que se quiten algunos datos. Para ayudar a informar al remitente de este evento, el receptor envía inmediatamente un ACK, con el número de ACK establecido en el número de secuencia que esperaba. Seguirá haciéndolo para cada segmento TCP adicional que llegue. Cuando el remitente comienza a recibir una secuencia de ACK que reconoce el mismo número de secuencia, es posible que se haya quitado un segmento. El remitente volverá a enviar inmediatamente el segmento que espera el receptor, sin esperar a que expire el temporizador de retransmisión. Esta optimización mejora considerablemente el rendimiento cuando los paquetes se quitan con frecuencia.

De forma predeterminada, Windows vuelve a enviar un segmento en las condiciones siguientes:

  • Recibe tres ACK para el mismo número de secuencia: una ACK y dos duplicados.
  • El número de secuencia retarda el actual.

Este comportamiento se puede controlar con el TcpMaxDupAcks parámetro del Registro.

El valor TcpMaxDupAcks de la siguiente clave del Registro se puede editar para controlar el número de ACK necesarios para iniciar una retransmisión rápida:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

  1. En la barra de herramientas, seleccione Iniciar>ejecución y escriba Regedit para iniciar el Editor del Registro.
  2. Busque y seleccione la clave anterior en el Editor del Registro y, a continuación, seleccione Modificar en el menú Editar.
  3. Escriba el valor deseado en el cuadro Datos de valor .

Nota:

El intervalo válido es 1-3, el valor predeterminado es 2.

Este parámetro determina el número de ACK duplicados que se deben recibir para el mismo número de secuencia de datos enviados antes fast retransmit de que se desencadene para volver a enviar el segmento que se ha quitado en tránsito.