Você está na página 1de 107

Captulo 3: Camada de Transporte

Metas do captulo:
entender os

princpios atrs dos


servios da camada
de transporte:

multiplexao/
demultiplexao
transferncia
confivel de dados
controle de fluxo
controle de
congestionamento

aprender sobre os

protocolos da camada
de transporte da
Internet:

UDP: transporte no
orientado a conexes
TCP: transporte
orientado a conexes
Controle de
congestionamento do
TCP

3: Camada de Transporte

Contedo do Captulo 3
3.1 Introduo e

servios de camada de
transporte
3.2 Multiplexao e
demultiplexao
3.3 Transporte no
orientado para
conexo: UDP
3.4 Princpios da
transferncia
confivel de dados

3.5 Transporte

orientado para
conexo: TCP
3.6 Princpios de
controle de
congestionamento
3.7 Controle de
congestionamento no
TCP

3: Camada de Transporte

Servios e protocolos de transporte

rede
enlace
fsica

rede
enlace
fsica

rede
enlace
fsica

e
gi
l
co

fi
m
a

rede
enlace
fsica

rede
enlace
fsica

m
fi

aplicao
transporte
rede
enlace
fsica

t
or
sp
an
tr

fornecem comunicao lgica


entre processos de aplicao
executando em diferentes
hospedeiros
os protocolos de transporte so
executados nos sistemas finais:
lado transmissor: quebra as
mensagens da aplicao em
segmentos, repassa-os para a
camada de rede
lado receptor: remonta as
mensagens a partir dos
segmentos, repassa-as para a
camada de aplicao
existe mais de um protocolo de
transporte disponvel para as
aplicaes

aplicao
transporte
rede
enlace
fsica

Internet: TCP e UDP

3: Camada de Transporte

Camadas de Transporte x rede


camada de rede:
comunicao lgica
entre hospedeiros
camada de transporte:
comunicao lgica
entre os processos

depende de, estende


servios da camada de
rede

Analogia domstica:

12 crianas na casa de Ana


enviando cartas para 12
crianas na casa de Bill
hospedeiros = casas
processos = crianas
mensagens da apl. = cartas nos
envelopes
protocolo de transporte = Ana
e Bill que demultiplexam para
suas crianas
protocolo da camada de rede =
servio postal

3: Camada de Transporte

Protocolos da camada de transporte Internet


entrega confivel, ordenada

(TCP)

m
a

rede
enlace
fsica

aplicao
transporte
rede
enlace
fsica

servios no disponveis:

rede
enlace
fsica

m
fi

extenso sem gorduras do


melhor esforo do IP

fi

co

ordenada: UDP

rede
enlace
fsica

gi
l

entrega no confivel, no

rede
enlace
fsica

rede
enlace
fsica

t
or
sp
an
tr

controle de
congestionamento
controle de fluxo
estabelecimento de conexo
(setup)

aplicao
transporte
rede
enlace
fsica

garantias de atraso mximo


garantias de largura de
banda mnima
3: Camada de Transporte

Contedo do Captulo 3
3.1 Introduo e

servios de camada de
transporte
3.2 Multiplexao e
demultiplexao
3.3 Transporte no
orientado para
conexo: UDP
3.4 Princpios da
transferncia
confivel de dados

3.5 Transporte

orientado para
conexo: TCP
3.6 Princpios de
controle de
congestionamento
3.7 Controle de
congestionamento no
TCP

3: Camada de Transporte

Multiplexao/demultiplexao
Multiplexao no transm.:
rene dados de muitos sockets,
adiciona o cabealho de transporte
(usado posteriormente para a
demultiplexao)

Demultiplexao no receptor:
Usa info do cabealho para
entregar os segmentos
recebidos aos sockets corretos

aplicao
aplicao

P3

P1

P2

aplicao

P4

transporte

transporte

rede

transporte

rede

enlace

rede

enlace

fsica

enlace

fsica

socket
processo

fsica

3: Camada de Transporte

Como funciona a demultiplexao


computador recebe os

datagramas IP
cada datagrama possui
os endereos IP da
origem e do destino
cada datagrama
transporta um segmento
da camada de
transporte
cada segmento possui
nmeros das portas
origem e destino

O hospedeiro usa os

endereos IP e os
nmeros das portas para
direcionar o segmento ao
socket apropriado

32 bits
porta origem

porta destino

outros campos
do cabealho
dados da
aplicao
(mensagem/payload)
formato de segmento
TCP/UDP
3: Camada de Transporte

Demultiplexao no orientada a
conexes
Lembrete: socket criado possui Lembrete: ao criar um
datagrama para enviar para
nmero de porta local ao host:
um socket UDP, deve
DatagramSocket mySocket1 = new
DatagramSocket(12534);
especificar:

Quando o hospedeiro recebe

o segmento UDP:

verifica no. da porta de


destino no segmento
encaminha o segmento UDP
para o socket com aquele no.
de porta

Endereo IP de destino
Nmero da porta de destino

Datagramas IP com mesmo no.

de porta destino, mas


diferentes endereos IP
origem e/ou nmeros de porta
origem podem ser
encaminhados para o mesmo
socket no destino
3: Camada de Transporte

Demultiplexao no orientada a
conexes: exemplo
DatagramSocket
serverSocket = new
DatagramSocket
(6428);

DatagramSocket
mySocket2 = new
DatagramSocket
(9157);

application

application

DatagramSocket
mySocket1 = new
DatagramSocket
(5775);
application

P1

P3

P4

transport

transport

transport

network

network

link

