TCP

O que é TCP?
 

TCP significa Transmission Control Protocol (Protocolo de Controle de Transmissão).

 


É um protocolo da camada de transporte utilizado para fornecer comunicação confiável entre aplicações que estão em dispositivos diferentes de uma rede.
O TCP é orientado à conexão. Isso significa que, antes de transmitir os dados, ele estabelece uma conexão lógica entre a origem e o destino.
Durante a comunicação, o TCP utiliza mecanismos como:
 

  • Confirmação de recebimento;
  • Números de sequência;
  • Retransmissão de segmentos;
  • Controle de fluxo;
  • Controle de congestionamento;
  • Detecção de perda de dados;
  • Reorganização dos dados.


Esses mecanismos permitem que os dados sejam entregues à aplicação de destino de forma ordenada e confiável, quando a conexão permanece disponível.
 


Para que o TCP é usado?
 

 O TCP é utilizado por aplicações nas quais a integridade e a ordem dos dados são importantes.

Exemplos:

 

  • Acessar sites pela web;
  • Enviar e receber e-mails;
  • Acessar servidores utilizando SSH;
  • Transferir arquivos;
  • Utilizar sistemas bancários;
  • Acessar bancos de dados;
  • Fazer login em sistemas remotos;
  • Consumir APIs;
  • Utilizar sistemas administrativos;
  • Comunicar aplicações que não podem tolerar perda de dados.

TCP é a mesma coisa que UDP?
 

Não.
TCP e UDP são protocolos da camada de transporte, mas possuem características e objetivos diferentes.

Característica:
 

Comparação entre TCP e UDP:

CaracterísticaTCPUDP
ConexãoOrientado à conexãoSem conexão
ConfiabilidadePossui mecanismos de entrega confiávelNão garante entrega
Ordem dos dadosMantém a ordemNão garante ordem
RetransmissãoPossuiNão possui
Controle de fluxoPossuiNão possui
Controle de congestionamentoPossuiNão possui
SobrecargaMaiorMenor
LatênciaGeralmente maiorGeralmente menor
Uso comumWeb, SSH, e-mail, arquivosDNS, VoIP, jogos e aplicações em tempo real

Resumo:

TCP prioriza confiabilidade e controle da transmissão.
UDP prioriza simplicidade, menor sobrecarga e baixa latência.
Isso não significa que UDP seja necessariamente “mais rápido” em qualquer situação. A escolha depende das necessidades da aplicação.


Como o TCP funciona?
 

O TCP estabelece uma conexão antes de iniciar a transmissão dos dados.

De forma simplificada:
→ O cliente solicita uma conexão;
    → O servidor responde;
       → O cliente confirma;
          → A conexão TCP é estabelecida;
             → Os dados são divididos em segmentos;
                 → Os segmentos são enviados;
                    → O destino confirma o recebimento;
                       → Segmentos que não forem reconhecidos podem ser retransmitidos;
                           → Os dados são reorganizados no destino;
                               → Ao final da comunicação, a conexão é encerrada.

Exemplo:

 Cliente → Conexão TCP → Servidor

 


O que significa TCP ser orientado à conexão?

Significa que o TCP estabelece uma conexão antes de enviar os dados.

Essa conexão é criada por um processo chamado three-way handshake.

Fluxo básico:

O cliente envia um pedido de conexão.
O servidor responde aceitando.
O cliente confirma.
Depois disso, os dados começam a ser transmitidos.

Resumo:

SYN → SYN-ACK → ACK

Esse processo ajuda a garantir que os dois lados estejam prontos para se comunicar.


O que é o three-way handshake?

O three-way handshake é o processo usado pelo TCP para iniciar uma conexão.

Ele ocorre em três etapas:

  1. Cliente envia SYN.
  2. Servidor responde com SYN-ACK.
  3. Cliente responde com ACK.

Exemplo:

Cliente  →  SYN      → Servidor
Cliente  ←  SYN-ACK  ← Servidor
Cliente  →  ACK      → Servidor

