PTC Aula Princípios da transferência de dados confiável. (Kurose, Seções 3.4 e 3.5) 28/04/2017

Documentos relacionados
Redes de computadores e a Internet. Redes de computadores e a Internet. Prof. Gustavo Wagner. Capítulo 3. Camada de transporte

Fragmentos das máquinas de estados finitos do RDT 2.2 (fonte: Kurose)

SSC0641 Redes de Computadores

Planejamento. Revisão. Desempenho em Protocolos de Transporte

Universidade Federal de Minas Gerais Departamento de Ciência da Computação

Protocolo de transporte em tempo-real (Real- Time Transport Protocol) Definido na RFC 3350 Normalmente usado sobre o UDP Serviços

Redes de Computadores e a Internet

SSC0641 Redes de Computadores

Redes de Computadores e a Internet

PTC Aula Princípios da transferência de dados confiável 3.5 Transporte orientado para conexão: TCP

Protocolo de transporte em tempo-real (Real- Time Transport Protocol) Definido na RFC 3350 Normalmente usado sobre o UDP Serviços

Camada de Transporte. Serviços de Transporte. Desempenho em Protocolos de Transporte. Aprender sobre protocolos de transporte na Internet

Capítulo 3: Camada de Transporte

Camada de transporte. Camada de transporte

Redes de computadores e a Internet. Capítulo 3. Camada de transporte

Redes de Computadores

Capítulo 3: Camada de Transporte. Multiplexação/desmultiplexação. Serviços e protocolos de transporte. Antônio Abelém abelem@ufpa.

Serviços da camada de transporte

Capítulo 3: Camada de Transporte

3Camada de transporte

Redes de Computadores Aula 6

Redes de Computadores

EEL878 - Redes de Computadores I

Infra-Estrutura de Comunicação (IF678)

Capítulo 3 Camada de transporte

EEL878 - Redes de Computadores I. Prof. Luís Henrique Maciel Kosmalski Costa.

Serviços e Protocolos de Transporte

Capítulo 3: Camada de Transporte

Capítulo 3 Camada de transporte

Camada de Transporte

Roteiro Resumido. Camada de Transporte. Parte III. Camada de Transporte. Camada de Transporte. Redes de Computadores 25/4/2017

SSC0641 Redes de Computadores

Protocolos com paralelismo (pipelining) Pipelining: aumento da utilização

PTC Aula Transporte orientado para conexão: TCP. (Kurose, p ) (Peterson, p e ) 23/05/2017

Capítulo 3. Camada de transporte. Pearson. Todos os direitos reservados.1

Capítulo 3 Camada de transporte

Redes de computadores e a Internet

Camada de Transporte. Protocolos TCP e UDP

Camada de transporte. Serviços

Roteiro Resumido. Camada de Transporte. Parte III. Camada de Transporte. Camada de Transporte. Redes de Computadores 14/08/2015

PTC Aula A camada de transporte. (Kurose, p ) 15/03/2017

PTC Aula Princípios do controle de congestionamento 3.7 Controle de congestionamento no TCP

Redes de Computadores RES 12502

Capítulo 3 Camada de transporte

Capítulo 3. Camada de transporte

Capítulo 3: Camada de Transporte

Redes de Computadores

Capítulo 3. A camada de enlace de dados

SSC0641 Redes de Computadores

Redes de Computadores

Camada de Transporte. Serviços da camada de transportet. Multiplexagem / desmultiplexagem

Redes de Computadores

TCP - formato do segmento. Formato do segmento TCP (fonte: Kurose)

Redes de Computadores

Capítulo 3 Camada de transporte

Redes de Computadores

Redes de Computadores

Redes de Computadores Camada de Transporte Protocolo TCP

Capítulo 3: Camada de Transporte

Redes de Computadores

Camada de Transporte Transferindo Mensagem entre Processos

Camada de Transporte. Processo: Instância de uma aplicação que está. 3: Camada de Transporte 3a-1

Cap. 03 Camada de Transporte

Camada de Enlace de Dados