network

link

physical

link
physical

physical
source port: 6428
dest port: 9157

source port: 9157


dest port: 6428

source port: ?
dest port: ?

source port: ?
dest port: ?
3: Camada de Transporte

10

Demultiplexao Orientada a
Conexes
Socket TCP identificado

pela qudrupla:

endereo IP origem
nmero da porta origem
endereo IP destino
nmero da porta destino

Demultiplexao:

receptor usa todos os


quatro valores para
direcionar o segmento
para o socket apropriado

Servidor pode dar suporte a

muitos sockets TCP


simultneos:

cada socket identificado


pela sua prpria qudrupla

Servidores Web tm sockets

diferentes para cada conexo


de cliente

HTTP no persistente ter


sockets diferentes para cada
pedido

3: Camada de Transporte

11

Demultiplexao Orientada a
Conexes: exemplo
application
application

P3

P4

application

P5 P6

P2

transport

transport

transport

network

network

link

network

link

physical

link

physical

host: IP
address
A

server:
IP
address
B
source IP,port: B,80
dest IP,port: A,9157
source IP,port: A,9157
dest IP, port: B,80

P3

physical

source IP,port: C,5775


dest IP,port: B,80

host: IP
address
C

source IP,port: C,9157


dest IP,port: B,80

trs segmentos, todos destinados ao endereo IP: B,


dest port: 80 so demultiplexados para sockets distintos
3: Camada de Transporte

12

Demultiplexao Orientada a Conexes:


Servidor Web com Threads
Servidor com threads

application
application

P3

application

P4

P2

transport

transport

transport

network

network

link

network

link

physical

link

physical

host: IP
address
A

server:
IP
address
B
source IP,port: B,80
dest IP,port: A,9157
source IP,port: A,9157
dest IP, port: B,80

P3

physical

source IP,port: C,5775


dest IP,port: B,80

host: IP
address
C

source IP,port: C,9157


dest IP,port: B,80
3: Camada de Transporte

13

Contedo do Captulo 3
3.1 Introduo e

servios de camada de
transporte
3.2 Multiplexao e
demultiplexao
3.3 Transporte no
orientado para
conexo: UDP
3.4 Princpios da
transferncia
confivel de dados

3.5 Transporte

orientado para
conexo: TCP
3.6 Princpios de
controle de
congestionamento
3.7 Controle de
congestionamento no
TCP

3: Camada de Transporte

14

UDP: User Datagram Protocol


Protocolo de transporte da
Internet mnimo, sem
gorduras,
Servio melhor esforo,
segmentos UDP podem ser:
perdidos
entregues aplicao fora
de ordem
sem conexo:
no h saudao inicial
entre o remetente e o
receptor UDP
tratamento independente
para cada segmento UDP

[RFC 768]

Uso do UDP:

aplicaes de streaming
multimdia (tolerante a
perdas, sensvel a taxas)
DNS
SNMP

transferncia confivel

sobre UDP:

adiciona confiabilidade na
camada de aplicao
recuperao de erros
especfica da aplicao

3: Camada de Transporte

15

UDP: Cabealho do segmento


Comprimento em bytes do
segmento UDP,
incluindo cabealho
32 bits
porta origem

porta dest.

comprimento

checksum

Dados de
aplicao
(mensagem)
Formato do segmento UDP

Por qu existe um UDP?

elimina estabelecimento de

conexo (que pode causar


retardo)
simples: no mantm
estado da conexo nem no
remetente, nem no
receptor
cabealho de segmento
reduzido
No h controle de
congestionamento: UDP
pode transmitir to rpido
quanto desejado (e
possvel)
3: Camada de Transporte

16

Soma de Verificao (checksum)


UDP
Objetivo: detectar erros (ex.: bits trocados) no
segmento transmitido
Transmissor:

trata contedo do

segmento como sequncia


de inteiros de 16-bits
checksum: soma (adio
usando complemento de 1)
do contedo do segmento
transmissor coloca
complemento do valor da
soma no campo checksum
do UDP

Receptor:

checksum do
segmento recebido
verifica se o checksum
calculado bate com o valor
recebido:
NO - erro detectado
SIM - nenhum erro
detectado. Mas ainda
pode ter erros? Veja
depois .
calcula

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

servios de camada de
transporte
3.2 Multiplexao e
demultiplexao
3.3 Transporte no
orientado para
conexo: UDP
3.4 Princpios da
transferncia
confivel de dados

3.5 Transporte

orientado para
conexo: TCP
3.6 Princpios de
controle de
congestionamento
3.7 Controle de
congestionamento no
TCP

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.:
pela apl.). Passa dados p/ serem
entregues camada sup. do receptor

lado
transmissor

udt_send(): chamada pelo rdt para


transferir um pacotes para o
receptor sobre um canal no
confivel

deliver_data(): chamada pelo


rdt para entregar dados p/ camada
superior

lado
receptor

rdt_rcv(): chamada quando


pacote chega no lado receptor do
canal
3: Camada de Transporte

21

Transferncia confivel: o ponto de


partida
Iremos:
desenvolver incrementalmente os lados transmissor e receptor
de um protocolo confivel de transferncia de dados (rdt)
considerar apenas fluxo unidirecional de dados

mas info de controle flui em ambos os sentidos!

Usar mquinas de estados finitos (FSM) p/ especificar os

protocolos transmissor e receptor


evento causador da transio de estado
aes executadas na transio de estado
estado: neste estado
o prximo estado
determinado
unicamente pelo
prximo evento

estado
1

estado
2

