Curso de Redes - Protocolo TCP (Transmission Control Protocol)
Início » Redes de Computadores » Curso de Redes – Protocolo TCP (Transmission Control Protocol)
Postado Em 12/10/2015 [data do post] por Fábio dos Reis [autor do post] em Redes de Computadores [categoria do post]
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
Endereçamento de Aplicações
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.
Um segmento TCP é encapsulado em um datagrama IP, conforme podemos ver na figura a seguir:
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):
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.
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.