Você está na página 1de 170

Departamento de Cincia da Computao Instituto de Computao Universidade Federal Fluminense

Aulas 09 e 10

Camada de Transporte
Conceitos, protocolos UDP e TCP Pedro Braconnot Velloso Redes de Computadores I Slides gentilmente cedidos pelo prof. Igor

ATENO!
Este apresentao contm partes baseadas nos seguintes trabalhos
de Rezende, J. F., Costa, L. H. M. K. e Rubinstein, M. G. - "Avaliao Experimental e Simulao do Protocolo TCP em Redes de Alta Velocidade", em XXI Simpsio Brasileiro de Telecomunicaes - SBrT'2005, setembro de 2005. Notas de aula do Prof. Jos Augusto Suruagy Monteiro, disponveis em http://www.nuperc.unifacs.br/Members/jose.suruagy/cursos

Camada de Transporte

Camada de Transporte
Prov um canal lgico de comunicao entre processos em diferentes sistemas finais
Para a aplicao, os sistemas finais esto diretamente conectados

Camada de Transporte
Prov um canal lgico de comunicao entre processos em diferentes sistemas finais
Para a aplicao, os sistemas finais esto diretamente conectados

Comunicao Fim-a-Fim

aplicao transporte rede enlace fsica

rede enlace fsica

rede enlace fsica rede enlace fsica

rede enlace fsica

rede enlace fsica

aplicao transporte rede enlace fsica

Camada de Transporte
Protocolos de transporte
Executados nos sistemas finais

Camada de Transporte
Protocolos de transporte
Executados nos sistemas finais

Transmissor
Converte as mensagens da aplicao em segmentos Encaminha os segmentos para a camada de rede

Camada de Transporte
Protocolos de transporte
Executados nos sistemas finais

Receptor
Recebe os segmentos da camada de rede Remonta as mensagens e encaminha para a aplicao

origem
datagrama Hn Ht mensagem segmento Ht
M M M M

quadro Hl Hn Ht

aplicao transporte rede enlace fsica

Encapsulamento

Hl Hn Ht

enlace fsica

Hl Hn Ht

comutador

destino
M Ht Hn Ht Hl Hn Ht M M M

aplicao transporte rede enlace fsica

Hn Ht Hl Hn Ht

M M

rede enlace fsica

Hn Ht Hl Hn Ht

M M

roteador

Camada de Transporte
Existem diferentes protocolos de transporte
Fornecem diferentes tipos de servios Aplicaes usam o mais adequado ao seu propsito

Na Internet
User Datagram Protocol (UDP) Transmission Control Protocol (TCP)

Transporte x Rede
Camada de transporte
Canal lgico de comunicao entre processos

depende dos servios e pode estender os servios


Camada de rede
Canal lgico de comunicao entre estaes

Transporte x Rede
Servio da camada de rede
Entrega de melhor esforo No garante a
Entrega dos segmentos Ordenao dos segmentos Integridade dos dados contidos nos segmentos

Servio no-confivel

Transporte x Rede
Servios da camada de transporte
Estender o servio de entrega da camada de rede
Rede: entre sistemas finais Transporte: entre processos rodando em sistemas finais
Multiplexao e demultiplexao

Verificao de integridade
Campos de deteco de erros no cabealho

Servios mnimos

Protocolos
UDP
Somente os servios mnimos
Entrega no-confivel e no-ordenada

TCP
Mais do que os servios mnimos
Entrega confivel e ordenada
Estabelecimento de conexo Controle de congestionamento Controle de fluxo

Protocolos
UDP
Somente os servios mnimos
Entrega no-confivel e no-ordenada

TCP
Mais do que os servios mnimos
Entrega confivel e ordenada
Estabelecimento de conexo Controle de congestionamento Controle de fluxo

No garantem requisitos de atraso de banda passante

Comunicao entre Processos


Processo
um programa em execuo em um sistema final Em um mesmo sistema final
Dois processos se comunicam usando comunicao interprocessos definida pelo SO

Processos em sistemas finais diferentes


Se comunicam atravs da troca de mensagens
Processo cliente o que inicia a comunicao Processo servidor que o espera para ser contatado Em aplicaes P2P, sistemas finais executam os dois processos

Sockets
Um processo envia/recebe mensagens para/do seu socket
uma interface de software entre as camadas de aplicao e de transporte
API (Application Programming Interface) entre a aplicao e a rede

Analogia: processo uma casa socket a porta da casa


Envio: mensagem empurrada pela porta
Emissor confia na infraestrutura de transporte do outro lado da porta para levar a mensagem at o destinatrio

Recepo: mensagem passa atravs da porta


Receptor executa aes sobre a mensagem

Sockets
API permite ao desenvolvedor
Controlar tudo do lado da camada de aplicao Controlar pouco do lado da camada de transporte
1. Escolha do protocolo 2. Alguns parmetros do protocolo

Sistema final controlado pelo desenvolvedor

Sistema final

processo

processo

socket
TCP com buffers, variveis Internet

socket
TCP com buffers, variveis

controlado pelo SO

Endereamento de Processos
Processos devem ter um identificador Uma interface de rede de uma estao possui um identificador nico
Endereo IP de 32 bits

O endereo IP de uma estao na qual um processo est sendo executado suficiente para identificar o processo?

