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 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.
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.
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.
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.
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 |
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.
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.
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):
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