Redes de Computadores e Telecomunicações - Camada de Transporte

Redes de computadores. Protocolo TCP

TCP - controle de fluxo

Redes de Computadores

TCP - controle de fluxo

Camada de Enlace de Dados

Redes de Computadores Aula 5

Redes de Computadores

: TMS M

Curso de Redes de Computadores

Curso de Redes de Computadores

Redes de computadores e a Internet. Capítulo 3. Camada de transporte

Capítulo 3 Camada de transporte

Nível de Enlace. Laboratório MídiaCom - UFF Profa. Débora Christina Muchaluat Saade

Redes de Computadores. Redes de Computadores. Redes de Computadores. ü Contador de caracteres. ü Stuffing de caracteres.

Camada de Transporte. Redes Industriais Rone Ilídio UFSJ CAP

Capítulo 3 Camada de Transporte

Capítulo 3 Camada de Transporte

Nível de Enlace. Nível de Enlace. Serviços. Serviços oferecidos os nível de rede

Causas/custos do congestionamento: cenário 1

Protocolos TCP e UDP. Protocolo TCP. Protocolo TCP. A necessidade de uma comunicação segura: Transmission Control Protocol

Redes de Computadores

Camada de Enlace. OSI x IEEE. Arquitetura IEEE 802. Redes. Nível de Enlace: Controle de Erros e Fluxo Multiplexação

Redes TCP/IP. Prof. M.Sc. Alexandre Fraga de Araújo. INSTITUTO FEDERAL DO ESPÍRITO SANTO Campus Cachoeiro de Itapemirim

Curso de Redes de Computadores 2010

Redes de Computadores

TCP - multiplexação/demultiplexação

Funções da. Os principais serviços oferecidos pela camada de transporte são: Controle de conexão, Fragmentação, Endereçamento e Confiabilidade.

Camada de Transporte Parte II Gerson Porciúncula 5 semestre

Nível de Enlace. Nível de Enlace. Serviços. Serviços. Serviços. Serviços. Serviços oferecidos os nível de rede

Camada de transporte. Serviços

Capítulo 3: Camada de Transporte. Multiplexação/desmultiplexação. Multiplexação/desmultiplexação. Multiplexação/desmultiplexação: exemplos

de erros Exercícios E S T i G

AULA 3 - REDES. Prof. Pedro Braconnot Velloso

Nível de Transporte Portas, Protocolos UDP e TCP

Transcrição:

PTC 3450 - Aula 11 3.4 Princípios da transferência de dados confiável (Kurose, Seções 3.4 e 3.5) 28/04/2017 Muitos slides adaptados com autorização de J.F Kurose and K.W. Ross, All Rights Reserved

Capítulo 3: conteúdo 3.1 serviços da camada de transporte 3.2 multiplexação e desmultiplexação 3.3 transporte sem conexão: UDP 3.4 princípios da transferência de dados confiável 3.5 transporte conectado a transporte: TCP estrutura dos segmentos transferência de dados confiável controle de fluxo gerenciamento de conexão 3.6 princípios do controle de congestionamento 3.7 controle de congestionamento no TCP Camada de Transporte 3-2

RDT Reliable Data Transfer Um dos aspectos que permeiam todas a pilha de protocolos é o de transferência confiável de dados (RDT reliable data transfer) Entre fonte e destino, pacotes podem passar por diversos enlaces diferentes, com características e probabilidade de erros muito diferentes Podem ser descartados em cada um dos roteadores no meio da rota Podem ser corrompidos Podem percorrer rotas diferentes, tendo atrasos diferentes Mesmo assim, muitas aplicações são viáveis apenas se garantese que todos os pacotes sejam entregues e em ordem: comércio eletrônico, e-mail, transferência de arquivos de dados, etc. Nessa aula, vamos estudar técnicas que são utilizadas por diversos protocolos para implementar o RDT Em seguida, como exemplo, vamos ver como o TCP implementa essas técnicas

