TCP - controle de fluxo
Elimina a possibilidade de o remetente saturar o destinatário Apresentação supõe que segmentos fora de ordem são descartados
Baseado em janelas
Remetente mantém uma variável chamada janela de recepção (RcvWindow)
TCP - controle de fluxo
Janela e buffer de recepção (fonte: Kurose)
TCP - controle de fluxo
Destinatário mantém as variáveis
LastByteRead
LastByteRcvd
LastByteRcvd – LastByteRead ≤ RcvBuffer
Para não saturar o buffer
RcvWindow = RcvBuffer – [LastByteRcvd –
LastByteRead]
TCP - controle de fluxo
Remetente mantém as variáveis
LastByteSent
LastByteAcked
Remetente precisa ter uma ideia do buffer do destinatário Destinatário envia quanto há de espaço no buffer colocando RcvWindow no campo janela de recepção de cada segmento
LastByteSent – LastByteAcked ≤ RcvWindow
Para não saturar o buffer do destinatário
TCP - controle de fluxo
Problema quando RcvWindow = destinatário não tem nada a enviar
0
e
o
Solução
Remetente deve enviar segmento de um octeto de dados quando a janela for zero
TCP - estabelecimento de conexão
Inicializa variáveis
Números de sequência
Buffers, RcvWindow
3-way handshake usado para eliminar problema de duplicatas antigas (atrasadas)
Ex.: pedidos de conexão, ACKs
o
Estabelecimento de conexão
3-way handshake genérico (fonte: Tanenbaum)
(a) Normal operation,
(b) Old CONNECTION REQUEST appearing out of nowhere.
Estabelecimento de conexão
3-way handshake genérico (fonte: Tanenbaum)
(c) Duplicate CONNECTION REQUEST and duplicate ACK.
TCP - estabelecimento de conexão
Três fases
SYN
Bit SYN = 1
Número de sequência inicial aleatório (client_isn)
SYNACK
Recebe SYN
Aloca buffers e variáveis
Bit SYN = 1 e bit ACK = 1 (espera client_isn + 1)
Número de sequência inicial aleatório (server_isn)
Última fase
Recebe SYNACK
Aloca buffers e variáveis
Bit SYN = 0
ACK = server_isn + 1
TCP - fechamento de conexão
Cliente ou