01 - Unidade - Segmento
video: https://youtu.be/... no frontmatter da nota.A unidade de dados fundamental do protocolo TCP (Transmission Control Protocol) é o Segmento. Diferente da camada de Rede (que usa pacotes) ou da camada de Enlace (que usa quadros), o TCP agrupa os bytes da aplicação em segmentos lógicos para transporte.
1. O que é um Segmento?
O segmento é o "pacote" do TCP que contém o cabeçalho do protocolo e uma porção dos dados da aplicação.
- O TCP recebe um fluxo contínuo de bytes da camada de aplicação e os divide em pedaços gerenciáveis.
- Cada segmento é então passado para a camada de IP para ser encapsulado e transmitido.
Limites de Tamanho
| Parâmetro | Valor |
|---|---|
| Cabeçalho mínimo | 20 bytes (sem opções) |
| Cabeçalho máximo | 60 bytes (com opções) |
| Payload (MSS) típico Ethernet | 1460 bytes |
| Segmento máximo teórico | 65.535 bytes (limite do campo Length do IP) |
| Segmento máximo prático | 1500 bytes (MTU Ethernet) |
O limite real superior é imposto pelo campo Total Length do cabeçalho IPv4 (16 bits → 65.535 bytes) menos 20 bytes do cabeçalho IP e 20 bytes do TCP. Em ambientes com Jumbo Frames (MTU 9000), o MSS pode chegar a 8960 bytes, mas isso só é comum em datacenters.
2. MSS (Maximum Segment Size)
O MSS é o maior valor de "corpo" (payload) que o TCP de um host está disposto a aceitar em um único segmento.
- É negociado durante o Three-Way Handshake através da opção TCP MSS (Kind=2).
- O valor típico do MSS é 1460 bytes (1500 bytes da MTU do Ethernet - 20 bytes do cabeçalho IP - 20 bytes do cabeçalho TCP).
- Se o MSS for configurado incorretamente, pode ocorrer fragmentação excessiva de IP, degradando seriamente a performance da rede.
- Em IPv6 o cálculo muda: MSS = MTU (1280 mínimo) - 40 (cabeçalho IPv6) - 20 (TCP) = 1220 bytes.
Path MTU Discovery
O algoritmo PMTUD (RFC 1191) descobre a menor MTU ao longo do caminho entre origem e destino, ajustando o MSS para evitar fragmentação. Quando um roteador não consegue encaminhar um pacote devido à MTU, descarta-o e devolve um ICMP Fragmentation Needed informando a MTU do próximo salto.
3. Estrutura Visual do Segmento
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Port | Destination Port |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Sequence Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Acknowledgment Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data | |U|A|P|R|S|F| |
| Offset| Reserved |R|C|S|S|Y|I| Window |
| | |G|K|H|T|N|N| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Checksum | Urgent Pointer |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options (0-40 bytes) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Application Data |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Resumo dos Campos do Cabeçalho
| Campo | Tamanho | Função |
|---|---|---|
| Source Port | 16 bits | Porta do processo transmissor |
| Destination Port | 16 bits | Porta do processo receptor |
| Sequence Number | 32 bits | Número do primeiro byte do payload |
| Acknowledgment Number | 32 bits | Próximo byte esperado |
| Data Offset | 4 bits | Tamanho do cabeçalho em palavras de 32 bits |
| Reserved | 4 bits | Reservado (zero) |
| Flags | 8 bits | CWR, ECE, URG, ACK, PSH, RST, SYN, FIN |
| Window Size | 16 bits | Espaço disponível no buffer de recepção |
| Checksum | 16 bits | Verificação de integridade (cabeçalho + dados) |
| Urgent Pointer | 16 bits | Posição do último byte urgente |
| Options | 0-40 bytes | MSS, SACK, Timestamps, Window Scale |
4. Multiplexação e De-multiplexação
O uso de segmentos permite que o TCP realize a Multiplexação:
- Vários processos de aplicação (Navegador, SSH, E-mail) enviam dados simultaneamente.
- O TCP rotula cada segmento com uma Porta de Origem e uma Porta de Destino.
- No destino, o TCP olha para as portas e entrega o segmento para o processo de aplicação correto (De-multiplexação).
De-multiplexação Não-orientada a Conexão vs Orientada
No TCP a de-multiplexação é orientada a conexão: o SO consulta a tabela de sockets e usa a quíntupla (IP origem, porta origem, IP destino, porta destino, protocolo) para encontrar o socket correto. No UDP é mais simples: basta a porta de destino.
5. Captura Prática com tcpdump
# Capturar segmentos TCP na porta 443 e mostrar detalhes do cabeçalho
sudo tcpdump -i eth0 -n -nn -vv 'tcp port 443' -X
# Exemplo de saída:
# 10:23:11.443210 IP 192.168.1.10.53142 > 93.184.216.34.443:
# Flags [S], seq 2825831680, win 64240, options [mss 1460,
# sackOK,TS val 1234567 ecr 0,nop,wscale 7], length 0
Repare como o segmento SYN tem length 0 (não carrega dados da aplicação), e a opção MSS aparece negociada em 1460.
6. Segmentos Especiais
Segmento "Puro" de Controle
Segmentos com flags SYN, FIN, RST ou ACK podem ter payload zero. Mesmo assim, consomem um número de sequência:
- SYN consome 1 número de sequência (phantom byte).
- FIN consome 1 número de sequência.
- ACK puro não consome número de sequência.
Keep-Alive
Segmentos de 0 bytes com flag ACK e número de sequência igual a SEQ esperado - 1 são usados como keep-alive para verificar se a conexão está viva sem consumir dados da aplicação.
Window Probe
Quando a janela do receptor chega a zero, o emissor envia periodicamente um segmento de 1 byte para "sondar" se a janela já abriu, evitando deadlock.
7. Segmentação vs Fragmentação
É crucial distinguir os dois conceitos:
- Segmentação (TCP): divisão do fluxo de bytes da aplicação em segmentos. Ocorre no emissor, na camada de transporte.
- Fragmentação (IP): divisão de um pacote IP em pedaços menores. Ocorre em roteadores quando o pacote excede a MTU do enlace.
A fragmentação IP é indesejável: aumenta overhead, perdê-la significa perder todo o pacote, e os fragmentos precisam ser reassemblados no destino final (consumindo memória).
Enquanto o IP trata cada pacote de forma isolada, o TCP vê os segmentos como parte de uma sequência ordenada. Cada segmento possui um Número de Sequência para que o receptor saiba como remontar o fluxo original de dados. O segmento é, portanto, a unidade atômica da confiabilidade TCP: retransmissões, confirmações e controle de fluxo operam todos no nível de segmento.