Вы находитесь на странице: 1из 23

14-10-2013

REDES DE COMPUTADORES
CAMADA DE TRANSPORTE

2 Ano 1 Semestre 2013/2014

Camada de Transporte
2

Servios da camada de transporte Multiplexagem / desmultiplexagem Servio no orientado ligao: UDP Transferncia fivel de dados Servio orientado ligao: TCP
Transferncia fivel Controlo de fluxo Gesto de ligaes

Controlo de congestionamento
TCP

14-10-2013

Servios da camada de transporte


3

Os protocolos da camada de transporte executam-se nos sistemas terminais e fornecem um servio de comunicao ao nvel lgico entre as aplicaes Servios de transporte vs. servios de rede:
Camada de rede: transferncia de dados entre sistemas terminais Camada de transporte: transferncia de dados entre processos; estes servios so construdos com base nos servios da camada de rede com o objectivo de os melhorar

Camadas de Transporte vs Rede


4

As entidades da camada de transporte trocam entre si segmentos ou TPDUs (Transport Protocol Data Unit) Camada de rede
Transferncia de dados entre sistemas terminais No reconhecem, nem actuam, sobre informao adicionada pela camada de transporte

Analogia domestica:
12 crianas enviam cartas a 12 crianas
Processos = crianas Mensagens da aplicao = cartas nos envelopes Sistemas terminais = casas Protocolo de transporte = Ana e Joaquim Protocolo da camada de rede = servio postal

Camada de transporte
Comunicao lgica entre processos Depende de, e estende, os servios da camada de rede

14-10-2013

Protocolos da camada de transporte - Internet


TCP (Transmission Control Protocol) - comunicao fivel, com garantia de entrega na ordem de extremo a extremo (unicast ou 1-para-1)
Controlo de fluxo Estabelecimento e gesto de ligaes Controlo de congestionamento

UDP (User Datagram Protocol) - comunicao no fivel, sem garantia de entrega na ordem (best-effort), de um para um ou mais extremos (unicast ou multicast)

Multiplexagem / Desmultiplexagem
6

Multiplexagem-emissor Rene dados de muitos sockets e coloca o cabealho (usado depois para a desmultiplexagem) Desmultiplexagem-receptor Entrega dos segmentos recebidos ao socket correcto
= socket application transport network link physical P3 = process P1 P1 application transport network link physical P2 P4 application transport network link physical

host 1

host 2

host 3

14-10-2013

Como funciona a Desmultiplexagem


7

Computador recebe os datagramas IP


Cada datagrama possui os endereos IP da origem e do destino Cada datagrama transporta 1segmento da camada de transporte
se sem fragmentao IP

32 bits source port # dest port #

other header fields

Cada segmento possui nmeros das portas origem e destino (lembrar: nmeros de portas bem conhecidas para aplicaes especificas)

application data (message) TCP/UDP segment format


Nmeros ds portos: 16 bits (0 65535) 0 1023 restritos para uso por aplicaes conhecidas e.g. HTTP no porto 80, FTP no 21 (www.iana.org)

O sistema terminal usa os endereos IP e os nmeros das portas para direccionar o segmento ao socket apropriado

Multiplexagem/Desmultiplexagem: exemplos

14-10-2013

UDP (User Datagram Protocol)


9

Servio de melhor esforo (best effort); os segmentos UDP podem ser:


Perdidos Entregues aplicao fora de ordem

Porque existe o protocolo UDP


No h necessidade de estabelecer uma ligao (eficiente e.g. para mensagens curtas) No h necessidade de manter um estado (ao nvel da camada de transporte ) no emissor ou no receptor Pequeno cabealho em cada segmento O emissor pode transmitir a qualquer ritmo - no se executam mecanismos de controlo de congestionamento (vantagens para a aplicao vs. desvantagens para a rede )

Servio no orientado ligao


Cada segmento UDP tratado independentemente dos outros

RFC 768

Aplicaes Internet: protocolos de aplicao e de transporte Recapitular


10

14-10-2013

UDP
11

