Professor: Gabriel Soares Baptista
Na aula passada, o IP entregava pacotes entre hosts.
Hoje a pergunta muda.
Como entregar dados ao processo certo dentro do host?
A camada de transporte oferece comunicação processo a processo.
IP entrega na máquina. Transporte entrega na aplicação.
Forouzan capítulo 23 e Tanenbaum capítulo 6.
| Livro | Trecho | Assunto |
|---|---|---|
| Forouzan 23.1 | 703-708 | processos e portas |
| Forouzan 23.2 | 709-715 | UDP |
| Forouzan 23.3 | 715-735 | TCP |
| Tanenbaum 6.1-6.5 | 310-365 | serviço, sockets, UDP e TCP |
SCTP fica fora da aula de hoje.
Um host executa vários programas ao mesmo tempo.
O IP entrega ao host. A camada de transporte entrega ao processo.
| Camada | Unidade | Comunicação |
|---|---|---|
| Enlace | quadro | nó a nó |
| Rede | pacote | host a host |
| Transporte | segmento/datagrama | processo a processo |
IP identifica a máquina. Porta identifica o serviço/processo.
No enlace, há um canal direto.
No transporte, as pontas conversam através de uma rede inteira.
Uma porta é um número de 16 bits.
0 a 65535
Portas separam conversas dentro do mesmo host.
Porta não identifica máquina. Quem identifica máquina é o IP.
| Tipo | Uso |
|---|---|
| Porta conhecida | serviço do servidor |
| Porta efêmera | conversa temporária do cliente |
Cliente: 10.0.0.8:53144
Servidor: 200.10.1.5:443
443 identifica o serviço. 53144 identifica aquela conversa no cliente.
ss -tulpen
tcp ou udpLISTEN ou UNCONNO sistema operacional mantém a tabela que liga portas a processos.
Na origem, vários processos usam a rede ao mesmo tempo.
A camada de transporte faz a demultiplexação pela porta.
UDP significa User Datagram Protocol.
Entrega processo a processo com mínimo controle.
Cabeçalho fixo de 8 bytes.
Para detectar erro envolvendo IP de origem, IP de destino e protocolo.
No IPv4, checksum UDP pode ser zero. No IPv6, é obrigatório.
| Necessidade | UDP faz? |
|---|---|
| estabelecer conexão | não |
| confirmar recebimento | não |
| retransmitir | não |
| ordenar | não |
| controlar fluxo | não |
| detectar erro simples | sim, via checksum |
nc -u -l 9999
printf 'consulta\n' | nc -u -w1 127.0.0.1 9999
Não há handshake nem conexão persistente antes da mensagem.
TCP significa Transmission Control Protocol.
Cria uma conexão lógica com estado nas pontas.
Aplicações não manipulam diretamente SYN, ACK, janela e timers.
| Cliente | Servidor |
|---|---|
socket |
socket |
connect |
bind, listen, accept |
send / recv |
send / recv |
close |
close |
O cabeçalho TCP é maior porque o TCP assume mais responsabilidades.
| Campo | O que significa |
|---|---|
| Cabeçalho | controle da conversa TCP |
| Dados | bytes da aplicação |
| Portas | processos de origem e destino |
| Sequência | primeiro byte carregado no segmento |
| Confirmação | próximo byte esperado pelo receptor |
| HLEN | tamanho do cabeçalho TCP |
seq e ack contam bytes, não segmentos.
| Campo | O que significa |
|---|---|
| Reservado | bits guardados para uso futuro |
| Flags | ações de controle da conexão |
| Janela | quanto o receptor ainda aceita |
| Checksum | detecção de corrupção |
| Urgent pointer | fim dos dados urgentes, se URG = 1 |
| Opções | extensões como MSS, escala de janela e timestamps |
| Flag | Ideia |
|---|---|
URG |
campo urgente válido |
ACK |
confirmação válida |
PSH |
entregar logo à aplicação |
RST |
resetar/abortar conexão |
SYN |
abrir conexão e sincronizar sequência |
FIN |
encerrar envio nessa direção |
TCP não entrega mensagens.
TCP entrega uma sequência contínua de bytes.
Aplicação escreve: A | B | C
Outra ponta pode ler: ABC
A aplicação precisa separar mensagens: \n, tamanho, delimitador ou protocolo.
TCP não é “UDP confiável”. Ele tem outra abstração.
O número de sequência indica o primeiro byte do segmento.
| Segmento | Bytes | Seq |
|---|---|---|
| 1 | 1001-2000 | 1001 |
| 2 | 2001-3000 | 2001 |
| 3 | 3001-4000 | 3001 |
ACK = 4001 significa: espero o byte 4001.
Sincronizar números iniciais e abrir a conexão.
1. SYN
2. SYN + ACK
3. ACK
SYN flood explora conexões iniciadas e não completadas.
nc -l 9998
nc -v 127.0.0.1 9998
ss -tn '( sport = :9998 or dport = :9998 )'
Procure o estado ESTAB: TCP mantém conexão.
sudo tcpdump -i lo -nn 'tcp port 9998'
[S] = SYN[S.] = SYN + ACK[.] = ACK[F.] = FIN + ACK no encerramentoControle de fluxo protege o receptor.
rwnd = espaço livre anunciado pelo receptor
Se rwnd = 0, o transmissor deve parar de enviar novos dados.
Controle de erro protege a confiabilidade do fluxo.
Segmento corrompido é descartado.
Se faltam bytes no meio, o receptor não avança o ACK.
Recebido: 501-600, 601-700, 801-900
Faltando: 701-800
ACK: 701
Continuo esperando o byte 701.
Controle de congestionamento protege a rede.
$$ janela\ efetiva = \min(rwnd, cwnd) $$
| Janela | Protege |
|---|---|
rwnd |
receptor |
cwnd |
rede |
FIN informa: não enviarei mais dados nessa direção.
Como TCP é full-duplex, cada direção pode encerrar separadamente.
Um lado para de enviar, mas ainda pode receber.
| UDP | TCP |
|---|---|
| sem conexão | orientado a conexão |
| datagramas | fluxo de bytes |
| cabeçalho pequeno | cabeçalho maior |
| sem retransmissão | retransmite |
| sem ordem garantida | entrega em ordem |
| Se a aplicação precisa... | Use provavelmente |
|---|---|
| todos os bytes em ordem | TCP |
| pergunta curta repetível | UDP |
| atraso baixo | UDP ou QUIC |
| sessão confiável | TCP |
| controle próprio | UDP |
Não é moderno versus antigo. É serviço necessário.
Na camada de aplicação veremos protocolos reais usando transporte.
| Aplicação | Transporte comum |
|---|---|
| DNS | UDP/TCP |
| HTTP/1.1 e HTTP/2 | TCP |
| HTTP/3 | QUIC sobre UDP |
| TCP | |
| NTP | UDP |
Na próxima aula subimos para a camada de aplicação.