Descrição dos recursos do Windows TCP
Este artigo descreve os recursos TCP no Windows.
Aplica-se a: Windows 10 — todas as edições, Windows Server 2012 R2
Número de KB original: 224829
Resumo
Este artigo descreve os seguintes recursos TCP no Windows:
- Tamanho da janela TCP
- Agora há suporte para opções TCP
- Dimensionamento do Windows – RFC 1323
- Carimbo de data/hora – RFC 1323
- Proteção contra números de sequência encapsulados (PAWS)
- Reconhecimentos Seletivos (SACKS) – RFC 2018
- Comportamento de retransmissão TCP e retransmissão rápida
Os recursos TCP podem ser alterados alterando as entradas no registro.
Importante
As seções, métodos ou tarefas a seguir contêm etapas que informam como modificar o registro. Entretanto, sérios problemas poderão ocorrer caso você modifique o Registro incorretamente. Portanto, siga essas etapas cuidadosamente. Para mais proteção, faça o backup do registro antes de modificá-lo. Em seguida, você poderá restaurar o registro se ocorrer um problema. Para obter mais informações sobre como fazer backup e restaurar o Registro, clique no número abaixo para ler o artigo na Base de Dados de Conhecimento Microsoft:
322756 Como fazer o backup e a restauração do Registro no Windows
Tamanho da janela TCP
O tamanho da janela de recebimento do TCP é a quantidade de dados de recebimento (em bytes) que podem ser buffers durante uma conexão. O host de envio pode enviar apenas essa quantidade de dados antes de aguardar um reconhecimento e uma atualização de janela do host receptor. A pilha TCP/IP do Windows foi projetada para se auto-ajustar na maioria dos ambientes e usa tamanhos de janela padrão maiores do que as versões anteriores.
Em vez de usar um tamanho de janela de recebimento padrão codificado, o TCP se ajusta até mesmo a incrementos do tamanho máximo do segmento (MSS). O MSS é negociado durante a instalação da conexão. Ajustar a janela de recebimento a incrementos uniformes do MSS aumenta o percentual de segmentos TCP de tamanho completo usados durante transmissões de dados em massa.
O tamanho da janela de recebimento é determinado da seguinte maneira:
- A primeira solicitação de conexão enviada a um host remoto anuncia um tamanho de janela de recebimento de 16K (16.384 bytes).
- Quando a conexão é estabelecida, o tamanho da janela de recebimento é arredondado para um incremento uniforme do MSS.
- O tamanho da janela é ajustado para quatro vezes o MSS, para um tamanho máximo de 64 K, a menos que a opção de dimensionamento de janela (RFC 1323) seja usada.
Observação
Consulte a seção "Dimensionamento do Windows".
Para conexões Ethernet, o tamanho da janela normalmente será definido como 17.520 bytes (16K arredondados até doze segmentos de 1460 bytes). O tamanho da janela pode reduzir quando uma conexão é estabelecida para um computador que dá suporte a opções de cabeça TCP estendidas, como SACKS (Reconhecimentos Seletivos) e Carimbos de Data/Hora. Essas duas opções aumentam o tamanho do cabeçalho TCP para mais de 20 bytes, o que resulta em menos espaço para dados.
Nas versões anteriores do Windows NT, o tamanho da janela para uma conexão Ethernet era de 8.760 bytes ou seis segmentos de 1460 bytes.
Para definir o tamanho da janela de recebimento como um valor específico, adicione o valor TcpWindowSize à subchave do registro específica para sua versão do Windows. Para fazer isso, siga estas etapas:
Selecione Iniciar>Execução, digite
Regedit
e, em seguida, selecione OK.Expanda a subchave do registro específica para sua versão do Windows:
Para Windows 2000, expanda a seguinte subchave:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces
Para Windows Server 2003, expanda a seguinte subchave:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
No menu Editar , aponte para Novo e selecione Valor DWORD.
Digite
TcpWindowSize
na caixa Novo Valor e pressione EnterSelecione Modificar no menu Editar .
Digite o tamanho da janela desejada na caixa de dados Valor .
Observação
O intervalo válido para o tamanho da janela é hexadecimal de 0 0x3FFFC000.
Esse valor não está presente por padrão. Quando você adiciona o valor TcpWindowSize, ele substitui o algoritmo de tamanho de janela padrão discutido acima.
Observação
TcpWindowSize também pode ser adicionado à chave Parâmetros para definir o tamanho da janela globalmente para todas as interfaces.
Agora há suporte para opções TCP
Anteriormente, as opções TCP eram usadas principalmente para negociar tamanhos máximos do segmento. No Windows, as opções TCP são usadas para Dimensionamento de Janelas, Carimbo de Tempo e ACK Seletivo.
Há dois tipos de opções TCP:
- Uma opção TCP de octeto único, que é usada para indicar um tipo de opção específico.
- Uma opção TCP de vários octetos, que consiste em um tipo de opção, um comprimento de opção e uma série de octets de opção.
A lista a seguir mostra cada tipo de opção TCP, comprimento, nome e descrição.
Tipo: 0
Comprimento: 1
Opção: Fim da Lista de Opções
Descrição: usado quando o preenchimento é necessário para a última opção TCP.
Tipo: 1
Comprimento: 1
Opção: sem operação
Descrição: usado quando o preenchimento é necessário e mais opções de TCP seguem no mesmo pacote.
Tipo: 2
Comprimento: 4
Opção: Tamanho máximo do segmento
Descrição: indica o tamanho máximo de um segmento TCP que pode ser enviado por toda a rede.
Tipo: 3
Comprimento: 3
Opção: opção Dimensionamento de Janela
Descrição: identifica o fator de dimensionamento a ser usado ao usar tamanhos de janela maiores que 64k.
Tipo: 8
Comprimento: 10
Opção: opção carimbo de hora
Descrição: usado para ajudar a calcular o RTT (Tempo de Viagem de Ida e Volta) dos pacotes transmitidos.
Tipo: 4
Comprimento: 2
Opção: TCP SACK permitido
Descrição: informa a outros hosts que os Acks Seletivos são permitidos.
Tipo: 5
Comprimento: Varia
Opção: Opção TCP SACK
Descrição: usado por hosts para identificar se pacotes fora de ordem foram recebidos.
Dimensionamento do Windows
Para um uso mais eficiente de redes de alta largura de banda, um tamanho de janela TCP maior pode ser usado. O campo tamanho da janela TCP controla o fluxo de dados e é limitado a 2 bytes ou um tamanho de janela de 65.535 bytes.
Como o campo de tamanho não pode ser expandido, um fator de dimensionamento é usado. A escala da janela TCP é uma opção usada para aumentar o tamanho máximo da janela de 65.535 bytes para 1 Gigabyte.
A opção de dimensionamento de janela é usada somente durante o aperto de mão de três vias TCP. O valor de escala da janela representa o número de bits para o turno esquerdo do campo de tamanho da janela de 16 bits. O valor de escala de janela pode ser definido de 0 (sem turno) para 14.
Para calcular o tamanho da janela real, multiplique o tamanho da janela por 2^S, onde S é o valor de escala.
Por exemplo:
Se o tamanho da janela for de 65.535 bytes com um fator de escala de janela de 3.
Tamanho da janela true = 65535*2^3
Tamanho da janela true = 524280
O seguinte rastreamento do Monitor de Rede mostra como a opção de escala de janela é usada:
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
O tamanho da janela usado no aperto de mão de três vias real não é o tamanho da janela dimensionado, por RFC 1323 seção 2.2:
"O campo Janela em um segmento SYN (por exemplo, um segmento [SYN] ou [SYN,ACK]) nunca é dimensionado."
Isso significa que o primeiro pacote de dados enviado após o aperto de mão de três vias é o tamanho real da janela. Se houver um fator de dimensionamento, o tamanho da janela inicial de 65.535 bytes será sempre usado. O tamanho da janela é então multiplicado pelo fator de dimensionamento identificado no aperto de mão de três vias. A tabela abaixo representa os limites do fator de dimensionamento para vários tamanhos de janela.
Fator Scale | Valor de escala | Janela Inicial | Janela Dimensionada |
---|---|---|---|
0 | 1 | 65535 ou menos | 65535 ou 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 exemplo:
Se o tamanho da janela no registro for inserido como 26900000 (269M) em decimais, o fator de dimensionamento durante o aperto de mão de três vias será 13. Um fator de dimensionamento de 12 permite apenas um tamanho de janela de até 268.431.360 bytes (268M).
O tamanho da janela inicial neste exemplo seria calculado da seguinte maneira:
65.535 bytes com um fator de escala de janela de 13.
Tamanho da janela true = 65535*2^13
Tamanho da janela true = 536.862.720
Quando o valor do tamanho da janela é adicionado ao registro e seu tamanho é maior que o valor padrão, o Windows tenta usar um valor de escala que acomode o novo tamanho da janela.
O valor Tcp1323Opts na seguinte chave de registro pode ser adicionado ao controle de janelas de dimensionamento e carimbo de data/hora:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters
Na barra de ferramentas, selecione Iniciar>Execução e digite
Regedit
para iniciar a Editor do Registro.Na Editor do Registro, selecione Editar, aponte para Novo e selecione Valor DWORD.
Na caixa Novo Valor, digite
Tcp1323Opts
, pressione ENTER e, em seguida, no menu Editar , selecione Modificar.Observação
O intervalo válido é 0, 1, 2 ou 3 em que:
0 (desabilitar opções rfc 1323)
1 (somente a escala de janela habilitada)
2 (carimbos de data/hora habilitados somente)
3 (ambas as opções habilitadas)
Essa entrada do registro controla os carimbos de data/hora RFC 1323 e as opções de dimensionamento de janela. Os carimbos de data/hora e o dimensionamento de janelas são habilitados por padrão, mas podem ser manipulados com bits de sinalizador. O Bit 0 controla o dimensionamento da janela. O Bit 1 controla carimbos de data/hora.
Timestamps
Anteriormente, a pilha TCP/IP usava um exemplo por janela de dados enviados para calcular o tempo de ida e volta (RTT). Um temporizador (temporizador de retransmissão) foi definido quando o pacote foi enviado, até que o reconhecimento fosse recebido. Por exemplo, se o tamanho da janela fosse de 64.240 bytes (44 segmentos completos) em uma rede Ethernet, apenas um de cada 44 pacotes foi usado para recalcular o tempo de ida e volta. Com um tamanho máximo de janela de 65.535 bytes, essa taxa de amostragem foi suficiente. Usando o dimensionamento da janela e um tamanho máximo de janela de 1 Gigabyte, essa taxa de amostragem RTT não é suficiente.
A opção carimbo de data/hora TCP agora pode ser usada em segmentos (dados e ACK) considerados apropriados pela pilha, para fazer operações como:
- Computação RTT
- PAWS marcar
Usando esses dados, o RTT pode ser calculado com precisão com grandes tamanhos de janela. O RTT é usado para calcular intervalos de retransmissão. RtT preciso e tempo limite de retransmissão são necessários para uma taxa de transferência ideal.
Quando o carimbo de hora TCP é usado em uma sessão TCP, o criador da sessão envia a opção em seu primeiro pacote do pacote SYN (aperto de mão de três vias) TCP. Em seguida, ambos os lados podem usar a opção TCP durante a sessão.
Opção TCP Timestamps (TSopt):
Tipo = 8 | Comprimento = 10 | Valor TS (Tsval) | TS Echo Reply (Tsecr) |
---|---|---|---|
1 byte | 1 byte | 4 bytes | 4 bytes |
O campo de opção de carimbo de data/hora pode ser exibido em um rastreamento do Monitor de Rede expandindo o campo de opções TCP, conforme mostrado abaixo:
TCP: Timestamps Option
TCP: Option Type = Timestamps
TCP: Option Length = 10 (0xA)
TCP: Timestamp = 2525186 (0x268802)
TCP: Reply Timestamp = 1823192 (0x1BD1D8)
Proteção contra números de sequência encapsulados (PAWS)
O campo número de sequência TCP é limitado a 32 bits, o que limita o número de números de sequência disponíveis. Com redes de alta capacidade e uma grande transferência de dados, é possível envolver números de sequência antes que um pacote atravesse a rede. Se enviar dados em uma rede giga-byte por segundo (Gbps), os números da sequência poderão ser encapsulados em apenas 34 segundos. Se um pacote for atrasado, um pacote diferente poderá existir com o mesmo número de sequência. Para evitar confusão de números de sequência duplicados, o carimbo de data/hora TCP é usado como uma extensão para o número de sequência. Os pacotes têm carimbos de tempo atuais e em andamento. Um pacote antigo tem um carimbo de hora mais antigo e é descartado.
SACKs (Reconhecimentos Seletivos)
O Windows apresenta suporte para um recurso de desempenho conhecido como Reconhecimento Seletivo ou SACK. O SACK é especialmente importante para conexões que usam tamanhos de janela TCP grandes. Antes do SACK, um receptor só podia reconhecer o número de sequência mais recente de um fluxo de dados contíguo que havia sido recebido ou a "borda esquerda" da janela de recebimento. Com o SACK habilitado, o receptor continua a usar o número ACK para reconhecer a borda esquerda da janela de recebimento, mas também pode reconhecer outros blocos de dados recebidos individualmente. O SACK usa opções de cabeçalho TCP, conforme mostrado abaixo.
O SACK usa dois tipos de Opções TCP.
A Opção de Sack-Permitted TCP é usada apenas em um pacote SYN (durante o estabelecimento de conexão TCP) para indicar que ele pode fazer ACK seletivo.
A segunda opção TCP, TCP Sack Option, contém reconhecimento para um ou mais blocos de dados. Os blocos de dados são identificados usando o número de sequência no início e no final desse bloco de dados. Ele também é conhecido como a borda esquerda e direita do bloco de dados.
O Tipo 4 é o TCP Sack-Permitted Option. O tipo 5 é a opção TCP Sack. O comprimento é o comprimento em bytes dessa opção TCP.
Tcp SACK permitido:
Tipo = 4 | Comprimento = 2 |
---|---|
1 byte | 1 byte |
Opção Tcp SACK:
Tipo = 5 | Comprimento = Variável |
---|---|
1 byte | Borda esquerda do primeiro bloco para a borda direita do primeiro bloco ... Borda esquerda do bloco Nth para a borda direita do bloco Nth |
Com o SACK habilitado (padrão), um pacote ou uma série de pacotes podem ser descartados. O receptor informa ao remetente quais dados foram recebidos e onde pode haver "buracos" nos dados. Em seguida, o remetente pode retransmitir seletivamente os dados ausentes sem uma retransmissão de blocos de dados que já foram recebidos com êxito. O SACK é controlado pelo parâmetro de registro SackOpts.
O valor SackOpts na seguinte chave do registro pode ser editado para controlar o uso de reconhecimentos seletivos:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
- Na barra de ferramentas, selecione Iniciar>Execução e digite
Regedit
para iniciar a Editor do Registro. - Localize e selecione a chave acima no Editor do Registro e selecione Modificar no menu Editar.
- Digite o valor desejado na caixa de dados Valor .
Observação
O valor binário válido é 0 ou 1, o valor padrão é 1. Esse parâmetro controla se o suporte a SACK (SACK – RFC 2018) está habilitado ou não.
O rastreamento do Monitor de Rede a seguir ilustra um host reconhecendo todos os dados até o número de sequência 54857341, além dos dados do número da sequência 54858789-54861685. Os dados ausentes são 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)
Comportamento de retransmissão TCP e retransmissão rápida
Retransmissão TCP
Como uma revisão do comportamento normal de retransmissão, o TCP inicia um temporizador de retransmissão quando cada segmento de saída é entregue ao IP (Protocolo de Internet). Se nenhum reconhecimento tiver sido recebido para os dados em um determinado segmento antes do temporizador expirar, o segmento será retransmitido.
O tempo limite de retransmissão (RTO) é ajustado continuamente para corresponder às características da conexão usando cálculos de SRTT (Tempo de Ida e Volta Suavizada), conforme descrito no RFC 793. O temporizador de um determinado segmento é dobrado após cada retransmissão desse segmento. Usando esse algoritmo, o TCP se ajusta ao atraso normal de uma conexão.
Retransmissão rápida
O TCP retransmite dados antes que o temporizador de retransmissão expire em algumas circunstâncias. A causa mais comum é um recurso conhecido como retransmissão rápida. Quando um receptor que dá suporte a retransmissão rápida recebe dados com um número de sequência além do esperado atual, alguns dados provavelmente foram descartados. Para ajudar a informar o remetente desse evento, o receptor envia imediatamente um ACK, com o número do ACK definido como o número de sequência que ele estava esperando. Ele continuará a fazê-lo para cada segmento de TCP adicional que chegar. Quando o remetente começa a receber um fluxo de ACKs que está reconhecendo o mesmo número de sequência, um segmento pode ter sido descartado. O remetente reenviará imediatamente o segmento que o receptor está esperando, sem esperar que o temporizador de retransmissão expire. Essa otimização melhora muito o desempenho quando os pacotes são descartados com frequência.
Por padrão, o Windows reenvia um segmento nas seguintes condições:
- Ele recebe três ACKs para o mesmo número de sequência: um ACK e duas duplicatas.
- O número de sequência atrasa o atual.
Esse comportamento é controlável com o parâmetro do TcpMaxDupAcks
registro.
O valor TcpMaxDupAcks na seguinte chave do registro pode ser editado para controlar o número de ACKs necessários para iniciar um retransmissão rápido:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
- Na barra de ferramentas, selecione Iniciar>Execução e digite
Regedit
para iniciar a Editor do Registro. - Localize e selecione a chave acima no Editor do Registro e selecione Modificar no menu Editar.
- Digite o valor desejado na caixa de dados Valor .
Observação
O intervalo válido é 1-3, o valor padrão é 2.
Esse parâmetro determina o número de ACKs duplicados que devem ser recebidos para o mesmo número de sequência de dados enviados antes fast retransmit
de ser disparado para reenviar o segmento que foi descartado em trânsito.
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários