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ística | TCP | UDP |
|---|---|---|
| Conexão | Orientado à conexão | Sem conexão |
| Confiabilidade | Possui mecanismos de entrega confiável | Não garante entrega |
| Ordem dos dados | Mantém a ordem | Não garante ordem |
| Retransmissão | Possui | Não possui |
| Controle de fluxo | Possui | Não possui |
| Controle de congestionamento | Possui | Não possui |
| Sobrecarga | Maior | Menor |
| Latência | Geralmente maior | Geralmente menor |
| Uso comum | Web, SSH, e-mail, arquivos | DNS, 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:
- Cliente envia
SYN. - Servidor responde com
SYN-ACK. - 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ço | Porta TCP comum |
|---|---|
| HTTP | 80/TCP |
| HTTPS | 443/TCP |
| SSH | 22/TCP |
| FTP | 21/TCP |
| SMTP | 25/TCP |
| SMTP Submission | 587/TCP |
| POP3 | 110/TCP |
| POP3S | 995/TCP |
| IMAP | 143/TCP |
| IMAPS | 993/TCP |
| MySQL | 3306/TCP |
Exemplo de porta TCP:
443/TCPIsso 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 → RedeO 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 3No destino:
Segmento 1 + Segmento 2 + Segmento 3 → Arquivo originalMesmo 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ística | TCP | UDP |
|---|---|---|
| Conexão | Orientado à conexão | Não orientado à conexão |
| Entrega | Garante | Não garante |
| Ordem dos pacotes | Garante | Não garante |
| Reenvio automático | Possui | Não possui |
| Controle de fluxo | Possui | Não possui |
| Controle de congestionamento | Possui | Não possui |
| Velocidade | Menor | Maior |
| Sobrecarga | Maior | Menor |
| Uso comum | Comunicação confiável | Tempo 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
| Protocolo | Porta comum | Uso |
|---|---|---|
| HTTP | 80/TCP | Sites sem criptografia |
| HTTPS | 443/TCP | Sites com criptografia |
| SSH | 22/TCP | Acesso remoto seguro |
| FTP | 21/TCP | Transferência de arquivos |
| SMTP | 25/TCP | Envio de e-mails entre servidores |
| SMTP Submission | 587/TCP | Envio autenticado de e-mail |
| POP3 | 110/TCP | Recebimento de e-mails |
| IMAP | 143/TCP | Sincronização de e-mails |
| MySQL | 3306/TCP | Banco de dados |
Como testar uma porta TCP?
Com nc:
nc -vz ip_do_servidor portaExemplo testando SSH:
nc -vz 192.168.0.10 22Exemplo testando HTTPS:
nc -vz google.com 443Com telnet:
telnet ip_do_servidor portaExemplo:
telnet 192.168.0.10 80Com nmap:
nmap -p porta ip_do_servidorExemplo:
nmap -p 443 google.comComo verificar portas TCP abertas no Linux?
Use:
sudo ss -tlnpOu:
sudo netstat -tlnpFiltrar por uma porta específica:
sudo ss -tlnp | grep :80Exemplo para SSH:
sudo ss -tlnp | grep :22Como liberar uma porta TCP no firewall?
Com UFW:
sudo ufw allow 80/tcpExemplo para HTTPS:
sudo ufw allow 443/tcpExemplo para SSH:
sudo ufw allow 22/tcpVerificar status:
sudo ufw statusCom iptables:
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPTComo bloquear uma porta TCP no firewall?
Com UFW:
sudo ufw deny 80/tcpCom iptables:
sudo iptables -A INPUT -p tcp --dport 80 -j DROPVerificar regras:
sudo iptables -L -n -vTCP é 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 refusedPossí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 -tlnpVerificar serviço:
sudo systemctl status nome_do_servicoTestar porta:
nc -vz ip_do_servidor portaConnection timed out
Erro:
Connection timed outPossí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_servidorTestar porta:
nc -vz ip_do_servidor portaVerificar rota:
traceroute ip_do_servidorNo route to host
Erro:
No route to hostPossí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 addrVerificar rota:
ip routeTestar gateway:
ping ip_do_gatewayNetwork is unreachable
Erro:
Network is unreachablePossí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 addrVerificar rotas:
ip routeAdicionar gateway, se necessário:
sudo ip route add default via ip_do_gatewayPorta 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 portaTestar aplicação web:
curl -I http://ip_do_servidorVerificar logs:
sudo journalctl -u nome_do_servico -fSite 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 80Testar porta HTTPS:
nc -vz dominio.com 443Testar HTTP:
curl -I https://dominio.comSSH não conecta
Erro comum:
ssh: connect to host servidor port 22: Connection refusedPossíveis causas:
SSH parado.
Porta 22 fechada.
SSH usando outra porta.
Firewall bloqueando.
Servidor fora do ar.
Verificar porta:
nc -vz ip_do_servidor 22Verificar serviço no servidor:
sudo systemctl status sshOu:
sudo systemctl status sshdComo testar se o TCP está funcionando?
Testar uma porta específica:
nc -vz ip_do_servidor portaExemplo:
nc -vz google.com 443Verificar portas abertas localmente:
sudo ss -tlnpTestar HTTP/HTTPS:
curl -I https://dominio.comTestar rota:
traceroute dominio.comTestar DNS:
dig dominio.comComandos principais relacionados ao TCP
| Comando | Função |
|---|---|
ss -tlnp | Mostra portas TCP em escuta |
netstat -tlnp | Mostra portas TCP em escuta |
nc -vz destino porta | Testa conexão TCP em uma porta |
telnet destino porta | Testa conexão TCP manualmente |
nmap -p porta destino | Escaneia porta TCP |
curl -I URL | Testa serviço HTTP/HTTPS |
ip route | Mostra rotas da máquina |
traceroute destino | Mostra caminho até o destino |
ufw allow porta/tcp | Libera porta TCP no firewall |
ufw deny porta/tcp | Bloqueia porta TCP no firewall |
iptables -A INPUT -p tcp --dport porta -j ACCEPT | Libera TCP com iptables |
Exemplo completo de uso
Testar se o servidor responde na rede:
ping -c 4 ip_do_servidorTestar se a porta TCP está aberta:
nc -vz ip_do_servidor 443Verificar portas TCP abertas localmente:
sudo ss -tlnpTestar uma aplicação web:
curl -I https://dominio.comVerificar rota até o destino:
traceroute dominio.comLiberar porta TCP no firewall, se necessário:
sudo ufw allow 443/tcpEsse 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.