Endereamento de Processos
Processos devem ter um identificador Uma interface de rede de uma estao possui um identificador nico
Endereo IP de 32 bits

O endereo IP de uma estao na qual um processo est sendo executado suficiente para identificar o processo?

Vrios processos podem estar em execuo numa mesma estao

No!

Endereamento de Processos
Identificador inclui tanto o endereo IP quanto nmeros de portas
Associados ao processo em execuo na estao

Exemplos de nmeros de portas


Servidor HTTP: 80 Servidor de email: 25

Para enviar uma mensagem HTTP para o servidor www.ic.uff.br


Endereo IP: 200.20.15.38 Nmero de porta: 80

Programao com Sockets


Socket API
Introduzida no Unix BSD 4.1 em 1981 Sockets so criados, usados e liberados explicitamente pelas aplicaes Baseados no paradigma cliente-servidor Dois tipos de servios de transporte atravs da API
Datagrama no-confivel (UDP) Orientado a fluxo de bytes e confivel (TCP)

Atualmente disponvel em diferentes linguagens de programao

Exemplos
???

Programao com Sockets


Mais detalhes
Sees 2.7 e 2.8 do Livro-base
Exemplos no site do livro: http://www.aw-bc.com/kurose-ross

Beej's Guide to Network Programming


Disponvel em http://beej.us/guide/bgnet

(De)Multiplexao
um dos servios mnimos
Identificar a qual processo pertence um segmento Encaminhar para o processo correto

Socket
Interface entre a camada de aplicao e a de transporte dentro de uma mquina

(De)Multiplexao
Multiplexao
Receber as mensagens de vrios sockets Agrupar as mensagens de um mesmo socket Adicionar um cabealho

Demultiplexao
Encaminhar um segmento para o socket correto
Baseado nos dados do cabealho

(De)Multiplexao
processo Comunicao A Comunicao B

socket

Demultiplexao
Feita com base nos campo do cabealho dos segmentos e datagramas
IP origem IP destino

outros campos do cabealho dados de transporte (segmento)

Demultiplexao
Feita com base nos campo do cabealho dos segmentos e datagramas
IP origem IP destino

outros campos do cabealho porta origem porta destino

outros campos do cabealho dados de aplicao (mensagens)

Demultiplexao
Depende do tipo de servio oferecido pela camada de transporte
Orientado conexo No-orientado conexo

Demultiplexao com UDP


No-orientada conexo Identificao feita por
Endereo IP de destino
Chegar ao sistema final correspondente

Nmero da porta de destino

Quando o sistema final recebe um segmento UDP


1. Verifica o nmero da porta de destino no segmento 2. Encaminha o segmento UDP para o socket com aquele nmero de porta

Demultiplexao com UDP


Um socket pode receber datagramas com diferentes endereos IP origem e/ou # de porta de origem?

Sim! Somente as informaes do destino so usadas

Connectionless demultiplexing
Create sockets with port numbers:
DatagramSocket mySocket1 = new DatagramSocket(12534); DatagramSocket mySocket2 = new DatagramSocket(12535);

When host receives UDP segment:


checks destination port number in segment directs UDP segment to socket with that port number

UDP socket identified by two- IP datagrams with different source IP addresses and/or tuple: source port numbers (dest IP address, dest port number) directed to same socket

Demultiplexao com UDP


Como so usadas as informaes de origem?
P2 P3 P1 P1

PO:6428 PD:9157 PO:9157 PD:6428

PO:6428 PD:5775 PO:5775 PD:6428

cliente IP: A

servidor IP: C

Cliente IP:B

Endereo de retorno

Demultiplexao com TCP


Orientada conexo Identificao feita por
Endereo IP de origem Nmero da porta de origem Endereo IP de destino Nmero da porta de destino

Quando o hospedeiro recebe um segmento TCP


1. Verifica o nmero das portas de origem e destino no segmento 2. Encaminha o segmento TCP para o socket com aqueles nmeros de porta

Demultiplexao com TCP


Um socket pode receber datagramas com diferentes endereos IP origem e/ou # de porta de origem?

No! Cada segmento ser direcionado para um socket

Demultiplexao com TCP


Um servidor pode dar suporte a muitos sockets TCP simultneos
Cada socket identificado pela sua prpria qudrupla

Servidores Web tm sockets diferentes para cada conexo cliente


HTTP no persistente ter sockets diferentes para cada pedido

Demultiplexao com TCP

P1

P4

P5

P6 PO:5775 PD:80 O-IP:B D-IP:C

P2

P1 P3

cliente IP: A

PO:9157 PD:80 O-IP:A D-IP:C

servidor IP: C

PO:9157 PD:80 O-IP:B D-IP:C

Cliente IP:B

Demultiplexao Orientada a Conexes: Servidor Web com Threads

P1

P4 SP: 5775 DP: 80 S-IP: B D-IP:C SP: 9157 DP: 80 S-IP: A D-IP:C SP: 9157 DP: 80 S-IP: B D-IP:C

P2

P1 P3

cliente IP: A

servidor IP: C

Cliente IP:B

3: Camada de Transporte 3a-40

User Datagram Protcol (UDP)

UDP
Definido pela RFC 768 Protocolo de transporte mnimo
Servio de melhor esforo

Segmentos UDP podem ser


