O protocolo TCP

Maio 2017

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 vindo da (ou com destino à) camada inferior do modelo (ou seja, o protocolo IP). Quando os dados são fornecidos ao protocolo IP, este encapsula-os em datagramas IP (‘datagrama’ é um nome genérico para uma mensagem enviada sem conexão e sem confirmação, como os pacotes IP), fixando o campo do protocolo em 6 (para saber que o protocolo ascendente é o TCP). O TCP é um protocolo orientado para a conexão, isto é, ele permite que duas máquinas se comuniquem entre elas, 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 protocolo TCP, os aplicativos podem se comunicar com segurança (pelo sistema de avisos de recepção do protocolo TCP), independentemente das camadas inferiores. Isto significa que os roteadores (que trabalham na camada da Internet) 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 (a que pede a conexão) chama-se cliente, enquanto que a máquina receptora se chama servidor. Dizemos, então, que estamos num 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 é, juntamos 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 à sua 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/demultiplex, 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:


Estas operações são realizadas graças ao conceito de portas (ou sockets), ou seja, é o 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:


012345678910111213141516171819202122232425262728293031
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.
As bandeiras (flags - 6x1 bit): representam informações suplementares.
URG: se esta bandeira estiver em 1, o pacote deve ser tratado com urgência.
ACK: se esta bandeira estiver em 1, o pacote representa um aviso de recepção.
PSH (PUSH): se esta bandeira estiver em 1, o pacote funciona de acordo com o método PUSH.
RST: se esta bandeira estiver em 1, a conexão é reiniciada.
SYN: a bandeira TCP SYN indica um pedido de estabelecimento de conexão.
FIM: se esta bandeira estiver em 1, a conexão é interrompida.
Janela (16 bits): campo que permite conhecer o número de bytes que o receptor quer receber, sem aviso de recepção.
Soma de controle (Checksum ou CRC): a soma de controle é realizada fazendo a 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 protocolo 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’) é 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.

Este 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 (porque também se trata de uma sincronização).

Este 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, incrementado de 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 (não se trata mais de um segmento de sincronização). 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, incrementado de 1:


Depois desta sequência com três trocas, as duas máquinas sincronizadas e a comunicação podem começar.

Observação: existe uma técnica de hacking, 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 uma 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 desta janela não é fixo. Na verdade, o servidor pode incluir nos seus avisos de recepção, armazenando 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 pode pedir para terminar a conexão assim como o servidor. 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. Depois disso, a máquina informa ao aplicativo que um segmento FIM foi recebido e envia um segmento FIN para outra máquina, que encerra a conexão.

Para mais informações sobre o protocolo TCP, leia RFC 793, que explica de maneira detalhada o protocolo RFC 793 original

Veja também


TCP protocol
TCP protocol
Protocolo TCP
Protocolo TCP
Das TCP Protokoll
Das TCP Protokoll
Le protocole TCP
Le protocole TCP
Il  protocollo TCP
Il protocollo TCP
Última modificação: 6 de abril de 2017 às 08:22 por Pedro.Saude.
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.