DCN - Protocolo de Controle de Transmissão

O protocolo de controle de transmissão (TCP) é um dos protocolos mais importantes do pacote de protocolos da Internet. É o protocolo mais amplamente utilizado para transmissão de dados em redes de comunicação como a Internet.

Características

  • TCP é um protocolo confiável. Ou seja, o receptor sempre envia uma confirmação positiva ou negativa sobre o pacote de dados ao remetente, de forma que o remetente sempre tenha uma pista clara sobre se o pacote de dados chegou ao destino ou se precisa reenviá-lo.

  • O TCP garante que os dados cheguem ao destino pretendido na mesma ordem em que foram enviados.

  • O TCP é orientado à conexão. O TCP requer que a conexão entre dois pontos remotos seja estabelecida antes de enviar os dados reais.

  • O TCP fornece verificação de erros e mecanismo de recuperação.

  • O TCP fornece comunicação ponta a ponta.

  • O TCP fornece controle de fluxo e qualidade de serviço.

  • O TCP opera no modo cliente / servidor ponto a ponto.

  • O TCP fornece servidor full duplex, ou seja, pode desempenhar funções de receptor e remetente.

Cabeçalho

O comprimento do cabeçalho TCP é mínimo de 20 bytes e máximo de 60 bytes.

  • Source Port (16-bits)  - Identifica a porta de origem do processo do aplicativo no dispositivo de envio.

  • Destination Port (16-bits) - Identifica a porta de destino do processo de aplicação no dispositivo receptor.

  • Sequence Number (32-bits) - Número de sequência de bytes de dados de um segmento em uma sessão.

  • Acknowledgement Number (32-bits)  - Quando o sinalizador ACK é definido, este número contém o próximo número de sequência do byte de dados esperado e funciona como uma confirmação dos dados anteriores recebidos.

  • Data Offset (4-bits)  - Este campo implica o tamanho do cabeçalho TCP (palavras de 32 bits) e o deslocamento dos dados no pacote atual em todo o segmento TCP.

  • Reserved (3-bits)  - Reservado para uso futuro e todos são definidos como zero por padrão.

  • Flags (1-bit each)

    • NS - O bit Nonce Sum é usado pelo processo de sinalização de Notificação de Congestionamento Explícito.

    • CWR - Quando um host recebe um pacote com o conjunto de bits ECE, ele configura as janelas de congestionamento reduzidas para reconhecer que o ECE recebeu.

    • ECE -Tem dois significados:

      • Se o bit SYN for definido como 0, então ECE significa que o pacote IP tem seu bit CE (experiência de congestionamento) definido.

      • Se o bit SYN for definido como 1, ECE significa que o dispositivo é compatível com ECT.

    • URG - Indica que o campo Ponteiro Urgente contém dados significativos e deve ser processado.

    • ACK- Indica que o campo de confirmação tem significância. Se ACK for limpo para 0, indica que o pacote não contém nenhum reconhecimento.

    • PSH - Quando definido, é uma solicitação para a estação receptora PUSH dados (assim que eles chegam) para o aplicativo receptor sem buffer.

    • RST - O sinalizador de redefinição tem os seguintes recursos:

      • É usado para recusar uma conexão de entrada.

      • É usado para rejeitar um segmento.

      • É usado para reiniciar uma conexão.

    • SYN - Este sinalizador é usado para configurar uma conexão entre hosts.

    • FIN- Este sinalizador é usado para liberar uma conexão e nenhum outro dado é trocado depois disso. Como os pacotes com sinalizadores SYN e FIN têm números de sequência, eles são processados ​​na ordem correta.

  • Windows Size  - Este campo é usado para controle de fluxo entre duas estações e indica a quantidade de buffer (em bytes) que o receptor alocou para um segmento, ou seja, quantos dados o receptor está esperando.

  • Checksum - Este campo contém a soma de verificação de Cabeçalho, Dados e Pseudo Cabeçalhos.

  • Urgent Pointer  - Ele aponta para o byte de dados urgente se o sinalizador URG estiver definido como 1.

  • Options  - Facilita opções adicionais que não são cobertas pelo cabeçalho regular. O campo de opção é sempre descrito em palavras de 32 bits. Se este campo contiver dados menores que 32 bits, o preenchimento é usado para cobrir os bits restantes para atingir o limite de 32 bits.

Endereçando

A comunicação TCP entre dois hosts remotos é feita por meio de números de porta (TSAPs). Os números das portas podem variar de 0 a 65535, que são divididos em:

  • Portas do sistema (0 - 1023)
  • Portas de usuário (1024 - 49151)
  • Portas privadas / dinâmicas (49152 - 65535)

Gerenciamento de Conexão

A comunicação TCP funciona no modelo Servidor / Cliente. O cliente inicia a conexão e o servidor a aceita ou rejeita. O handshaking de três vias é usado para gerenciamento de conexão.

Estabelecimento

O cliente inicia a conexão e envia o segmento com um número de sequência. O servidor o reconhece de volta com seu próprio número de sequência e ACK do segmento do cliente, que é um a mais do que o número de sequência do cliente. O cliente após receber o ACK de seu segmento, envia uma confirmação da resposta do servidor.

Lançamento

