tcp - faculdade de engenharia da universidade do...
TRANSCRIPT
TCP 1
TCP
Faculdade de Engenharia da Universiadade do PortoFaculdade de Engenharia da Universiadade do Porto
Manuel P. Ricardo
TCP 2
Bibliografia
L. Peterson, B. Davie, “Computer Networks – A Systems Approach”, Morgan Kaufamnn, 2000 (Sec. 5.1, 5.2, 6.1, 6.2, 6.3 e 6.4)
TCP 3
TCP
♦ Características» Orientado às ligações
» Full-duplex
» Fluxo de bytes– aplicação escreve bytes
– TCP envia segmentos
– aplicação lê bytes
♦ Mecanismos de controlo» Controlo de fluxo
Evita que emissor congestione receptor
» Controlo de congestionamentoEvita que emissor congestione a rede
– aplicação lê bytes
Application process
Writebytes
TCPSend buffer
Segment Segment Segment
Transmit segments
Application process
Readbytes
TCPReceive buffer
…
… …
TCP 4
Formato do Segmento
SrcPort DstPort
SequenceNum
Acknowledgment
0 4 10 16 31
Options (variable)
Data
Checksum
HdrLen 0 Flags
UrgPtr
AdvertisedWindow
TCP 5
Estabelecimento da Ligação
Active participant(client)
Passive participant(server)
TCP 6
Controlo de FluxoControlo de Fluxo
TCP 7
Janela Deslizante
♦ Emissor » envia dados com indicação do número de ordem do 1º byte
Data (SequenceNum)
♦ Receptor » confirma recepção indicando número ordem próximo byte a receber» confirma recepção indicando número ordem próximo byte a receber
Acknowledgment
» indica espaço livre em memóriaAdvertisedWindow
Sender
Data (SequenceNum)
Acknowledgment +AdvertisedWindow
Receiver
TCP 8Janela Deslizante Sending application
LastByteWritten
TCP
LastByteSentLastByteAcked
Receiving application
LastByteRead
TCP
LastByteRcvdNextByteExpected
» No emissor– LastByteAcked < = LastByteSent
– LastByteSent < = LastByteWritten
– Buferiza bytes entre LastByteAcked e LastByteWritten
» No receptor– LastByteRead < NextByteExpected
– NextByteExpected < = LastByteRcvd +1
– Buferiza bytes entre NextByteRead e LastByteRcvd
TCP 9
Controlo de Fluxo
♦ Comprimento do buffer – no emissor � MaxSendBuffer
– no receptor � MaxRcvBuffer
♦ No receptorLastByteRcvd - LastByteRead < = MaxRcvBuffer
Sending application
LastByteWrittenTCP
LastByteSentLastByteAcked
Receiving application
LastByteReadTCP
LastByteRcvdNextByteExpected
LastByteRcvd - LastByteRead < = MaxRcvBuffer
AdvertisedWindow = MaxRcvBuffer -(LastByteRcvd - Las tByteRead )
♦ No EmissorLastByteWritten - LastByteAcked < = MaxSendBuffer
LastByteSent - LastByteAcked < = AdvertisedWindow
EffectiveWindow = AdvertisedWindow - (LastByteSent - LastByteAcked)
Processo bloqueia se quer enviar (write) y bytes e(LastByteWritten - LastByteAcked) + y > MaxSenderBuf fer
♦ ACKenviado como resposta à chegada de um segmento
TCP 10
Retransmissão Adaptativa (Algoritmo Original)
♦ RTT � Round Trip Time (tempo de ida e volta)
♦ Medida de sampleRTT para cada par segmento/ACK
Cálculo da média pesada do ♦ Cálculo da média pesada do RTT
» RTT = a x RTT + (1-a) x SampleRTTa em [0.8, 0.9]
♦ TimeOut = 2 x RTT
TCP 11
Melhoria de Karn/Partridge
♦ Não mede sampleRTT em caso de retransmissão
♦ Duplica valor do timeout em cada retransmissão
Sender Receiver Sender ReceiverSender Receiver
Sam
pleR
TT
Sender Receiver
Sam
pleR
TT
TCP 12
Melhoria de Jacobson/ Karels
♦ Novo método de cálculo do RTT
» Dif = sampleRTT - RTT
» Desv = Desv + p ( |Dif| - Desv)– p em [0,1]
» RTT = RTT + ( p x Dif)
♦ Considera variância no cálculo do timeout» TimeOut = m x RTT + f x Desv
» m = 1, f = 4
♦ Mecanismo de timeout preciso» importante para controlo de congestionamento
TCP 13
Controlo de CongestionamentoControlo de Congestionamento
TCP 14
TCP - Controlo de Congestionamento
♦ Princípio de funcionamento» Cada fonte determina a sua capacidade de geração de tráfego
» Baseada em critérios de – justiça entre fluxos
– utilização máxima de recursos
(capacidade de comutação, capacidade de transporte dos links) (capacidade de comutação, capacidade de transporte dos links)
♦ ACKs recebidos regulam a transmissão de pacotes� são o relógioda fonte
TCP 15
Subida Aditiva/Descida Multiplicativa
♦ Mudanças na capacidade de canal � ajuste na transmissão
♦ Nova variável de estado por ligação � CongestionWindow» Limita a quantidade de dados em trânsito
– MaxWin = MIN(CongestionWindow, AdvertisedWindow)– MaxWin = MIN(CongestionWindow, AdvertisedWindow)
– EffWin = MaxWin - (LastByteSent - LastByteAcked)
♦ Objectivo» Se congestionamento da rede diminui � aumenta CongestionWindow
» Se congestionamento da rede aumenta � diminui CongestionWindow
♦ Débito (byte/s) � CongestionWindow/RTT
TCP 16
Subida Aditiva/Descida Multiplicativa
♦ Como sabe a fonte se/quando a rede está congestionada?
� Por ocorrência de timeout!» Redes fixas � pacotes raramente sofrem erros
» Ocorrência de timeout � perda de pacote» Ocorrência de timeout � perda de pacote
» Perda de pacotes � congestionamento– Filas nos routers cheias
TCP 17
Subida Aditiva/Descida Multiplicativa
♦ Algoritmo» Incrementa CongestionWindow de 1 pacote
– Por cada RTT (Round Trip Time) � Subida linear
» Divide CongestionWindow por 2– Sempre que há perda de pacote � Descida multiplicativa
Source Destination
♦ Na prática,» Incrementa ligeiramente por ACK recebido» Increment= MSS * (MSS / CongestionWindow)
» CongestionWindow += Increment
» MSS � Maximum Segment Size
…
TCP 18
Subida Aditiva/Descida Multiplicativa
♦ Funcionamento Dente de Serra
607060
20
1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0
KB
Time (seconds)
304050
10
10.0
TCP 19
Arranque Lento ☺♦ Objectivo
» Determinar capacidade de transmissão disponível
♦ Aproximação
Source Destination
♦ Aproximação» Começar com CongestionWindow = 1 pacote
» Duplicar CongestionWindow em cada RTT
…
TCP 20
Retransmissão e Recuperação Rápidas
♦ Problema» Se timeout TCP grande
� periodo de inactividade pode ser grandePacket 1
Packet 2
Packet 3
Packet 4
ACK 1
ACK 2
ACK 2
Sender Receiver
♦ Solução» Retransmissão rápida
� utilização de ACKs repetidos (3)
Packet 5
Packet 6
Retransmitpacket 3
ACK 2
ACK 2
ACK 6
ACK 2
TCP 21
TCP – ArranqueLento
♦ TCP tem congestionWindow» número de pacotes em trânsito, sem causar congestionamento
» Novos pacotes enviados se permitidos por– congestionWindow , e
– Advertisedwindow , do receptor
♦ ArranqueLento ☺» Emissor começa com congestionWindow=1sgm
Source Destination
…» Emissor começa com congestionWindow=1sgm
» Duplica congestionWindow em cadaRTT
♦ Quando detecta perda de pacote, por timeout» threshold = ½ congestionWindow
» congestionWindow=1sgm(router esvazia filas)
» Pacote perdido retransmitido
» ArranqueLentoenquanto
congWindow<threshold
» Depois � fase de PrevençãoDeCongestionamento
…
TCP 22PrevençãoDeCongestionamento(Congestion Avoidance)
♦ PrevençãoDeCongestionamento(subida aditiva)
» Incrementa congestionWindow de 1 sgm, por cada RTT
♦ Detecção de perda de pacote, por recepção de 3 ACKs duplicados» Deduz que pacote se perdeu,
– não por congestionamento severo, porque segm seguintes chegaram destino
» Retransmite pacote perdido Source Destination» Retransmite pacote perdido
» congestionWindow=congestionWindow / 2
» Fase de PrevençãoDeCongestionamento
Source Destination
…
60
20
1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0
KB
Time (seconds)
70
304050
10
10.0
TCP 23
TCP – Controlo de Congestionamento
♦ Na realidade, um pouco mais complexo
♦ RFC 2001, “TCP Slow Start, Congestion Avoidance, Fast Retransmit, and Fast Recovery Algorithms”