evento
aes

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?

Como as pessoas recuperam erros


durante uma conversa?

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
call from
ACK or
udt_send(sndpkt)
above
NAK
rdt_rcv(rcvpkt) && isACK(rcvpkt)

rdt_rcv(rcvpkt) &&
corrupt(rcvpkt)
udt_send(NAK)
Wait for
call from
below
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
call from
ACK or
udt_send(sndpkt)
above
NAK
rdt_rcv(rcvpkt) && isACK(rcvpkt)

rdt_rcv(rcvpkt) &&
corrupt(rcvpkt)
udt_send(NAK)
Wait for
call from
below
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
ACK/NAK for
corrompido?

Transmissor no sabe o que

se passou no receptor!
no pode apenas
retransmitir: possibilidade
de pacotes duplicados

Lidando c/ duplicatas:

transmissor retransmite o

ltimo pacote se ACK/NAK


chegar com erro
transmissor inclui nmero
de sequncia em cada
pacote
receptor descarta (no
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)

rdt_rcv(rcvpkt) && (corrupt(rcvpkt)

extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) && (corrupt(rcvpkt)

sndpkt = make_pkt(NAK, chksum)


udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
not corrupt(rcvpkt) &&
has_seq1(rcvpkt)
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)

sndpkt = make_pkt(NAK, chksum)


udt_send(sndpkt)
Esperar
0 de
baixo

Esperar
1 de
baixo

rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)


&& has_seq1(rcvpkt)

rdt_rcv(rcvpkt) &&
not corrupt(rcvpkt) &&
has_seq0(rcvpkt)
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)

extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)
3: Camada de Transporte

31

rdt2.1: discusso
Transmissor:
no. de seq no pacote
bastam dois nos. de
seq. (0,1). Por qu?
deve verificar se
ACK/NAK recebidos
esto corrompidos
duplicou o no. de
estados

estado deve lembrar


se pacote esperado
deve ter no. de seq. 0
ou 1

Receptor:
deve verificar se o
pacote recebido uma
duplicata

estado indica se no. de


seq. esperado 0 ou 1

nota: receptor no tem

como saber se ltimo


ACK/NAK foi recebido
bem pelo transmissor

3: Camada de Transporte

32

rdt2.2: um protocolo sem NAKs


mesma funcionalidade do rdt2.1, usando

apenas ACKs
ao invs de NAK, receptor envia ACK para
ltimo pacote recebido sem erro

receptor deve incluir explicitamente no. de seq


do pacote reconhecido

ACKs duplicados no transmissor resultam

na mesma ao do NAK: retransmisso do


pacote atual

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) &&
aguarda
chamada 0
de cima

rdt_rcv(rcvpkt) &&
(corrupt(rcvpkt) ||
has_seq1(rcvpkt))
udt_send(sndpkt)

aguarda
0 de
baixo

aguarda
ACK
0

fragmento FSM
do transmissor

( corrupt(rcvpkt) ||
isACK(rcvpkt,1) )
udt_send(sndpkt)
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt)
&& isACK(rcvpkt,0)

fragmento FSM
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


Nova hiptese: canal de
transmisso tambm
pode perder pacotes
(dados ou ACKs)

checksum, no. de seq.,


ACKs, retransmisses
podem ajudar, mas no
so suficientes

Abordagem: transmissor
aguarda um tempo
razovel pelo ACK

retransmite se nenhum ACK

for recebido neste intervalo


se pacote (ou ACK) estiver
apenas atrasado (e no
perdido):
retransmisso ser
duplicata, 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

35

Transmissor rdt3.0

3: Camada de Transporte

36

rdt3.0 em ao

3: Camada de Transporte

37

rdt3.0 em ao
Destinatrio

Remetente
send pkt0
rcv ack0
send pkt1

pkt0

rcv pkt0
send ack0

ack0
pkt1

rcv pkt1
send ack1

ack1

timeout
pkt1
resend pkt1
rcv ack1
pkt0
send pkt0
ack1
rcv ack1
ack0
ignora

rcv pkt1

(detect duplicate)

send ack1
rcv pkt0
send ack0

(d) retransmisso prematura


3: Camada de Transporte

38

Desempenho do rdt3.0
rdt3.0 funciona, porm seu desempenho sofrvel
Exemplo: enlace de 1 Gbps, retardo fim a fim de 15

ms, pacote de 8000 bits:

L 8000bits
d trans
8 microsegun dos
9
R 10 bps
U

sender

L/R
RTT + L / R

0,008

= 8
30,008

= 0,00027

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

U tx

L/R
0,008

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

Duas formas genricas de protocolos com paralelismo:

Go-back-N, retransmisso seletiva


3: Camada de Transporte

41

Paralelismo: aumento da utilizao

Aumenta a utilizao
por um fator de 3!

U tx

3 L / R
0,024

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


pacotes no reconhecidos no
tubo
Receptor envia apenas acks
cumulativos

No reconhece pacote se
houver falha de seq.

Transmissor possui um
temporizador para o pacote
mais antigo ainda no
reconhecido
Se o temporizador
estourar, retransmite
todos os pacotes ainda no
reconhecidos.

O transmissor pode ter at N


pacotes no reconhecidos no
tubo
Receptor envia acks
individuais para cada pacote

Transmissor possui um
temporizador para cada
pacote ainda no reconhecido
Se o temporizador
estourar, retransmite
apenas o pacote
correspondente.
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

ACK(n): reconhece todos pacotes, at e inclusive no. de seq n -

