Post on 17-Apr-2015
3: Camada de Transporte 3a-1
Capítulo 3: Camada de TransporteMetas do capítulo: compreender os
princípios atrás dos serviços da camada de transporte: multiplexação/
demultiplexação transferência
confiável de dados controle de fluxo controle de
congestionamento
aprender os protocolos da camada de transporte da Internet: UDP: transporte sem
conexão TCP: transporte
orientado a conexões Controle de
congestionamento do TCP
3: Camada de Transporte 3a-2
Conteúdo do Capítulo 3
3.1 Serviços da camada de transporte
3.2 Multiplexação e demultiplexação
3.3 UDP: Transporte não orientado a conexão
3.4 Princípios da transferência confiável de dados
3.5 Transporte orientado a conexão: TCP transferência
confiável controle de fluxo gerenciamento de
conexões 3.6 Princípios de
controle de congestionamento
3.7 Controle de congestionamento do TCP
3: Camada de Transporte 3a-3
Serviços e protocolos de transporte
provê comunicação lógica entre processos de aplicação executando em hospedeiros diferentes
protocolos de transporte executam em sistemas finais: lado transmissor: quebra
as mensagens das aplicações em segmentos, repassa-os para a camada de rede
lado receptor: remonta as mensagens a partir dos segmentos, repassa-as para a camada de aplicação
existem mais de um protocolo de transporte disponível para as aplicações
Internet: TCP e UDP
aplicaçãotransporte
redeenlacefísica
redeenlacefísica
aplicaçãotransporte
redeenlacefísica
redeenlacefísica
redeenlacefísica
redeenlacefísica
redeenlacefísica
transporte lógico fim a fim
3: Camada de Transporte 3a-4
Camadas deTransporte x rede camada de rede:
comunicação lógica entre hospedeiros
camada de transporte: comunicação lógica entre processos depende de, estende
serviços da camada de rede
Analogia doméstica:12 crianças enviando cartas
para 12 crianças processos = crianças mensagens da apl. =
cartas nos envelopes hospedeiros = casas protocolo de transporte
= Ann e Bill protocolo da camada de
rede = serviço postal
3: Camada de Transporte 3a-5
Protocolos da camada de transporte Internet
entrega confiável, ordenada (TCP) controle de
congestionamento controle de fluxo estabelecimento de
conexão (“setup”) entrega não confiável, não
ordenada: UDP extensão sem “frescuras”
do “melhor esforço” do IP serviços não disponíveis:
garantias de atraso garantias de largura de
banda
aplicaçãotransporte
redeenlacefísica
redeenlacefísica
aplicaçãotransporte
redeenlacefísica
redeenlacefísica
redeenlacefísica
redeenlacefísica
redeenlacefísica
transporte lógico fim a fim
3: Camada de Transporte 3a-6
Conteúdo do Capítulo 3
3.1 Serviços da camada de transporte
3.2 Multiplexação e demultiplexação
3.3 UDP: Transporte não orientado a conexão
3.4 Princípios da transferência confiável de dados
3.5 Transporte orientado a conexão: TCP transferência
confiável controle de fluxo gerenciamento de
conexões 3.6 Princípios de
controle de congestionamento
3.7 Controle de congestionamento do TCP
3: Camada de Transporte 3a-7
Multiplexação/demultiplexação
aplicação
transporte
rede
enlace
física
P1 aplicação
transporte
rede
enlace
física
aplicação
transporte
rede
enlace
física
P2P3 P4P1
host 1 host 2 host 3
= processo= socket
Entrega dos segmentos recebidos ao socket correto
Demultiplexação no receptor:reúne dados de muitos sockets, envelopa os dados com o cabeçalho (usado posteriormente para a demultiplexação)
Multiplexação no transm.:
3: Camada de Transporte 3a-8
host recebe os datagramas IP cada datagrama possui os
endereços IP da origem e do destino
cada datagrama transporta 1 segmento da camada de transporte
cada segmento possui números das portas origem e destino (lembre: números de portas bem conhecidas para aplicações específicas)
host usa os endereços IP e os números das portas para direcionar o segmento ao socket apropriado
Como funciona a demultiplexação
porta remetente porta receptor
32 bits
dados daaplicação
(mensagem)
outros campos do cabeçalho
formato de segmento TCP/UDP
3: Camada de Transporte 3a-9
Demultiplexação sem Conexões Crie sockets com
números de porta:DatagramSocket mySocket1 =
new DatagramSocket(99111);DatagramSocket mySocket2 =
new DatagramSocket(99222);
socket UDP identificado pela dupla:
(end IP dest, no. da porta destino)
Quando host recebe segmento UDP: verifica no. da porta de
destino no segmento encaminha o segmento
UDP para o socket com aquele no. de porta
Datagramas IP com diferentes endereços IP origem e/ou números de porta origem são encaminhados para o mesmo socket
3: Camada de Transporte 3a-10
Demultiplexação sem Conexões (cont)
DatagramSocket serverSocket = new DatagramSocket(6428);
ClienteIP:B
P2
cliente IP: A
P1P1P3
servidorIP: C
SP: 6428
DP: 9157
SP: 9157
DP: 6428
SP: 6428
DP: 5775
SP: 5775
DP: 6428
SP (source port) provê “endereço de retorno”
3: Camada de Transporte 3a-11
Demultiplexação Orientada a Conexões
Socket TCP identificado pela 4-dupla: endereço IP origem número da porta origem endereço IP destino número da porta destino
receptor usa todos os quatro valores para direcionar o segmento para o socket apropriado
Servidor pode dar suporte a muitos sockets TCP simultâneos: cada socket é
identificado pela sua própria 4-dupla
Servidores Web têm sockets diferentes para cada conexão cliente HTTP não persistente
terá sockets diferentes para cada pedido
3: Camada de Transporte 3a-12
Demultiplexação Orientada a Conexões (cont)
ClienteIP:B
P1
cliente IP: A
P1P2P4
servidorIP: C
SP: 9157
DP: 80
SP: 9157
DP: 80
P5 P6 P3
D-IP:CS-IP: A
D-IP:C
S-IP: B
SP: 5775
DP: 80
D-IP:CS-IP: B
3: Camada de Transporte 3a-13
Demultiplexação Orientada a Conexões: Servidor Web com Threads
ClienteIP:B
P1
cliente IP: A
P1P2
servidorIP: C
SP: 9157
DP: 80
SP: 9157
DP: 80
P4 P3
D-IP:CS-IP: A
D-IP:C
S-IP: B
SP: 5775
DP: 80
D-IP:CS-IP: B
3: Camada de Transporte 3a-14
Conteúdo do Capítulo 3
3.1 Serviços da camada de transporte
3.2 Multiplexação e demultiplexação
3.3 UDP: Transporte não orientado a conexão
3.4 Princípios da transferência confiável de dados
3.5 Transporte orientado a conexão: TCP transferência
confiável controle de fluxo gerenciamento de
conexões 3.6 Princípios de
controle de congestionamento
3.7 Controle de congestionamento do TCP
3: Camada de Transporte 3a-15
UDP: User Datagram Protocol [RFC 768]
Protocolo de transporte da Internet mínimo, “sem frescura”,
Serviço “melhor esforço”, segmentos UDP podem ser: perdidos entregues à aplicação fora
de ordem do remesso sem conexão:
não há “setup” UDP entre remetente, receptor
tratamento independente de cada segmento UDP
Por quê existe um UDP? elimina estabelecimento
de conexão (o que pode causar retardo)
simples: não se mantém “estado” da conexão no remetente/receptor
pequeno cabeçalho de segmento
sem controle de congestionamento: UDP pode transmitir o mais rápido possível
3: Camada de Transporte 3a-16
Mais sobre UDP
muito utilizado para apls. de meios contínuos (voz, vídeo) tolerantes de perdas sensíveis à taxa de
transmissão outros usos de UDP
(por quê?): DNS (nomes) SNMP (gerenciamento)
transferência confiável com UDP: incluir confiabilidade na camada de aplicação recuperação de erro
específica à apl.!
porta origem porta dest.
32 bits
Dados de aplicação
(mensagem)
Formato do segmento UDP
comprimento checksum
Comprimento embytes do
segmento UDP,incluindo cabeçalho
3: Camada de Transporte 3a-17
Checksum UDP
Remetente: trata conteúdo do
segmento como seqüência de inteiros de 16-bits
campo checksum zerado checksum: soma (adição
usando complemento de 1) do conteúdo do segmento
remetente coloca complemento do valor da soma no campo checksum de UDP
Receptor: calcula checksum do
segmento recebido verifica se checksum
computado é zero: NÃO - erro detectado SIM - nenhum erro
detectado. Mas ainda pode ter erros? Veja depois ….
Meta: detectar “erro” (e.g., bits invertidos) no segmento transmitido
3: Camada de Transporte 3a-18
Exemplo do Checksum Internet Note
Ao adicionar números, o transbordo do bit mais significativo deve ser adicionado o resultado
Exemplo: adição de dois inteiros de 16-bits
1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 01 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1
1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 01 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1
transbordo
somachecksum
3: Camada de Transporte 3a-19
Conteúdo do Capítulo 3
3.1 Serviços da camada de transporte
3.2 Multiplexação e demultiplexação
3.3 UDP: Transporte não orientado a conexão
3.4 Princípios da transferência confiável de dados
3.5 Transporte orientado a conexão: TCP transferência
confiável controle de fluxo gerenciamento de
conexões 3.6 Princípios de
controle de congestionamento
3.7 Controle de congestionamento do TCP
3: Camada de Transporte 3a-20
Princípios de Transferência confiável de dados (rdt) importante nas camadas de transporte, enlace na lista dos 10 tópicos mais importantes em redes!
características do canal não confiável determinam a complexidade de um protocolo de transferência confiável de dados (rdt)
3: Camada de Transporte 3a-21
Transferência confiável de dados (rdt): como começar
sendside
receiveside
rdt_send(): chamada de cima, (p.ex.,pela apl.). Dados recebidos p/entregar à camada sup. do receptor
udt_send(): chamada por rdt, p/ transferir pacote
pelocanal ñ confiável ao
receptor
rdt_rcv(): chamada quando pacote chega no lado receptor
do canal
deliver_data(): chamada por rdt p/
entregar dados p/ camada superior
3: Camada de Transporte 3a-22
Transferência confiável de dados (rdt): como começarIremos: desenvolver incrementalmente os lados
remetente, receptor do protocolo RDT considerar apenas fluxo unidirecional de
dados mas info de controle flui em ambos os sentidos!
Usar máquinas de estados finitos (FSM) p/ especificar remetente, receptor
estado1
estado2
evento causador da transição de estadoações executadas ao mudar de estado
estado: neste “estado” o próximo estado é
determinado unicamente pelo próximo evento
eventoações
3: Camada de Transporte 3a-23
Rdt1.0: transferência confiável usando um canal confiável
canal subjacente perfeitamente confiável não tem erros de bits não tem perda de pacotes
FSMs separadas para remetente e receptor: remetente envia dados pelo canal subjacente receptor recebe dados do canal subjacente
Wait for call from above packet = make_pkt(data)
udt_send(packet)
rdt_send(data) Wait for call from
below
rdt_rcv(packet)
transmissor receptor
3: Camada de Transporte 3a-24
Rdt2.0: canal com erros de bits
canal subjacente pode inverter bits no pacote lembre-se: checksum UDP pode detectar erros de bits
a questão: como recuperar dos erros? reconhecimentos (ACKs): receptor avisa explicitamente ao
remetente que pacote chegou bem reconhecimentos negativos (NAKs): receptor avisa
explicitamente ao remetente que pacote tinha erros remetente retransmite pacote ao receber um NAK cenários humanos usando ACKs, NAKs?
novos mecanismos em rdt2.0 (em relação ao rdt1.0): detecção de erros realimentação pelo receptor: msgs de controle (ACK,NAK)
receptor->remetente
3: Camada de Transporte 3a-25
rdt2.0: especificação da FSM
Wait for call from above
snkpkt = make_pkt(data, checksum)udt_send(sndpkt)
extract(rcvpkt,data)deliver_data(data)udt_send(ACK)
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) && isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) && isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) && corrupt(rcvpkt)
Wait for ACK or
NAK
Wait for call from
belowtransmissor
receptorrdt_send(data)
3: Camada de Transporte 3a-26
rdt2.0: operação sem erros
Wait for call from above
snkpkt = make_pkt(data, checksum)udt_send(sndpkt)
extract(rcvpkt,data)deliver_data(data)udt_send(ACK)
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) && isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) && isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) && corrupt(rcvpkt)
Wait for ACK or
NAK
Wait for call from
below
rdt_send(data)
3: Camada de Transporte 3a-27
rdt2.0: cenário com erros
Wait for call from above
snkpkt = make_pkt(data, checksum)udt_send(sndpkt)
extract(rcvpkt,data)deliver_data(data)udt_send(ACK)
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) && isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) && isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) && corrupt(rcvpkt)
Wait for ACK or
NAK
Wait for call from
below
rdt_send(data)
3: Camada de Transporte 3a-28
rdt2.0 tem uma falha fatal!O que acontece se
ACK/NAK com erro? Remetente não sabe o que
se passou no receptor! não se pode apenas
retransmitir: possibilidade de pacotes duplicados
O que fazer? remetente usa ACKs/NAKs
p/ ACK/NAK do receptor? E se perder ACK/NAK do remetente?
retransmitir, mas pode causar retransmissão de pacote recebido certo!
Lidando c/ duplicação: remetente inclui número
de seqüência p/ cada pacote
remetente retransmite pacote atual se ACK/NAK recebido com erro
receptor descarta (não entrega) pacote duplicado
Remetente envia um pacote,e então aguarda resposta do receptor
pára e espera
3: Camada de Transporte 3a-29
rdt2.1: remetente, trata ACK/NAKs c/ erro
Wait for call 0 from
above
sndpkt = make_pkt(0, data, checksum)udt_send(sndpkt)
rdt_send(data)
Wait for ACK or NAK 0 udt_send(sndpkt)
rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) ||isNAK(rcvpkt) )
sndpkt = make_pkt(1, data, checksum)udt_send(sndpkt)
rdt_send(data)
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) ||isNAK(rcvpkt) )
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt)
Wait for call 1 from
above
Wait for ACK or NAK 1
3: Camada de Transporte 3a-30
rdt2.1: receptor, trata ACK/NAKs com erro
Wait for 0 from below
sndpkt = make_pkt(NAK, chksum)udt_send(sndpkt)
rdt_rcv(rcvpkt) && not corrupt(rcvpkt) && has_seq0(rcvpkt)
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq1(rcvpkt)
extract(rcvpkt,data)deliver_data(data)sndpkt = make_pkt(ACK, chksum)udt_send(sndpkt)
Wait for 1 from below
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq0(rcvpkt)
extract(rcvpkt,data)deliver_data(data)sndpkt = make_pkt(ACK, chksum)udt_send(sndpkt)
rdt_rcv(rcvpkt) && (corrupt(rcvpkt)
sndpkt = make_pkt(ACK, chksum)udt_send(sndpkt)
rdt_rcv(rcvpkt) && not corrupt(rcvpkt) && has_seq1(rcvpkt)
rdt_rcv(rcvpkt) && (corrupt(rcvpkt)
sndpkt = make_pkt(ACK, chksum)udt_send(sndpkt)
sndpkt = make_pkt(NAK, chksum)udt_send(sndpkt)
3: Camada de Transporte 3a-31
rdt2.1: discussão
Remetente: no. de seq no pacote bastam dois nos. de
seq. (0,1). Por quê? deve checar se
ACK/NAK recebido tinha erro
duplicou o no. de estados estado deve “lembrar”
se pacote “corrente” tem no. de seq. 0 ou 1
Receptor: deve checar se
pacote recebido é duplicado estado indica se no.
de seq. esperado é 0 ou 1
note: receptor não tem como saber se último ACK/NAK foi recebido bem pelo remetente
3: Camada de Transporte 3a-32
rdt2.2: um protocolo sem NAKs
mesma funcionalidade que rdt2.1, só com ACKs
ao invés de NAK, receptor envia ACK p/ último pacote recebido bem receptor deve incluir explicitamente no. de
seq do pacote reconhecido ACK duplicado no remetente resulta na
mesma ação que o NAK: retransmite pacote atual
3: Camada de Transporte 3a-33
rdt2.2: fragmentos do transmissor e receptor
Wait for call 0 from
above
sndpkt = make_pkt(0, data, checksum)udt_send(sndpkt)
rdt_send(data)
udt_send(sndpkt)
rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || isACK(rcvpkt,1) )
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt,0)
Wait for ACK
0Fragmento da FSM do transmissor
Wait for 0 from below
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq1(rcvpkt)
extract(rcvpkt,data)deliver_data(data)sndpkt = make_pkt(ACK1, chksum)udt_send(sndpkt)
rdt_rcv(rcvpkt) && (corrupt(rcvpkt) || has_seq1(rcvpkt))
udt_send(sndpkt)
Fragmento da FSM do receptor
3: Camada de Transporte 3a-34
rdt3.0: canais com erros e perdas
Nova suposição: canal subjacente também pode perder pacotes (dados ou ACKs) checksum, no. de seq.,
ACKs, retransmissões podem ajudar, mas não serão suficientes
P: como lidar com perdas? remetente espera até
ter certeza que se perdeu pacote ou ACK, e então retransmite
eca!: desvantagens?
Abordagem: remetente aguarda um tempo “razoável” pelo ACK
retransmite se nenhum ACK for recebido neste intervalo
se pacote (ou ACK) apenas atrasado (e não perdido): retransmissão será
duplicada, mas uso de no. de seq. já cuida disto
receptor deve especificar no. de seq do pacote sendo reconhecido
requer temporizador
3: Camada de Transporte 3a-35
rdt3.0: remetentesndpkt = make_pkt(0, data, checksum)udt_send(sndpkt)start_timer
rdt_send(data)
Wait for
ACK0
rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) ||isACK(rcvpkt,1) )
Wait for call 1 from
above
sndpkt = make_pkt(1, data, checksum)udt_send(sndpkt)start_timer
rdt_send(data)
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt,0)
rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) ||isACK(rcvpkt,0) )
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt,1)
stop_timerstop_timer
timeout
udt_send(sndpkt)start_timer
timeout
rdt_rcv(rcvpkt)
Wait for call 0from
above
Wait for
ACK1
rdt_rcv(rcvpkt)
udt_send(sndpkt)start_timer
3: Camada de Transporte 3a-36
rdt3.0 em ação
3: Camada de Transporte 3a-37
rdt3.0 em ação
3: Camada de Transporte 3a-38
Desempenho de rdt3.0
rdt3.0 funciona, porém seu desempenho é muito ruim
exemplo: enlace de 1 Gbps, retardo fim a fim de 15 ms, pacote de 1KB:
Ttransmitir=8kb/pacote10**9 b/seg
= 8 microseg
pac. de 1KB a cada 30 mseg -> vazão de 33kB/seg num enlace de 1 Gbps protocolo limita uso dos recursos físicos!
U sender
= .008
30.008 = 0.00027
microseconds
L / R
RTT + L / R =
3: Camada de Transporte 3a-39
rdt3.0: stop-and-wait operation
transmissor receptor
RTT
tx último bit do pacote, t = L / R
chegada do 1º bit do pacotechegada do último bit, envia ACK
chegada do ACK, envia próximo pacote, t = RTT + L / R
00027,0008,30
008,0
/RTT
/tx
RL
RLU
transm. do 1º bit do pacote, t = 0
3: Camada de Transporte 3a-40
Protocolos “com paralelismo” (pipelined)Paralelismo (pipelining): remetente admite
múltiplos pacotes “em trânsito”, ainda não reconhecidos faixa de números de seqüência deve ser
aumentada buffers no remetente e/ou no receptor
Duas formas genéricas de protocolos com paralelismo:
Go-back-N, retransmissão seletiva
3: Camada de Transporte 3a-41
Paralelismo: maior utilização
transm. do 1º bit do pacote, t = 0
transmissor receptor
RTT
tx do último bit, t = L / R
chegada do primeiro bitchegada do último bit, envia ACK
chegada do ACK, envia próximo pacote, t = RTT + L / R
cheg. do último bit do 2o pct., envia ACKcheg. do último bit do 3o pct., envia ACK
Aumenta a utilizaçãopor um fator de 3!
0008,0008,30
024,0
/RTT
/3tx
RL
RLU
3: Camada de Transporte 3a-42
Go-back-N (GBN)Remetente: no. de seq. de k-bits no cabeçalho do pacote admite “janela” de até N pacotes consecutivos não reconhecidos
ACK(n): reconhece todos pacotes, até e inclusive no. de seq n - “ACK cumulativo” pode receber ACKs duplicados (veja receptor)
temporizador para cada pacote em trânsito timeout(n): retransmite pacote n e todos os pacotes com no. de seq maiores na janela
3: Camada de Transporte 3a-43
GBN: FSM estendida do remetente
3: Camada de Transporte 3a-44
GBN: FSM estendida do receptor
receptor simples: usa apenas ACK: sempre envia ACK para pacote
recebido bem com o maior no. de seq. em-ordem pode gerar ACKs duplicados só precisa se lembrar do expectedseqnum
pacote fora de ordem: descarta (não armazena) -> receptor não usa buffers! manda ACK de pacote com maior no. de seq em-ordem
expectedseqnum=expectedseqnum+1
3: Camada de Transporte 3a-45
GBNem ação
3: Camada de Transporte 3a-46
Retransmissão seletiva
receptor reconhece individualmente todos os pacotes recebidos corretamente armazena pacotes no buffer, conforme necessário,
para posterior entrega em-ordem à camada superior
remetente apenas re-envia pacotes para os quais ACK não recebido temporizador de remetente para cada pacote sem
ACK
janela do remetente N nos. de seq consecutivos outra vez limita nos. de seq de pacotes enviados,
mas ainda não reconhecidos
3: Camada de Transporte 3a-47
Retransmissão seletiva: janelas de remetente, receptor
3: Camada de Transporte 3a-48
Retransmissão seletiva
dados de cima: se próx. no. de seq na
janela, envia pacote
timeout(n): reenvia pacote n, reiniciar
temporizador
ACK(n) em [sendbase,sendbase+N]:
marca pacote n “recebido”
se n for menor pacote não reconhecido, avança base da janela ao próx. no. de seq não reconhecido
pacote n em [rcvbase, rcvbase+N-1]
envia ACK(n) fora de ordem: buffer em ordem: entrega (tb.
entrega pacotes em ordem no buffer), avança janela p/ próxima pacote ainda não recebido
pacote n em [rcvbase-N,rcvbase-1]
ACK(n)
senão: ignora
receptorremetente
3: Camada de Transporte 3a-49
Retransmissão seletiva em ação
3: Camada de Transporte 3a-50
Retransmissão seletiva: dilema
Exemplo: nos. de seq : 0, 1, 2, 3 tam. de janela =3
receptor não vê diferença entre os dois cenários!
incorretamente passa dados duplicados como novos em (a)
Q: qual a relação entre tamanho de no. de seq e tamanho de janela?