Title: Redes de Computadores
1Redes de Computadores
- Transmission Control Protocol - TCP
2O modelo TCP/IP
Aplicativo
TCP,UDP
Transporte
IP
Internet
Interface de Rede
3Comunicação vista pelo TCP
4O Serviço de Transporte
- Recebe dados da camada de aplicativos e os divide
em unidades menores para a camada internet (IP). - multiplexação/demultiplexação
- Orientado à conexão (ponto a ponto)
- Controle de Fluxo (congestionamento)
- Confiabilidade (tratar erros)
5 Transporte X Data Link
- Controle de Erros
- Controle de Fluxo
- Seqüenciamento de Pacotes
6Roteador
SubRede
Roteador
Host
Host
Meio Físico
a) Ambiente do Data Link b)
Ambiente da camada de transporte
- Dissimilaridades
- Endereçamento
- Conexão
- Capacidade de armazenamento (buffering)
7Estabelecendo uma conexão
- Requisição de conexão conexão aceita
- Não é tão simples Pacotes
- perdidos
- armazenados (por roteadores)
- duplicados
8Formato de um segmento TCP
9De onde vem a confiabiliade ?
- Técnica de Reconhecimento com Retransmissão
(Aknowledgement with Retransmission) - Receptor comunica-se com emissor enviando uma msg
ACK (aknowledgement) ao receber dados. - Emissor mantém registro de cada pacote enviado e
mantém um timer p/ retransmissão
10Reconhecimento c/ retransmissão
Eventos no Emissor
Eventos no Receptor
Msgs na Rede
Envia pacote 1
Recebe Pacote 1 Envia ACK 1
Recebe ACK 1 Envia Pacote 2
Recebe Pacote 2 Envia ACK 2
Recebe ACK 2
11Pacote perdido ou corrompido
Eventos no Emissor
Eventos no Receptor
Msgs na Rede
Pacote perdido
Envia pacote 1 Inicia Timer
Pacote deveria chegar ACK deveria ser enviado
ACK deveria chegar
Tempo espira
Retransmite Pac. 1 Inicia Timer
Recebe Pacote 1 Envia ACK 1
Recebe ACK 1 Cancela timer
12Pacotes duplicados
- Origem de pacotes duplicados
- Gerados por camadas inferiores de rede
- Atrasos (delays) na rede
- Solução
- Atribuir a cada pacote um nro de seqüência
- exigir do receptor que lembre qual nro de
seqüência recebeu
13Segmentos, Streams e Nros de seqüência
- TCP enxerga fluxo de dados (data stream)
- sequência de octetos (bytes)
- Agrupados em Segmentos
- Cada segmento viaja dentro de um datagrama IP
- Transporte utiliza janelas deslizantes
- melhor eficiência (maior throughput)
- controle de fluxo (buferização)
14Janelas Deslizantes
- No TCP, as janelas deslizantes operam ao nível de
octetos (não segmentos ou pacotes) - Octetos são numerados seqüencialmente
- conceitualmente, a cada octeto é atribuído um nro
de seqüência. - Emissor mantém 3 ponteiros sobre a janela para
cada conexão.
15Janela Deslizante
1 2 3 4 5 6 7 8 9 10 11 ...
Somente enviados após movimentação da janela
Octetos enviados e reconhecidos
Octetos não enviados mas que serão sem delay
Octetos enviados e não reconhecidos
16Three-way handshake
- Procedimento usado para estabelecer conexão
- normalmente iniciado por um TCP e atendido por
outro TCP - Por que 3?
- a escolha do nro inicial de seqüência (ISN) não
está atrelada a um clock global de rede.
17Handshake abrindo conexão
Eventos no Emissor
Eventos no Receptor
Msgs na Rede
Envia SYN seq x
Recebe segmento SYN Envia SYN seq y, ACK x 1
Recebe SYN ACK Envia ACK y 1
Recebe ACK
Obs Se SYN está presente nro de seqüência é
ISN O primeiro octeto de dados será
ISN1.
18Seleção do 1º nro de sequência (ISN)
- Aleatório clock fictício de 32 bits incrementado
a cada 4 microsegundos - ciclo de 4.55 horas
- tempo máximo de vida de um segmento (MSL) lt 4,55
- ISN será único.
19Conexão antiga
TCP A
TCP B 1. FECHADA
LISTEN 2.
SYN-ENV. --gt ltSEQ100gtltCTLSYNgt
... 3. (duplicate) ... ltSEQ90gtltCTLSYNgt
--gt SYN-RECEB. 4. SYN-ENV. lt--
ltSEQ300gtltACK91gtltCTLSYN,ACKgt lt--
SYN-RECEIVED 5. SYN-ENV. --gt
ltSEQ91gtltCTLRSTgt --gt LISTEN 6.
... ltSEQ100gtltCTLSYNgt
--gt SYN-RECEB. 7. SYN-ENV. lt--
ltSEQ400gtltACK101gtltCTLSYN,ACKgt lt-- SYN-RECEB.
8. ESTAB. --gt ltSEQ101gtltACK401gtltCTLACKgt
--gt ESTAB.
20Fechando uma conexão
- Conexão TCP full duplex
- contém 2 streams independentes de dados
- O TCP que recebe pedido de fechamento, passa a
não aceitar mais dados - O TCP que iniciou o fechamento, pode ainda
receber dados.
21Fechando conexão
Eventos no Emissor
Eventos no Receptor
Msgs na Rede
Aplicativo fecha conexão Envia FIN seq x
Recebe segmento SYN Envia ACK x 1 (informa
aplicativo)
Recebe ACK
Aplicativo fecha conexão Envia FIN seq y, ACK x
1
Recebe SYN ACK Envia ACK y 1
Recebe ACK
22O que é uma janela ?Controle de Congestão
- Janela enviada em cada segmento indica faixa de
nro de sequências que o emissor da janela está
preparado para receber. - Tam. relacionado ao buffer da conexão
23(No Transcript)
24Emissor
Receptor
0
4K
Aplicativo passa 2K
vazio
2K seq0
2K
ACK2048 WIN2048
Aplicativo passa 2K
2K seq2048
cheio
Emissor bloqueado
ACK4096 WIN0
Aplicativo lê 2K
ACK4096 WIN2048
2K
Emissor pode env. 2K
1K seq4096
2K
1K
25Observações
- Emissor não tem que transmitir assim que dados
chegam do aplicativo - Receptor não tem que retransmitir ACKs
imediatamente. (pode esperar o buffer encher)
26Formato de um segmento TCP
27Tamanho máximo segmento
- Header TCP 20 bytes
- Header IP 20 bytes
- Max
- 65535 - 20 - 20 65495 bytes de dados
28Conteúdo do Segmento 1
- Sequence Number nro do primeiro octeto no
segmento (exceto SYN) - Aknowledgement nro do octeto que o emissor
espera receber. - Hlen comprimento do cabeçalho
- Reserved não usado (projeto bem feito!)
29Conteúdo do Segmento 2
- Code Bits propósito/objetivo do segmento
U R G
A C K
P S H
R S T
S Y N
F I N
- URG indica dado urgente sendo transmitido
- ACK Se 0, desprezar nro de aknowledgement
- PSH transmite segmento sem bufferizar
- RST resetar conexão (queda do host, rejeitar
segmento)
30Code Bits 2.1
- URG indica dado urgente sendo transmitido
- ACK Se 0, desprezar nro de aknowledgement
- PSH transmite segmento sem bufferizar
- RST resetar conexão (queda do host, rejeitar
segmento) - SYN estabelecer conexões (SYN1)
- FIN liberar uma conexão
- SYN e FIN tem nros de sequência.
31Conteúdo do Segmento 3
- Window quantos octetos podem ser mandados
começando a partir do byte no campo
aknowledgement number. - window 0 receptor precisa de descanso.
- Checksum cabeçalhodados
- Options funções extras
- Especificar valor inicial da janela
- se ausente, usar default (53620556 octetos)