Escolar Documentos
Profissional Documentos
Cultura Documentos
Metas do captulo:
entender os
aprender sobre os
princpios atrs dos protocolos da camada
servios da camada de transporte da
de transporte: Internet:
multiplexao/
UDP: transporte no
demultiplexao
orientado a conexes
transferncia
TCP: transporte
confivel de dados
orientado a conexes
controle de fluxo
Controle de
controle de congestionamento do
congestionamento TCP
3: Camada de Transporte 1
Contedo do Captulo 3
3.1 Introduo e 3.5 Transporte
servios de camada de orientado para
transporte conexo: TCP
3.2 Multiplexao e 3.6 Princpios de
demultiplexao controle de
3.3 Transporte no congestionamento
orientado para 3.7 Controle de
conexo: UDP congestionamento no
3.4 Princpios da TCP
transferncia
confivel de dados
3: Camada de Transporte 2
Servios e protocolos de transporte
3: Camada de Transporte 3
Camadas de Transporte x rede
camada de rede: Analogia domstica:
12 crianas na casa de Ana
comunicao lgica enviando cartas para 12
entre hospedeiros crianas na casa de Bill
camada de transporte: hospedeiros = casas
processos = crianas
comunicao lgica
mensagens da apl. = cartas nos
entre os processos envelopes
depende de, estende protocolo de transporte = Ana
servios da camada de e Bill que demultiplexam para
rede suas crianas
protocolo da camada de rede =
servio postal
3: Camada de Transporte 4
Protocolos da camada de transporte Internet
(TCP)
transporte
rede
enlace rede
controle de fsica
rede enlace
fsica
congestionamento enlace
fsica
controle de fluxo rede
enlace
estabelecimento de conexo fsica
rede
(setup) enlace
fsica
rede
entrega no confivel, no enlace
fsica
ordenada: UDP
extenso sem gorduras do aplicao
3: Camada de Transporte 5
Contedo do Captulo 3
3.1 Introduo e 3.5 Transporte
servios de camada de orientado para
transporte conexo: TCP
3.2 Multiplexao e 3.6 Princpios de
demultiplexao controle de
3.3 Transporte no congestionamento
orientado para 3.7 Controle de
conexo: UDP congestionamento no
3.4 Princpios da TCP
transferncia
confivel de dados
3: Camada de Transporte 6
Multiplexao/demultiplexao
Multiplexao no transm.:
rene dados de muitos sockets,
adiciona o cabealho de transporte Demultiplexao no receptor:
(usado posteriormente para a Usa info do cabealho para
demultiplexao) entregar os segmentos
recebidos aos sockets corretos
aplicao
3: Camada de Transporte 7
Como funciona a demultiplexao
computador recebe os
datagramas IP 32 bits
cada datagrama possui porta origem porta destino
os endereos IP da
origem e do destino
outros campos
cada datagrama
transporta um segmento do cabealho
da camada de
transporte
cada segmento possui dados da
nmeros das portas
origem e destino aplicao
(mensagem/payload)
O hospedeiro usa os
endereos IP e os
nmeros das portas para
direcionar o segmento ao formato de segmento
socket apropriado TCP/UDP
3: Camada de Transporte 8
Demultiplexao no orientada a
conexes
Lembrete: socket criado possui Lembrete: ao criar um
nmero de porta local ao host: datagrama para enviar para
DatagramSocket mySocket1 = new um socket UDP, deve
DatagramSocket(12534); especificar:
Endereo IP de destino
Nmero da porta de destino
3: Camada de Transporte 9
Demultiplexao no orientada a
conexes: exemplo
DatagramSocket
serverSocket = new
DatagramSocket DatagramSocket
mySocket2 = new DatagramSocket
mySocket1 = new
DatagramSocket (6428); DatagramSocket
(9157); application
(5775);
application application
P1
P3 P4
transport
transport transport
network
network link network
link physical link
physical physical
3: Camada de Transporte 11
Demultiplexao Orientada a
Conexes: exemplo
application
application application
P4 P5 P6
P3 P2 P3
transport
transport transport
network
network link network
link physical link
physical server: IP physical
address B
3: Camada de Transporte 13
Contedo do Captulo 3
3.1 Introduo e 3.5 Transporte
servios de camada de orientado para
transporte conexo: TCP
3.2 Multiplexao e 3.6 Princpios de
demultiplexao controle de
3.3 Transporte no congestionamento
orientado para 3.7 Controle de
conexo: UDP congestionamento no
3.4 Princpios da TCP
transferncia
confivel de dados
3: Camada de Transporte 14
UDP: User Datagram Protocol [RFC 768]
3: Camada de Transporte 15
UDP: Cabealho do segmento
Comprimento em bytes do
segmento UDP,
incluindo cabealho Por qu existe um UDP?
elimina estabelecimento de
32 bits conexo (que pode causar
porta origem porta dest. retardo)
simples: no mantm
comprimento checksum
estado da conexo nem no
remetente, nem no
receptor
cabealho de segmento
reduzido
Dados de
No h controle de
aplicao
congestionamento: UDP
(mensagem) pode transmitir to rpido
quanto desejado (e
possvel)
Formato do segmento UDP
3: Camada de Transporte 16
Soma de Verificao (checksum)
UDP
Objetivo: detectar erros (ex.: bits trocados) no
segmento transmitido
Transmissor: Receptor:
trata contedo do
calcula checksum do
segmento como sequncia
segmento recebido
de inteiros de 16-bits
verifica se o checksum
checksum: soma (adio
calculado bate com o valor
usando complemento de 1)
recebido:
do contedo do segmento
NO - erro detectado
transmissor coloca
complemento do valor da SIM - nenhum erro
soma no campo checksum detectado. Mas ainda
do UDP pode ter erros? Veja
depois .
3: Camada de Transporte 17
Exemplo do Checksum Internet
Note que:
Ao adicionar nmeros, o transbordo (vai um) do
bit mais significativo deve ser adicionado ao
resultado
Exemplo: adio de dois inteiros de 16-bits
1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0
1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
transbordo 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1
soma 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0
soma de 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1
verificao 3: Camada de Transporte 18
Contedo do Captulo 3
3.1 Introduo e 3.5 Transporte
servios de camada de orientado para
transporte conexo: TCP
3.2 Multiplexao e 3.6 Princpios de
demultiplexao controle de
3.3 Transporte no congestionamento
orientado para 3.7 Controle de
conexo: UDP congestionamento no
3.4 Princpios da TCP
transferncia
confivel de dados
3: Camada de Transporte 19
Princpios de Transferncia confivel de
dados (rdt)
importante nas
camadas de
transporte e de
enlace
na lista dos 10
tpicos mais
importantes em
redes!
caractersticas
do canal no
confivel
determinam a
complexidade de
um protocolo de
transferncia
confivel de
dados (rdt)
3: Camada de Transporte 20
Transferncia confivel: o ponto de
partida
rdt_send(): chamada de cima, (ex.: deliver_data(): chamada pelo
pela apl.). Passa dados p/ serem rdt para entregar dados p/ camada
entregues camada sup. do receptor superior
lado lado
transmissor receptor
3: Camada de Transporte 22
rdt1.0: transferncia confivel sobre canais
confiveis
canal de transmisso
perfeitamente
confivel
no h erros de bits
no h perda de pacotes
FSMs separadas para
transmissor e
receptor:
transmissor envia dados
pelo canal subjacente
receptor l os dados do
canal subjacente
3: Camada de Transporte 23
rdt2.0: canal com erros de bits
canal subjacente pode trocar valores dos bits num pacote
lembrete: checksum UDP pode detectar erros de bits
a questo: como recuperar esses erros?
3: Camada de Transporte 24
rdt2.0: canal com erros de bits
canal subjacente pode trocar valores dos bits num pacote
lembre-se: checksum UDP pode detectar erros de bits
a questo: como recuperar esses erros?
reconhecimentos (ACKs): receptor avisa explicitamente ao
transmissor que o pacote foi recebido corretamente
reconhecimentos negativos (NAKs): receptor avisa
explicitamente ao transmissor que o pacote tinha erros
transmissor reenvia o pacote ao receber um NAK
novos mecanismos no rdt2.0 (em relao ao rdt1.0):
deteco de erros
Realimentao (feefback): mensagens de controle (ACK,NAK) do
receptor para o transmissor
3: Camada de Transporte 25
rdt2.0: especificao da FSM
Animao
no slide
seguinte!
3: Camada de Transporte 26
rdt2.0: operao com ausncia de
erros
rdt_send(data)
snkpkt = make_pkt(data, checksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
isNAK(rcvpkt)
Wait for Wait for rdt_rcv(rcvpkt) &&
call from ACK or udt_send(sndpkt) corrupt(rcvpkt)
above NAK
udt_send(NAK)
rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)
3: Camada de Transporte 27
rdt2.0: cenrio de erro
rdt_send(data)
snkpkt = make_pkt(data, checksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
isNAK(rcvpkt)
Wait for Wait for rdt_rcv(rcvpkt) &&
call from ACK or udt_send(sndpkt) corrupt(rcvpkt)
above NAK
udt_send(NAK)
rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)
3: Camada de Transporte 28
rdt2.0 tem uma falha fatal!
O que acontece se o Lidando c/ duplicatas:
ACK/NAK for transmissor retransmite o
corrompido? ltimo pacote se ACK/NAK
chegar com erro
Transmissor no sabe o que
transmissor inclui nmero
se passou no receptor!
de sequncia em cada
no pode apenas pacote
retransmitir: possibilidade receptor descarta (no
de pacotes duplicados entrega a aplicao)
pacotes duplicados
pare e espera
Transmissor envia um pacote,
e ento aguarda resposta
do receptor
3: Camada de Transporte 29
rdt2.1: transmissor, trata ACK/NAKs
corrompidos
3: Camada de Transporte 30
rdt2.1: receptor, trata ACK/NAKs
corrompidos
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) rdt_rcv(rcvpkt) && (corrupt(rcvpkt)
sndpkt = make_pkt(NAK, chksum) sndpkt = make_pkt(NAK, chksum)
udt_send(sndpkt) udt_send(sndpkt)
Esperar Esperar
rdt_rcv(rcvpkt) && 0 de 1 de rdt_rcv(rcvpkt) &&
not corrupt(rcvpkt) && baixo baixo not corrupt(rcvpkt) &&
has_seq1(rcvpkt) has_seq0(rcvpkt)
sndpkt = make_pkt(ACK, chksum) sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt) udt_send(sndpkt)
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)
&& has_seq1(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)
3: Camada de Transporte 31
rdt2.1: discusso
Transmissor: Receptor:
no. de seq no pacote deve verificar se o
bastam dois nos. de pacote recebido uma
seq. (0,1). Por qu? duplicata
estado indica se no. de
deve verificar se
seq. esperado 0 ou 1
ACK/NAK recebidos
nota: receptor no tem
esto corrompidos
como saber se ltimo
duplicou o no. de
ACK/NAK foi recebido
estados
bem pelo transmissor
estado deve lembrar
se pacote esperado
deve ter no. de seq. 0
ou 1
3: Camada de Transporte 32
rdt2.2: um protocolo sem NAKs
3: Camada de Transporte 33
rdt2.2: fragmentos do transmissor e
receptor rdt_send(data)
sndpkt = make_pkt(0, data, checksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) ||
aguarda aguarda
ACK isACK(rcvpkt,1) )
chamada 0
de cima 0 udt_send(sndpkt)
fragmento FSM
do transmissor rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) && && isACK(rcvpkt,0)
(corrupt(rcvpkt) || L
has_seq1(rcvpkt)) aguarda fragmento FSM
0 de
udt_send(sndpkt) baixo do receptor
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)
&& has_seq1(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK1, chksum)
udt_send(sndpkt)
3: Camada de Transporte 34
rdt3.0: canais com erros e perdas
3: Camada de Transporte 35
Transmissor rdt3.0
3: Camada de Transporte 36
rdt3.0 em ao
3: Camada de Transporte 37
rdt3.0 em ao
Remetente Destinatrio
send pkt0 pkt0
rcv pkt0
ack0 send ack0
rcv ack0
send pkt1 pkt1
rcv pkt1
send ack1
ack1
timeout
resend pkt1 pkt1
rcv pkt1
rcv ack1 pkt0 (detect duplicate)
send pkt0 send ack1
ack1
rcv ack1 rcv pkt0
ignora
ack0 send ack0
3: Camada de Transporte 38
Desempenho do rdt3.0
U L/R 0,008
= = 8 = 0,00027
sender 30,008
RTT + L / R microsec
onds
pac. de 1KB a cada 30 mseg -> vazo de 33kB/seg num
enlace de 1 Gbps
protocolo limita uso dos recursos fsicos!
3: Camada de Transporte 39
rdt3.0: operao pare e espere
L/ R 0,008
U tx 0,00027
RTT L / R 30,008
3: Camada de Transporte 40
Protocolos com paralelismo (pipelining)
Paralelismo (pipelining): transmissor envia vrios
pacotes em sequncia, todos esperando para
serem reconhecidos
faixa de nmeros de sequncia deve ser aumentada
Armazenamento no transmissor e/ou no receptor
(a) operao do protocolo pare e espere (a) operao do protocolo com paralelismo
Aumenta a utilizao
por um fator de 3!
3 L / R 0,024
U tx 0,00081
RTT L / R 30,008
3: Camada de Transporte 42
Protocolos com Paralelismo
Go-back-N: Retransmisso seletiva:
O transmissor pode ter at N O transmissor pode ter at N
pacotes no reconhecidos no pacotes no reconhecidos no
tubo tubo
Receptor envia apenas acks Receptor envia acks
cumulativos individuais para cada pacote
No reconhece pacote se
houver falha de seq.
Transmissor possui um
Transmissor possui um
temporizador para o pacote
temporizador para cada
mais antigo ainda no
pacote ainda no reconhecido
reconhecido
Se o temporizador
Se o temporizador
estourar, retransmite
estourar, retransmite
apenas o pacote
todos os pacotes ainda no
correspondente.
reconhecidos.
3: Camada de Transporte 43
Go-back-N (GBN)
Transmissor:
no. de seq. de k-bits no cabealho do pacote
admite janela de at N pacotes consecutivos no
reconhecidos
If getacknum(rcvpkt)>=base
3: Camada de Transporte 45
GBN: FSM estendida para o
receptor
receptor simples:
usa apenas ACK: sempre envia
ACK para pacote recebido
corretamente com o maior no.
de seq. em-ordem
pode gerar ACKs duplicados
s precisa se lembrar do
expectedseqnum
pacotes fora de ordem:
descarta (no armazena) ->
receptor no usa buffers!
reconhece pacote com o
nmero de sequncia mais alto
em-ordem
3: Camada de Transporte 46
sender window (N=4) sender receiver
012345678 send pkt0
012345678 send pkt1
012345678 send pkt2 receive pkt0, send ack0
012345678 send pkt3 Xloss receive pkt1, send ack1
(wait)
receive pkt3, discard,
012345678 rcv ack0, send pkt4 (re)send ack1
012345678 rcv ack1, send pkt5 receive pkt4, discard,
(re)send ack1
ignore duplicate ACK receive pkt5, discard,
(re)send ack1
timeout
012345678 send pkt2
012345678 send pkt3
012345678 send pkt4 rcv pkt2, deliver, send ack2
012345678 send pkt5 rcv pkt3, deliver, send ack3
rcv pkt4, deliver, send ack4
rcv pkt5, deliver, send ack5
3: Camada de Transporte 47
Retransmisso seletiva
receptor reconhece individualmente todos os
pacotes recebidos corretamente
armazena pacotes no buffer, conforme necessrio, para
posterior entrega em-ordem camada superior
transmissor apenas reenvia pacotes para os quais
um ACK no foi recebido
temporizador de remetente para cada pacote sem ACK
janela do transmisso
N nmeros de sequncia consecutivos
outra vez limita nmeros de sequncia de pacotes
enviados, mas ainda no reconhecidos
3: Camada de Transporte 48
Retransmisso seletiva: janelas do
transmissor e do receptor
reconhecido
3: Camada de Transporte 49
Retransmisso seletiva
transmissor receptor
dados de cima: pacote n em
se prx. no. de seq (n) [rcvbase, rcvbase+N-1]
disponvel estiver na janela,
envia o pacote e liga envia ACK(n)
temporizador(n)
fora de ordem: armazena
estouro do temporizador(n):
reenvia pacote n, reinicia em ordem: entrega (tb.
temporizador(n) entrega pacotes
ACK(n) em [sendbase,sendbase+N]: armazenados em ordem),
marca pacote n como avana janela p/ prxima
recebido
pacote ainda no recebido
se n for menor pacote no
reconhecido, avana base da pacote n em
janela ao prx. no. de seq no [rcvbase-N,rcvbase-1]
reconhecido
ACK(n)
seno:
ignora
3: Camada de Transporte 50
Retransmisso seletiva em ao
3: Camada de Transporte 51
Retransmisso
seletiva: dilema
Exemplo:
nos. de seq : 0, 1, 2, 3
tam. de janela =3
receptor no v diferena
entre os dois cenrios!
incorretamente passa
dados duplicados como
novos em (a)
3: Camada de Transporte 52
Contedo do Captulo 3
3.1 Introduo e 3.5 Transporte
servios de camada de orientado para
transporte conexo: TCP
3.2 Multiplexao e estrutura do segmento
transferncia confivel de
demultiplexao
dados
3.3 Transporte no controle de fluxo
gerenciamento da conexo
orientado para
3: Camada de Transporte 53
TCP: Viso geral RFCs: 793, 1122, 1323, 2018, 2581
3: Camada de Transporte 54
Estrutura do segmento TCP
Internet
checksum
(como no UDP)
3: Camada de Transporte 55
TCP: nos. de seq. e ACKs
segmento de sada do transmissor
source port # dest port #
3: Camada de Transporte 56
TCP: nos. de seq. e ACKs
3: Camada de Transporte 57
TCP: tempo de viagem de ida e volta (RTT
Round Trip Time) e Temporizao
P: como escolher o P: como estimar RTT?
valor do SampleRTT: tempo medido entre
temporizador TCP? a transmisso do segmento e o
recebimento do ACK
maior que o RTT
correspondente
mas o RTT varia
ignora retransmisses
muito curto:
SampleRTT varia de forma
temporizao prematura
rpida, desejvel um
retransmisses amortecedor para a estimativa
desnecessrias do RTT
muito longo: reao usa vrias medies recentes,
demorada perda de no apenas o ltimo
segmentos SampleRTT obtido
3: Camada de Transporte 58
TCP: Tempo de Resposta (RTT) e
Temporizao
EstimatedRTT = (1-a)* EstimatedRTT + a*SampleRTT
mdia mvel exponencialmente ponderada
influncia de cada amostra diminui exponencialmente com o
tempo
valor tpico de a = 0,125
3: Camada de Transporte 59
TCP: Tempo de Resposta (RTT) e
Temporizao
Escolhendo o intervalo de temporizao
EstimatedRTT mais uma margem de segurana
grandes variaes no EstimatedRTT
-> maior margem de segurana
primeiro estimar o quanto a SampleRTT se desvia do
EstimatedRTT:
3: Camada de Transporte 61
Transferncia de dados confivel
do TCP
O TCP cria um servio As retransmisses so
rdt sobre o servio no disparadas por:
confivel do IP estouros de
Segmentos transmitidos temporizao
em paralelo (pipelined) acks duplicados
Acks cumulativos Considere inicialmente
O TCP usa um nico um transmissor TCP
temporizador para simplificado:
retransmisses
ignore acks duplicados
ignore controles de
fluxo e de
congestionamento
3: Camada de Transporte 62
Eventos do transmissor TCP
Dados recebidos da aplicao: Estouro do temporizador:
Cria segmento com no. de Retransmite o segmento
sequncia (nseq) que causou o estouro do
nseq o nmero de temporizador
sequncia do primeiro byte Reinicia o temporizador
de dados do segmento Recepo de Ack:
Liga o temporizador se j Se reconhecer segmentos
no estiver ligado ainda no reconhecidos
(temporizao do segmento atualizar informao sobre
mais antigo ainda no o que foi reconhecido
reconhecido) religa o temporizador se
Valor do temporizador: ainda houver segmentos
calculado anteriormente pendentes (no
reconhecidos)
3: Camada de Transporte 63
Transmissor TCP (simplificado)
data received from application above
create segment, seq. #: NextSeqNum
pass segment to IP (i.e., send)
NextSeqNum = NextSeqNum + length(data)
if (timer currently not running)
L start timer
NextSeqNum = InitialSeqNum wait
SendBase = InitialSeqNum for
event timeout
retransmit not-yet-acked segment
with smallest seq. #
start timer
ACK received, with ACK field value y
if (y > SendBase) {
SendBase = y
/* SendBase1: last cumulatively ACKed byte */
if (there are currently not-yet-acked segments)
start timer
else stop timer
} 3: Camada de Transporte 64
TCP: cenrios de retransmisso
Religa
Religa temporizao
temporizao
Religa
temporizao
Desliga
temporizao
Desliga
temporizao
Desliga
temporizao
Seq=120, 15 bytes of data
3: Camada de Transporte 66
TCP gerao de ACKs [RFCs 1122, 2581]
3: Camada de Transporte 68
Host A Host B
ACK=100
ACK=100
ACK=100
timeout
ACK=100
Seq=100, 20 bytes of data
3: Camada de Transporte 70
Controle de Fluxo
do TCP processo
a aplicao pode remover dados de aplicao
dos buffers do socket TCP . aplicao
Buffers de recepo SO
do socket TCP
mais devagar do
que o receptor TCP
est entregando TCP
(transmissor est code
enviando)
IP
Controle de fluxo code
o receptor controla o
transmissor, de modo que
este no inunde o buffer do do transmissor
3: Camada de Transporte 73
TCP: Gerenciamento de Conexes
antes de trocar dados, transmissor e receptor TCP dialogam:
concordam em estabelecer uma conexo (cada um sabendo
que o outro quer estabelecer a conexo)
concordam com os parmetros da conexo.
aplicao aplicao
network network
3: Camada de Transporte 75
Concordando em estabelecer uma conexo
escolhe x escolhe x
req_conn(x) req_conn(x)
ESTAB ESTAB
retransmite acc_conn(x) retransmite acc_conn(x)
req_conn(x) req_conn(x)
ESTAB ESTAB
data(x+1) aceita
req_conn(x)
retransmite dados(x+1)
dados(x+1)
trmino da trmino da
cliente conexo x servidor conexo x servidor
cliente
termina esquece x termina esquece x
req_conn(x)
ESTAB ESTAB
data(x+1) aceita
conexo aberta pela metade! dados(x+1)
(sem cliente!)
3: Camada de Transporte 76
Apresentao de trs vias do TCP
3: Camada de Transporte 77
Apresentao de trs vias do TCP
closed
Socket connectionSocket =
welcomeSocket.accept();
L Socket clientSocket =
SYN(x) newSocket("hostname","port
number");
SYNACK(seq=y,ACKnum=x+1)
cria novo socket para SYN(seq=x)
comunicao com o cliente listen
SYN SYN
rcvd sent
SYNACK(seq=y,ACKnum=x+1)
ESTAB ACK(ACKnum=y+1)
ACK(ACKnum=y+1)
L
3: Camada de Transporte 78
TCP: Encerrando uma conexo
seja o cliente que o servidor fecham cada
um o seu lado da conexo
enviam segmento TCP com bit FIN = 1
respondem ao FIN recebido com um ACK
ao receber um FIN, ACK pode ser combinado
com o prprio FIN
lida com trocas de FIN simultneos
3: Camada de Transporte 79
TCP: Encerrando uma conexo
estado do cliente estado do servidor
ESTAB ESTAB
clientSocket.close()
FIN_WAIT_1 no pode mais FINbit=1, seq=x
enviar, mas pode
receber dados CLOSE_WAIT
ACKbit=1; ACKnum=x+1
ainda pode
FIN_WAIT_2 espera o trmino enviar dados
pelo servidor
LAST_ACK
FINbit=1, seq=y
TIMED_WAIT no pode mais
enviar dados
ACKbit=1; ACKnum=y+1
espera temporizada
por 2*tempo mximo CLOSED
de vida do segmento
CLOSED
3: Camada de Transporte 80
Contedo do Captulo 3
3.1 Introduo e 3.5 Transporte
servios de camada de orientado para
transporte conexo: TCP
3.2 Multiplexao e 3.6 Princpios de
demultiplexao controle de
3.3 Transporte no congestionamento
orientado para 3.7 Controle de
conexo: UDP congestionamento no
3.4 Princpios da TCP
transferncia
confivel de dados
3: Camada de Transporte 81
Princpios de Controle de
Congestionamento
Congestionamento:
informalmente: muitas fontes enviando dados
acima da capacidade da rede de trat-los
diferente de controle de fluxo!
Sintomas:
perda de pacotes (saturao de buffers nos
roteadores)
longos atrasos (enfileiramento nos buffers dos
roteadores)
um dos 10 problemas mais importantes em redes!
3: Camada de Transporte 82
Causas/custos de congestionamento:
cenrio 1
dois remetentes,
dois receptores
um roteador,
buffers infinitos
sem retransmisso
capacidade do link
de sada: R
Hospedeiro D
3: Camada de Transporte 84
Causas/custos de congest.: cenrio 2
Idealizao: conhecimento R/2
perfeito
out
transmissor envia apenas
quando houver buffer
disponvel no roteador in R/2
Hospedeiro B
Hospedeiro B
Hospedeiro D
3: Camada de Transporte 86
Causas/custos de congest.: cenrio 2
Idealizao: perda conhecida. R/2
pacotes podem ser perdidos,
descartados no roteador devido a ao transmitir a R/2,
buffers cheios
alguns pacotes so
out
retransmisses, mas
transmissor apenas retransmite assintoticamente a
goodput ainda seria
se o pacote sabidamente se R/2 (por que?)
perdeu. in R/2
in : dados originais
Hospedeiro B
Hospedeiro D
3: Camada de Transporte 87
Causas/custos de congest.: cenrio 2
Realidade: duplicatas R/2
pacotes podem ser perdidos,
descartados no roteador devido ao transmitir a R/2,
alguns pacotes so
out
a buffers cheios retransmisses
in : dados originais
Hospedeiro B
Hospedeiro D
3: Camada de Transporte 88
Causas/custos de congest.: cenrio 2
Realidade: duplicatas R/2
pacotes podem ser perdidos,
descartados no roteador devido ao transmitir a R/2,
alguns pacotes so
out
a buffers cheios retransmisses
custos do congestionamento:
mais trabalho (retransmisses) para uma dada goodput
Retransmisses desnecessrias: link transporta mltiplas cpias
do pacote
diminuindo a goodput
3: Camada de Transporte 89
Causas/custos de congestionamento:
cenrio 3 P: o que acontece medida que in e
quatro remetentes in crescem ?
caminhos com mltiplos R: medida que in vermelho
enlaces cresce, todos os pacotes azuis
temporizao/ que chegam fila superior so
retransmisso descartados, vazo azul -> 0
out
in : dados originais
'in : dados originais mais
dados retransmitidos
Buffers de enlace de sada
finitos compartilhados
3: Camada de Transporte 90
Causas/custos de congestionamento:
cenrio 3
R/2
3: Camada de Transporte 91
Abordagens de controle de congestionamento
Duas abordagens gerais para controle de
congestionamento:
Controle de congestionamento Controle de congestionamento
fim a fim: assistido pela rede:
no usa realimentao roteadores enviam
explcita da rede informaes para os sistemas
finais
congestionamento
bit indicando
inferido a partir das congestionamento (SNA,
perdas, e dos atrasos DECbit, TCP/IP ECN,
observados nos sistemas ATM)
finais taxa explcita para envio
abordagem usada pelo TCP pelo transmissor
3: Camada de Transporte 92
Estudo de caso: controle de
congestionamento do servio ATM ABR
ABR (available bit rate): clulas RM (resource
servio elstico management):
se caminho do transmissor
enviadas pelo transmissor,
est pouco usado:
entremeadas com clulas de dados
transmissor pode usar
banda disponvel bits na clula RM iniciados por
se caminho do transmissor
comutadores (assistido pela
estiver congestionado: rede)
transmissor limitado bit NI: no aumente a taxa
taxa mnima garantida (congestionamento moderado)
bit CI: indicao de
congestionamento
clulas RM devolvidas ao
transmissor pelo receptor, sem
alterao dos bits
3: Camada de Transporte 93
Estudo de caso: controle de
congestionamento do servio ATM ABR
3: Camada de Transporte 95
Controle de Congestionamento do
TCP: aumento aditivo, diminuio multiplicativa
Abordagem: aumentar a taxa de transmisso
(tamanho da janela), testando a largura de banda
utilizvel, at que ocorra uma perda
aumento aditivo: incrementa cwnd de 1 MSS a cada RTT
at detectar uma perda
diminuio multiplicativa: corta cwnd pela metade aps
evento de perda
Comportamento de
dente de serra:
testando a largura
de banda
96
Controle de Congestionamento do
TCP: detalhes
transmissor limita a Como o transmissor detecta o
transmisso: congestionamento?
LastByteSent-LastByteAcked evento de perda = estouro
do temporizador ou 3 acks
cwnd
duplicados
Aproximadamente, transmissor TCP reduz a
taxa (cwnd) aps evento de
cwnd
taxa = Bytes/seg perda
RTT
trs mecanismos:
cwnd dinmica, em funo do AIMD
congestionamento detectado na partida lenta
rede conservador aps eventos
de estouro de
temporizao (preveno
de congestionamento)
3: Camada de Transporte 97
TCP: Partida lenta
A B
No incio da conexo,
aumenta a taxa
exponencialmente at o
RTT
primeiro evento de perda:
inicialmente cwnd = 1 MSS
duplica cwnd a cada RTT
atravs do incremento da
cwnd para cada ACK
recebido
Resumo: taxa inicial
baixa mas cresce
rapidamente de forma tempo
exponencial
3: Camada de Transporte 98
TCP: detectando, reagindo a perdas
Implementao:
Limiar (Threshold) varivel
(ssthresh)
Com uma perda o limiar
(ssthresh) ajustado para
1/2 da cwnd imediatamente
antes do evento de perda.
W/2
1,22 MSS
vazo do TCP
RTT L
L = 210-10 Taxa de perdas demasiado baixa!!!
So necessrias novas verses do TCP para altas
velocidades!
Conexo TCP 1
Roteador
com gargalo, de
Conexo capacidade R
TCP 2
Vazo da conexo 1 R
3: Camada de Transporte 105
Equidade (mais)
Equidade e UDP Equidade e conexes TCP em
paralelo
Aplicaes multimdia
frequentemente no usam nada impede que as apls. abram
TCP conexes paralelas entre 2
no querem a taxa hosts
estrangulada pelo controle Os browsers Web fazem isto
de congestionamento Exemplo: canal com taxa R
Preferem usar o UDP: compartilhado por 9 conexes;
Injeta udio/vdeo a taxas novas aplicaes pedem 1 TCP,
constantes, toleram obtm taxa de R/10
perdas de pacotes novas aplicaes pedem 11 TCPs,
obtm taxa R/2 !