Perdidos Entregues aplicao fora de ordem

Sem conexo
No h setup entre remetente e o receptor Tratamento independente de cada segmento UDP

UDP
Por qu necessrio?
Elimina o estabelecimento de conexo
Menor latncia

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)

Requisitos das Aplicaes


Aplicao Transferncia de arquivos Email Web udio/vdeo em tempo real udio/vdeo gravado Jogos interativos Mensagens instantneas Perda sem perdas sem perdas sem perdas tolerante* tolerante* tolerante sem perdas Banda passante elstica elstica elstica Atraso tolerante tolerante tolerante

udio: 5kb-1Mb centenas de miliseg. vdeo:10kb-5Mb Idem at 10 kbps elstica poucos seg. centenas de miliseg. sim/no (?)

Protocolos por Aplicao


Aplicao Servidor de arquivos remoto Gerenciamento de rede Protocolo de roteamento Traduo de nomes Protocolo de aplicao NFS SNMP RIP DNS Protocolo de transporte Tipicamente UDP Tipicamente UDP Tipicamente UDP Tipicamente UDP

Protocolos por Aplicao


Aplicao Email Acesso remoto Web Transferncia de arquivos Distribuio multimdia Telefonia na Internet Protocolo de aplicao SMTP Telnet, SSH HTTP FTP HTTP, RTP SIP, RTP, proprietrio (Skype) Protocolo de transporte TCP TCP TCP TCP TCP ou UDP TCP ou UDP

UDP
Utilizado para aplicaes multimdias
Tolerantes a perdas Sensveis taxa de transmisso

Outros usos
DNS Reduzir a latncia na requisio de pginas Web SNMP Reduzir o tempo de reao a um problema na rede

Transferncia confivel com UDP?


necessrio acrescentar confiabilidade na camada de aplicao
Recuperao de erro especfica para cada aplicao

UDP
Formato do segmento
Cabealho de 8 bytes

Comprimento em bytes do segmento UDP, incluindo cabealho

32 bits

porta origem comprimento

porta destino

checksum

soma de verificao

dados de aplicao (mensagens)

UDP
Soma de verificao (checksum)
Usada para detectar erros no segmento transmitido
Ex.: bits trocados Transmissor:
Trata contedo do segmento como seqncia de inteiros de 16bits Campo checksum zerado Checksum: soma (adio usando complemento de 1) do contedo do segmento Transmissor coloca complemento do valor da soma no campo checksum do cabealho UDP

Receptor:
Calcula checksum do segmento recebido Soma do checksum computado com o enviado no segmento igual a FFFF?

NO - erro detectado SIM - nenhum erro detectado.


Mas ainda pode ter erros?
Veja depois...

Exemplo de Checksum
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

Transferncia Confivel: Princpios

Transferncia Confivel
Importante nas camadas de transporte, enlace, etc. 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)

Transferncia Confivel
rdt_send(): chamada de cima, (ex.: pela apl.). Passa dados p/ serem entregues camada sup. do receptor deliver_data(): chamada pela entidade de transporte p/ entregar dados p/ camada superior

transmissor

receptor

udt_send(): chamada pela entidade de transporte, p/ transferir pacotes para o receptor sobre o canal no confivel

rdt_rcv(): chamada quando pacote chega no lado receptor do canal

Transferncia Confivel
O que um canal confivel?
Nenhum dado transmitido corrompido Nenhum dado transmitido perdido Todos os dados so entregues ordenadamente

Protocolo de transferncia confivel de dados


Responsvel por implementar um canal confivel

Transferncia Confivel
Quais os mecanismos usados para prover um canal confivel?
Sero vistos passo-a-passo

Desenvolver incrementalmente os lados transmissor e receptor de um protocolo confivel de transferncia de dados (rdt) Considerar apenas fluxo unidirecional de dados
Informaes de controle fluem em ambos os sentidos

Usar mquinas de estados finitos (FSM) para especificar os protocolos

Transferncia Confivel

evento causador da transio de estado aes executadas na transio de estado

Estado 1

evento aes

Estado 2

estado: neste estado o prximo estado determinado unicamente pelo prximo evento

Canal Confivel
Protocolo rdt 1.0 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

Canal com Erros


Protocolo rdt 2.0 Canal pode trocar valores dos bits num pacote
necessrio detectar os erros: soma de verificao

Como recuperar esses erros?


Reconhecimentos positivos (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

Canal com Erros


Se o canal tem erros

Deteco de erros

+
Mecanismos automticos de repetio de requisio (ARQs)

Canal com Erros

Canal com Erros: operao normal


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)

Receptor
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)

Transmissor

Canal com Erros: operao com 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)

Receptor
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)

Transmissor

Canal com Erros: Problema


E se o ACK/NAK for corrompido?
Transmissor no sabe o que se passou no receptor No pode apenas retransmitir
Possibilidade de pacotes duplicados

O que fazer?
Remetente usa ACKs/NAKs para cada ACK/NAK do receptor
E se perder ACK/NAK do remetente?

Retransmitir
Mas pode causar retransmisso de pacote recebido certo

Canal com Erros: Problema


Transmissor inclui um nmero de seqncia em cada pacote Transmissor retransmite o ltimo pacote se ACK/NAK chegar com erro Receptor descarta pacotes duplicados
No entrega a aplicao
Transmissor envia um pacote, e ento aguarda resposta do receptor