Princípios da transferência confiável de dados RDT usada nas camadas de aplicação, transporte e enlace Tópico de importância central na área de redes! características do canal não confiável determinarão complexidade do protocolo de transferência de dados confiável (rdt - reliable data transfer protocol)

Princípios da transferência confiável de dados importante nas camadas de aplicação, transporte e enlace na lista top-10 dos tópicos mais importantes em redes! características do canal não confiável determinarão complexidade do protocolo de transferência de dados confiável (RDT - reliable data transfer protocol)

Princípios da transferência confiável de dados importante nas camadas de aplicação, transporte e enlace na lista top-10 dos tópicos mais importantes em redes! características do canal não confiável determinarão complexidade do protocolo de transferência de dados confiável (RDT - reliable data transfer protocol)

Transferência confiável de dados: começando rdt_send(): chamada de cima, por aplicação. Passados dados a serem entregues à camada superior do destinatário (reliable data transfer) deliver_data(): chamado pelo rdt para entregar dados para camada superior lado transmissor lado receptor udt_send(): chamado pelo rdt, para transferir pacote sobre canal não confiável ao destinatário (unreliable data transfer) rdt_rcv(): chamado quando pacote chega no lado rec. do canal

Transferência confiável de dados: começando vamos: desenvolver lados transmissor e receptor do protocolo RDT de forma incremental considerar apenas transferência unidirecional de dados mas informações de controle fluirão em ambas direções! usar máquinas de estado finito (FSM Finite State Machine) para especificar algoritmos no transmissor e receptor estado: quando nesse estado próximo estado unicamente determinado pelo próximo evento estado 1 evento que causa transição de estado ações tomadas na transição de estado evento ações estado 2

rdt1.0: RDT sobre canal confiável canal subjacente perfeitamente confiável não há erros em bits não há perdas de pacotes separar FSMs para transmissor e receptor: remetente envia dados para o canal subjacente destinatário lê dados do canal subjacente Espera por chamado de cima rdt_send(data) packet = make_pkt(data) udt_send(packet) Espera por chamado de baixo rdt_rcv(packet) extract (packet,data) deliver_data(data) transmissor receptor Essa flecha tracejada indica o estado inicial da máquina!

rdt2.0: canal com erros em bits canal subjacente pode corromper bits em pacote, mas não perde ou muda ordem de pacotes podemos usar códigos (por exemplo, CRC) para detectar erros em bits a questão: como se recuperar de erros? acknowledgements (ACKs): receiver explicitly tells sender that pkt received OK negative acknowledgements (NAKs): receiver explicitly tells sender that pkt had errors sender retransmits pkt on receipt of NAK Como humanos se recuperam de erros durante conversação? new mechanisms in rdt2.0 (beyond rdt1.0): error detection receiver feedback: control msgs (ACK,NAK) rcvr- >sender

rdt2.0: canal com erros em bits canal subjacente pode corromper bits em pacote, mas não perde ou muda ordem de pacotes podemos usar códigos (por exemplo, CRC) para detectar erros em bits a questão: como se recuperar de erros? positive acknowledgements (ACKs): receptor explicitamente conta a transmissor que pacote recebido não possui erros negative acknowledgements (NAKs): receptor explicitamente conta a transmissor que pacote tem erros transmissor retransmite pacote quando recebe NAK Protocolos ARQ (Automatic Repeat request) novos mecanismos em rdt2.0 (evolução do rdt1.0): detecção de erros realimentação: mensagens de controle (ACK, NAK) do receptor para transmissor retransmissão: pacotes com erro são retransmitidos

rdt2.0: especificação por FSM rdt_send(data) sndpkt = make_pkt(data, CRC) Espera por chamado de cima isack(rcvpkt) L Transmissor Espera por ACK ou NAK isnak(rcvpkt) Receptor corrupt(rcvpkt) udt_send(nak) Espera por chamado de baixo notcorrupt(rcvpkt) extract(rcvpkt,data) deliver_data(data) udt_send(ack)

