TCP Fast Open
Troca de dados com mais eficiência usando o TCP Fast Open
O TCP Fast Open (TFO) é uma atualização para o TCP que economiza até um tempo completo de ida e volta (RTT) em relação à conexão de três vias padrão durante uma sessão de TCP. O suporte para TFO é para MS-MPC e MS-MIC.
A conexão padrão de três vias envolve três conjuntos de mensagens de envio e recebimento entre dois hosts e a seguinte troca de pacotes SYN (sincronização) e ACK (reconhecimento):
O Host A envia um pacote TCP SYN para o Host B. O Host B o recebe.
O Host B envia um pacote SYN-ACK para o Host A. O Host A o recebe.
O Host A envia um pacote ACK para o Host B. O Host B o recebe.
No TCP padrão, embora os dados possam ser transportados em pacotes SYN, esses dados não podem ser entregues até que o aperto de mão de três seja concluído. O TFO remove essa restrição e permite que dados em pacotes SYN sejam entregues no aplicativo, proporcionando uma melhoria significativa de latência.
O componente-chave do TFO é o cookies Fast Open Cookie (cookie), que é uma tag de Código de Autenticação de Mensagens (MAC) gerada pelo servidor. O cliente solicita um cookie em uma conexão TCP regular e depois usa-o para futuras conexões TCP para trocar dados durante o processo.
A opção TFO é usada para solicitar ou enviar um cookie de TFO. Quando um cookie não está presente ou está vazio, a opção é usada pelo cliente para solicitar um cookie no servidor. Quando o cookie está presente, a opção é usada para passar o cookie do servidor para o cliente ou do cliente de volta para o servidor.
A lista a seguir descreve como o cliente solicita um cookie de TFO:
O cliente envia um SYN com uma opção de TFO que deixa o campo de cookies vazio.
O servidor gera um cookie e o envia pela opção de TFO de um pacote SYN-ACK.
O cliente armazena o cookie para futuras conexões de TFO.
Depois disso, os dois dispositivos realizam uma troca de TFO:
O cliente envia um SYN com dados e cookies na opção TFO.
O servidor valida o cookie:
Se o cookie for válido, o servidor envia um SYN-ACK reconhecendo o SYN e os dados.
O servidor então entrega os dados para o aplicativo.
Caso contrário, o servidor derruba os dados e envia um SYN-ACK reconhecendo apenas o número de sequência SYN.
O restante da conexão prossegue como uma conexão TCP normal. O cliente pode repetir muitas operações de TFO assim que adquirir um cookie (até que o cookie esteja expirado pelo servidor). Assim, o TFO é útil para aplicativos em que o mesmo cliente se reconecta ao mesmo servidor várias vezes e troca dados.
Veja também
Configuração de TFO
Neste tópico, os três modos de TCP Fast Open (TFO) são descritos e exemplos dados. O caso do uso de NAT com TFO também está coberto.
Três modos para TFO
Nenhuma configuração é necessária para usar TFO. O TFO é habilitado por padrão. No modo padrão, todos os pacotes de TFO são encaminhados pelo pic de serviço. Além do padrão, existem dois outros modos para TFO que você configura por meio da CLI:
Solte o TFO — se esse modo for definido, nenhum pacote de TFO será encaminhado.
Desabilitar o TFO — se este modo for definido, qualquer pacote SYN ou SYN ACK que transporte TFO, dados ou ambos, será retirado do TFO e dos dados antes de ser encaminhado.
A opção de TFO é habilitada por conjunto de serviços. O conjunto de serviços pode ser um conjunto de serviços de próximo salto ou um conjunto de serviços no estilo de interface. A seguir está uma configuração de conjunto de serviços no estilo de interface de exemplo:
[edit] services { service-set ss2 { stateful-firewall-rules sfw_rule; interface-service { service-interface ms-2/3/0; } } stateful-firewall { rule sfw_rule { match-direction input-output; term 0 { from { source-address { any-ipv4; } destination-address { any-ipv4; } then { accept; } } } } } }
Neste caso, o TFO é habilitado por padrão (sem configuração de TFO). A saída para o comando é a show services service-sets statistics tcp
seguinte:
user@host> show services service-sets statistics tcp Interface: ms-2/3/0 Service set: ss2 TCP open/close statistics: TCP first packet non-syn: 0 TCP first packet reset: 0 TCP first packet FIN: 0 TCP non syn discard: 0 TCP extension alloc fail: 0 TFO SYN with cookie request: 1 TFO SYN with cookie: 0 TFO SYN ACK with cookie: 0 TFO packets forwarded: 0 TFO packets dropped: 1 TFO packets stripped: 0
Se você soltar pacotes habilitados para TFO, você terá a seguinte configuração e saída:
[edit] services { service-set ss2 { service-set-options { tcp-fast-open drop; } stateful-firewall-rules sfw_rule; interface-service { service-interface ms-2/3/0; } } }
user@host> show services service-sets statistics tcp Interface: ms-2/3/0 Service set: ss2 TCP open/close statistics: TCP first packet non-syn: 0 TCP first packet reset: 0 TCP first packet FIN: 0 TCP non syn discard: 0 TCP extension alloc fail: 0 TFO SYN with cookie request: 1 TFO SYN with cookie: 0 TFO SYN ACK with cookie: 0 TFO packets forwarded: 0 TFO packets dropped: 1 TFO packets stripped: 0
Se você tirar a opção de TFO, a configuração e a saída mudam de acordo:
[edit] services { service-set ss2 { service-set-options { tcp-fast-open disabled; } stateful-firewall-rules sfw_rule; interface-service { service-interface ms-2/3/0; } } }
user@host> show services service-sets statistics tcp Interface: ms-2/3/0 Service set: ss2 TCP open/close statistics: TCP first packet non-syn: 0 TCP first packet reset: 0 TCP first packet FIN: 0 TCP non syn discard: 0 TCP extension alloc fail: 0 TFO SYN with cookie request: 1 TFO SYN with cookie: 0 TFO SYN ACK with cookie: 0 TFO packets forwarded: 0 TFO packets dropped: 0 TFO packets stripped: 1
Usando NAT e TFO
Se o NAT estiver configurado no conjunto de serviços e estiver usando o TFO, você deve configurar o agrupamento de endereços em pares (APP). O APP permite que um endereço IP privado seja mapeado no mesmo endereço IP público de um pool de NAT para todas as suas sessões.
Se você não configurar o APP, o NAT pode dar um endereço IP diferente ao cliente a partir do mesmo pool de NAT do que o que ele enviou ao servidor antes. O servidor não reconhece o endereço IP, descarta a opção de TFO e responde com SYN ACK e os dados enviados pelo cliente não são reconhecidos. Portanto, embora a conexão seja bem sucedida e nenhum pacote seja perdido, o benefício do TFO é perdido. No entanto, se o cliente voltar com o mesmo endereço IP, o servidor o reconhece e reconhece os dados. Portanto, sempre habilite o APP com um alto valor de tempo limite de mapeamento com TFO.
Para configurar o APP:
Configuração do controle de fragmentação para interfaces de serviço MS-DPC e MS-PIC
Duas opções de configuração estão disponíveis para evitar o consumo excessivo de ciclos de CPU computacional em um PIC de serviços causado pelo manuseio de um grande número de pacotes fragmentados. Esse manuseio de fragmentos pode ser explorado em ataques DOS. A opção fragment-limit
estabelece um número máximo de fragmentos para um pacote. Quando esse número é excedido, o pacote é descartado. Especifica reassembly-timeout
o tempo máximo do recebimento dos primeiros e mais recentes fragmentos em um pacote. Quando o número é excedido, o pacote é descartado.
Para configurar o controle de fragmentação para interfaces de serviço MS-DPC e MS-PIC:
Operações pic de serviços de rastreamento
As operações de rastreamento rastreiam todas as operações de serviços adaptativos e as registram em um arquivo de log. As descrições de erro registradas fornecem informações detalhadas para ajudar você a resolver problemas mais rapidamente.
Por padrão, nenhum evento é rastreado. Se você incluir a traceoptions
declaração no [edit services adaptive-services-pics]
nível ou [edit services logging]
hierarquia, o comportamento de rastreamento padrão é o seguinte:
Eventos importantes estão registrados em um arquivo chamado
serviced
localizado no /var/log directory.Quando o arquivo atendido atinge 128 kilobytes (KB), ele é renomeado como serviced.0, depois serviced.2 e assim por diante, até que haja três arquivos de rastreamento. Em seguida, o arquivo de rastreamento mais antigo (serviced.2) é sobreescrito. (Para obter mais informações sobre como os arquivos de log são criados, consulte o System Log Explorer.)
Os arquivos de log só podem ser acessados pelo usuário que configura a operação de rastreamento.
Você não pode alterar o diretório (/var/log) em que os arquivos de rastreamento estão localizados. No entanto, você pode personalizar as outras configurações de arquivo de rastreamento, incluindo as seguintes declarações:
file filename <files number> <match regular-expression> <size size> <world-readable | no-world-readable>; flag { all; command-queued; config; handshake; init; interfaces; mib; removed-client; show; }
Você inclui essas declarações no [edit services adaptive-services-pics traceoptions]
nível ou [edit services logging traceoptions]
hierarquia.
Essas declarações são descritas nas seguintes seções:
- Configuração do nome de arquivo de log de serviços adaptativos
- Configurando o número e o tamanho dos arquivos de log de serviços adaptativos
- Configurando o acesso ao arquivo de log
- Configurando uma expressão regular para que as linhas sejam registradas
- Configuração das operações de rastreamento
Configuração do nome de arquivo de log de serviços adaptativos
Por padrão, o nome do arquivo que registra a saída de rastreamento é atendido. Você pode especificar um nome diferente, incluindo a file
declaração no [edit services adaptive-services-pics traceoptions]
nível da hierarquia ou [edit services logging traceoptions]
:
file filename;
Configurando o número e o tamanho dos arquivos de log de serviços adaptativos
Por padrão, quando o arquivo de rastreamento atinge 128 kilobytes (KB) em tamanho, ele é renomeado filenamecomo .0, depois filename.1, e assim por diante, até que haja três arquivos de rastreamento. Em seguida, o arquivo de rastreamento mais antigo (filename.2) é sobreescrito.
Você pode configurar os limites do número e do tamanho dos arquivos de rastreamento, incluindo as seguintes declarações no [edit services adaptive-services-pics traceoptions]
nível ou [edit services logging traceoptions]
hierarquia:
file <filename> files number size size;
Por exemplo, definir o tamanho máximo do arquivo para 2 MB e o número máximo de arquivos para 20. Quando o arquivo que recebe a saída da operação de rastreamento (filename) chega a 2 MB, filename é renomeado filename.0 e um novo arquivo chamado filename é criado. Quando o novo filename alcança 2 MB, filename.0 é renomeado filenamecomo .1 e filename é renomeado filename.0. Esse processo se repete até que haja 20 arquivos de rastreamento. Em seguida, o arquivo mais antigo (filename.19) é sobreescrito pelo mais novo arquivo (filename.0).
O número de arquivos pode ser de 2 a 1000 arquivos. O tamanho do arquivo de cada arquivo pode ser de 10 KB a 1 gigabyte (GB).
Configurando o acesso ao arquivo de log
Por padrão, os arquivos de log só podem ser acessados pelo usuário que configura a operação de rastreamento.
Para especificar que qualquer usuário pode ler todos os arquivos de log, inclua a file world-readable
declaração no [edit services adaptive-services-pics traceoptions]
nível da hierarquia ou [edit services logging traceoptions]
:
file <filename> world-readable;
Para definir explicitamente o comportamento padrão, inclua a file no-world-readable
declaração no nível da [edit services adaptive-services-pics traceoptions]
hierarquia ou [edit services logging traceoptions]
:
file <filename> no-world-readable;
Configurando uma expressão regular para que as linhas sejam registradas
Por padrão, a saída de operação de rastreamento inclui todas as linhas relevantes para os eventos logados.
Você pode refinar a saída incluindo a match
declaração no [edit services adaptive-services-pics traceoptions file filename]
nível da hierarquia ou [edit services logging traceoptions]
e especificando uma expressão regular (regex) a ser combinada:
file <filename> match regular-expression;
Configuração das operações de rastreamento
Por padrão, se a traceoptions
configuração estiver presente, apenas eventos importantes serão registrados. Você pode configurar as operações de rastreamento a serem registradas, incluindo as seguintes declarações no [edit services adaptive-services-pics traceoptions]
nível ou [edit services logging traceoptions]
hierarquia:
flag { all; configuration; routing-protocol; routing-socket; snmp; }
A Tabela 1 descreve o significado das bandeiras de rastreamento de serviços adaptativos.
Bandeira |
Descrição |
Configuração padrão |
---|---|---|
|
Trace todas as operações. |
Desligado |
|
Trace os eventos de enqueue de comando. |
Desligado |
|
Faça a leitura de log da configuração no nível de |
Desligado |
|
Trace eventos de aperto de mão. |
Desligado |
|
Trace os eventos de inicialização. |
Desligado |
|
Trace eventos de interface. |
Desligado |
|
Trace os eventos SNMP MIB da GGSN. |
Desligado |
|
Trace eventos de limpeza de clientes. |
Desligado |
|
Trace o serviço de comando CLI. |
Desligado |
Para exibir a extremidade do log, emita o comando do show log serviced | last
modo operacional:
[edit] user@host# run show log serviced | last