TCP
O que é TCP?
TCP significa Transmission Control Protocol.
Ele é um protocolo da camada de transporte do modelo OSI, usado para garantir a transmissão confiável de dados entre sistemas em uma rede.
O TCP é orientado à conexão, ou seja, antes de começar a transmitir dados, ele estabelece uma conexão entre o dispositivo de origem e o dispositivo de destino.
Ele garante que os dados cheguem corretamente, completos e na ordem certa.
Para que o TCP é usado?
O TCP é usado em aplicações que precisam de confiabilidade na entrega dos dados.
Exemplos comuns:
Acessar sites pela web.
Enviar e receber e-mails.
Acessar servidores por SSH.
Transferir arquivos.
Usar sistemas bancários.
Acessar bancos de dados.
Fazer login em sistemas remotos.
Comunicar aplicações que não podem perder dados.
TCP é a mesma coisa que UDP?
Não.
TCP e UDP são protocolos da camada de transporte, mas funcionam de formas diferentes.
O TCP prioriza confiabilidade.
O UDP prioriza velocidade e baixa latência.
Resumo:
| Protocolo | Conexão | Confiabilidade | Velocidade | Exemplo |
|---|---|---|---|---|
| TCP | Orientado à conexão | Garante entrega | Mais lento | Web, SSH, e-mail |
| UDP | Sem conexão | Não garante entrega | Mais rápido | DNS, VoIP, jogos |
Como o TCP funciona?
O TCP funciona criando uma conexão entre origem e destino antes da transmissão dos dados.
Fluxo básico:
O cliente solicita conexão com o servidor.
O servidor responde aceitando a conexão.
A conexão TCP é estabelecida.
Os dados são divididos em segmentos.
Os segmentos são enviados pela rede.
O destino confirma o recebimento.
Se algum segmento for perdido, ele é retransmitido.
Os dados são reorganizados na ordem correta.
A conexão é encerrada ao final da comunicação.
Exemplo:
Cliente → Conexão TCP → ServidorCaracterísticas principais do TCP
O TCP possui algumas características importantes:
É orientado à conexão.
Garante entrega dos dados.
Reenvia pacotes perdidos.
Organiza os pacotes na ordem correta.
Possui controle de fluxo.
Possui controle de congestionamento.
Divide dados em segmentos.
Reagrupa os dados no destino.
Usa confirmação de recebimento.
É mais confiável que o UDP.
Possui maior sobrecarga que o UDP.
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 → ACKEsse 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 → ServidorDepois 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.