ACK/reconhecimento cumulativo
pode receber ACKs duplicados (veja receptor)
temporizador para o pacote mais antigo ainda no confirmado
Estouro do temporizador: retransmite todos os pacotes
pendentes.
3: Camada de Transporte

44

GBN: FSM estendida para o


transmissor

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)


012345678
012345678
012345678
012345678

012345678
012345678

sender
send pkt0
send pkt1
send pkt2
send pkt3
(wait)

rcv ack0, send pkt4


rcv ack1, send pkt5
ignore duplicate ACK

012345678
012345678
012345678
012345678

timeout
send pkt2
send pkt3
send pkt4
send pkt5

receiver

Xloss

receive pkt0, send ack0


receive pkt1, send ack1
receive pkt3, discard,
(re)send ack1
receive pkt4, discard,
(re)send ack1
receive pkt5, discard,
(re)send ack1

rcv pkt2, deliver,


rcv pkt3, deliver,
rcv pkt4, deliver,
rcv pkt5, deliver,
3: Camada de Transporte

send
send
send
send
47

ack2
ack3
ack4
ack5

Retransmisso seletiva
individualmente todos os
pacotes recebidos corretamente

receptor reconhece

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

dados de cima:

se prx. no. de seq (n)


disponvel estiver na janela,
envia o pacote e liga
temporizador(n)

estouro do temporizador(n):

reenvia pacote n, reinicia


temporizador(n)
ACK(n) em [sendbase,sendbase+N]:
marca pacote n como
recebido
se n for menor pacote no
reconhecido, avana base da
janela ao prx. no. de seq no
reconhecido

receptor
pacote n em

[rcvbase, rcvbase+N-1]

envia ACK(n)
fora de ordem: armazena
em ordem: entrega (tb.

entrega pacotes
armazenados em ordem),
avana janela p/ prxima
pacote ainda no recebido

pacote n em

[rcvbase-N,rcvbase-1]

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)

P: qual a relao entre


tamanho de no. de seq e
tamanho de janela?

3: Camada de Transporte

52

Contedo do Captulo 3
3.1 Introduo e

servios de camada de
transporte
3.2 Multiplexao e
demultiplexao
3.3 Transporte no
orientado para
conexo: UDP
3.4 Princpios da
transferncia
confivel de dados

3.5 Transporte

orientado para
conexo: TCP

estrutura do segmento
transferncia confivel de
dados
controle de fluxo
gerenciamento da conexo

3.6 Princpios de

controle de
congestionamento
3.7 Controle de
congestionamento no
TCP
3: Camada de Transporte

53

TCP: Viso geral

ponto a ponto:

fluxo de bytes, ordenados,


confivel:

um transmissor, um receptor

transmisso full duplex:

no estruturado em msgs

com paralelismo (pipelined):

RFCs: 793, 1122, 1323, 2018, 2581

tam. da janela ajustado por


controle de fluxo e
congestionamento do TCP

fluxo de dados bi-direcional


na mesma conexo
MSS: tamanho mximo de
segmento

orientado a conexo:

handshaking (troca de msgs


de controle) inicia estado do
transmissor e do receptor
antes da troca de dados

fluxo controlado:

receptor no ser afogado


pelo transmissor

3: Camada de Transporte

54

Estrutura do segmento TCP


URG: dados urgentes
(pouco usado)
ACK: campo de ACK
vlido
PSH: produz envio de
dados (pouco usado)
RST, SYN, FIN:
estabelec. de conexo
(comandos de
criao e trmino)

contagem por
bytes de dados
(no
segmentos!)

nmero de bytes
receptor est
pronto para
aceitar

Internet
checksum
(como no UDP)

3: Camada de Transporte

55

TCP: nos. de seq. e ACKs

segmento de sada do transmissor


source port #

Nos. de seq.:
nmerodentro do
fluxo de bytes do
primeiro byte de dados
do segmento
ACKs:
no. de seq do prx. byte
esperado do outro lado
ACK cumulativo
P: como receptor trata
segmentos fora da ordem?
R: espec do TCP omissa
- deixado ao
implementador

dest port #

sequence number
acknowledgement number
rwnd
checksum

urg pointer

window size
N

sender sequence number space


sent
ACKed

sent, not- usable not


but not usable
yet
yet sent
ACKed
(inflight)que chega ao transmissor
segmento
source port #

dest port #

sequence number
acknowledgement number
rwnd
A
checksum

urg pointer

3: Camada de Transporte

56

TCP: nos. de seq. e ACKs

cenrio telnet simples


3: Camada de Transporte

57

TCP: tempo de viagem de ida e volta (RTT


Round Trip Time) e Temporizao
P: como escolher o
valor do
temporizador TCP?
maior que o RTT

mas o RTT varia


muito curto:
temporizao prematura
retransmisses
desnecessrias
muito longo: reao
demorada perda de
segmentos

P: como estimar RTT?

SampleRTT: tempo medido entre

a transmisso do segmento e o
recebimento do ACK
correspondente
ignora retransmisses
SampleRTT varia de forma
rpida, desejvel um
amortecedor para a estimativa
do RTT
usa vrias medies recentes,
no apenas o ltimo
SampleRTT obtido

3: Camada de Transporte

58

TCP: Tempo de Resposta (RTT) e


Temporizao
EstimatedRTT = (1-)* EstimatedRTT + *SampleRTT
mdia mvel exponencialmente ponderada
influncia de cada amostra diminui exponencialmente com o
tempo
valor tpico de = 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:

DevRTT = (1-)* DevRTT +