Tanto o servidor quanto o cliente podem enviar segmento TCP com sinalizador FIN definido como 1. Quando a extremidade receptora responde por ACKnowledging FIN, a direção da comunicação TCP é fechada e a conexão liberada.

Gerenciamento de largura de banda

O TCP usa o conceito de tamanho de janela para acomodar a necessidade de gerenciamento de largura de banda. O tamanho da janela informa ao remetente na extremidade remota, o número de segmentos de bytes de dados que o receptor nesta extremidade pode receber. O TCP usa a fase de início lento usando o tamanho da janela 1 e aumenta o tamanho da janela exponencialmente após cada comunicação bem-sucedida.

Por exemplo, o cliente usa janelas de tamanho 2 e envia 2 bytes de dados. Quando a confirmação deste segmento é recebida, o tamanho da janela é dobrado para 4 e, em seguida, o segmento enviado terá 4 bytes de dados. Quando a confirmação do segmento de dados de 4 bytes é recebida, o cliente define o tamanho das janelas para 8 e assim por diante.

Se uma confirmação for perdida, ou seja, dados perdidos na rede de trânsito ou se recebeu NACK, o tamanho da janela é reduzido à metade e a fase de início lento começa novamente.

Controle de erros e controle de fluxo

O TCP usa números de porta para saber qual processo de aplicativo precisa para entregar o segmento de dados. Junto com isso, ele usa números de sequência para se sincronizar com o host remoto. Todos os segmentos de dados são enviados e recebidos com números de sequência. O Remetente sabe qual último segmento de dados foi recebido pelo Receptor quando ele obtém ACK. O receptor sabe sobre o último segmento enviado pelo remetente, referindo-se ao número de sequência do pacote recebido recentemente.

Se o número de sequência de um segmento recebido recentemente não corresponder ao número de sequência que o receptor esperava, ele será descartado e o NACK será enviado de volta. Se dois segmentos chegarem com o mesmo número de sequência, o valor do carimbo de data / hora TCP será comparado para tomar uma decisão.

Multiplexing

A técnica para combinar dois ou mais fluxos de dados em uma sessão é chamada de Multiplexação. Quando um cliente TCP inicializa uma conexão com o Servidor, sempre se refere a um número de porta bem definido que indica o processo de aplicação. O próprio cliente usa um número de porta gerado aleatoriamente a partir de pools de números de portas privadas.

Usando a multiplexação TCP, um cliente pode se comunicar com vários processos de aplicativos diferentes em uma única sessão. Por exemplo, um cliente solicita uma página da web que, por sua vez, contém diferentes tipos de dados (HTTP, SMTP, FTP etc.), o tempo limite da sessão TCP é aumentado e a sessão é mantida aberta por mais tempo para que a sobrecarga do handshake de três vias possa ser evitado.

Isso permite que o sistema do cliente receba várias conexões em uma única conexão virtual. Essas conexões virtuais não são boas para servidores se o tempo limite for muito longo.

Controle de congestão

Quando uma grande quantidade de dados é fornecida ao sistema que não é capaz de manipulá-los, ocorre um congestionamento. O TCP controla o congestionamento por meio do mecanismo Window. O TCP define um tamanho de janela informando à outra extremidade quanto segmento de dados enviar. O TCP pode usar três algoritmos para controle de congestionamento:

  • Aumento aditivo, diminuição multiplicativa

  • Início lento

  • Tempo limite de reação

Gerenciamento de cronômetro

O TCP usa diferentes tipos de temporizador para controlar e gerenciar várias tarefas:

Timer Keep-alive:

  • Este cronômetro é usado para verificar a integridade e validade de uma conexão.

  • Quando o tempo de keep-alive expira, o host envia uma investigação para verificar se a conexão ainda existe.

Temporizador de retransmissão:

  • Este cronômetro mantém a sessão com estado dos dados enviados.

  • Se a confirmação dos dados enviados não for recebida dentro do tempo de Retransmissão, o segmento de dados é enviado novamente.

Persistir cronômetro:

  • A sessão TCP pode ser pausada por qualquer um dos hosts enviando Window Size 0.

  • Para retomar a sessão, um host precisa enviar Window Size com algum valor maior.

  • Se esse segmento nunca atingir a outra extremidade, ambas as extremidades podem esperar um pelo outro por um tempo infinito.

  • Quando o cronômetro de persistência expira, o host reenvia o tamanho da janela para informar a outra extremidade.

  • Persist Timer ajuda a evitar bloqueios na comunicação.

Tempo de espera:

  • Depois de liberar uma conexão, qualquer um dos hosts espera por um tempo de espera programada para encerrar a conexão completamente.

  • Isso é para garantir que a outra extremidade tenha recebido a confirmação de sua solicitação de encerramento de conexão.

  • O tempo limite pode ser de no máximo 240 segundos (4 minutos).

Crash Recovery

TCP é um protocolo muito confiável. Ele fornece um número de sequência para cada byte enviado no segmento. Ele fornece o mecanismo de feedback, ou seja, quando um host recebe um pacote, ele é vinculado ao ACK daquele pacote com o próximo número de sequência esperado (se não for o último segmento).

Quando um servidor TCP falha na comunicação intermediária e reinicia seu processo, ele envia uma transmissão TPDU para todos os seus hosts. Os hosts podem então enviar o último segmento de dados que nunca foi não reconhecido e continuar.