Depois disso, a conexão TCP está estabelecida.


O que significa TCP ser confiável?

Significa que o TCP verifica se os dados chegaram corretamente ao destino.

Se algum segmento for perdido, o TCP pode retransmitir.

Se os segmentos chegarem fora de ordem, o TCP reorganiza.

Se ocorrer erro na transmissão, o TCP pode detectar e corrigir com retransmissão.

Por isso, ele é usado em aplicações onde a perda de dados não pode acontecer.


TCP usa portas?

Sim.

O TCP usa portas para identificar aplicações e serviços.

Exemplos comuns:

ServiçoPorta TCP comum
HTTP80/TCP
HTTPS443/TCP
SSH22/TCP
FTP21/TCP
SMTP25/TCP
SMTP Submission587/TCP
POP3110/TCP
POP3S995/TCP
IMAP143/TCP
IMAPS993/TCP
MySQL3306/TCP

Exemplo de porta TCP:

443/TCP

Isso indica que o serviço usa a porta 443 com o protocolo TCP.


TCP usa IP?

Sim.

O TCP funciona sobre o protocolo IP.

Resumo:

Aplicação → TCP → IP → Rede

O TCP fica na camada de transporte.

O IP fica na camada de rede.


O que é um segmento TCP?

Um segmento TCP é a unidade de dados enviada pelo protocolo TCP.

Ele contém:

Porta de origem.
Porta de destino.
Número de sequência.
Número de confirmação.
Flags TCP.
Checksum.
Dados da aplicação.

Essas informações ajudam o TCP a controlar a entrega, a ordem e a confiabilidade dos dados.


O que é controle de fluxo no TCP?

O controle de fluxo regula a quantidade de dados enviados.

Ele evita que o remetente envie mais dados do que o receptor consegue processar.

Exemplo:

Se o destino estiver sobrecarregado, o TCP pode reduzir o ritmo de envio.

Isso ajuda a evitar perda de dados e sobrecarga no dispositivo receptor.


O que é controle de congestionamento no TCP?

O controle de congestionamento ajusta a velocidade de envio para evitar congestionamento na rede.

Se a rede estiver lenta ou perdendo pacotes, o TCP reduz a taxa de envio.

Quando a rede melhora, ele pode aumentar gradualmente a velocidade.

Isso ajuda a manter a estabilidade da comunicação.


O que é segmentação e reagrupamento no TCP?

O TCP divide os dados em partes menores chamadas segmentos.

Esses segmentos são enviados pela rede.

No destino, o TCP reorganiza tudo na ordem correta.

Exemplo:

Arquivo grande → Segmento 1 → Segmento 2 → Segmento 3

No destino:

Segmento 1 + Segmento 2 + Segmento 3 → Arquivo original

Mesmo que os segmentos cheguem fora de ordem, o TCP consegue reagrupá-los corretamente.


TCP tem retransmissão?

Sim.

Se um segmento não chegar ao destino, o TCP pode reenviar esse segmento.

Isso acontece porque o TCP usa confirmações de recebimento.

Quando o destino recebe os dados, ele envia uma confirmação chamada ACK.

Se o remetente não receber o ACK, ele pode reenviar o segmento.


TCP garante ordem dos pacotes?

Sim.

O TCP usa números de sequência para organizar os segmentos.

Se os segmentos chegarem fora de ordem, o destino reorganiza antes de entregar os dados para a aplicação.

Isso é importante em arquivos, páginas web, e-mails e conexões SSH.


Diferença entre TCP e UDP

CaracterísticaTCPUDP
ConexãoOrientado à conexãoNão orientado à conexão
EntregaGaranteNão garante
Ordem dos pacotesGaranteNão garante
Reenvio automáticoPossuiNão possui
Controle de fluxoPossuiNão possui
Controle de congestionamentoPossuiNão possui
VelocidadeMenorMaior
SobrecargaMaiorMenor
Uso comumComunicação confiávelTempo real

Quando usar TCP?

