TCP vs UDP: Desmistificando o debate entre confiabilidade e eficiência

Hoje, vamos começar focando no TCP. Anteriormente, no capítulo sobre camadas, mencionamos um ponto importante. Na camada de rede e abaixo, o foco está mais em conexões entre hosts, o que significa que seu computador precisa saber onde outro computador está para se conectar a ele. No entanto, a comunicação em uma rede geralmente é entre processos, e não entre máquinas. Portanto, o protocolo TCP introduz o conceito de porta. Uma porta pode ser ocupada por apenas um processo, o que permite a comunicação direta entre processos de aplicativos em execução em hosts diferentes.

A função da camada de transporte é fornecer serviços de comunicação direta entre processos de aplicação executados em hosts diferentes, sendo também conhecida como protocolo de ponta a ponta. A camada de transporte oculta os detalhes essenciais da rede, permitindo que o processo de aplicação veja como se houvesse um canal de comunicação lógico de ponta a ponta entre as duas entidades da camada de transporte.

TCP significa Protocolo de Controle de Transmissão e é conhecido como um protocolo orientado a conexão. Isso significa que, antes que um aplicativo possa começar a enviar dados para o outro, os dois processos precisam realizar um handshake. O handshake é um processo logicamente conectado que garante a transmissão confiável e a recepção ordenada de dados. Durante o handshake, uma conexão é estabelecida entre os hosts de origem e destino por meio da troca de uma série de pacotes de controle e do acordo sobre alguns parâmetros e regras para garantir a transmissão bem-sucedida dos dados.