Protocolos para-e-espera (stop-and-wait)

Canal com Erros: ACK/NAK corrompidos


Transmissor

Canal com Erros: ACK/NAK 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) sndpkt = make_pkt(NAK, chksum) udt_send(sndpkt)
Esperar 0 de baixo Esperar 1 de baixo

Receptor

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) && not corrupt(rcvpkt) && has_seq0(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)

Canal com Erros: ACK/NAK corrompidos


Transmissor
Nmero de seq. no pacote Bastam dois nmeros de sequncia (0,1) Deve verificar se ACK/NAK recebidos esto corrompidos Duplicou o no. de estados estado deve lembrar se o nmero de seq. do pacote atual 0 ou 1

Receptor
Deve verificar se o pacote recebido duplicado Estado indica se no. de seq. esperado 0 ou 1 Obs.: Receptor no tem como saber se ltimo ACK/NAK foi recebido bem pelo transmissor
No so identificados

Canal com Erros: Sem NAK


Mesma funcionalidade 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 corrente

Canal com Erros: Sem NAK


rdt_send(data) sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt)
aguarda chamada 0 de cima aguarda ACK 0

fragmento FSM do transmissor

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

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

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


aguarda 0 de baixo

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)

Canal com Erros e Perdas


Canal de transmisso tambm pode perder pacotes
Dados ou ACKs

Checksum, no. de seq., ACKs, retransmisses podem ajudar, mas no sero suficientes Como lidar com perdas?
Transmissor espera at ter certeza que se perdeu pacote ou ACK, e ento retransmite

Canal com Erros e Perdas


Transmissor aguarda um tempo razovel pelo ACK
Retransmite se nenhum ACK for recebido neste intervalo Se pacote (ou ACK) apenas atrasado (e no perdido)
Retransmisso ser duplicada, mas uso de no. de seq. j cuida disto Receptor deve especificar no. de seq do pacote sendo reconhecido

Requer temporizador

Canal com Erros e Perdas


Transmissor

Canal com Erros e Perdas

Canal com Erros e Perdas

retransmisso

Canal com Erros e Perdas


Canal confivel, mas o desempenho um problema
Operao do pare-e-espere

Canal com Erros e Perdas


Canal confivel, mas o desempenho um problema
Exemplo: enlace de 1 Gb/s, retardo de 15 ms, pacote de 1KB Funo utilidade
Frao de tempo em que o emissor est realmente ocupado enviando bits

d trans
U

L 8000bits = = = 8 microsegundos 9 R 10 bps


= L/R RTT + L / R =
8 30.008

0.008

sender

= 0.00027

pacotes de 1KB so enviados a cada 30 ms vazo de 33kB/s num enlace de 1 Gb/s

microsec onds

Canal com Erros e Perdas


Canal confivel, mas o desempenho um problema
Exemplo: enlace de 1 Gb/s, retardo de 15 ms, pacote de 1KB Funo utilidade
Frao de tempo em que o emissor est realmente ocupado enviando bits

d trans
U

L 8000bits = = = 8 microsegundos 9 R 10 bps


= L/R RTT + L / R =
8 30.008

0.008

sender

= 0.00027

pacotes de 1KB so enviados a cada 30 ms vazo de 33kB/s num enlace de 1 Gb/s

microsec onds

Paralelismo (pipelining)
Transmissor envia vrios pacotes em seqncia
Todos esperando para serem reconhecidos

Faixa de nmeros de seqncia deve ser aumentada Armazenamento no Transmissor e/ou no receptor

(a) operao do protocolo pare e espere

(a) operao do protocolo com paralelismo

Paralelismo (pipelining)
Duas formas genricas
Go-back-N Retransmisso seletiva

Paralelismo (pipelining)

Aumenta a utilizao por um fator de 3!

3 L / R 0,024 U tx = = = 0,0008 RTT + L / R 30,008

Protocolos com Paralelismo


Go-back-N O transmissor pode ter at N pacotes no reconhecidos em trnsito Receptor envia ACKs cumulativos Reconhece o passado 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

Retransmisso seletiva
O transmissor pode ter at N pacotes no reconhecidos em trnsito Receptor reconhece pacotes individuais Transmissor possui um temporizador para cada pacote ainda no reconhecido
Se o temporizador estourar, retransmite apenas o pacote correspondente

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 cumulativo Pode receber ACKs duplicados Temporizador para pacote mais antigo no confirmado timeout(n): retransmite pacote n e todos os pacotes com no. de seq maiores que estejam dentro da janela

GBN: FSM estendida para o transmissor

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 Pacotes fora de ordem Descarta (no armazena)
Receptor no usa buffers

Reconhece pacote com o mais alto nmero de seqncia em ordem

GBN em ao

Retransmisso Seletiva
Receptor reconhece individualmente todos os pacotes recebidos corretamente
Armazena pacotes no buffer, conforme necessrio, para posterior entrega ordenada camada superior

Transmissor apenas reenvia pacotes para os quais um ACK no foi recebido


Temporizador de remetente para cada pacote sem ACK

Janela de transmisso
N nmeros de seqncia consecutivos Outra vez limita nmeros de seqncia de pacotes enviados, mas ainda no reconhecidos