Usado em:
aplicaes multimdia
tolerantes a perdas exigentes em ritmo de transmisso
Length, in bytes of UDP segment, including header length

32 bits source port # dest port # checksum

outras aplicaes
DNS SNMP (Simple Network Management Protocol)

Uma aplicao pode incluir mecanismos de transferncia de dados fivel, mesmo usando UDP ao nvel de transporte

Application data (message)

UDP segment format

12

UDP - deteco de erros (mecanismo includo no UDP


Procedimento abreviado
Emissor:
Trata cada segmento como uma sequncia de inteiros de 16 bits Campo checksum inicializado a zero

Receptor:
Calcula checksum do segmento recebido anexado com o valor de checksum enviado
calculo usando exclusive-or ou somamodular conforme algoritmo usado pelo emissor

Mtodo Soma-Modular
Soma (adio usando complemento de 1) do contedo do segmento (RFC[1071] para detalhes sobre algoritmo eficiente de calculo) O resultado colocado no campo checksum do segmento

Verifica se novo checksum calculado palavra com n


0s (Mtodo Parity byte or parity word) 1s (Mtodo Soma-Modular)
NO - erro detectado SIM - nenhum erro detectado

Mtodo Parity byte or parity word


Checksum: exclusive-or do contedo do segmento

14-10-2013

Checksum Internet Erros


13

Nota: quando se adicionam nmeros, o nmero de transporte deve ser adicionado ao resultado Exemplo: adicionar dois inteiros de16 bits

Camada de Transporte
14

Servios da camada de transporte Multiplexagem / desmultiplexagem Servio no orientado ligao: UDP Transferncia fivel de dados Servio orientado ligao: TCP
Transferncia fivel Controlo de fluxo Gesto de ligaes

Controlo de congestionamento
TCP

14-10-2013

Transferncia fivel de dados


15

Funo importante nas camadas de aplicao, transporte e ligao de dados As caractersticas do canal de comunicao subjacente determinam a complexidade do protocolo de transmisso fivel (que iremos designar por reliable data transfer rdt)

Transferncia fivel: implementao


16

rdt_send(): chamado da camada de


cima, (e.g. pela aplicao). Envia dados para entrega camada superior do receptor

deliver_data(): chamado por rdt para entregar dados camada superior

send side

receive side

udt_send():chamado pela entidade de transporte rdt, para transferir pacotes para o receptor atravs de um canal no fivel

rdt_rcv(): chamado quando os pacotes chegam ao canal no lado do receptor

14-10-2013

Transferncia fivel: metodologia


17

Vamos desenvolver incrementalmente as partes emissora e receptora do protocolo de transferncia fivel (rdt) Vamos considerar transferncia de dados unidireccional (para simplificar a exposio)
Embora a informao de controlo flua nos dois sentidos!

Na especificao do emissor e do receptor, usam-se mquinas de estados finitos (Finite State Machines - FSM)
eventos que causam transio de estado aces a executar na transio de estados
estado 1 estado 2

Estado: quando se esperam eventos. Quando num estado, o prximo estado unicamente determinado pelo prximo evento

eventos aces

18

rdt1.0 - transferncia fivel sobre canal fivel


Neste cenrio inicial supomos que o canal subjacente completamente fivel :
Sem erros Sem perda de pacotes

Maquinas de estados separadas para o emissor e o receptor


Emissor envia dados para o canal Receptor l os dados do canal

Espera dados de cima

rdt_send(data) packet = make_pkt(data) udt_send(packet)

Espera dados de baixo

rdt_rcv(packet) extract (packet,data) deliver_data(data)

emissor

receptor

14-10-2013

rdt2.0 - canal com erros


19

Agora, supomos que o canal subjacente pode introduzir erros


Como recuperar dos erros?
Confirmaes positivas, acknowledgements (ACKs): o receptor informa explicitamente o emissor que recebeu bem um pacote Confirmaes negativas, negative acknowledgements (NAKs): o receptor informa explicitamente o emissor que recebeu um pacote com erros o emissor retransmite um pacote sempre que recebe um NAK

Mecanismos introduzidos:
deteco de erros informao de controlo do receptor para o emissor (ACKs e NAKs)

20

rdt2.0 especificao da mquina de estados


rdt_send(data) snkpkt = make_pkt(data, checksum) udt_send(sndpkt) Espera dados de cima Espera ACK ou NAK rdt_rcv(rcvpkt) && isNAK(rcvpkt) udt_send(sndpkt) rdt_rcv(rcvpkt) && corrupt(rcvpkt) udt_send(NAK) rdt_rcv(rcvpkt) && isACK(rcvpkt) Espera dados de baixo

receptor

emissor

rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) extract(rcvpkt,data) deliver_data(data) udt_send(ACK)

