Curso de Redes – Protocolo TCP (Transmission Control Protocol)

Protocolo TCP (Transmission Control Protocol)

O Protocolo TCP, que pertence à camada de Transporte juntamente com o UDP, fornece um serviço de entrega de pacotes confiável e orientado a conexão.

Dizemos que um serviço é orientado à conexão quando duas aplicações que estejam usando o protocolo (por exemplo, TCP) para se comunicarem entre si – normalmente um cliente e um servidor – necessitem estabelecer uma conexão uma com a outra antes que possam trocar dados.

Funções do Protocolo TCP

O protocolo TCP é um tanto complexo, e seu estudo será realizado ao longo de diversas lições. Para simplificar um pouco o processo, listamos a seguir as principais funções realizadas pelo TCP:

  • Estabelecer, Manter e Terminar Conexões
  • Fornecer Confiabilidade
  • Fornecer Controle de Fluxo
  • Multiplexação
  • Endereçamento de Aplicações
  • Controle de Congestionamento

Claramente podemos ver que o protocolo TCP é extremamente importante – não é à toa que a pilha TCP/IP o tem em seu nome. Vamos começar seu estudo conhecendo os campos que formam o cabeçalho de um segmento TCP e suas respectivas funções.

Cabeçalho TCP

Um segmento TCP é encapsulado em um datagrama IP, conforme podemos ver na figura a seguir:

Encapsulamento TCP - CUrso de Redes

E na figura a seguir podemos ver o formato completo de um cabeçalho TCP, cujo tamanho normal é de 20 bytes, conforme mostrado na ilustração anterior (mas pode ser maior, se houverem opções presentes):

Campos do Cabeçalho TCP - Curso de Redes

Segue uma descrição sucinta de cada um dos campos no cabeçalho TCP:

  • Número de Porta de Origem: número que identifica a aplicação (processo) que envia os dados
  • Número de Porta de Destino: número que identifica a aplicação (processo) que deve receber os dados
  • Número de Sequência: número que identifica o byte em um fluxo de dados do transmissor para o receptor.
    Se considerarmos o fluxo de bytes em uma direção entre dois hosts, o TCP identifica cada byte com um número de sequência. O número de sequência possui 32 bits de tamanho, com valores possíveis entre 0 e 232 – 1.
    Quando uma nova conexão é estabelecida, a flag SYN é ativada. Neste caso, o campo número de sequência possui o “número de sequência inicial” (ISN, initial sequence number), o qual é escolhido pelo host para esta conexão em particular. O número de sequência do primeiro byte de dados que será enviado será o ISN mais um.
    Como cada byte que é transmitido é numerado, o número de confirmação (acknowledgment) contém o próximo número de sequência que o host que enviou a confirmação espera receber. Portanto, é o número de sequência mais 1 do último byte de dados que foi recebido com sucesso.
  • Número de Confirmação: Se a flag ACK estiver ativada o valor deste campo será o próximo número de sequência que o destinatário espera receber. Assim é confirmada a recepção de todos os bytes anteriores, se houverem. A exceção é o primeiro ACK enviado pelos hosts da conexão, que confirma o número de sequência inicial (ISN) de cada um.
  • Comprimento do Cabeçalho (Data offset): Tamanho do cabeçalho TCP em palavras de 32 bits. O tamanho mínimo é de 5 palavras (20 bytes, sem opções) e o tamanho máximo é de 15 palavras (60 bytes, com opções). Indica o ponto de início dos dados a partir do início do segmento TCP.
  • Reservado (3 bits): Para uso futuro. Consiste atualmente na sequência 000.
  • Flags: ECN – Explicit Congestion Notification / Notificação Explícita de Congestionamento, adicionados no RFC 3168 (Cada flag usa 1 bit):
    • NS – Campo opcional adicionado ao ECN para proteger contra dissimulação acidental ou maliciosa de pacotes marcados do transmissor
    • CWR – Congestion Window Reduced, enviada pelo host transmissor para indicar que recebeu um segmento TCP com o flag ECE ativado e respondeu no mecanismo de controle de congestionamento
    • ECE – ECN-Echo. Sua função depende do valor da flag SYN. Se a flag SYN estiver ativada, então o parceiro na conexão TCP é compatível com ECN; se a flag SYN estiver desativada, um pacote com a flag “congestinamento experimentado” no datagrama IP foi recebido durante a transmissão normal
  • Flags: Bits de Controle (Cada flag usa 1 bit):
    • URG – Quando ativado, indica que o Campo Ponteiro de Urgente é válido e o recurso Transferência de dados com prioridade foi invocado
    • ACK – Bit de Confirmação. Quando ativado, indica que o segmento carrega uma mensagem de confirmação e que o valor do campo Número de Confirmação é válido, e carrega o próximo número de sequência esperado pelo host.
    • PSH – Bit de Push. Quando ativado, indica que o transmissor do segmento usa o recurso TCP Push, o qual requisita que os dados no segmento sejam imediatamente transmitidos à aplicação no dispositivo de destino
    • RST – Bit de Reset. Quando ativado indica que o transmissor encontrou um problema e deseja resetar a conexão.
    • SYN – Bit de Sincronismo. Requisição para sincronizar números de sequência e estabelecer uma conexão entre dois hosts. O campo Número de Sequência contém o número de sequência inicial (ISN) do host que transmite o segmento.
    • FIN – Bit de Finalização. Quando ativado indica que o transmissor do segmento requisita que a conexão seja encerrada.
  • Tamanho da Janela: O tamanho da janela de recepção indica o número de bytes que o transmissor deste segmento quer aceitar do host de destino, em cada transmissão. Seu valor é também o tamanho da janela de envio do host que recebe este segmento.
  • Checksum: Usado para verificação de erros do cabeçalho e dos dados transmitidos. Protege o segmento TCP contra erros de transmissão e de entrega dos dados.
  • Ponteiro de Urgente: Usado em conjunto com o flag URG para transferência de dados com prioridade. Contém o número de sequência do último byte de dados urgentes.
  • Opções: Campo opcional, que representa informações não cobertas pelos demais campos do cabeçalho TCP. Uma das opções mais comuns é o MSS (Maximum Segment Size). Se o valor do campo de opções não for um múltiplo de 32, então ele será preenchido com zeros (padding) até que seja um valor múltiplo de 32 bits.