Retransmisso Seletiva

Retransmisso Seletiva
transmissor
Dados de cima
Se prx. no. de seq (n) disponvel est na janela, envia o pacote e liga temporizador(n)

receptor Pacote n em
Envia ACK(n)

[rcvbase, rcvbase+N-1]

Estouro do temporizador(n):
reenvia pacote n, reinicia temporizador(n) ACK(n) em [sendbase,nextseqnum-1]: marca pacote n recebido se n for menor pacote no reconhecido, avana base da janela ao prx. no. de seq no reconhecido

Fora de ordem: armazena Em ordem: entrega (tb.

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

Pacote n em
ACK(n)

[rcvbase-N,rcvbase-1]

Seno:
Ignora

Retransmisso seletiva em ao

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) qual a relao entre tamanho de no. de seq e tamanho de janela?

3: Camada de Transporte 3a-91

Transmission Control Protocol (TCP)

TCP
Muito mais complexo que o UDP
UDP: RFC 768 TCP: RFCs 793, 1122, 1323, 2018 e 2581

Orientado conexo
Antes do incio da transmisso existem um handshake
Dois processos trocam segmentos para definir parmetros

uma conexo lgica


Diferente da estabelecida na comutao de circuitos
No h um caminho definido e nem reserva de recursos

S existe nos sistemas finais


Elementos intermedirios no armazenam nenhum estado

TCP
ponto-a-ponto
Um transmissor e um receptor

Transmisso full duplex


Fluxo de dados bidirecional na mesma conexo MSS: tamanho mximo de segmento

Controle de fluxo
Receptor no ser afogado pelo transmissor

Controle de congestionamento
Evitar a saturao dos enlaces da rede

Estabelecimento de Conexo
feita antes da troca de dados Inicializao de variveis
Nmeros de seqncia Tamanho dos buffers, Variveis do mecanismo de controle de fluxo
Janela de recepo (RcvWindow)

Etc.

Conexo No-Persistente Estabelecimento de Conexo


Three-way handshake
SYN

cliente

servidor

1. Cliente envia segmento de controle SYN para o servidor


Especifica o nmero de sequncia inicial e no envia dados

Conexo No-Persistente Estabelecimento de Conexo


Three-way handshake

SYN+ACK

cliente

servidor

2. Ao receber o SYN, o servidor responde com segmento de controle SYN+ACK


Define o tamanho dos buffers e especifica o nmero inicial de sequncia do servidor para o receptor

Conexo No-Persistente Estabelecimento de Conexo


Three-way handshake

ACK cliente servidor

3. Ao receber SYN+ACK, o cliente responde com segmento ACK


Pode conter dados

Conexo No-Persistente Encerramento de Conexo

FIN

cliente

servidor

1. Cliente envia segmento de controle FIN ao servidor

Conexo No-Persistente Encerramento de Conexo

ACK cliente servidor

2. Ao receber FIN, o servidor responde com ACK

Encerramento de Conexo

FIN cliente servidor

3. Em seguida, o servidor envia FIN e encerra a conexo

Encerramento de Conexo

ACK cliente servidor

4. Ao receber FIN, o cliente responde com ACK


Entre em espera temporizada responder com ACK a FINs recebidos

Encerramento de Conexo

cliente

servidor

5. Quando o temporizador estoura a conexo encerrada

Estados no Cliente TCP

Estados no Servidor TCP

Segmento TCP
Cabealho: 20 bytes

Limitado pelo MSS

Segmento TCP
Cabealho: 20 bytes
URG: dados urgentes (pouco usado) ACK: campo de ACK vlido PSH: envio imediato para a aplicao RST, SYN, FIN: estabelec. de conexo (comandos de criao e trmino) Internet checksum (como no UDP)

contagem por bytes de dados (no segmentos!)

nmero de bytes receptor est pronto para aceitar

Nmeros de Sequncia e ACKs


Fundamentais para a transferncia confivel Para o TCP, dados so um fluxo de bytes ordenados
Ex.: arquivo com 500 kB e MSS 1 kB

arquivo
// // //

1
//

1000
//

1999
//

499999

primeiro segmento

segundo segmento

Nmeros de Sequncia e ACKs


Fundamentais para a transferncia confivel Para o TCP, dados so um fluxo de bytes ordenados
Ex.: arquivo com 500 kB e MSS 1 kB

arquivo
// // //

1
//

1000
//

1999
//

499999

primeiro segmento

segundo segmento

Nmeros de Sequncia e ACKs


Nmero de sequncia
Baseado no nmero de bytes e no no de segmentos Nmero dentro do fluxo de bytes do primeiro byte de dados do segmento Ex.: fluxo de dados com 500 kB e MSS 1 kB
500 segmentos de 1000 bytes Primeiro segmento: # seq 0 Segundo segmento: # seq 1000 Terceiro segmento: # seq 2000 Etc.

Nmeros de Sequncia e ACKs


Nmero de reconhecimento
Nmero de sequncia do prximo byte esperado do outro lado
Identificador do seguimento a ser enviado

ACK cumulativo

Como o receptor trata os segmentos fora da ordem?


Nada especificado pela RFC definido por quem implementa o protocolo

Nmeros de Sequncia e ACKs

Nmeros de Sequncia e ACKs

42 1 byte