10

14-10-2013

21

rdt2.0 exemplo de funcionamento sem erros


rdt_send(data) snkpkt = make_pkt(data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && isNAK(rcvpkt) udt_send(sndpkt)

receptor
rdt_rcv(rcvpkt) && corrupt(rcvpkt) udt_send(NAK)

Espera dados de cima

Espera ACK ou NAK

rdt_rcv(rcvpkt) && isACK(rcvpkt)

Espera dados de baixo

emissor

rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) extract(rcvpkt,data) deliver_data(data) udt_send(ACK)

22

rdt2.0 exemplo de funcionamento com erros


rdt_send(data) snkpkt = make_pkt(data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && isNAK(rcvpkt) Espera Espera dados de ACK ou udt_send(sndpkt) cima NAK

receptor
rdt_rcv(rcvpkt) && corrupt(rcvpkt) udt_send(NAK)

rdt_rcv(rcvpkt) && isACK(rcvpkt)

Espera dados de baixo

emissor

rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) extract(rcvpkt,data) deliver_data(data) udt_send(ACK)

11

14-10-2013

rdt2.0 mau funcionamento


23

Parar e Esperar (Stop and wait)


Emissor envia um pacote e espera pela resposta do receptor

O que acontece se os ACKs ou os NAKs se corromperem?


O emissor no sabe o que se passou no receptor! A simples retransmisso pode originar pacotes duplicados

O que fazer?
Emissor envia ACKs/NAKs referentes aos ACK/NAK do receptor?
E se se perder os ACK/NAK do emissor?

Retransmite-se!?

Tratamento de duplicados
Emissor acrescenta nmero de sequncia a cada pacote Emissor retransmite o pacote corrente se o ACK/NAK se corromper Receptor descarta (no os entrega a aplicao) pacotes duplicados

24

rdt2.1: Emissor trata ACK/NAKs corrompidos


rdt_send(data)
sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || Wait for isNAK(rcvpkt) ) Wait for call
0 from above ACK or NAK 0

udt_send(sndpkt) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt)

rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt)


Wait for ACK or NAK 1

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

Wait for call 1 from above

rdt_send(data) sndpkt = make_pkt(1, data, checksum) udt_send(sndpkt)

12

14-10-2013

rdt2.1 receptor (ACK/NAK com erros)


25

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(NAK, chksum) udt_send(sndpkt) Wait for 0 from below Wait for 1 from below rdt_rcv(rcvpkt) && not corrupt(rcvpkt) && has_seq0(rcvpkt) 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)

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

rdt2.1 discusso
26

Emissor:
No de sequencia adicionado a cada pacote bastam dois nos de sequencia (0,1) Tem de se verificar se ACKs/NAKs recebidos esto corrompidos Duplicou o nmero de estados
O estado tem de se lembrar se o pacote corrente tem o no de sequencia 0 ou 1

Receptor:
Tem de verificar se recebeu pacotes duplicados
O estado indica se se espera um pacote com o no de sequencia 0 ou 1

Nota: receptor no tem como saber se o ultimo ACK/NAK foi recebido correctamente pelo emissor

13

14-10-2013

rdt2.2 protocolo sem NAKs


27

Mesma funcionalidade de rdt2.1 mas usando apenas ACKs O receptor manda um ACK por cada pacote bem recebido
tem de incluir o nmero do pacote que est a confirmar