rdt2.0: operação sem erros rdt_send(data) snkpkt = make_pkt(data, CRC) Espera por chamado de cima Espera por ACK ou NAK isnak(rcvpkt) corrupt(rcvpkt) udt_send(nak) isack(rcvpkt) L Espera por chamado de baixo notcorrupt(rcvpkt) extract(rcvpkt,data) deliver_data(data) udt_send(ack)

rdt2.0: cenário com erro rdt_send(data) snkpkt = make_pkt(data, CRC) Espera por chamado de cima Espera por ACK ou NAK isnak(rcvpkt) corrupt(rcvpkt) udt_send(nak) isack(rcvpkt) L Espera por chamado de baixo Tudo ok??? Não!!! notcorrupt(rcvpkt) extract(rcvpkt,data) deliver_data(data) udt_send(ack)

rdt2.0 tem um defeito fatal! o que acontece se ACK/NAK corrompido? Transmissor não sabe o que aconteceu no receptor! Pode simplesmente retransmitir? Não! Possível duplicata! Como resolver? lidando com duplicatas: Transmissor retransmite pacote corrente se ACK/NAK corrompido Transmissor adiciona número sequencial a cada pacote Receptor descarta (não entrega) pacote duplicado stop and wait Transmissor envia um pacote, então espera por resposta do receptor

rdt2.1: Transmissor, lidando com ACK/NAKs corrompidos rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isack(rcvpkt) L ( corrupt(rcvpkt) isnak(rcvpkt) ) rdt_send(data) sndpkt = make_pkt(0, data, CRC) Espera por chamado 0 de cima Espera por ACK ou NAK 1 rdt_send(data) ( corrupt(rcvpkt) isnak(rcvpkt) ) 0 Espera por ACK ou NAK Espera por chamado 1 de cima sndpkt = make_pkt(1, data, CRC) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isack(rcvpkt) L

rdt2.1: Receptor, lidando com ACK/NAKs corrompidos corrupt(rcvpkt) sndpkt = make_pkt(nak, CRC) not corrupt(rcvpkt) && has_seq1(rcvpkt) sndpkt = make_pkt(ack, CRC) notcorrupt(rcvpkt) && has_seq0(rcvpkt) extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(ack, CRC) Esperando por 0 de baixo Esperando por 1 de baixo notcorrupt(rcvpkt) && has_seq1(rcvpkt) extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(ack, CRC) corrupt(rcvpkt) sndpkt = make_pkt(nak, CRC) not corrupt(rcvpkt) && has_seq0(rcvpkt) sndpkt = make_pkt(ack, CRC)

rdt2.1: Discussão Transmissor: # seq adicionado ao pacote 2 # s seq. (0,1) são suficientes. Por que? Precisa verificar se ACK/NAK recebido corrompido Dobro do número de estados Estado precisa lembrar se pacote esperado deve ter # seq 0 ou 1 Receptor: Precisa checar se pacote recebido é duplicata estado indica se 0 ou 1 é # seq do pacote esperado Precisa acrescentar dígitos de verificação de paridade no ACK ou NAK ACK ou NAK não precisa de número sequencial

rdt2.2: Um protocolo sem NAK Mesma funcionalidade do rdt2.1, usando apenas ACKs Em vez de NAK, receptor envia ACK para último pacote recebido OK Receptor precisa incluir explicitamente número sequencial do pacote associado ao ACK ACK duplicado no transmissor resulta na mesma ação do NAK: retransmite pacote atual

rdt2.2: FSM para transmissor e receptor (corrupt(rcvpkt) has_seq1(rcvpkt)) Espera por 0 de baixo rdt_send(data) sndpkt = make_pkt(0, data, CRC) Espera por chamado 0 de cima Espera por ACK 0 fragmento da FSM do transmissor fragmento da FSM do receptor ( corrupt(rcvpkt) isack(rcvpkt,1) ) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isack(rcvpkt,0) L notcorrupt(rcvpkt) && has_seq1(rcvpkt) extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(ack,1, chksum)