Nmeros de Sequncia e ACKs

Recebi at o 42. Espero pelos prximos bytes, a partir do 43

Temporizao
Como escolher valor do temporizador TCP?
Maior que o RTT

RTT varivel! Muito curto


Estouro prematuro do temporizador
Retransmisses desnecessrias

Muito longo
Reao demorada perda de segmentos

Temporizao
Como estimar o RTT?
Medir o tempo entre a transmisso de um segmento e o recebimento do ACK correspondente
Ignorar retransmisses

RTT de cada amostra pode ter grande variao


Soluo: usar vrias amostras recentes
EstimatedRTT = (1-)* EstimatedRTT + *SampleRTT Mdia mvel exponencialmente ponderada Influncia de uma amostra diminui exponencialmente com o tempo Valor tpico de = 0,125

Temporizao

Temporizao
Intervalo de temporizao escolhido
EstimatedRTT mais uma margem de segurana
Definida pela variao das amostras em relao estimativa

Determinar o desvio da amostra em relao estimativa


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

Temporizador definido por


TimeoutInterval = EstimatedRTT + 4*DevRTT

Transferncia Confivel do TCP


Prov um servio confivel sobre o servio no confivel do protocolo IP Segmentos transmitidos em paralelo
Princpio do Go-Back-N

ACKs cumulativos O TCP usa um nico temporizador para retransmisses

Transferncia Confivel do TCP


As retransmisses so disparadas por
Estouros de temporizao ACKs duplicados

Transmissor TCP
Transmissor TCP simplificado
Ignora ACKs duplicados Ignora controles de fluxo e de congestionamento

Ao receber os dados da aplicao


Cria segmento com no. de sequncia (nseq)
nseq o no. de seq. do primeiro byte de dados do segmento

Dispara o temporizador
Se j no estiver disparado Relativo ao segmento mais antigo ainda no reconhecido Valor calculado previamente

Transmissor TCP
Quando ocorre um estouro do temporizador
Retransmitir o segmento que causou o estouro do temporizador Reiniciar o temporizador

Quando um ACK recebido


Se reconhecer segmentos ainda no reconhecidos
Atualizar informao sobre o que foi reconhecido Disparar novamente o temporizador se ainda houver segmentos ainda no reconhecidos

Cenrio de Retransmisso
Perda do ACK

Reinicia o temporizador

Desliga o temporizador

Cenrio de Retransmisso
Estouro prematuro, ACKs cumulativos

Reinicia o temporizador Reinicia o temporizador Desliga o temporizador

Cenrio de Retransmisso
Perda de um ACK cumulativo

Desliga o temporizador

Gerao de ACKs
Evento no receptor
Chegada de segmento em ordem sem lacunas, anteriores j reconhecidos Chegada de segmento em ordem sem lacunas, um ACK retardado pendente Chegada de segmento fora de ordem, com no. de seq. maior que esperado lacuna Chegada de segmento que preenche a lacuna parcial ou completamente

Ao do receptor
ACK retardado. Espera at 500 ms pelo prx. segmento. Se no chegar segmento, envia ACK Envia imediatamente um nico ACK cumulativo Envia ACK duplicado, indicando no. de seq.do prximo byte esperado ACK imediato se segmento comea no incio da lacuna

Retransmisso Rpida
O intervalo do temporizador pode ser grande
Espera demais para retransmitir um pacote perdido

Detectar segmentos perdidos atravs de ACKs duplicados


O transmissor normalmente envia diversos segmentos Se um segmento se perder, provavelmente haver muitos ACKs duplicados Se o transmissor receber 3 ACKs duplicados para os mesmos dados
Supe que o segmento aps os dados reconhecidos se perdeu

Retransmite o segmento antes que o temporizador estoure

Retransmisso Rpida
Host A Host B

Retransmisso de um segmento aps trs ACKs duplicados X

timeout

Reenv

ia o 2

o. seg

mento

tempo