A recepo, pelo emissor, de dois ACKs seguidos para o mesmo pacote tem o mesmo efeito que um NAK

rdt2.2 protocolo sem NAKs


28 rdt_send(data) sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || isACK(rcvpkt,1) ) udt_send(sndpkt)

Wait for call 0 from above

Wait for ACK 0

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

rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt,0)

Wait for 0 from below

Receptor (parcial)

rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq1(rcvpkt) extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(ACK1, chksum) udt_send(sndpkt)

14

14-10-2013

rdt3.0 canal com erros e perdas


29

Nova hiptese: o canal subjacente pode perder pacotes (dados ou ACKs)


Usam-se checksum, n de sequncia, ACKs e retransmisses, mas necessrio incluir outros mecanismos.

Abordagem: o emissor espera um intervalo de tempo razovel por um ACK


retransmite se o ACK no for recebido durante esse intervalo se o pacote (ou o ACK) estiver apenas atrasado (e no perdido):
A retransmisso provoca um pacote duplicado, mas o n de sequncia possibilita a deteco correcta no receptor

Requisitos adicionais:
o receptor tem de incluir em cada ACK o n de sequncia do pacote que est a confirmar temporizador timer.

rdt3.0 emissor
30

rdt_send(data) sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) start_timer Wait for call 0from above Wait for ACK0

rdt_rcv(rcvpkt)

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

rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt,1) stop_timer Wait for ACK1 rdt_send(data)

timeout udt_send(sndpkt) start_timer rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || isACK(rcvpkt,0) )

Wait for call 1 from above

rdt_rcv(rcvpkt)

sndpkt = make_pkt(1, data, checksum) udt_send(sndpkt) start_timer

15

14-10-2013

rdt3.0 exemplos
31

rdt3.0 exemplos
32

16

14-10-2013

rdt3.0: Funcionamento do stop-and-wait


33

emissor 1 bit do 1 pacote transmitido, t = 0 ltimo bit do 1 pacote transmitido, t = L / R

receptor

RTT

chegada do 1 bit do pacote chegada do ultimo bit do primeiro pacote, envia ACK

ACK chega, envia prximo pacote, t = RTT + L / R

Desprezando Durao do ACK Tempo de processamento Atraso de filas de espera Atrasos nos ns intermdios

rdt3.0 desempenho
34

Exemplo:
Ritmo de transmisso - R bps (ex.: 1 Gbps ) Tempo de propagao extremo a extremo - A s (ex.: 15 ms) Tamanho dos pacotes de dados - Li bits (ex.: 1kB (8kbit) ) Tamanho dos pacotes ACK - LA bits (ex.: 125B (1kbit) ) Tempo de processamento de um pacote - Tp s (ex.: 0 sec)

17

14-10-2013

Protocolos de janela
35

Tcnica de janela: o emissor envia vrios pacotes de seguida (tantos quantos o tamanho da janela) sem esperar pela confirmao de cada um.
Aumento do n de bits destinados numerao dos pacotes Armazenamento no emissor e/ou no receptor

Dois tipos de protocolos de janela: voltar atrs (go-Back-N) e repetio selectiva (selective repeat)

36

Protocolos de janela (pipeline): maior utilizao


sender 1 bit transmitido, t = 0 ultimo bit do 1 pacote Transmitido, t = L / R 1 bit do pacote chega ltimo bit do pacote chega, envia ACK ltimo bit do 2 pacote chega, envia ACK ltimo bit do 3 pacote chega, envia ACK receiver

RTT

ACK chega, envia prximo pacote, t = RTT + L / R Aumenta a utilizao por um factor de 3!

= sender

3*L/R RTT + L / R

.024 =
30.008

= 0.0008
microsecon

18

14-10-2013

Voltar Atrs GBN (Go-Back-N)


37

Emissor:
nmeros de sequncia com k bits Janela de tamanho N, (so permitidos N pacotes consecutivos sem confirmao)

