Baixe o app para aproveitar ainda mais
Prévia do material em texto
UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO DEPARTAMENTO DE CIÊNCIAS EXATAS E NATURAIS CURSO DE CIÊNCIA DA COMPUTAÇÃO Redes de Computadores I Nível de Transporte (TCP & UDP) Prof. Helcio Wagner da Silva . – p.1/41 Introdução Na Arquitetura Internet, o Nível de Transporte pode fornecer tanto um serviço orientado à conexão como um serviço não-orientado à conexão. O Serviço orientado à conexão é prestado pelo TCP (Transmission Control Protocol), definido na RFC 793. A função do TCP é garantir a entrega de dados e na seqüência correta, haja vista que o protocolo de rede não provê tais garantias. O TCP provê ainda o controle de fluxo e de congestionamento fim a fim. O Serviço não-orientado à conexão é prestado pelo UDP (User Datagram Protocol), definido na RFC 768. O UDP não provê nenhuma das funções acima descritas. . – p.2/41 Formato do Segmento TCP U R G A C K P H S R S T S Y N F I Nusadocabeçalho Porta de origem Porta de destino Número de seqüência Número de reconhecimento Tamanho do Não Tamanho da janela Ponteiro p/ dados urgentes 16 bits 16 bits Opções Dados (cobre o cabeçalho e os dados) Checksum (tamanho variável) (tamanho variável) . – p.3/41 Formato do Segmento TCP A Porta de origem (16 bits) é aquela utilizada pelo transmissor do segmento. A Porta de destino (16 bits) é aquela pela qual o receptor aguarda pelo segmento. Os Nu´meros de sequ¨eˆncia e de reconhecimento (32 bits) são usados para implementar um serviço confiável. O Tamanho da janela (16 bits) é um campo utilizado para controle de fluxo. O Tamanho do cabec¸alho (4 bits) é tipicamente de 20 Bytes, haja vista que, na maioria das vezes, o cabeçalho não possui opções. . – p.4/41 Formato do Segmento TCP As Opc¸o˜es são usadas para negociação do MSS (Maximum Segment Size) e colocação de marcas de tempo (timestamps), por exemplo. Bits RST, SYN e FIN: usados para estabelecer e encerrar conexões. Bit ACK: se 1, indica que o Número de reconhecimento é válido. Se 0, o segmento não contém uma confirmação e o Número de reconhecimento é ignorado. Bit PSH: indica que os dados do segmento devem ser passados para o nível superior imediatamente. Bit URG: indica a presença de dados urgentes, na posição indicada pelo Ponteiro para dados urgentes. . – p.5/41 Números de Seqüência São aplicados sobre a cadeia de Bytes transmitidos, e não sobre a série de segmentos. ... 499999...1999...1000...10 Arquivo primeiro segmento Dados para o Dados para o segundo segmento Números de seqüência para os primeiro e segundo segmentos, respectivamente Na prática, os números de seqüência iniciais não são inicializados em 0, mas sim aleatoriamente. O número de reconhecimento contém o número se seqüência do próximo Byte que o host está esperando. . – p.6/41 Exemplo de Uso de Números de Seqüência Seq=42, Ack=79, ACK=1 Seq=46, Ack=83, ACK=1 83 84 85 86 46 47 48 49 S e q = 8 3 , A c k = 5 0 , A C K = 1 83 84 85 86 S e q = 7 9 , A c k = 4 6 , A C K = 1 Cadeia de Bytes a serem enviados . . . . . . . . . . . . 42 43 44 45 46 47 48 49 a serem enviados Cadeia de Bytes 79 80 81 82 83 84 85 86 42 43 44 45 79 80 81 82 79 80 81 82 83 84 85 86 46 47 48 49 . – p.7/41 Piggyback Acknowledgement Conforme se viu, o reconhecimento para os dados contidos em um segmento pode ser levado em outro segmento contendo dados. Neste caso, diz-se que esse reconhecimento “pegou uma carona” no outro segmento de dados. Dá-se a isso o nome de piggyback a acknowledgement. apiggyback - [Noun]: a ride on the back and shoulders of another person. [Adverb, adj]: on the back and shoulders of another person. [Verb]: support on the back and shoulders; ”He piggybacked her child so she could see the show”. Fonte: http : //www.thefreedictionary.com. . – p.8/41 Controle de Erros O TCP usa uma combinação de dois mecanismos para controle de erros. No Go Back-N, os segmentos recebidos fora de ordem são imediatamente descartados. Na Retransmissão Seletiva, os segmentos recebidos fora de ordem são armazenados em um buffer intermediário. Quando o segmento faltante é recebido, a seqüência é reestabelecida. Esses mecanismos são também conhecidos como mecanismos de janelas deslizantes. . – p.9/41 Mecanismo Go Back-N (espera) expira a temporização X seg0seg1seg3 seg2seg5 seg4 do seg2 envia seg0 envia seg1 envia seg2 envia seg4 envia seg2 envia seg3 envia seg4 envia seg5 recebe seg5, entrega recebe seg4, entrega recebe seg3, entrega recebe seg2, entrega recebe seg5, descarta recebe seg4, descarta recebe seg3, descarta recebe seg1 recebe seg0 envia seg5 envia seg3 envia ACK0 envia ACK1 envia ACK1 envia ACK1 envia ACK1 envia ACK2 envia ACK3 envia ACK4 envia ACK5 recebe ACK0 recebe ACK1 Remetente Destinatário . – p.10/41 Mecanismo de Retransmissão Seletiva (espera) expira a temporização X seg0seg1seg3 seg2seg5 seg4 do seg2 envia seg0 envia seg1 envia seg2 envia seg4 envia seg2 recebe seg1 recebe seg0 envia seg5 envia seg3 recebe seg3, armazena recebe seg4, armazena recebe seg5, armazena recebe seg2 (reconstrói a seqüência) envia ACK0 envia ACK1 envia ACK3 envia ACK4 envia ACK5 recebe ACK0 recebe ACK] Remetente Destinatário envia ACK2 . – p.11/41 Comparação Entre os Mecanismos Go Back-N: Servidor mais leve - não há necessidade de armazenamento temporário e remontagem de seqüência de segmentos (⇑). Tráfego intenso pela rede - vários segmentos terão que ser retransmitidos (⇓). Retransmissão Seletiva: Servidor mais complexo - há necessidade de armazenamento temporario e lógica de remontagem de segmentos (⇓). Pouco trafego pela rede - apenas o segmento que falta deve ser retransmitido (⇑). . – p.12/41 Temporizador de Retransmissão O TCP associa um temporizador a cada segmento. Quando a temporização expira (devido a um reconhecimento perdido, por exemplo), o segmento é retransmitido. Por esta razão, este temporizador é chamado de temporizador de retransmissão. . – p.13/41 Uso do Temporizador de Retransmissão t e m p o r i z a ç ã o x Seq=92, ACK=0 Seq=92, ACK=0 a serem enviados 92 93 94 95 96 97 98 99 92 93 94 95 92 93 94 95 A c k = 9 6 , A C K = 1 92 93 94 95 96 97 98 99 A c k = 9 6 , A C K = 1 Cadeia de Bytes . – p.14/41 Casos Especiais Cenário: dois segmentos são transmitidos e apenas o reconhecimento para o primeiro deles é perdido. 1a. hipótese: o reconhecimento para o segundo chega antes do temporizador associado ao primeiro expirar. O primeiro segmento não será retransmitido (reconhecimento cumulativo). 2a. hipótese: o reconhecimento para o segundo chega depois do temporizador associado ao primeiro expirar. O primeiro segmento (e apenas ele) terá que ser retransmitido. . – p.15/41 1a. Hipótese x t e m p o r i z a ç ã o 92 93 94 95 96 97 98 99 Seq=92, ACK=0 92 93 94 95 96 97 98 99Seq=96, ACK=0 A c k = 9 6 , A C K = 1 A c k = 1 0 0 , A C K = 1 a serem enviados Cadeia de Bytes 92 93 94 95 96 97 98 99 . – p.16/41 2a. Hipótese x Seq=92, ACK=0 96 97 98 99Seq=96, ACK=0 A c k = 9 6 , A C K = 1 a serem enviados t e m p o r i z a ç ã o A c k = 1 0 0 , A C K = 1 Seq=92, ACK=0 A c k = 1 0 0 , A C K = 1 Cadeia de Bytes 92 93 94 95 96 97 98 99 92 93 94 95 96 97 98 99 92 93 94 95 9697 98 99 92 93 94 95 92 93 94 95 . – p.17/41 Acelerando a Retransmissão Nem sempre o emissor de um segmento espera pelo temporizador de retransmissão. Ao perceber uma lacuna a, o TCP destinatário envia três reconhecimentos duplicados. Ao recebê-los, o TCP remetente efetua uma retransmissão rápida do segmento. Essa retransmissão e dita “rápida” porque ocorre antes do temporizador associado ao segmento faltoso expirar. aUma falha na sequ¨eˆncia correta dos segmentos. . – p.18/41 Exemplo de Retransmissão Acelerada x A c k = 9 2 A c k = 9 2 A c k = 9 2 Seq=92, ACK=0 96 97 98 99 Seq=92, ACK=0 a serem enviados 92 93 94 95 96 97 98 99 t e m p o r i z a ç ã o 92 93 94 95 96 97 98 99 92 93 94 95 96 97 98 99 92 93 94 95 92 93 94 95 Cadeia de Bytes Seq=96, ACK=0 . – p.19/41 Controle de Fluxo Serviço prestado pelo TCP para eliminar a possibilidade de o remetente saturar o buffer do destinatário. Espaço disponível Dados do TCP no buffer (RcvWindow) janela de recepção (RcvBuffer) Buffer de recepção do IP Dados vindos Processo de Aplicação O TCP destinatário armazena localmente as variáveis LastByteRead e LastByteRcvd. . – p.20/41 Controle de Fluxo - Lado do Destinatário LastByteRead é o número do último Byte lido pelo nível superior (Aplicação). LastByteRcvd é o número do último Byte que chegou do Nível de Rede e foi posto no buffer. Espaço disponível Dados do TCP no buffer (RcvWindow) janela de recepção (RcvBuffer) Buffer de recepção do IP Dados vindos Processo de Aplicação RcvBuffer não pode ser ultrapassado, ou seja: LastByteRcvd - LastByteRead <= RcvBuffer . – p.21/41 Controle de Fluxo - Lado do Destinatário A janela de recepção é assim definida: RcvWindow = RcvBuffer - (LastByteRcvd - LastByteRead) Espaço disponível Dados do TCP no buffer (RcvWindow) janela de recepção (RcvBuffer) Buffer de recepção do IP Dados vindos Processo de Aplicação Inicialmente, RcvWindow = RcvBuffer Os valores de RcvWindow são transmitidos ao remetente no campo Tamanho da janela. . – p.22/41 Controle de Fluxo - Lado do Remetente O remetente, por sua vez, armazena duas variáveis: LastByteSent: número de seqüência do último Byte enviado; LastByteAcked: número de seqüência do último Byte reconhecido. O controle de fluxo se dá mantendo-se a inequação: LastByteSent - LastByteAcked <= RcvWindow Quando RcvWindow = 0, o remetente aguarda que o Nível de Aplicação consuma Bytes de RcvBuffer e um novo anúncio de janela seja feito pelo destinatário. . – p.23/41 Controle de Fluxo - Lado do Remetente O que ocorre quando, após um anúncio de janela nula, um novo anúncio de janela (não nula) é perdido? O TCP emissor esperará infinitamente pelo anúncio? Ao receber um anúncio de janela nula, o remetente inicia também um temporizador. Este temporizador é denominado temporizador de persistência. Se um novo anúncio de janela é perdido, o temporizador de persistência expira; um segmento é enviado, e seu reconhecimento contém o novo valor de RcvWindow. . – p.24/41 Dinâmica do Controle de Fluxo Seq=92, ACK=0 Seq=95, ACK=0 Seq=92, ACK=0 97 98 99 92 93 94 95 96 97 98 99 a serem enviados 92 93 94 95 96 97 98 99 97 98 99 A C K = 0 , R c v W i n d o w = 5 a c k = 9 5 , A C K = 1 , R c v W i n d o w = 2 a c k = 9 7 , A C K = 1 , R c v W i n d o w = 0 A C K = 0 , R c v W i n d o w = 3 a c k = 1 0 0 , A C K = 1 , R c v W i n d o w = 0 A C K = 0 , R c v W i n d o w = 4 Anúncio de janela anúncio de janela anúncio de janela Cadeia de Bytes 92 93 94 95 96 Aplicação lê 3 Bytes Aplicação lê 4 Bytes . – p.25/41 Abertura de Conexão Uma conexão TCP é aberta usando um procedimento conhecido como aperto de mão de três vias a. Os segmentos usados durante este procedimento não contêm dados do nível de Aplicação. Na maioria deles, o bit SYN é setado em 1. É na abertura de conexão que são definidos os números de seqüência iniciais e demais opções. Nos segmentos posteriores b, o bit SYN é setado em 0. aOu, em ingleˆs, three-way handshake. bAqueles que carregam dados passados pelo Nı´vel de Aplicac¸a˜o. . – p.26/41 Three-way Handshake Requisição de conexão (SYN=1, ACK=0, Seq=x) C o n e x ã o c o n f i r m a d a ( S Y N = 1 , A C K = 1 , S e q = y , A c k = x + 1 ) Ack (SYN=0, ACK=1, Seq=x+1,Ack=y+1) . – p.27/41 Encerramento de Conexão Após a troca de segmentos que carregam dados do Nível de Aplicação, ocorre o encerramento da conexão. Este procedimento, a exemplo da abertura, é definido por uma determinada seqüência de segmentos específicos. Cada entidade TCP fecha o seu lado da conexão com a outra entidade empregando segmentos com o bit FIN setado em 1. Os segmentos TCP carregam seus respectivos números de seqüência e reconhecimento. . – p.28/41 Encerramento de Conexão Requisição de desconexão (Seq=w, Ack=k, FIN=1, ACK=1) A c k ( S e q = k , A c k = w + 1 , F I N = 0 , A C K = 1 ) R e q u i s i ç ã o d e d e s c o n e x ã o ( S e q = k , A c k = w + 1 , F I N = 1 , A C K = 1 ) Ack (Seq=w+1, Ack=k+1, FIN=0, ACK=1) . – p.29/41 Controle de Congestionamento Evita que segmentos não se percam excessivamente devido a congestionamento na rede. Uma rede rápida alimentabdo um receptor de pequena capacidade Uma rede congestionada alimentando um receptor de grande capacidade (ajuste da taxa de transmissão Controle de Fluxo Controle de Congestionamento (ajuste da taxa de transmissão para não transbordar o balde) para não transbordar o funil) . – p.30/41 Controle de Congestionamento Para o controle de congestionamento, o TCP remetente mantém a janela de congestionamento (CongWin). A quantidade de dados que um remetente pode adicionar a uma conexão TCP é limitada também pela CongWin: LastByteSent - LastByteAcked <= min(CongWin, RcvWindow) Há também outra variável, denominada limiar, que afeta o modo como a janela de congestionamento cresce. . – p.31/41 Controle de Congestionamento Para melhor compreensão do algoritmo usado pelo TCP para controle de congestionamento, supõe-se que: 1. O buffer de recepção seja tão grande que a limitação imposta pela janela de recepção possa ser ignorada; 2. O remetente tem uma grande quantidade de dados a transmitir. Inicialmente, CongWin aumenta de forma exponencial, indo até o limiar a. Em seguida, ela aumenta linearmente até ocorrer um evento de perda. aFase chamada de partida lenta, porque comec¸a com uma janela pequena. . – p.32/41 Controle de Congestionamento 1 0 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 evento de perda limiar = 8 segmentos Número da transmissão J a n e l a d e c o n g e s t i o n a m e n t o ( e m s e g m e n t o s ) . – p.33/41 Dois Pesos, Duas Medidas Imediatamente após a ocorrência de um evento de perda, o valor do limiar é setado na metade da ConWin. O comportamento do emissor passará a ser regido pela natureza do evento de perda, que pode ser: 1. A recepção de três reconhecimentos duplicados; 2. A expiração de um temporizador de retransmissão. Imagens valem mais do que mil palavras... . – p.34/41 Recepção de Três Reconhecimentos Duplicados 1 0 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 67 8 9 10 11 12 13 14 15 Número da transmissão limiar = 8 segmentos 6 segmentos (12/2) (novo) limiar = J a n e l a d e c o n g e s t i o n a m e n t o ( e m s e g m e n t o s ) reconhecimentos recepção de três duplicados !!! . – p.35/41 Expira o Temporizador de Retransmissão 1 0 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 limiar = 8 segmentos Número da transmissão J a n e l a d e c o n g e s t i o n a m e n t o ( e m s e g m e n t o s ) (novo) limiar = 6 segmentos (12/2) expira o temporizador de retransmissão!!! . – p.36/41 Controle de Congestionamento: Resumo da Ópera expira o temporizador de retransmissão!!! recepção de três reconhecimentos duplicados!!! 1 0 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Número da transmissão J a n e l a d e c o n g e s t i o n a m e n t o ( e m s e g m e n t o s ) (novo) limiar = 6 segmentos (12/2) 8 segmentos limiar = . – p.37/41 UDP (User Datagram Protocol) Definido na RFC 768, o UDP é usado por aplicações que não podem (ou não querem) pagar o preço do serviço prestado pelo TCP. Não há controle de erros. Não existe nem mesmo o conceito de conexão. Taxa de envio não-regulada: o UDP não provê controle de fluxo nem de congestionamento. Na prática, a taxa de recebimento é limitada apenas pela largura de banda. Apenas multiplexação/demultiplexação e detecção de erros em segmentos recebidos são realizadas. . – p.38/41 Formato do Segmento UDP Porta de origem Porta de destino 16 bits 16 bits Tamanho Dados (tamanho variável) (cobre o cabeçalho e os dados) Checksum (cobre o cabeçalho e os dados) . – p.39/41 Detecção de Erros em Segmentos Recebidos Remetente realiza o complemento de 1 da soma de todas as palavras de 16 bits do segmento a, e o põe no campo Checksum. Destinatário faz a soma de todas as palavras de 16 bits, inclusive o checksum. Se não houve erros no envio, o resultado será 1111111111111111. Se pelo menos um daqueles bits for 0, sabe-se que um erro foi introduzido no segmento original. aAlguns campos do datagrama IP tambe´m entram nesse ca´lculo, e 0s sa˜o adi- cionados no final dos dados, se o total a ser somado na˜o for um mu´ltiplo de 16. . – p.40/41 Detecção de Erros em Segmentos Recebidos Exemplo de cálculo do campo Checksum: 1a. palavra => 0110011001100110 2a. palavra => 0101010101010101 3a. palavra => 0000111100001111 Soma => 1100101011001010 Compl. de 1 => 0011010100110101 (Checksum) Quando o campo Checksum não é usado, todos os seus bits são setados em 0 a. Este procedimento é o mesmo usado pelo TCP. aNeste caso, o 0 verdadeiro e´ armazenado com todos os bits iguais a 1. . – p.41/41 {large Introdução} {large Formato do Segmento TCP} {large Formato do Segmento TCP} {large Formato do Segmento TCP} {large Números de Seqüência} {large Exemplo de Uso de Números de Seqüência} {large Piggyback Acknowledgement} {large Controle de Erros} {large Mecanismo Go Back-N} {large Mecanismo de Retransmissão Seletiva} {large Comparação Entre os Mecanismos} {large Temporizador de Retransmissão} {large Uso do Temporizador de Retransmissão} {large Casos Especiais} {large 1a. Hipótese} {large 2a. Hipótese} {large Acelerando a Retransmissão} {large Exemplo de Retransmissão Acelerada} {large Controle de Fluxo} {large Controle de Fluxo - Lado do Destinatário} {large Controle de Fluxo - Lado do Destinatário} {large Controle de Fluxo - Lado do Remetente} {large Controle de Fluxo - Lado do Remetente} {large Dinâmica do Controle de Fluxo} {large Abertura de Conexão} {large Three-way Handshake} {large Encerramento de Conexão} {large Encerramento de Conexão} {large Controle de Congestionamento} {large Controle de Congestionamento} {large Controle de Congestionamento} {large Controle de Congestionamento} {large Dois Pesos, Duas Medidas} {large Recepção de Três Reconhecimentos Duplicados} {large Expira o Temporizador de Retransmissão} {nullormalsize Controle de Congestionamento: Resumo da Ãfipera} {large UDP (User Datagram Protocol)} {large Formato do Segmento UDP} {large Detecção de Erros em Segmentos Recebidos} {large Detecção de Erros em Segmentos Recebidos}
Compartilhar