*|SampleRTT - EstimatedRTT|
(valor tpico de = 0,25)

Ento, ajusta o temporizador para:

TimeoutInterval = EstimatedRTT + 4*DevRTT


RTT estimadomargem de segurana
3: Camada de Transporte

60

Contedo do Captulo 3
3.1 Introduo e

servios de camada de
transporte
3.2 Multiplexao e
demultiplexao
3.3 Transporte no
orientado para
conexo: UDP
3.4 Princpios da
transferncia
confivel de dados

3.5 Transporte

orientado para
conexo: TCP

estrutura do segmento
transferncia confivel de
dados
controle de fluxo
gerenciamento da conexo

3.6 Princpios de

controle de
congestionamento
3.7 Controle de
congestionamento no
TCP
3: Camada de Transporte

61

Transferncia de dados confivel


do TCP
O TCP cria um servio

rdt sobre o servio


no confivel do IP

Segmentos transmitidos
em paralelo (pipelined)
Acks cumulativos
O TCP usa um nico
temporizador para
retransmisses

As retransmisses so

disparadas por:

estouros de
temporizao
acks duplicados

Considere inicialmente

um transmissor TCP
simplificado:

ignore acks duplicados


ignore controles de
fluxo e de
congestionamento
3: Camada de Transporte

62

Eventos do transmissor TCP


Dados recebidos da aplicao:
Cria segmento com no. de
sequncia (nseq)
nseq o nmero de
sequncia do primeiro byte
de dados do segmento
Liga o temporizador se j
no estiver ligado
(temporizao do segmento
mais antigo ainda no
reconhecido)
Valor do temporizador:
calculado anteriormente

Estouro do temporizador:
Retransmite o segmento
que causou o estouro do
temporizador
Reinicia o temporizador
Recepo de Ack:
Se reconhecer segmentos
ainda no reconhecidos

atualizar informao sobre


o que foi reconhecido
religa o temporizador se
ainda houver segmentos
pendentes (no
reconhecidos)
3: Camada de Transporte

63

Transmissor TCP

(simplificado)

data received from application above

NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum

wait
for
event

create segment, seq. #: NextSeqNum


pass segment to IP (i.e., send)
NextSeqNum = NextSeqNum + length(data)
if (timer currently not running)
start timer

ACK received, with ACK field value y

timeout
retransmit not-yet-acked
segment
with
smallest seq. #
start timer

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
temporizao

Religa
temporizao

Religa
temporizao
Desliga
temporizao
Desliga
temporizao

Cenrio com perda


do ACK

Temporizao prematura,
ACKs cumulativos
3: Camada de Transporte

65

TCP: cenrios de retransmisso


(mais)

Desliga
temporizao

Seq=120, 15 bytes of data

Cenrio de ACK cumulativo


3: Camada de Transporte

66

TCP gerao de ACKs

[RFCs 1122, 2581]

Evento no Receptor

Ao do Receptor TCP

chegada de segmento em ordem


sem lacunas,
anteriores j reconhecidos

ACK retardado. Espera at 500ms


pelo prx. segmento. Se no chegar
segmento, envia ACK

chegada de segmento em ordem


sem lacunas,
um ACK retardado pendente

envia imediatamente um nico


ACK cumulativo

chegada de segmento fora de


ordem, com no. de seq. maior
que esperado -> lacuna

envia ACK duplicado, indicando no.


de seq.do prximo byte esperado

chegada de segmento que


preenche a lacuna parcial ou
completamente

ACK imediato se segmento comea


no incio da lacuna
3: Camada de Transporte

67

Retransmisso rpida do TCP


O intervalo do

temporizador
frequentemente bastante
longo:

longo atraso antes de


retransmitir um pacote
perdido

Detecta segmentos

perdidos atravs de ACKs


duplicados.

O transmissor
normalmente envia
diversos segmentos
Se um segmento se
perder, provavelmente
haver muitos ACKs
duplicados.

retx rpida do TCP


se o transmissor
receber 3 ACKs para os
mesmos dados
(trs ACKs
duplicados),
retransmite segmentos
no reconhecidos com
menores nos. de seq.
provavelmente o
segmento no
reconhecido se
perdeu, no
preciso esperar o
temporizador.
3: Camada de Transporte

68

Host B

Host A

Seq=92, 8 bytes of data


Seq=100, 20 bytes of data

X
ACK=100

timeout

ACK=100
ACK=100
ACK=100
Seq=100, 20 bytes of data

Retransmisso de um segmento aps trs ACKs duplicados


3: Camada de Transporte

69

Contedo do Captulo 3
3.1 Introduo e

servios de camada de
transporte
3.2 Multiplexao e
demultiplexao
3.3 Transporte no
orientado para
conexo: UDP
3.4 Princpios da
transferncia
confivel de dados

3.5 Transporte

orientado para
conexo: TCP

estrutura do segmento
transferncia confivel de
dados
controle de fluxo
gerenciamento da conexo

3.6 Princpios de

controle de
congestionamento
3.7 Controle de
congestionamento no
TCP
3: Camada de Transporte

70

Controle de Fluxo
do TCP

a aplicao pode remover


dados dos buffers do socket
TCP .
mais devagar
do que o receptor
TCP est
entregando
(transmissor est
enviando)

processo
de aplicao
aplicao
Buffers de recepo
do socket TCP

TCP
code

IP
code

Controle de fluxo

o receptor controla o
transmissor, de modo que
este no inunde o buffer do
receptor transmitindo muito
e rapidamente

SO

do transmissor

pilha de protocolos no receptor