ACK(n): confirma todos os pacotes at ao nmero n inclusive Temporizador para o pacote (mais antigo) ainda no confirmado timeout: retransmite os pacotes que esto na janela de emisso

GBN emissor
38
rdt_send(data) if (nextseqnum < base+N) { sndpkt[nextseqnum] = make_pkt(nextseqnum,data,chksum) udt_send(sndpkt[nextseqnum]) if (base == nextseqnum) start_timer nextseqnum++ } else refuse_data(data) base=1 nextseqnum=1 timeout Wait rdt_rcv(rcvpkt) && corrupt(rcvpkt) start_timer udt_send(sndpkt[base]) udt_send(sndpkt[base+1]) udt_send(sndpkt[nextseqnum-1])

rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) base = getacknum(rcvpkt)+1 If (base == nextseqnum) stop_timer else start_timer

19

14-10-2013

GBN receptor
39 default udt_send(sndpkt) rdt_rcv(rcvpkt) && notcurrupt(rcvpkt) && hasseqnum(rcvpkt,expectedseqnum) extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(expectedseqnum,ACK,chksum) udt_send(sndpkt) expectedseqnum++ Wait expectedseqnum=1 sndpkt = make_pkt(expectedseqnum,ACK,chksum)

Confirmaes: por cada pacote bem recebido envia o ACK(n) onde n o maior nmero do ltimo pacote que chegou na ordem
podem ser gerados ACKs duplicados precisa apenas de guardar em memria o nmero de sequncia do pacote de que est espera expectedseqnum

Pacotes fora de ordem:


deita fora neste caso, no h necessidade de memria para pacotes no receptor! Envia confirmao do ltimo pacote que chegou na ordem

GBN Exemplo de funcionamento


40

20

14-10-2013

GBN tamanho da janela


41

Exemplo
Ritmo de transmisso - R bps (ex.: 1 Gbps ) Tempo de propagao extremo a extremo - A s (ex.: 15 ms) Tamanho dos pacotes de dados - Li bits (ex.: 1kB (8kbit) ) Tamanho dos pacotes ACK - LA bits (ex.: 1kB (8kbit) ) Tempo de processamento de um pacote - Tp s (ex.: 0 s ) TT = 2A + 2TP + Ti + TA Ti = Li/R TA = LA/R

Para que o emissor no pare (na ausncia de perdas), o tamanho da janela N : N TT / Ti Quantos bits se tm de usar para numerar os pacotes?

42

Repetio Selectiva SR (Selective Repeat)


O receptor confirma individualmente todos os pacotes recebidos
tem de ter capacidade de armazenamento para entrega na ordem camada superior

O emissor apenas retransmite os pacotes que no foram confirmados


necessrio um temporizador para cada pacote no confirmado

Janela do emissor
Contm N nmeros consecutivos, dos quais o primeiro ainda no foi confirmado

21

14-10-2013

43

SR janelas do emissor e do receptor

SR funcionamento
44

emissor
Dados da camada superior:
Se o prximo nmero de sequncia cabe na janela envia um pacote

receptor
Pacote n em [rcvbase, rcvbase+N-1]
Envia ACK(n) Armazena o pacote, envia para a camada superior os pacotes na ordem e avana a janela

timeout(n):
Retransmite o pacote n e reinicializa o temporizador

Pacote n em [rcvbase-N,rcvbase-1]
Envia ACK(n)

ACK(n) em [sendbase,sendbase+N]:
Marca o pacote n como confirmado Se n era o menor nmero de sequncia no confirmado avana a janela at ao prximo no confirmado

Em qualquer outro caso:


No faz nada

22

14-10-2013

SR exemplo
45

SR - numerao
46

Exemplo:
Nmeros de sequncia: 0, 1, 2, 3 Tamanho da janela = 3 O receptor no pode distinguir entre as duas situaes da figura!

Qual a relao entre o tamanho da sequncia e o tamanho da janela ?


Tamanho janela (2k-1)/2 Na realidade, pode ocorrer na rede a reordenao de pacotes

23