O TCP é indicado quando os dados precisam chegar completos e na ordem correta.

Exemplos:

Sites e sistemas web.
Transferência de arquivos.
SSH.
E-mail.
Bancos de dados.
APIs.
Sistemas financeiros.
Aplicações administrativas.

Nesses casos, confiabilidade é mais importante que velocidade bruta.


Quando não usar TCP?

O TCP pode não ser ideal quando a aplicação precisa de baixa latência e tolera pequenas perdas.

Exemplos:

Jogos online em tempo real.
Chamadas de voz.
Chamadas de vídeo.
Streaming ao vivo.
Transmissões em tempo real.

Nesses casos, o UDP pode ser mais adequado.


Exemplos de protocolos que usam TCP

ProtocoloPorta comumUso
HTTP80/TCPSites sem criptografia
HTTPS443/TCPSites com criptografia
SSH22/TCPAcesso remoto seguro
FTP21/TCPTransferência de arquivos
SMTP25/TCPEnvio de e-mails entre servidores
SMTP Submission587/TCPEnvio autenticado de e-mail
POP3110/TCPRecebimento de e-mails
IMAP143/TCPSincronização de e-mails
MySQL3306/TCPBanco de dados

Como testar uma porta TCP?

Com nc:

nc -vz ip_do_servidor porta

Exemplo testando SSH:

nc -vz 192.168.0.10 22

Exemplo testando HTTPS:

nc -vz google.com 443

Com telnet:

telnet ip_do_servidor porta

Exemplo:

telnet 192.168.0.10 80

Com nmap:

nmap -p porta ip_do_servidor

Exemplo:

nmap -p 443 google.com

Como verificar portas TCP abertas no Linux?

Use:

sudo ss -tlnp

Ou:

sudo netstat -tlnp

Filtrar por uma porta específica:

sudo ss -tlnp | grep :80

Exemplo para SSH:

sudo ss -tlnp | grep :22

Como liberar uma porta TCP no firewall?

Com UFW:

sudo ufw allow 80/tcp

Exemplo para HTTPS:

sudo ufw allow 443/tcp

Exemplo para SSH:

sudo ufw allow 22/tcp

Verificar status:

sudo ufw status

Com iptables:

sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT

Como bloquear uma porta TCP no firewall?

Com UFW:

sudo ufw deny 80/tcp

Com iptables:

sudo iptables -A INPUT -p tcp --dport 80 -j DROP

Verificar regras:

sudo iptables -L -n -v

TCP é seguro?

O TCP sozinho não possui criptografia.

Ele garante entrega, ordem e controle da comunicação, mas não protege o conteúdo dos dados.

A segurança depende da aplicação ou de protocolos adicionais.

Exemplos:

HTTP usa TCP, mas não criptografa.
HTTPS usa TCP com TLS, criptografando a comunicação.
SSH usa TCP com criptografia.
SMTP pode usar TCP com STARTTLS.

Por isso, TCP não deve ser considerado seguro sozinho.


Erros comuns com TCP

Connection refused

Erro:

Connection refused

Possíveis causas:

Nenhum serviço escutando na porta.
Serviço parado.
Porta fechada.
Firewall recusando a conexão.
Aplicação configurada em outra porta.

Verificar portas:

sudo ss -tlnp

Verificar serviço:

sudo systemctl status nome_do_servico

Testar porta:

nc -vz ip_do_servidor porta

Connection timed out

Erro:

Connection timed out

Possíveis causas:

Firewall descartando pacotes.
Servidor fora do ar.
IP incorreto.
Rota de rede com problema.
Porta bloqueada no provedor.
NAT sem redirecionamento correto.

Testar conectividade:

ping ip_do_servidor

Testar porta:

nc -vz ip_do_servidor porta

Verificar rota:

traceroute ip_do_servidor

No route to host

Erro:

No route to host

Possíveis causas:

Não existe rota até o destino.
Gateway incorreto.
Servidor desligado.
Firewall bloqueando com resposta de rede.
Problema na configuração IP.