O que é TCP? (Mylinking'sConexão de redeeCorretor de Pacotes de Redepodia processar pacotes TCP ou UDP)
O TCP (Transmission Control Protocol) é um protocolo de comunicação da camada de transporte orientado a conexão, confiável e baseado em fluxo de bytes.

Orientado para a conexãoOrientado a conexão significa que a comunicação TCP é ponto a ponto, de ponta a ponta, diferentemente do UDP, que pode enviar mensagens para vários hosts ao mesmo tempo, portanto, a comunicação ponto a ponto não é possível.
ConfiávelA confiabilidade do TCP garante que os pacotes sejam entregues de forma confiável ao destinatário, independentemente das alterações no link de rede, o que torna o formato de pacote do protocolo TCP mais complexo do que o do UDP.
Baseado em fluxo de bytesA natureza do TCP, baseada em fluxo de bytes, permite a transmissão de mensagens de qualquer tamanho e garante a ordem das mensagens: mesmo que a mensagem anterior não tenha sido totalmente recebida, e mesmo que os bytes subsequentes tenham sido recebidos, o TCP não os entregará à camada de aplicação para processamento e descartará automaticamente os pacotes duplicados.
Uma vez que o host A e o host B tenham estabelecido uma conexão, o aplicativo só precisa usar a linha de comunicação virtual para enviar e receber dados, garantindo assim a transmissão de dados. O protocolo TCP é responsável por controlar tarefas como o estabelecimento, a desconexão e a manutenção da conexão. Deve-se notar que, aqui, quando dizemos que a linha virtual se refere apenas ao estabelecimento da conexão, o protocolo TCP apenas indica que as duas partes podem iniciar a transmissão de dados e garantir a confiabilidade dos dados. O roteamento e os nós de transporte são gerenciados pelos dispositivos de rede; o protocolo TCP em si não se preocupa com esses detalhes.

Uma conexão TCP é um serviço full-duplex, o que significa que o host A e o host B podem transmitir dados em ambas as direções em uma conexão TCP. Ou seja, os dados podem ser transferidos entre o host A e o host B em um fluxo bidirecional.

O TCP armazena temporariamente dados no buffer de envio da conexão. Esse buffer de envio é um dos caches configurados durante o handshake de três vias. Posteriormente, o TCP enviará os dados do cache de envio para o cache de recebimento do host de destino no momento apropriado. Na prática, cada par terá um cache de envio e um cache de recebimento, como mostrado aqui:

TCP-UDP

O buffer de envio é uma área de memória mantida pela implementação do TCP no lado do remetente, usada para armazenar temporariamente os dados a serem enviados. Quando o handshake de três vias é realizado para estabelecer uma conexão, o cache de envio é configurado e usado para armazenar dados. O buffer de envio é ajustado dinamicamente de acordo com o congestionamento da rede e o feedback do receptor.

Um buffer de recebimento é uma área de memória mantida pela implementação TCP no lado receptor, usada para armazenar temporariamente os dados recebidos. O TCP armazena os dados recebidos no cache de recebimento e aguarda que a aplicação superior os leia.

Note que o tamanho do cache de envio e do cache de recebimento é limitado; quando o cache está cheio, o TCP pode adotar algumas estratégias, como controle de congestionamento, controle de fluxo, etc., para garantir a transmissão confiável de dados e a estabilidade da rede.

Em redes de computadores, a transmissão de dados entre hosts é realizada por meio de segmentos. Mas o que é um segmento de pacote?

O TCP cria um segmento TCP, ou segmento de pacote, dividindo o fluxo de entrada em partes e adicionando cabeçalhos TCP a cada parte. Cada segmento só pode ser transmitido por um período limitado de tempo e não pode exceder o Tamanho Máximo do Segmento (MSS). Em sua transmissão, um segmento de pacote passa pela camada de enlace. A camada de enlace possui uma Unidade Máxima de Transmissão (MTU), que é o tamanho máximo de pacote que pode passar pela camada de enlace de dados. A unidade máxima de transmissão geralmente está relacionada à interface de comunicação.

Qual é, então, a diferença entre MSS e MTU?

Em redes de computadores, a arquitetura hierárquica é muito importante porque leva em consideração as diferenças entre os diversos níveis. Cada camada tem um nome diferente; na camada de transporte, os dados são chamados de segmento, e na camada de rede, os dados são chamados de pacote IP. Portanto, a Unidade Máxima de Transmissão (MTU) pode ser entendida como o tamanho máximo de um pacote IP que pode ser transmitido pela camada de rede, enquanto o Tamanho Máximo do Segmento (MSS) é um conceito da camada de transporte que se refere à quantidade máxima de dados que pode ser transmitida por um pacote TCP de uma só vez.

Note que, quando o Tamanho Máximo do Segmento (MSS) for maior que a Unidade Máxima de Transmissão (MTU), a fragmentação IP será realizada na camada de rede, e o TCP não dividirá os dados maiores em segmentos adequados ao tamanho da MTU. Haverá uma seção na camada de rede dedicada à camada IP.

estrutura do segmento de pacote TCP
Vamos explorar o formato e o conteúdo dos cabeçalhos TCP.

Segmento TCP

Número de sequênciaUm número aleatório gerado pelo computador no momento do estabelecimento da conexão TCP é usado como valor inicial. Esse número de sequência é enviado ao destinatário por meio do pacote SYN. ​​Durante a transmissão de dados, o remetente incrementa o número de sequência de acordo com a quantidade de dados enviados. O destinatário verifica a ordem dos dados com base no número de sequência recebido. Caso os dados estejam fora de ordem, o destinatário os reordena para garantir a ordem correta.

Número de confirmaçãoEste é um número de sequência usado no TCP para confirmar o recebimento de dados. Ele indica o número de sequência dos próximos dados que o remetente espera receber. Em uma conexão TCP, o receptor determina quais dados foram recebidos com sucesso com base no número de sequência do segmento do pacote de dados recebido. Quando o receptor recebe os dados com sucesso, ele envia um pacote ACK ao remetente, que contém o número de confirmação. Após receber o pacote ACK, o remetente pode confirmar que os dados foram recebidos com sucesso.

Os bits de controle de um segmento TCP incluem o seguinte:

bit ACKQuando este bit é 1, significa que o campo de resposta de confirmação é válido. O TCP especifica que este bit deve ser definido como 1, exceto para pacotes SYN, quando a conexão é estabelecida inicialmente.
Bit RSTQuando este bit é 1, indica que há uma exceção na conexão TCP e a conexão deve ser forçada a ser desconectada.
bit SYNQuando este bit é definido como 1, significa que a conexão deve ser estabelecida e o valor inicial do número de sequência é definido no campo de número de sequência.
bit FINQuando este bit é 1, significa que nenhum dado adicional será enviado no futuro e a conexão é desejada.
As diversas funções e características do TCP estão incorporadas na estrutura dos segmentos de pacotes TCP.

O que é UDP? (Mylinking's)Conexão de redeeCorretor de Pacotes de Rede(Poderia processar pacotes TCP ou UDP)
O Protocolo de Datagrama do Usuário (UDP) é um protocolo de comunicação sem conexão. Comparado ao TCP, o UDP não oferece mecanismos de controle complexos. O protocolo UDP permite que os aplicativos enviem pacotes IP encapsulados diretamente, sem estabelecer uma conexão. Quando o desenvolvedor opta por usar o UDP em vez do TCP, o aplicativo se comunica diretamente com o IP.

O nome completo do protocolo UDP é User Datagram Protocol, e seu cabeçalho possui apenas oito bytes (64 bits), sendo bastante conciso. O formato do cabeçalho UDP é o seguinte:

Segmento UDP

Portas de destino e de origemSua principal função é indicar a qual processo o UDP deve enviar pacotes.
Tamanho do pacoteO campo de tamanho do pacote contém o tamanho do cabeçalho UDP mais o tamanho dos dados.
Soma de verificaçãoProjetado para garantir a entrega confiável de cabeçalhos e dados UDP, o checksum tem a função de detectar se ocorreu algum erro ou corrupção durante a transmissão de um pacote UDP, assegurando assim a integridade dos dados.

Diferenças entre TCP e UDP no MylinkingConexão de redeeCorretor de Pacotes de Redepodia processar pacotes TCP ou UDP
TCP e UDP diferem nos seguintes aspectos:

TCP vs UDP

ConexãoO TCP é um protocolo de transporte orientado a conexão que exige que uma conexão seja estabelecida antes que os dados possam ser transferidos. O UDP, por outro lado, não exige uma conexão e pode transferir dados imediatamente.

Objeto de serviçoO TCP é um serviço ponto a ponto, ou seja, uma conexão possui apenas dois pontos de extremidade para se comunicarem. Já o UDP suporta comunicação interativa ponto a ponto, ponto a muitos e muitos a muitos, podendo se comunicar com múltiplos hosts simultaneamente.

ConfiabilidadeO TCP oferece o serviço de entrega de dados de forma confiável, garantindo que os dados estejam livres de erros, sem perdas, não duplicados e cheguem sob demanda. O UDP, por outro lado, faz o possível, mas não garante a entrega confiável. O UDP pode sofrer com perda de dados e outros problemas durante a transmissão.

Controle de congestionamento, controle de fluxoO TCP possui mecanismos de controle de congestionamento e controle de fluxo, que podem ajustar a taxa de transmissão de dados de acordo com as condições da rede para garantir a segurança e a estabilidade da transmissão de dados. O UDP não possui mecanismos de controle de congestionamento e controle de fluxo; mesmo que a rede esteja muito congestionada, ele não ajustará a taxa de envio do UDP.

Cabeçalho superiorO TCP possui um cabeçalho longo, tipicamente de 20 bytes, que aumenta quando campos de opção são utilizados. O UDP, por outro lado, possui um cabeçalho fixo de apenas 8 bytes, portanto, o UDP tem uma sobrecarga de cabeçalho menor.

TCP vs UDP

Cenários de aplicação TCP e UDP:
TCP e UDP são dois protocolos de camada de transporte diferentes, e apresentam algumas diferenças em cenários de aplicação.

Como o TCP é um protocolo orientado a conexão, ele é usado principalmente em cenários onde a entrega confiável de dados é necessária. Alguns casos de uso comuns incluem:

transferência de arquivos FTPO TCP pode garantir que os arquivos não sejam perdidos ou corrompidos durante a transferência.
HTTP/HTTPSO TCP garante a integridade e a correção do conteúdo da web.
Como o UDP é um protocolo sem conexão, ele não oferece garantia de confiabilidade, mas possui as características de eficiência e tempo real. O UDP é adequado para os seguintes cenários:

Tráfego com poucos pacotes, como o DNS (Sistema de Nomes de Domínio)As consultas DNS geralmente são pacotes curtos, e o UDP pode concluí-las mais rapidamente.
Comunicação multimídia, como vídeo e áudio.Para transmissão multimídia com altos requisitos de tempo real, o UDP pode fornecer menor latência para garantir que os dados sejam transmitidos em tempo hábil.
comunicação de transmissãoO UDP suporta comunicação um-para-muitos e muitos-para-muitos e pode ser usado para a transmissão de mensagens de difusão.

Resumo
Hoje aprendemos sobre TCP. O TCP é um protocolo de comunicação da camada de transporte orientado a conexão, confiável e baseado em fluxo de bytes. Ele garante a transmissão confiável e a recepção ordenada de dados por meio do estabelecimento de conexão, handshake e confirmação. O protocolo TCP utiliza portas para realizar a comunicação entre processos e fornece serviços de comunicação direta para processos de aplicação em execução em hosts diferentes. As conexões TCP são full-duplex, permitindo transferências de dados bidirecionais simultâneas. Em contraste, o UDP é um protocolo de comunicação orientado a conexão, que não oferece garantias de confiabilidade e é adequado para alguns cenários com altos requisitos de tempo real. TCP e UDP diferem em modo de conexão, objeto de serviço, confiabilidade, controle de congestionamento, controle de fluxo e outros aspectos, e seus cenários de aplicação também são diferentes.


Data da publicação: 03/12/2024