TCP 1 TCP Faculdade 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 congestionamento Evita que emissor congestione a rede Application process Application process Write bytes Read bytes TCP Send buffer TCP Receive buffer Segment Segment Segment Transmit segments
TCP 4 Formato do Segmento 0 4 10 16 31 SrcPort DstPort SequenceNum Acknowledgment HdrLen 0 Flags Checksum AdvertisedWindow UrgPtr Options (variable) Data
TCP 5 Estabelecimento da Ligação Active participant (client) Passive participant (server)
Controlo de Fluxo TCP 6
TCP 7 Janela Deslizante Emissor» envia dados com indicação do número de ordem do 1º byte Receptor Data (SequenceNum)» confirma recepção indicando número ordem próximo byte a receber Acknowledgment» indica espaço livre em memória AdvertisedWindow Data (SequenceNum) Sender Receiver Acknowledgment + AdvertisedWindow
Janela Deslizante Sending application Receiving application TCP 8 LastByteWritten TCP LastByteRead TCP LastByteAcked LastByteSent NextByteExpected LastByteRcvd» 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
Controlo de Fluxo Sending application TCP LastByteWritten Receiving application TCP 9 TCP LastByteRead Comprimento do buffer no emissor MaxSendBuffer no receptor MaxRcvBuffer No receptor LastByteAcked LastByteSent NextByteExpected LastByteRcvd - LastByteRead < = MaxRcvBuffer AdvertisedWindow = MaxRcvBuffer -(LastByteRcvd - LastByteRead) No Emissor LastByteWritten - LastByteAcked < = MaxSendBuffer LastByteSent - LastByteAcked < = AdvertisedWindow EffectiveWindow = AdvertisedWindow - (LastByteSent - LastByteAcked) Processo bloqueia se quer enviar (write) y bytes e (LastByteWritten - LastByteAcked) + y > MaxSenderBuffer ACK enviado como resposta à chegada de um segmento LastByteRcvd
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 RTT» RTT = a x RTT + (1-a) x SampleRTT a 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 Receiver SampleR TT SampleR 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
Controlo de Congestionamento TCP 13
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) ACKs recebidos regulam a transmissão de pacotes são o relógio da 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) 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» 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 KB 70 60 50 40 30 20 10 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 Time (seconds)
TCP 19 Arranque Lento Objectivo» Determinar capacidade de transmissão disponível 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 grande Sender Packet 1 Packet 2 Packet 3 Receiver ACK 1 Packet 4 ACK 2 Packet 5 ACK 2 Solução» Retransmissão rápida utilização de ACKs repetidos (3) Packet 6 ACK 2 ACK 2 Retransmit packet 3 ACK 6
Source Destination 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» Duplica congestionwindow em cada RTT Quando detecta perda de pacote, por timeout» threshold = ½ congestionwindow» congestionwindow=1sgm (router esvazia filas)» Pacote perdido retransmitido» ArranqueLento enquanto congwindow<threshold» Depois fase de PrevençãoDeCongestionamento
PrevençãoDeCongestionamento (Congestion Avoidance) TCP 22 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» congestionwindow=congestionwindow / 2» Fase de PrevençãoDeCongestionamento Source Destination KB 70 60 50 40 30 20 10 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 Time (seconds) 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