rdt3.0: Canais com erros e perdas de pacotes nova hipótese: canal subjacente também pode perder pacotes (dados, ACKs) CRC, # seq., ACKs, retransmissões ajudarão mas não são suficientes abordagem: transmissor espera tempo razoável por ACK retransmite se ACK não é recebido nesse tempo se pacote (ou ACK) apenas atrasado (não perdido): retransmissão será duplicada, mas # s seq. já lidam com isso destinatário precisa especificar # seq de pacote sendo ACKed requer temporizador de contagem regressiva

rdt3.0: FSM do Transmissor (Receptor é Exercício) rdt_rcv(rcvpkt) L rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isack(rcvpkt,1) stop_timer timeout start_timer ( corrupt(rcvpkt) isack(rcvpkt,0) ) L Espera por chamado 0 de cima Espera por ACK1 rdt_send(data) sndpkt = make_pkt(0, data, CRC) start_timer rdt_send(data) Espera por ACK0 sndpkt = make_pkt(1, data, CRC) start_timer Espera por chamado 1 de cima ( corrupt(rcvpkt) isack(rcvpkt,1) ) L timeout start_timer rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isack(rcvpkt,0) stop_timer rdt_rcv(rcvpkt) L

rdt3.0 em ação (protocolo bit alternante) transmissor receptor envia pct0 recebe ack0 envia pct1 recebe ack1 envia pct0 pct0 ack0 pct1 ack1 pct0 ack0 (a) sem perda recebe pct0 envia ack0 recebe pct1 envia ack1 recebe pct0 envia ack0 transmissor envia pct0 recebe ack0 envia pct1 timeout reenvia pct1 recebe ack1 envia pct0 pct0 ack0 pct1 X perdido pct1 ack1 pct0 ack0 receptor recebe pct0 envia ack0 recebe pct1 envia ack1 recebe pct0 envia ack0 (b) perda de pacote

rdt3.0 em ação transmissor envia pct0 recebe ack0 envia pct1 timeout reenvia pct1 recebe ack1 envia pct0 pct0 ack0 pct1 ack1 X perdido pct1 ack1 pct0 ack0 receptor recebe pct0 envia ack0 rcb pct1 envia ack1 rcb pct1 (detecta duplicata) envia ack1 rcb pct0 envia ack0 transmissor envia pct0 recebe ack0 envia pct1 timeout reenvia pct1 recebe ack1 envia pct0 recebe ack1 não faz nada pct0 ack0 pct1 ack1 pct1 pct0 ack1 ack0 receptor recebe pct0 envia ack0 recebe pct1 envia ack1 recebe pct1 (detecta duplicata) envia ack1 recebe pct0 envia ack0 (c) perda de ACK (d) timeout prematuro/ ACK atrasado

Desempenho do rdt 3.0 rdt 3.0 está correto, mas desempenho sofrível! Exemplo: Enlace de 1 Gbps, atraso de propagação15 ms, pacote de 8 000 bits Atraso de Transmissão: d L 8000 bits = = = R 10 bits/ s trans 9 8 ms U transmissor : utilização fração do tempo em que transmissor está ocupado enviando L 0.008 U transmissor = R = = L 30.008 RTT + R 0.00027 Vazão Um pacote enviado a cada aproximadamente 30 ms: vazão de 267 kbps em um enlace de 1 Gbps (!!!) Protocolo de rede limita uso de recurso físico! Preço pago para ter RDT (muito caro?)

rdt3.0: operação stop-and-wait 1 o bit do pacote transmitido, t = 0 último bit do pacote transmitido, t = L / R transmissor receptor RTT 1 o bit do pacote chega último bit do pacote chega, envia ACK ACK chega, envia próximo pacote, t = RTT + L / R L 0.008 U t ransmissor = R = = L 30.008 RTT + R 0.00027

Protocolos com paralelismo (pipelining) Pipelining: transmissor permite múltiplos, pacotes inflight, ainda não reconhecidos (acknowledged) intervalo dos números sequenciais precisa ser aumentada buffers no transmissor e/ou receptor 2 formas genéricas de protocolos com paralelismo: go-back-n, repetição seletiva

