O protocolo TCP

O Protocolo de Controle de Transmissão, conhecido pela sigla TCP, integra o grupo de protocolos de comunicação que dão suporte às atividades de usuários na internet. Sua função é basicamente de verificação de erros nos dados transmitidos. Nesse artigo, saiba mais sobre esse importante protocolo.

O que é o protocolo TCP

O TCP (Transmission Control Protocol - Protocolo de Controle de Transmissão) é um dos principais protocolos da camada de transporte do modelo TCP/IP. Ele permite gerenciar os dados originados ou destinados ao protocolo IP) Dados fornecidos ao protocolo IP são encapsulados em datagramas IP - datagrama é um nome genérico para uma mensagem enviada sem conexão e sem confirmação, como os pacotes IP. Com isso, o campo do protocolo é fixado em 6 para que se saiba que o protocolo ascendente é o TCP. O TCP é um protocolo orientado para a conexão, isto é, permite que duas máquinas se comuniquem, além de controlar o estado da transmissão.

Como funciona o protocolo TCP

As características do protocolo TCP são entregar ordenadamente os datagramas provenientes do protocolo IP, verificar a onda de dados para evitar uma saturação da rede, formatar os dados em segmentos de comprimento variável para 'entregá-los' ao protocolo IP, permitir o multiplex dos dados, ou seja, fazer circular simultaneamente as informações de fontes distintas na mesma linha e permitir o início e o fim de uma comunicação de maneira correta.

Qual é a utilidade do protocolo TCP

Graças ao sistema de avisos de recepção do protocolo TCP, os aplicativos podem se comunicar com segurança, independentemente das camadas inferiores. Isso significa que os roteadores têm como papel fundamental o encaminhamento dos dados em forma de datagramas, sem se preocuparem com o controle dos dados, pois este é realizado pelo protocolo TCP.

Durante uma comunicação através do protocolo TCP, as duas máquinas devem estabelecer uma conexão. A máquina emissora (que pede a conexão) chama-se cliente enquanto a máquina receptora é o servidor. Dizemos então que estamos em um ambiente cliente-servidor. As máquinas em tal ambiente se comunicam em modo conectado, ou seja, a comunicação é feita nos dois sentidos.

Para permitir o bom desenvolvimento da comunicação e de todos os controles que a acompanham, os dados são encapsulados, isto é, junto ao pacote de dados vai um cabeçalho que sincroniza as transmissões e assegura a sua recepção. Outra particularidade do TCP é poder controlar o débito dos dados graças à capacidade de emitir mensagens de dimensão variável. Estas mensagens são chamadas de segmentos.

Como funciona o circuito multiplex

O TCP permite efetuar uma tarefa importante: o multiplex, ou seja, fazer transitar, na mesma linha, dados de diversos aplicativos ou, em outras palavras, pôr em série as informações que chegam paralelamente:

Essas operações são realizadas graças ao conceito de portas, que diz respeito ao número associado a um aplicativo particular que, junto com um endereço IP, determina, de maneira única, um aplicativo que roda em uma determinada máquina.

Qual o formato dos dados em um segmento TCP

Um segmento TCP é construído assim:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
Porta Fonte Porta de destino

Número de ordem

Número de aviso de recepção
Defasagem de dados Reservada URG ACK PSH RST SYN FIN Janela

Soma de controle

Ponteiro de emergência
Opções Preenchimento

Dados

Qual é o significado dos diferentes campos

  • Porta Fonte (16 bits): porta relativa ao aplicativo em andamento na máquina-fonte.
  • Porta de Destino (16 bits): porta relativa ao aplicativo na máquina de destino.
  • Número de ordem (32 bits): quando a bandeira SYN é 0, o número de ordem é o da primeira palavra do segmento em andamento. Quando SYN é 1, o número de ordem será igual ao número de ordem inicial utilizado para sincronizar os números de sequência (ISN).
  • Número de aviso de recepção (32 bits): o número de aviso de recepção, também chamado de número de pagamento, corresponde ao número de ordem do próximo segmento esperado, e não o número do último segmento recebido.
  • Defasagem dos dados (4 bits): localiza o início dos dados no pacote. Aqui, a defasagem é essencial porque o campo de opções é de dimensão variável.
  • Reservada (6 bits): campo não usado atualmente, mas previsto para o futuro.
  • Bandeiras (flags - 6x1 bit): representam informações suplementares.
  • URG: se essa bandeira estiver em 1, o pacote deve ser tratado com urgência.
  • ACK: se essa bandeira estiver em 1, o pacote representa um aviso de recepção.
  • PSH (PUSH): se essa bandeira estiver em 1, o pacote funciona de acordo com o método PUSH.
  • RST: se essa bandeira estiver em 1, a conexão é reiniciada.
  • SYN: essa bandeira indica um pedido de estabelecimento de conexão.
  • FIM: se essa bandeira estiver em 1, a conexão é interrompida.
  • Janela (16 bits): permite conhecer o número de bytes que o receptor quer receber, sem aviso de recepção.
  • Soma de controle (checksum ou CRC): realizada através da soma dos campos de dados do cabeçalho, para poder verificar a sua integridade.
  • Ponteiro de emergência (16 bits): indica o número de ordem a partir do qual a informação se torna urgente.
  • Opções (dimensão variável): opções diversas.
  • Preenchimento: preenche-se o espaço que fica após as opções com zeros, para ter um comprimento múltiplo de 32 bits.