Verificar IP:

ip addr

Verificar rota:

ip route

Testar gateway:

ping ip_do_gateway

Network is unreachable

Erro:

Network is unreachable

Possíveis causas:

Máquina sem rota padrão.
Interface de rede desconectada.
IP mal configurado.
Gateway ausente.
Rede de destino inacessível.

Verificar interfaces:

ip addr

Verificar rotas:

ip route

Adicionar gateway, se necessário:

sudo ip route add default via ip_do_gateway

Porta TCP aberta, mas aplicação não responde

Possíveis causas:

Aplicação travada.
Serviço respondendo lentamente.
Erro interno da aplicação.
Firewall intermediário interferindo.
Proxy ou balanceador com problema.
Aplicação escutando, mas não processando requisições.

Testar conexão:

nc -vz ip_do_servidor porta

Testar aplicação web:

curl -I http://ip_do_servidor

Verificar logs:

sudo journalctl -u nome_do_servico -f

Site não abre, mas ping funciona

Possíveis causas:

ICMP permitido, mas TCP bloqueado.
Porta 80 ou 443 fechada.
Servidor web parado.
Firewall bloqueando HTTP/HTTPS.
DNS apontando errado.

Testar porta HTTP:

nc -vz dominio.com 80

Testar porta HTTPS:

nc -vz dominio.com 443

Testar HTTP:

curl -I https://dominio.com

SSH não conecta

Erro comum:

ssh: connect to host servidor port 22: Connection refused

Possíveis causas:

SSH parado.
Porta 22 fechada.
SSH usando outra porta.
Firewall bloqueando.
Servidor fora do ar.

Verificar porta:

nc -vz ip_do_servidor 22

Verificar serviço no servidor:

sudo systemctl status ssh

Ou:

sudo systemctl status sshd

Como testar se o TCP está funcionando?

Testar uma porta específica:

nc -vz ip_do_servidor porta

Exemplo:

nc -vz google.com 443

Verificar portas abertas localmente:

sudo ss -tlnp

Testar HTTP/HTTPS:

curl -I https://dominio.com

Testar rota:

traceroute dominio.com

Testar DNS:

dig dominio.com

Comandos principais relacionados ao TCP

ComandoFunção
ss -tlnpMostra portas TCP em escuta
netstat -tlnpMostra portas TCP em escuta
nc -vz destino portaTesta conexão TCP em uma porta
telnet destino portaTesta conexão TCP manualmente
nmap -p porta destinoEscaneia porta TCP
curl -I URLTesta serviço HTTP/HTTPS
ip routeMostra rotas da máquina
traceroute destinoMostra caminho até o destino
ufw allow porta/tcpLibera porta TCP no firewall
ufw deny porta/tcpBloqueia porta TCP no firewall
iptables -A INPUT -p tcp --dport porta -j ACCEPTLibera TCP com iptables

Exemplo completo de uso

Testar se o servidor responde na rede:

ping -c 4 ip_do_servidor

Testar se a porta TCP está aberta:

nc -vz ip_do_servidor 443

Verificar portas TCP abertas localmente:

sudo ss -tlnp

Testar uma aplicação web:

curl -I https://dominio.com

Verificar rota até o destino:

traceroute dominio.com

Liberar porta TCP no firewall, se necessário:

sudo ufw allow 443/tcp

Esse exemplo testa conectividade, porta TCP, aplicação web, rota e firewall.


Boas práticas de segurança

Liberar apenas as portas TCP necessárias.
Fechar serviços que não estão em uso.
Usar firewall para controlar acesso.
Evitar expor portas administrativas para toda a internet.
Usar criptografia em aplicações TCP, como TLS ou SSH.
Manter serviços atualizados.
Monitorar conexões suspeitas.
Usar senhas fortes e autenticação segura.
Aplicar rate limit quando necessário.
Verificar logs dos serviços.
Não considerar TCP seguro sem criptografia.

Páginas relacionadas

ICMP
Abrir