Paralelismo: utilização aumentada 1 o bit do pacote transmitido, t = 0 último bit transmitido, t = L / R transmissor receptor RTT ACK chega, envia próximo pacote, t = RTT + L / R 1 o bit do pacote chega último bit do 1 o pacote chega, envia ACK último bit do 2 o pacote chega, envia ACK último bit do 3 o pacote chega, envia ACK paralelismo com 3 pacotes aumenta utilização por um fator de 3! Qual a utilização do remetente agora? L 3 0.024 U t ran smissor = R = = L 30.008 RTT + R 0.00081

Protocolos com paralelismo: visão geral Go-back-N (GBN): Transmissor pode ter até N pacotes que ainda não retornaram ACKs Receptor envia ACK acumulativo ACK x implica que todos os pacotes até x foram recebidos Transmissor tem apenas um temporizador associado ao pacote não reconhecido mais antigo quando tempo expira, retransmite todos pacotes não reconhecidos Repetição Seletiva (RS): Transmissor pode ter até N pacotes que ainda não retornaram ACKs Receptor envia ACK individual para cada pacote Transmissor mantém temporizador para cada pacote ainda não reconhecido quando tempo expira, retransmite apenas aquele pacote associado com o temporizador expirado

Go-Back-N: Transmissor número sequencial de k-bits no cabeçalho do pacote janela de até N pacotes consecutivos ainda não reconhecidos permitida ACK(n): quando recebido, reconhece recepção de todos os pacotes com # seq menor ou igual a n ACK acumulativo pode receber ACKs duplicados (ver receptor) temporizador para pacote não reconhecido mais antigo timeout(n): retransmite pacote n e todos pcts com # seq mais alto na janela É um protocolo de janela deslizante

GBN: FSM estendido (com variáveis) do transmissor rdt_send(data) L send_base=1 nextseqnum=1 rdt_rcv(rcvpkt) && corrupt(rcvpkt) L if (nextseqnum < send_base+n) { sndpkt[nextseqnum] = make_pkt(nextseqnum,data,crc) udt_send(sndpkt[nextseqnum]) if (send_base == nextseqnum) start_timer nextseqnum++ } else refuse_data(data) Esperar notcorrupt(rcvpkt) timeout start_timer udt_send(sndpkt[send_base]) udt_send(sndpkt[send_base+1]) udt_send(sndpkt[nextseqnum-1]) send_base = getacknum(rcvpkt)+1 If (send_base == nextseqnum) stop_timer else start_timer

GBN: FSM estendido do receptor L expectedseqnum=1 sndpkt = make_pkt(0,ack,crc) default udt_send(sndpct) Esperar rdt_rcv(rcvpct) && notcurrupt(rcvpkt) && hasseqnum(rcvpkt, expectedseqnum) extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(expectedseqnum,ack,crc) expectedseqnum++ Sempre envia ACK para pacote corretamente recebido com maior # seq em ordem (sem lacunas) pode gerar ACKs duplicados precisa apenas guardar expectedseqnum pacotes fora de ordem: descarta (não armazena): não há buffer no destinatário! reenvia ACK pacote com maior número sequencial em ordem

GBN em ação janela transmissor (N=4) 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 transmissor envia pacote 0 envia pacote 1 envia pacote 2 envia pacote 3 (espera) rcb ack0, envia pct4 rcb ack1, envia pct5 ignora ACK duplicado pct 2 timeout envia pct2 envia pct3 envia pct4 envia pct5 Xperdido receptor recebe pacote 0, envia ack0 recebe pacote 1, envia ack1 recebe pacote 3, descarta, (re)envia ack1 recebe pacote 4, descarta, (re)envia ack1 recebe pacote 5, descarta, (re)envia ack1 rcb pct2, entrega, envia ack2 rcb pct3, entrega, envia ack3 rcb pct4, entrega, envia ack4 rcb pct5, entrega, envia ack5 Ver: http://media.pearsoncmg.com/aw/ecs_kurose_compnetwork_6/video_applets/gbnindex.html