Confiabilidade

O protocolo TCP fornece confiabilidade (“reliability”) a uma conexão por meio dos seguintes processos:

  • O TCP divide os dados recebidos da camada de aplicação em blocos de tamanho adequado para envio, chamados de segmentos. Quando um segmento é enviado, um timer é ativado, e o transmissor espera o recebimento de uma mensagem de confirmação do destinatário do segmento. Caso a confirmação não seja recebida antes do timer expirar, o segmento é considerado perdido e então será retransmitido.
  • Portanto, quando um host recebe um pacote de dados TCP, ele envia uma confirmação para o transmissor.
  • O TCP no host de destino pode reordenar os segmentos caso cheguem fora de ordem (já que datagramas IP podem chegar fora de ordem, e segmentos TCP são enviados em datagramas IP). Assim, os dados são repassados na ordem correta à aplicação que os irá processar.
  • O protocolo TCP utiliza um checksum que envolve o cabeçalho TCP e os dados transmitidos. Caso um segmento recebido possua um checksum inválido, o segmento será descartado e não será enviada a mensagem de confirmação para o transmissor.
  • Uma de suas principais funções é o controle de fluxo. Um host receptor permite apenas o envio de dados na medida em que seu buffer suporte.
  • Pacotes duplicados são detectados e descartados pelo TCP.

Em resumo, o protocolo TCP fornece um serviço orientado a conexão, confiável, na camada de transporte da pilha TCP/IP. Os dados são empacotados em unidades denominadas segmentos, e as mensagens enviadas recebem uma confirmação de recebimento, além de serem reordenadas no host de destino, que também verifica a ocorrência de erros de transmissão. Caso haja algum erro, os dados são retransmitidos e, caso hajam segmentos duplicados, são descartados. Além disso, o protocolo TCP permite enviar dados de múltiplas aplicações multiplexadas, e usa o mecanismo de portas de comunicação para determinar a qual aplicação enviar e entregar os dados transmitidos.

Nas próximas lições vamos estudar mais a fundo o funcionamento dos mecanismos de Controle de Fluxo, Controle de Erros, Estabelecimento e Terminação de Conexões, e outros relativos ao protocolo TCP.

Próximo: Estabelecendo uma conexão TCP entre dois hosts

Sobre Fábio dos Reis (1363 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 25 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Unix, Linux e Open Source em geral, adora Eletrônica e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.
Contato: Website

Escreva um comentário

Seu e-mail não será divulgado


*