Como é garantida a segurança das transferências

O protocolo TCP garante a transferência dos dados de maneira correta embora utilize o protocolo IP, que não integra nenhum controle de entrega de datagrama. Na realidade, o TCP possui um sistema de aviso de recepção seguro, correto e mútuo dos dados.

Durante a emissão de um segmento, um número de ordem (também chamado de número de sequência) é a ele associado. Na recepção de um segmento de dado, a máquina receptora retorna um segmento de dado cuja bandeira ACK é 1 (para indicar que se trata de um aviso de recepção), acompanhado de um número de aviso de recepção igual ao número de ordem precedente:

Além disso, graças a um cronômetro ativado na recepção de um segmento da máquina emissora, o segmento é reenviado quando o tempo fixado esgotar, porque, neste caso, a máquina emissora considera que o segmento se perdeu:

Contudo, se o segmento não se perder e chegar ao seu destino, a máquina receptora saberá, graças ao número de ordem, que se trata de uma cópia e manterá apenas o último segmento que chegou ao destino.

Como estabelecer uma conexão

Já que este processo de comunicação, feito graças a uma emissão de dados e a um aviso de recepção, se baseia em um número de ordem, é necessário que as máquinas emissoras e receptoras (cliente e servidor) conheçam o número de sequência inicial da outra máquina.

Frequentemente, o estabelecimento da conexão entre dois aplicativos é feito de acordo com o seguinte esquema: as portas TCP devem estar abertas, o aplicativo no servidor é passivo, ou seja, está à escuta, esperando uma conexão, e o aplicativo no cliente faz um pedido de conexão no servidor cujo aplicativo se encontra em uma abertura passiva.

Diz-se que o aplicativo do cliente está em abertura ativa. Então, as duas máquinas deverão sincronizar suas sequências graças a um mecanismo comumente chamado de three ways handshake (aperto de mãos em três tempos), que também encontramos no fechamento da sessão.

Esse diálogo inicia a comunicação e se desenvolve em três tempos, como o próprio nome indica. No início, a máquina emissora (cliente) transmite um segmento cuja bandeira SYN é 1, para mostrar que se trata de um segmento para a sincronização, com um número de ordem N, chamado número de ordem inicial do cliente. A seguir, a máquina receptora (servidor) recebe o segmento inicial do cliente e envia-lhe um aviso de recepção, isto é, um segmento cuja bandeira ACK é 1 e a bandeira SYN é 1, pois também se trata de uma sincronização.

Esse segmento contém o número de ordem da máquina do servidor, que é o número de ordem inicial do cliente. O principal campo deste segmento é o de aviso de recepção, que contém o número de ordem inicial do cliente mais 1. Para concluir, o cliente transmite ao servidor um aviso de recepção, ou seja, um segmento cuja bandeira ACK é 1 e a bandeira SYN é 0. Seu número de ordem será incrementado e o número de aviso de recepção representa o número de ordem inicial do servidor mais 1:

Depois dessa sequência de três trocas, as duas máquinas estão sincronizadas e a comunicação pode começar.

Observação: existe uma técnica de hackeamento chamada spoofing IP (falsificação do IP), que corrompe esta relação de aprovação com fins maliciosos.

Como se desenvolve o método da janela deslizante

Em muitos casos, é possível limitar o número de avisos de recepção, a fim de descongestionar a rede, fixando um número de sequência na extremidade quando um aviso de recepção é necessário. Na verdade, este número é armazenado no campo Janela do item TCP/IP. Efetivamente, este método é chamado de método da janela deslizante porque, de certa maneira, definimos um trecho de sequências que não tem necessidade de aviso de recepção e, este trecho, se desloca à medida que os avisos de recepção são recebidos:

Além disso, o tamanho dessa janela não é fixo. Na verdade, o servidor pode incluir nos seus avisos de recepção, armazenados no campo da janela, o tamanho da janela que lhe parece mais adequado. Assim, quando o aviso de recepção indica um pedido de aumento da janela, o cliente vai mover a borda direita da mesma:

Por outro lado, no caso de uma diminuição, o cliente não vai mover a borda direita da janela para a esquerda, mas esperar que a borda esquerda avance (com a chegada dos avisos de recepção):

Como finalizar uma conexão

O cliente e o servidor podem pedir para que uma conexão seja encerrada. O seu fim é feito da seguinte maneira: uma das máquinas envia um segmento com a bandeira FIN em 1 e o aplicativo fica em estado de espera de fim, ou seja, ela recebe o segmento em curso e ignora os seguintes.

Depois da recepção deste segmento, a outra máquina envia um aviso de recepção com a bandeira FIM em 1 e continua a expedir os segmentos em curso. Por fim, a máquina informa ao aplicativo que um segmento FIM foi recebido e envia um segmento FIM para outra máquina, encerrando a conexão.

Foto: © funtap - 123RF.com

Nosso conteúdo é produzido em colaboração com especialistas em tecnologia da informação sob o comando de Jean-François Pillou, fundador do CCM.net. CCM é um site sobre tecnologia líder em nível internacional e está disponível em 11 idiomas.
Este documento, intitulado 'O protocolo TCP', está disponível sob a licença Creative Commons. Você pode copiar e/ou modificar o conteúdo desta página com base nas condições estipuladas pela licença. Não se esqueça de creditar o CCM (br.ccm.net) ao utilizar este artigo.

Assine nossa newsletter!

Assine nossa newsletter!
Junte-se à comunidade