Retransmisso Rpida
event: recebido ACK, com valor do campo ACK de y if (y > SendBase) { SendBase = y if (houver segmentos ainda no reconhecidos) liga temporizador else desliga temporizador } else { incrementa contador de ACKs duplicados recebidos para y if (contador de ACKs duplicados recebidos para y = 3) { retransmita segmento com nmero de seqncia y } um ACK duplicado para um segmento j reconhecido

Retransmisso rpida

TCP: Buffers
Buffers
Transmisso e recepo Tamanho definido durante a conexo

Controle de Fluxo do TCP


Receptor possui um buffer de recepo
Processos da aplicaes podem demorar a ler do buffer

Controle de Fluxo do TCP


Receptor possui um buffer de recepo
Processos da aplicaes podem demorar a ler do buffer

Controle de Fluxo do TCP


Funcionamento
Suposio
Receptor descarta segmentos recebidos fora de ordem

Espao livre no buffer


RcvWindow = RcvBuffer-[LastByteRcvd - LastByteRead]

Controle de Fluxo do TCP


Funcionamento
Suposio
Receptor descarta segmentos recebidos fora de ordem

Espao livre no buffer


RcvWindow = RcvBuffer-[LastByteRcvd - LastByteRead]

O receptor anuncia o espao livre no buffer


O valor da janela (RcvWindow) informado nos segmentos

O transmissor limita os dados no reconhecidos ao tamanho da janela de recepo


Garante que o buffer do receptor no transbordar

Controle de Congestionamento
Fontes enviam dados acima da capacidade da rede de trat-los
Perda de pacotes
Saturao de buffers nos roteadores

Atrasos maiores
Espera nos buffers dos roteadores

A rede est congestionada!

Controle de Congestionamento
Fontes enviam dados acima da capacidade da rede de trat-los
Perda de pacotes
Saturao de buffers nos roteadores

Atrasos maiores
Espera nos buffers dos roteadores

A rede est congestionada! diferente do controle de fluxo


um estado da rede e no dos sistemas finais

Congestionamento: Buffers Infinitos

Grficos para a conexo entre A D

Dois remetentes, dois receptores Um roteador, buffers infinitos Sem retransmisso Grandes retardos qdo. congestionada Mxima vazo alcanvel

vazo

atraso

Congestionamento: Buffers Finitos


Um roteador, buffers finitos Retransmisso pelo remetente de pacote perdido
Hospedeiro A : dados originais in
'in : dados originais mais dados retransmitidos

out

Hospedeiro D

Hospedeiro B

Buffers de enlace de sada finitos compartilhados

Hospedeiro C

Congestionamento: Buffers Finitos


(a) Desempenho ideal tudo que enviado recebido:


=
out in (b) Retransmisso perfeita apenas qdo. h perda:
>
out in (c) Retransmisso de pacotes atrasados (no perdidos) torna
maior (do in
out que o caso perfeito) para o mesmo
Cada pacote enviado em mdia duas vezes
R/2 R/2

R/2

R/3

out

out

out
R/2

R/4

in

R/2

in

in

R/2

a.

b. Grficos para a conexo entre A D

c.

Congestionamento: Buffers Finitos


Custos de congestionamento: Mais trabalho (retransmisso) para um dado goodput Retransmisses desnecessrias: so enviadas mltiplas cpias do mesmo pacote

Congestionamento: Quatro Remetentes


Quatro remetentes Caminhos com mltiplos enlaces Temporizao/retransmisso
Hospedeiro A

O que acontece medida que


e
in in crescem?
out

in : dados originais 'in : dados originais mais dados retransmitidos


Buffers de enlace de sada finitos compartilhados

Hospedeiro B

Congestionamento: Quatro Remetentes


H o st A

o u t

R/2
H o st B

Outro custo do congestionamento


Quando o pacote descartado, qq. capacidade de transmisso

j usada (antes do descarte) para esse pacote foi desperdiada

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

Controle de congestionamento 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

Controle de Congestionamento do TCP


Idia
Aumentar a taxa de transmisso (tamanho da janela) gradativamente
Testar a largura de banda utilizvel at que ocorra uma perda

Aumento aditivo
Incrementa CongWin de 1 MSS a cada RTT at detectar uma perda

Diminuio multiplicativa
Corta CongWin pela metade aps evento de perda

Controle de Congestionamento do TCP


Idia
Aumentar a taxa de transmisso (tamanho da janela) gradativamente
Testar a largura de banda utilizvel at que ocorra uma perda

Aumento aditivo
Incrementa CongWin de 1 MSS a cada RTT at detectar uma perda

Diminuio multiplicativa
Corta CongWin pela metade aps evento de perda
Sem considerar a fase de inicializao: partida lenta

Controle de Congestionamento do TCP


Comportamento de dente de serra Testando a largura de banda

Controle de Congestionamento do TCP


Transmissor limita a transmisso
LastByteSent-LastByteAcked CongWin CongWin bytes/s RTT

taxa =

CongWin dinmica, em funo do congestionamento detectado da rede Obs.: na prtica


LastByteSent-LastByteAcked min(CongWin,RcvWindow)

Controle de Congestionamento do TCP


Como o transmissor detecta o congestionamento?
Evento de perda
Estouro do temporizador ou 3 ACKs duplicados

Transmissor reduz a taxa (CongWin) aps evento de perda

Trs componentes principais


Partida lenta Preveno de congestionamento Recuperao rpida
Recomendada, mas no exigida

Partida Lenta
No incio da conexo: CongWin = 1 MSS
Exemplo: MSS = 500 bytes = 4000 bits e RTT = 200 ms Taxa inicial = 20 kb/s

Largura de banda disponvel pode ser muito maior do que MSS/RTT


desejvel um crescimento rpido at uma taxa considervel

No incio da conexo, a taxa aumenta exponencialmente at o primeiro evento de perda

Partida Lenta
Duplica CongWin a cada RTT Atravs do incremento da CongWin para cada ACK recebido A W=1 B

RTT

Partida Lenta
Duplica CongWin a cada RTT Atravs do incremento da CongWin para cada ACK recebido A W=2 B

RTT

+2 ACKs

Partida Lenta
Duplica CongWin a cada RTT Atravs do incremento da CongWin para cada ACK recebido A W=4 B

RTT

+2 ACKs

taxa inicial baixa, mas cresce rapidamente de forma exponencial

+4 ACKs

Partida Lenta
Duplica CongWin a cada RTT Atravs do incremento da CongWin para cada ACK recebido A W=4 B

RTT

ento o +2 mo ue ACKs m l termina? em q Mas nencia +4 ACKs o expo taxa inicial ent im baixa, cresc cresce mas
rapidamente de forma exponencial

Controle de Congestionamento do TCP: Adaptaes


Aps estouro de temporizador
CongWin reduzida a 1 MSS; Janela cresce exponencialmente: volta partida lenta
At um limiar, depois cresce linearmente

Aps 3 ACKs duplicados: duas possibilidades


Similar quando h estouro do temporizador ou corta CongWin pela metade, se implementa a recuperao rpida A janela depois cresce linearmente
1. 2. 3 ACKs duplicados indica que a rede capaz de entregar alguns segmentos Estouro de temporizador antes de 3 ACKs duplicados mais alarmante

Preveno de Congestionamento
Mesmo que no haja perda ,o crescimento exponencial deve ser interrompido? Sim!
Quando CongWin atinge o limiar de partida lenta (ssthresh)
Mais uma varivel de estado Inicialmente, definido por configurao Aps uma perda o limiar ajustado para 1/2 da CongWin imediatamente antes do evento de perda

Fases do Controle de Congestionamento do TCP

Inicialmente: ssthresh=8

Fases do Controle de Congestionamento do TCP


recuperao rpida

Inicialmente: ssthresh=8

Controle de Congestionamento do TCP: Resumo


Quando a CongWin est abaixo do limiar ssthresh
Transmissor est na fase de partida lenta Janela cresce exponencialmente

Quando a CongWin est acima do limiar ssthresh


Transmissor est na fase de preveno de congestionamento Janela cresce linearmente

Quando chegam trs ACKs duplicados


Limiar passa a ser CongWin/2 e CongWin = valor do limiar Recuperao rpida

Quando estoura o temporizador


Limiar ajustado para CongWin/2 e CongWin = 1 MSS

Controle de Congestionamento do TCP: Resumo


Evento ACK recebido para dados ainda no reconhecidos ACK recebido para dados ainda no reconhecidos Perda detectada por trs ACKs duplicados Estouro de temporizador Estado Partida lenta Ao do Transmissor TCP CongWin = CongWin + MSS, Se (CongWin > Limiar) ajustar estado para Preveno de congestionamento CongWin = CongWin+MSS * (MSS/CongWin) Comentrio Resulta na duplicao da CongWin a cada RTT

Preveno de congestionamento qualquer

Aumento aditivo, resultando no incremento da CongWin de 1 MSS a cada RTT Recuperao rpida, implementa diminuio multiplicativa. CongWin no cai abaixo de 1 MSS. Entra estado de partida lenta

Limiar = CongWin/2, CongWin = Limiar, Ajusta estado para Preveno de Congestionamento Limiar = CongWin/2, CongWin = 1 MSS, Ajusta estado para Partida lenta Incrementa contador de ACKs duplicados para o segmento que est sendo reconhecido

qualquer

ACK duplicado

qualquer

CongWin e Limiar no se alteram

Exerccio: Problema 37

Vazo do TCP
TCP
Permite o envio de W segmentos antes de receber um ACK
Janela de congestionamento

Cada segmento tem tamanho MSS


vazo = W x MSS bytes/s RTT

Vazo do TCP
Qual a vazo mdia do TCP em funo do tamanho da janela e do RTT?
Ignore a partida lenta

Seja W o tamanho da janela quando ocorre a perda Quando a janela W a vazo W/RTT Logo aps a perda, janela cai a W/2, e a vazo cai para W/2RTT Vazo mdia = 0,75 W/RTT

Justia (Fairness) do TCP


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

Justia do TCP x UDP


Aplicaes multimdia freqentemente 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

Tornar as aplicaes amigveis ao TCP (TCP friendly)

Justia x Conexes em Paralelo


Aplicaes podem abrir conexes paralelas entre dois sistemas finais
Os navegadores Web fazem isso

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

Implementaes
Tahoe
Original

Reno Vegas SACK NewReno (RFC 2582)


Usado no Windows Vista

Bic
Usado pelo Debian (/proc/sys/net/ipv4/ tcp_congestion_control)

Etc.

Redes de Alta Velocidade


Exemplo
Segmentos de 1500 bytes e RTT=100 ms Vazo desejada de 10 Gb/s
vazo*RTT = W x MSS bytes
produto banda x latncia

Problema
Requer janela de W = 83.333 segmentos em trnsito

Redes de Alta Velocidade


Novos protocolos de transporte para redes de alta velocidade
XCP (Explicit Congestion Control Protocol) HSTCP (HighSpeed TCP) STCP (Scalable TCP) FAST TCP (Fast Active-queue-management Scalable TCP)

Departamento de Cincia da Computao Instituto de Computao Universidade Federal Fluminense

Aulas 09 e 10

Camada de Transporte
Conceitos, protocolos UDP e TCP Pedro Braconnot Velloso Redes de Computadores I Slides gentilmente cedidos pelo prof. Igor

Temas dos trabalhos


1 Redes P2P 2 BitTorrent 3 CDNs 4 VoD 5 Verses do TCP 6 RTP 7 SNMP 8 Gerenciamento de redes 9 Negao de servio 10 Spam 11 Nuvens 12 Medies na Internet 13 Verses do HTTP 14 Segurana no roteamento 15 SSL e TLS 16 Firewall 17 Anonimato Tor 18 Roteamento com mltiplos caminhos