3: Camada de Transporte

71

Controle de Fluxo do TCP:


como funciona

O receptor anuncia o espao livre

do buffer incluindo o valor da rwnd


nos cabealhos TCP dos segmentos
que saem do receptor para o
transmissor

Tamanho do RcvBuffer
configurado atravs das opes do
socket (o valor default de 4096
bytes)
muitos sistemas operacionais ajustam
RcvBuffer automaticamente.

O transmissor limita a quantidade

os dados no reconhecidos ao
tamanho do rwnd recebido.
Garante que o buffer do receptor
no transbordar

para processo de aplicao

RcvBuffer dados
rwnd

armazenados

espao livre

carga dos segmentos TCP

armazenamento no
lado do receptor
3: Camada de Transporte

72

Contedo do Captulo 3
3.1 Introduo e

servios de camada de
transporte
3.2 Multiplexao e
demultiplexao
3.3 Transporte no
orientado para
conexo: UDP
3.4 Princpios da
transferncia
confivel de dados

3.5 Transporte

orientado para
conexo: TCP

estrutura do segmento
transferncia confivel de
dados
controle de fluxo
gerenciamento da conexo

3.6 Princpios de

controle de
congestionamento
3.7 Controle de
congestionamento no
TCP
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
estado conexo: ESTAB
variveis conexo:
No.seq cliente-p/servidor
servidor-p/-cliente
tamanho rcvBuffer
no servidor,cliente

aplicao
estado conexo: ESTAB
variveis conexo:
No.seq cliente-p/servidor
servidor-p/-cliente
tamanho rcvBuffer
no servidor,cliente

network

network

Socket clientSocket =
newSocket("hostname","port
number");

Socket connectionSocket =
welcomeSocket.accept();

3: Camada de Transporte

74

Concordando em estabelecer uma conexo

Apresentao de duas vias


2-way handshake):

Lets talk
ESTAB

choose x
ESTAB

OK

ESTAB

atrasos variveis

mensagens retransmitidas

(ex: req_conn(x)) devido


perda de mensagem
reordenao de mensagens
no consegue ver o outro lado

req_conn(x)
acc_conn(x)

P: a apresentao em duas
vias sempre funciona em
redes?

ESTAB

3: Camada de Transporte

75

Concordando em estabelecer uma conexo


cenrios de falha da apresentao de duas vias:

escolhe x

escolhe x

req_conn(x)

req_conn(x)
ESTAB

ESTAB
retransmit
e
req_conn(
ESTAB
x)

retransmit
e
req_conn(
ESTAB
x)

acc_conn(x)

req_conn(x)

cliente
termina

trmino da
conexo x

servidor
esquece
x
ESTAB

conexo aberta pela metade!


(sem cliente!)

retransmit
e
dados(x+
1)
cliente
termina

acc_conn(x)
data(x+1)

aceita
dados(x+1
)

trmino da
conexo x

servidor
req_conn(x) esquece
x

data(x+1)
3: Camada de Transporte

ESTAB
aceita
dados(x+1
)
76

Apresentao de trs vias do TCP


estado do cliente

estado do servidor

LISTEN

LISTEN
escolhe no seq inicial, x
envia msg TCP SYN

SYNSENT

SYNbit=1, Seq=x
escolhe no seq inicial, y
envia msg SYNACK,
reconhecendo o SYN SYN RCVD

SYNbit=1, Seq=y
ACKbit=1; ACKnum=x+1
ESTAB

SYNACK(x) recebido
Indica que o servidor
est ativo;
envia ACK para ACKbit=1, ACKnum=y+1
SYNACK;
ACK(y) recebido
este segmento pode
indica que o cliente
conter
est ativo
dados do cliente para
servidor

3: Camada de Transporte

ESTAB

77

Apresentao de trs vias do TCP


closed
Socket connectionSocket =
welcomeSocket.accept();

SYN(x)
SYNACK(seq=y,ACKnum=x+1)
cria novo socket para
comunicao com o cliente

listen

SYN(seq=x)

SYN
sent

SYN
rcvd

ACK(ACKnum=y+1)

