Академический Документы
Профессиональный Документы
Культура Документы
Objectivos:
da camada de Internet:
ligação
❍ Multiplexagem/
ligação
❍ Transferência de dados
TCP
❍ Controlo de fluxo
❍ Controlo de congestão
Capítulo 3: Sumário
fiável
❒ 3.3 Transporte sem
❍ controlo de fluxo
ligação: UDP
❍ gestão de ligações
❒ 3.4 Princípios de
❒ 3.6 Princípios de
transmissão de dados
controlo de congestão
fiável
❒ 3.7 Controlo de
congestão em TCP
T
/)0 1 3 . 2. +(
r
a
,-.$- &' () *+
n
são executados nos Sistemas
s
/)0 1 3 . 2. +(
p
o
r
&' () *
+
t
Terminais
e
ló
,-.$-
g
/ ) 0 1 .32. +(
ic
lado que envia: parte a
o
❍ &' () *+ ,-.$-
e
x
/)0 1 . 2. +(
t
mensagem da aplicação em
r
&' () *
+
e
m
o
-
segmentos, que passa à
a
,-.-
-
e
/)0 1 3 . 2. +(
x
camada de rede
t
&' () *
+
r
e
m
o
❍ lado que recebe: junta os 435$6 7 8439:;
<
= 43>?
5; =<@
segmentos em mensagens, =@A$@
6 7 B C A 4 A ;?
passa à camada de aplicação DE ?7 8;
aplicações
Camada de Transporte 3-3
❍ Internet: TCP e UDP
❒ Camada de Rede:
❒ Camada de Transporte:
❒ Sistemas Terminais ?
❒ Ex: cartas entre
❒ Processos ?
primos de
❒ Mensagens de aplicação ?
Lisboa e Porto !!!
❒ Protocolo de transporte ?
❒ Protocolo de rede ?
Processos = primos
correio
unicast (TCP)
FGH I JFK
LM
❍ controlo de congestão N
O FPQ
GM ON
R
ORSR
controlo de fluxo
❍ H I T U S F S MQ ORS$R
VW QI J
M
T
H I T U S F S MQ
r
a
estabelecimento da ligação
ORS$R VW QI JM
n
s
❍
p
H I T U S F S MQ
o
r
VW QI J
M
t
❒ ORS$R
ló
g
H I T U S F S MQ
ic
o
esforço, best-effort),
VW QI JM ORS$R
e
x
H I T U S F S MQ
t
r
VW QI J
M
e
ORSR
-
multicast: UDP
e
H I T U S F S MQ
x
t
VW QI J
M
r
e
m
o
banda
❍ multicast fiável
fiável
❒ 3.3 Transporte sem
❍ controlo de fluxo
ligação: UDP
❍ gestão de ligações
❒ 3.4 Princípios de
❒ 3.6 Princípios de
transmissão de dados
controlo de congestão
fiável
❒ 3.7 Controlo de
congestão em TCP
Multiplexagem/Desmultiplexagem
Multiplexagem no envio:
Demultiplexagem na recepção:
para desmultiplexar)
= socket = processo
aplicação P3 P1
P1 aplicação P2 P4 aplicação
endereço IP de origem,
#porto origem #porto destino
endereço IP de destino
segmento da camada de do
transporte cabeçalho
aplicações específicas)
apropriado
socket
P2 P1
P1
P3
cada pedido
para o socket
apropriado
P2 P3 P4 P1
P1
PO: 80 PO: 80
PD: 80 PD: 80
cliente cliente
servidor
IP: A IP: B
IP: C
Capítulo 3: Sumário
fiável
❒ 3.3 Transporte sem
❍ controlo de fluxo
ligação: UDP
❍ gestão de ligações
❒ 3.4 Princípios de
❒ 3.6 Princípios de
transmissão de dados
controlo de congestão
fiável
❒ 3.7 Controlo de
congestão em TCP
❒ Protocolo de transporte da
aplicação segmento
quanto se queira !!
❍ cada segmento UDP é
processado
independentemente dos
demais
Camada de Transporte 3-15
UDP: mais
UDP,
❒ Outras utilizações do
incluindo
❍ SNMP (mensagem)
ao nível da aplicação
específica da aplicação!
segmento transmitido
Receptor:
Emissor:
❒ Calcula o checksum dos
❒ Trata o conteúdo do
segmentos recebidos
segmento como uma
de checksum
❒ checksum: soma do conteúdo
Capítulo 3: Sumário
fiável
❒ 3.3 Transporte sem
❍ controlo de fluxo
ligação: UDP
❍ gestão de ligações
❒ 3.4 Princípios de
❒ 3.6 Princípios de
transmissão de dados
controlo de congestão
fiável
❒ 3.7 Controlo de
congestão em TCP
receptor
lado do lado do
emissor receptor
Vamos:
emissor e o receptor
estado
estado
1 eventos
quando neste estado, o 2
unicamente
determinado pelo
próximo evento
Camada de Transporte 3-21
receptor
emissor receptor
❒ Canal que está por baixo pode trocar bits nos pacotes
sem erros
com erros
rdt_send(data)
Receptor
sndpkt = make_pkt(data, checksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
isNAK(rcvpkt)
espera espera rdt_rcv(rcvpkt) &&
dados de ACK ou udt_send(sndpkt) corrupt(rcvpkt)
cima NAK
udt_send(NAK)
rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)
rdt_send(data)
snkpkt = make_pkt(data, checksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
isNAK(rcvpkt)
espera espera rdt_rcv(rcvpkt) &&
dados de ACK ou udt_send(sndpkt) corrupt(rcvpkt)
cima NAK
udt_send(NAK)
rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)
rdt_send(data)
snkpkt = make_pkt(data, checksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
isNAK(rcvpkt)
espera espera rdt_rcv(rcvpkt) &&
dados de ACK ou udt_send(sndpkt) corrupt(rcvpkt)
cima NAK
udt_send(NAK)
rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)
ou os NAKs se
Tratamento de duplicados:
corromperem?
❒ Emissor acrescenta número
❒ O emissor não sabe o que
de sequência a cada pacote
aconteceu no receptor!
corromper
O que fazer?
❒ Receptor descarta pacotes
❍ O que acontece se os
parar e esperar
pacotes correctamente
Camada de Transporte
recebidos
3-27
rdt_send(data)
sndpkt = make_pkt(0, data, checksum)
udt_send(sndpkt) rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) ||
espera espera isNAK(rcvpkt) )
dados 0 ACK ou
de cima udt_send(sndpkt)
NAK 0
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt) rdt_rcv(rcvpkt)
&& isACK(rcvpkt) && notcorrupt(rcvpkt)
&& isACK(rcvpkt)
Λ
Λ
espera espera
ACK ou dados 1
rdt_rcv(rcvpkt) && NAK 1 de cima
( corrupt(rcvpkt) ||
isNAK(rcvpkt) ) rdt_send(data)
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)
rdt2.1: discussão
Emissor: Receptor:
rdt_send(data)
sndpkt = make_pkt(0, data, checksum)
udt_send(sndpkt) rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) ||
espera espera
dados 0 de ACK isACK(rcvpkt,1) )
cima 0 udt_send(sndpkt)
fragmento
do emissor rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) && && isACK(rcvpkt,0)
(corrupt(rcvpkt) || Λ
fragmento
has_seq1(rcvpkt)) espera
dados 0
udt_send(sndpkt) de baixo do receptor
rdt3.0: emissor
rdt_send(data)
rdt_rcv(rcvpkt) &&
sndpkt = make_pkt(0, data, checksum) ( corrupt(rcvpkt) ||
udt_send(sndpkt) isACK(rcvpkt,1) )
rdt_rcv(rcvpkt) start_timer Λ
Λ espera espera timeout
dados 0 de ACK0 udt_send(sndpkt)
cima
start_timer
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt) rdt_rcv(rcvpkt)
&& isACK(rcvpkt,1) && notcorrupt(rcvpkt)
stop_timer && isACK(rcvpkt,0)
stop_timer
espera espera
timeout dados 1 de
udt_send(sndpkt) ACK1
cima
start_timer rdt_rcv(rcvpkt)
rdt_send(data) Λ
rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) || sndpkt = make_pkt(1, data, checksum)
isACK(rcvpkt,0) ) udt_send(sndpkt)
start_timer
Λ
emissor receptor
emissor receptor
pacote perdido
rdt3.0: em acção
❒ exemplo:
❍ Ligação = 1 Gbps
❍ Pacote = 1KB
L / R . 008
U = = = 0.00027
emissor
30.008
RTT + L / R microsec
onds
❍ U emissor
: utilização ou eficiência fracção do tempo que o emissor
❍ 1KB (pkt) cada 30 mseg -> débito de 33KB/seg numa ligação 1 Gbps
emissor receptor
primeiro bit do pacote transmitido, t = 0
último bit do pacote transmitido, t = L / R
L / R . 008
U = = = 0.00027
emissor
30.008
RTT + L / R microsec
onds
emissor receptor
primeiro bit transmitido, t = 0
último bit transmitido, t = L / R
um factor de 3!
3 * L / R .024
U = = = 0.0008
emissor
30.008
RTT + L / R microsecon
ds
Emissor:
❍ ACK cumulativo
default
udt_send(sndpkt) rdt_rcv(rcvpkt)
&& notcurrupt(rcvpkt)
Λ && hasseqnum(rcvpkt,expectedseqnum)
expectedseqnum=1 Wait extract(rcvpkt,data)
sndpkt = deliver_data(data)
make_pkt(0,ACK,chksum) sndpkt = make_pkt(expectedseqnum,ACK,chksum)
udt_send(sndpkt)
expectedseqnum++
Receptor simples:
GBN em
emissor receptor
acção
correctamente recebidos
❒ Janela do emissor
Emissor Receptor
confirmado recebido
dilema
Exemplo:
❒ Nºs seq : 0, 1, 2, 3
❒ Dimensão da janela =3
❒ o receptor não vê
cenários!
passados
incorrectamente como
novos em (a)
disponíveis e a
dimensão da janela ?
Camada de Transporte 3-49
Capítulo 3: Sumário
fiável
❒ 3.3 Transporte sem
❍ controlo de fluxo
ligação: UDP
❍ gestão de ligações
❒ 3.4 Princípios de
❒ 3.6 Princípios de
transmissão de dados
controlo de congestão
fiável
❒ 3.7 Controlo de
congestão em TCP
Transmissão de dados
um emissor, um receptor
❍ ❍
bidireccional na mesma ligação
não há delimitação de
Orientado à ligação:
❍ ❒
mensagens
❍ handshaking (transferência de
estado do emissor e do
❍ dimensão da janela definida
receptor antes de transferir
pelo controlo de congestão e
dados
de fluxo do TCP
❒ Controlo de fluxo:
❒ Buffers no emissor e receptor
❍ Emissor não sobrecarrega o
receptor
Aplicação Aplicação
Escrita de dados Leitura de dados
interface interface
socket socket
TCP TCP
Buffer de envio Buffer de recepção
Camada de Transporte
segmento
3-51
32 bits
Não segmentos !
Número acknowledgment
❍
❒ Opções:
32 bits
estabelecimento e terminação da
ligação
dados da
❒ Ptr Urgent data
aplicação
Apontador para o último byte de dados
(dimensão variável)
❍
que contém dados urgentes
Números de Sequência:
máquina A máquina B
❍ Nº do primeiro byte
de ordem ?
❍ R: A especificação tempo
TCP não é clara, Cenário simples de Telnet
para a implementação
Camada de Transporte 3-54
TCP: Round Trip Time e Timeout
a transmissão de um segmento
temporizador do
até à recepção do seu ACK
TCP?
❍ não considera retransmissões
❒ maior que o RTT
❒ SampleRTT vai variar, quer-se
❍ mas o RTT varia
uma estimativa do RTT com
❒ demasiado curto: expira
variações suaves
prematuramente
❍ fazer a média de várias
❍ retransmissões
medidas recentes, não apenas
desnecessárias
o SampleRTT actual
❒ demasiado longo:
de segmentos
moving average)
rapidez exponencial
350
300
250
RTT (milliseconds)
200
150
100
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
do EstimatedRTT:
β)*DevRTT +
DevRTT = (1-β
β*|SampleRTT-EstimatedRTT|
(tipicamente, β = 0.25)
fiável
❒ 3.3 Transporte sem
❍ controlo de fluxo
ligação: UDP
❍ gestão de ligações
❒ 3.4 Princípios de
❒ 3.6 Princípios de
transmissão de dados
controlo de congestão
fiável
❒ 3.7 Controlo de
congestão em TCP
pipeline simplificado:
temporizador de
retransmissão
NextSeqNum = InitialSeqNum
emissor
SendBase = InitialSeqNum
loop (forever) {
TCP
switch(event)
(simplificado)
event: data received from application above
create TCP segment with sequence number NextSeqNum
if (timer currently not running)
start timer
Comentário:
pass segment to IP
NextSeqNum = NextSeqNum + length(data)
SendBase-1:
último byte
event: timer timeout
confirmado
retransmit not-yet-acknowledged segment with
smallest sequence number cumulativamente
SendBase-1 = 71;
event: ACK received, with ACK field value of y y= 73, pelo que o
Seq=9 Seq=9
2, 8 b 2, 8 b
ytes d ytes d
ata Seq= ata
Seq=92 timeout
100,
20 by
tes d
timeout
ata
=100
ACK
00
X K=1 120
AC ACK=
perda
Seq=9 Seq=9
2, 8 b
2, 8 b
ytes d Sendbase ytes d
ata ata
= 100
Seq=92 timeout
SendBase
= 120 20
K=1
=100 AC
ACK
SendBase
SendBase
= 100
= 120
timeout prematuro
tempo
tempo
cenário de ACK perdido
Camada de Transporte 3-63
Máquina A Máquina B
Seq=9
2, 8 b
ytes d
ata
=100
timeout
Seq=1 ACK
00, 20
bytes
data
X
perda
SendBase =120
ACK
= 120
tempo
temporizador expire
❍ Emissor frequentemente
seguidos
❍ Se um segmento é perdido,
provavelmente haverá
Capítulo 3: Sumário
fiável
❒ 3.3 Transporte sem
❍ controlo de fluxo
ligação: UDP
❍ gestão de ligações
❒ 3.4 Princípios de
❒ 3.6 Princípios de
transmissão de dados
controlo de congestão
fiável
❒ 3.7 Controlo de
congestão em TCP
Controlo de fluxo
emissor não
❒ o lado receptor da
sobrecarrega o receptor
ligação TCP tem um
por transmitir
buffer de recepção: demasiado depressa
❒ serviço de adaptação
de velocidade: adapta
de processamento de
dados da aplicação
❒ o processo de aplicação
dados do buffer
❒ O receptor anuncia o
valor de RcvWindow
nos segmentos
❒ O emissor limita os
(Suponha que o receptor TCP dados por confirmar a
descarta segmentos fora RcvWindow
de ordem)
❍ garante que o buffer de
fiável
❒ 3.3 Transporte sem
❍ controlo de fluxo
ligação: UDP
❍ gestão de ligações
❒ 3.4 Princípios de
❒ 3.6 Princípios de
transmissão de dados
controlo de congestão
fiável
❒ 3.7 Controlo de
congestão em TCP
TCP:
Nº de sequência
Servidor: contactado pelo cliente
❍ ❒
❍ Buffers socket_fd=socket(Domínio, Tipo, 0)
Informação de janela
bind(socket_fd,estr_endereços,dim_estr_ender)
❍
listen (socket_fd, num_lig_em_espera)
de controlo de fluxo
new_fd=accept(socket_fd, estr_endereços, dim)
( RcvWindow)
estr_endereços = domínio; porto; end IP origem
Ack = client_isn+1
Ack = server_isn+1
cliente servidor
pedido
Lig
(SYN= ação pedid
1, seq a
Reserva
=clien
t_ isn)
buffers e
variáveis
dida
ã o conce r_isn,
e
Reserva Ligaç seq=serv 1)
buffers e
=1, isn+
(SYN k_client_
variáveis
ac
estabelecimento
Liga
(SYN= ção confirm
0, se ada
ack=s q=client_isn
erver_ +
isn+1) 1,
tempo
close
o cliente fecha o socket:
FIN
close(socket);
timed wait
ACK
FIN, responde com ACK.
fechado
ACK
Nota: com pequenas
fechado
modificações, pode tratar
FINs simultâneos.
fechado
Ciclo de vida do
servidor TCP
Capítulo 3: Sumário
fiável
❒ 3.3 Transporte sem
❍ controlo de fluxo
ligação: UDP
❍ gestão de ligações
❒ 3.4 Princípios de
❒ 3.6 Princípios de
transmissão de dados
controlo de congestão
fiável
❒ 3.7 Controlo de
congestão em TCP
Congestão:
❒ Sintomas:
dos routers)
Emissor A λout
λin : dados originais
❒ dois emissores,
dois receptores
buffers partilhados na
um router, buffers
Emissor B linha de saída infinitos
❒
infinitos
❒ sem retransmissões
❒ atraso elevado
em situação de
congestão
❒ débito máximo
atingível
1 3
2
custos da congestão:
4 emissores
Q: O que acontece
❒
❒ caminho com vários nós
quando λ e λ
timeout/retransmissões
in in
aumentam ?
❒
Emissor A λout
λin : dados originais
λ'in : dados originais, mais
dados retransmitidos
buffers partilhados na
linha de saída finitos
Emissor B
H λ
o
o
s
u
t t
A
H
o
s
t
B
transmitir é perdida!
terminais ATM)
enviar
indicador de congestão
❒ Bits CI e NI
Capítulo 3: Sumário
fiável
❒ 3.3 Transporte sem
❍ controlo de fluxo
ligação: UDP
❍ gestão de ligações
❒ 3.4 Princípios de
❒ 3.6 Princípios de
transmissão de dados
controlo de congestão
fiável
❒ 3.7 Controlo de
congestão em TCP
≤ CongWin duplicados
três mecanismos:
❒ CongWin é dinâmico, função
❍ AIMD
da congestão da rede
❍ arranque lento (slow start)
detectada
❍ conservativo após eventos
de timeout
eventos de perda:
janela de sondagem
congestão
24 Kbytes
16 Kbytes
8 Kbytes
tempo
>> MSS/RTT
❍ vantajoso aumentar
um valor respeitável
começa, aumenta o
ritmo exponencialmente
um segme
nto
RTT
de perda:
dois segm
entos
exponencialmente
exponencialmente
depois cresce
Refinamento (mais)
Q: Quando deve o
crescimento
tamanho da janela de congestão
exponencial mudar 14
TCP
para linear? 12 Reno
R: Quando
(segmentos)
10
CongWin
chegar a 1/2 do
8
Implementação:
0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
TCP: Justiça
ligação 1 TCP
estrangulamento
TCP
router
ligação 2
capacidade R
Débito da ligação 1 R
Notação, pressupostos:
Q: Quanto tempo demora a
❒ Assumindo uma linha entre o
receber um objecto de um cliente e o servidor de ritmo R
segmento [bits]
Ignorando a congestão, a
O: tamanho do objecto [bits]
latência depende de:
❒
❒ cabeçalhos desprezáveis
❒ estabelecimento de ligação TCP
❒ sem retransmissões (sem
❒ tempo de transmissão de dados
perdas, sem corrupção)
❒ arranque lento
Dimensão da janela:
❒ 1º assumir: janela de
1º caso:
1º segmento da janela
recebido antes de se
esgotar a janela
W = 4
2º caso:
de esgotar a janela
❒ K = nº de janelas de
O S S
Latência = 2 RTT + + P RTT + − (2 P − 1)
R R R
P = min{Q, K − 1}
dimensão infinita
Componentes:
inicia ligação
TCP
2 RTT para ligar e
pedido pede
O/R para transmitir
objecto
primeira janela
objecto
= S/R
lento
terceira janela
= 4S/R
Servidor pára:
P = min{K-1,Q} vezes
Exemplo:
quarta janela
= 8S/R
O/S = 15 segmentos
K = 4 janelas
Q = 2
P = min{K-1,Q} = 2 transmissão
objecto completa
entregue
S
+ RTT = Tempo desde que o servidor inicia a transmiss ão do objecto até que recebe o ACK
R inicia ligação
TCP
S
2 k −1 = Tempo para transmitir a janela K
pede
objecto primeira janela
R = S/R
P quarta janela
O
Latência = + 2 RTT + ∑ TempoParagem p
= 8S/R
R p =1
P
O S S
= + 2 RTT + ∑ [ + RTT − 2 k −1 ] objecto transmissão
R k =1 R R entregue completa
O S S tempo no
= + 2 RTT + P[ RTT + ] − (2 P − 1) tempo no
cliente
servidor
R R R
Camada de Transporte 3-104
Modelo de latência TCP (4)
Como se calcula K ?
K = min{k : 2 0 S + 21 S + L + 2 k −1 S ≥ O}
= min{k : 2 0 + 21 + L + 2 k −1 ≥ O / S }
O
= min{k : 2 k − 1 ≥ }
S
O
= min{k : k ≥ log 2 ( + 1)}
S
O
= log 2 ( + 1)
S
O cálculo de Q, número de paragens para um objecto de tamanho
Modelo do HTTP
paragens
20
15
non-persistent
10
persistent
parallel non-
0
28 Kbps
10 Mbps
100 Kbps
1 Mbps
persistent
de ligações paralelas.
70
60
50
non-persistent
40
30
persistent
20
10
parallel non-
0
28 Kbps
10 Mbps
100 Kbps
1 Mbps
persistent
❒ Princípios do serviço da
camada de transporte:
❍ multiplexagem,
desmultiplexagem
❍ transferência de dados
fiável A seguir:
da rede (aplicações,
❍ controlo de congestão
camada de
Instanciação e implementação
transporte)
❒
na Internet
❒ Entrar no núcleo
❍ UDP da rede
❍ TCP