Socket clientSocket =
newSocket("hostname","port
number");

ESTAB

SYNACK(seq=y,ACKnum=x+1)
ACK(ACKnum=y+1)

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
CLOSE_WAIT
pode receber
dados ACKbit=1; ACKnum=x+1
ainda pode
FIN_WAIT_2 espera o trmino
enviar dados
pelo servidor

FINbit=1, seq=y
TIMED_WAIT
espera temporizada
por 2*tempo mximo
de vida do segmento

LAST_ACK
no pode mais
enviar dados

ACKbit=1; ACKnum=y+1
CLOSED

CLOSED
3: Camada de Transporte

80

Contedo do Captulo 3
3.1 Introduo e

servios de camada de
transporte
3.2 Multiplexao e
demultiplexao
3.3 Transporte no
orientado para
conexo: UDP
3.4 Princpios da
transferncia
confivel de dados

3.5 Transporte

orientado para
conexo: TCP
3.6 Princpios de
controle de
congestionamento
3.7 Controle de
congestionamento no
TCP

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
Vazo mxima por
conexo: R/2

Grandes atrasos qdo. taxa


de chegada se aproxima da
3: Camada de Transporte
capacidade

83

Causas/custos de congest.: cenrio 2


finitos
retransmisso pelo remetente de pacote perdido
Um roteador, buffers

entrada camada apl. = sada camada apl.: in = out

entrada camada transp. inclui retransmisses.: in out


out

Hospedeiro A : dados originais


in

Hospedeiro C

'in : dados originais mais


dados retransmitidos

Hospedeiro B

Buffers de enlace de sada


finitos compartilhados

Hospedeiro D
3: Camada de Transporte

84

Causas/custos de congest.: cenrio 2


Idealizao: conhecimento
perfeito
transmissor envia apenas
quando houver buffer
disponvel no roteador

out

R/2

in

out

Hospedeiro A : dados originais


in
cpia

R/2

Hospedeiro C

'in : dados originais mais


dados retransmitidos

Hospedeiro B
espao livre em buffer!

Buffers de enlace de
sada finitos
compartilhados

Hospedeiro D
3: Camada de Transporte

85

Causas/custos de congest.: cenrio 2


Idealizao: perda conhecida.
pacotes podem ser perdidos,
descartados no roteador devido a
buffers cheios
transmissor apenas retransmite
se o pacote sabidamente se
perdeu.

in : dados originais

out

'in : dados originais mais


dados retransmitidos

cpia
Hospedeiro B
A

sem espao em buffer!

Hospedeiro D
3: Camada de Transporte

86

Causas/custos de congest.: cenrio 2


R/2

out

Idealizao: perda conhecida.


pacotes podem ser perdidos,
descartados no roteador devido a
buffers cheios
transmissor apenas retransmite
se o pacote sabidamente se
perdeu.

in

R/2

ao transmitir a R/2,
alguns pacotes so
retransmisses, mas
assintoticamente a
goodput ainda seria
R/2 (por que?)

in : dados originais

out

'in : dados originais mais


dados retransmitidos

Hospedeiro B
A

espao livre em buffer!

Hospedeiro D
3: Camada de Transporte

87

Causas/custos de congest.: cenrio 2


R/2
ao transmitir a R/2,
alguns pacotes so
retransmisses
incluindo duplicatas
que so entregues!

out

Realidade: duplicatas
pacotes podem ser perdidos,
descartados no roteador devido
a buffers cheios
retransmisso prematura, envio
de duas cpias, ambas entregues.

in

R/2

in : dados originais

out

'in : dados originais mais


dados retransmitidos

timeout

Hospedeiro B
A

espao livre em buffer!

Hospedeiro D
3: Camada de Transporte

88

Causas/custos de congest.: cenrio 2


R/2
ao transmitir a R/2,
alguns pacotes so
retransmisses
incluindo duplicatas
que so entregues!

out

Realidade: duplicatas
pacotes podem ser perdidos,
descartados no roteador devido
a buffers cheios
retransmisso prematura, envio
de duas cpias, ambas entregues.

in

R/2

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
quatro remetentes

caminhos com mltiplos

enlaces
temporizao/
retransmisso

in crescem ?

in

R: medida que in vermelho


cresce, todos os pacotes azuis
que chegam fila superior so
descartados, vazo
azul -> 0

in : dados originais

out

'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

Outro custo de congestionamento:


quando pacote descartado, qq. capacidade de transmisso
j usada (antes do descarte) para esse pacote foi
desperdiada!

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:
no usa realimentao
explcita da rede
congestionamento
inferido a partir das
perdas, e dos atrasos
observados nos sistemas
finais
abordagem usada pelo TCP

assistido pela rede:

roteadores enviam
informaes para os sistemas
finais
bit indicando
congestionamento (SNA,
DECbit, TCP/IP ECN,
ATM)
taxa explcita para envio
pelo transmissor

3: Camada de Transporte

92

Estudo de caso: controle de


congestionamento do servio ATM ABR
ABR (available bit rate):

servio elstico
se caminho do transmissor
est pouco usado:
transmissor pode usar
banda disponvel
se caminho do transmissor
estiver congestionado:
transmissor limitado
taxa mnima garantida

clulas RM (resource
management):

enviadas pelo transmissor,

entremeadas com clulas de dados


bits na clula RM iniciados por
comutadores (assistido pela
rede)
bit NI: no aumente a taxa
(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

Campo ER (explicit rate) de 2 bytes nas clulas RM

comutador congestionado pode reduzir valor de ER nas clulas


taxa do transmissor assim ajustada p/ menor valor possvel entre os
comutadores do caminho

bit EFCI em clulas de dados ligado pelos comutadores

congestionados

se EFCI ligado em clulas de dados que precedem a clula RM,


receptor liga bit CI na clula RM devolvida
3: Camada de Transporte

94

Contedo do Captulo 3
3.1 Introduo e

servios de camada de
transporte
3.2 Multiplexao e
demultiplexao
3.3 Transporte no
orientado para
conexo: UDP
3.4 Princpios da
transferncia
confivel de dados

3.5 Transporte

orientado para
conexo: TCP
3.6 Princpios de
controle de
congestionamento
3.7 Controle de
congestionamento no
TCP

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

transmisso:

LastByteSent-LastByteAcked
cwnd

Aproximadamente,
taxa =

cwnd
RTT

Bytes/seg

cwnd dinmica, em funo do

congestionamento detectado na
rede

Como o transmissor detecta o


congestionamento?
evento de perda = estouro
do temporizador ou 3 acks
duplicados
transmissor TCP reduz a
taxa (cwnd) aps evento de
perda
trs mecanismos:

AIMD
partida lenta
conservador aps eventos
de estouro de
temporizao (preveno
de congestionamento)

3: Camada de Transporte

97

TCP: Partida lenta


A

aumenta a taxa
exponencialmente at o
primeiro evento de
perda:

inicialmente cwnd = 1 MSS


duplica cwnd a cada RTT
atravs do incremento da
cwnd para cada ACK
recebido

RTT

No incio da conexo,

B
um segme
nto

dois segm
en

tos

quatro seg
m

entos

Resumo: taxa inicial

baixa mas cresce


rapidamente de forma
exponencial

tempo

3: Camada de Transporte

98

TCP: detectando, reagindo a perdas


perda indicada pelo estouro de temporizador:

cwnd reduzida a 1 MSS;


janela cresce exponencialmente (como na partida
lenta) at um limiar, depois cresce linearmente
perda indicada por ACKs duplicados: TCP RENO
ACKs duplicados indicam que a rede capaz de
entregar alguns segmentos
corta cwnd pela metade depois cresce
linearmente
O TCP Tahoe sempre reduz a cwnd para 1 (seja por
estouro de temporizador que trs ACKS duplicados)

3: Camada de Transporte

99

TCP: mudando da partida lenta para a CA


P: Quando o crescimento
exponencial deve
mudar para linear?
R: Quando cwnd atingir
1/2 do seu valor antes
da deteco de perda.

Implementao:

Limiar (Threshold) varivel

(ssthresh)
Com uma perda o limiar
(ssthresh) ajustado para
1/2 da cwnd imediatamente
antes do evento de perda.
3: Camada de Transporte

100

Controle de congestionamento do
transmissor TCP
ACK duplicado
dupACKcount++

cwnd = 1 MSS
ssthresh = 64 KB
dupACKcount = 0

partida
lenta

timeout
ssthresh = cwnd/2
cwnd = 1 MSS
dupACKcount = 0
retransmite os segmentos que faltam

dupACKcount == 3
ssthresh= cwnd/2
cwnd = ssthresh + 3
retransmite os segmentos que faltam

Novo
ACK!

Novo

ACK!
novo ACK
cwnd = cwnd + MSS (MSS/cwnd)
dupACKcount = 0
transmite novos segmentos, como permitido

novo ACK
cwnd = cwnd+MSS
dupACKcount = 0
transmite novos segmentos, como permitido
cwnd > ssthresh

timeout
ssthresh = cwnd/2
cwnd = 1 MSS
dupACKcount = 0
retransmite os segmentos que faltam

preveno
de
congest.

ACK duplicado
dupACKcount++

Novo
ACK!

timeout
ssthresh = cwnd/2
cwnd = 1
dupACKcount = 0
retransmite os segmentos que faltam

Novo ACK
cwnd = ssthresh
dupACKcount = 0

recuperao
rpida

dupACKcount == 3
ssthresh= cwnd/2
cwnd = ssthresh + 3
retransmite os segmentos que faltam

ACK duplicado
cwnd = cwnd + MSS
transmite novos segmentos, como permitido

3: Camada de Transporte

101

Vazo (throughput) do TCP


Qual a vazo mdia do TCP em funo do tamanho da janela

e do RTT?

Ignore a partida lenta, assuma que sempre haja dados a serem


transmitidos

Seja W o tamanho da janela (medida em bytes) quando ocorre uma

perda

Tamanho mdio da janela W


Vazo mdia de W por RTT
W

W/2

3: Camada de Transporte

102

Futuro do TCP
Exemplo: segmentos de 1500 bytes, RTT de

100ms, deseja vazo de 10 Gbps


Requer janela de W = 83.333 segmentos em
trnsito
Vazo em termos de taxa de perdas (L) [Mathis 1997]:

1,22 MSS
vazo do TCP
RTT L
Taxa de perdas demasiado baixa!!!
So necessrias novas verses do TCP para altas
velocidades!
L = 210-10

3: Camada de Transporte

103

Equidade (Fairness) do TCP


Objetivo de equidade: se K sesses TCP
compartilham o mesmo enlace de gargalo com
largura de banda R, cada uma deve obter uma taxa
mdia de R/K
Conexo TCP 1

Conexo
TCP 2

Roteador
com gargalo, de
capacidade R

3: Camada de Transporte

104

Por que o TCP justo?


Duas sesses competindo pela banda:

Aumento aditivo d gradiente de 1, enquanto vazo aumenta


Reduo multiplicativa diminui vazo proporcionalmente

Vazo da conexo 2

compartilhamento igual da banda

Vazo da conexo 1

perda: diminui janela por fator de 2


preveno de congest.: aumento aditivo
perda: diminui janela por fator de 2
preveno de congest.: aumento aditivo

R
3: Camada de Transporte

105

Equidade (mais)
Equidade e UDP
Aplicaes multimdia
frequentemente no usam
TCP

no querem a taxa
estrangulada pelo controle
de congestionamento

Preferem usar o UDP:

Injeta udio/vdeo a taxas


constantes, toleram
perdas de pacotes

Equidade e conexes TCP em


paralelo
nada impede que as apls. abram
conexes paralelas entre 2
hosts
Os browsers Web fazem isto
Exemplo: canal com taxa R
compartilhado por 9 conexes;

novas aplicaes pedem 1 TCP,


obtm taxa de R/10
novas aplicaes pedem 11 TCPs,
obtm taxa R/2 !

3: Camada de Transporte

106

Captulo 3: Resumo
Princpios por trs dos

servios da camada de
transporte:

multiplexao/
demultiplexao
transferncia confivel de
dados
controle de fluxo
controle de congestionamento
instanciao e implementao na
Internet
UDP
TCP

Prximo captulo:

samos da borda da

rede (camadas de
aplicao e transporte)
entramos no ncleoda
rede

3: Camada de Transporte

107