Baixe o app para aproveitar ainda mais
Prévia do material em texto
REDES DE COMPUTADORES AULA 3 – CONTROLE DE CONGESTIONAMENTO PROTOCOLOS DE REDES DE COMPUTADORES PROF :DJACIR MACIEL maciel.estacio@gmail.com O UDP (User Datagram Protocol) é um protocolo de transporte sem conexão (connectionless) e não- confiável. Ele não adiciona nenhum controle adicional aos serviços de entrega do IP exceto pelo fato de implementar a comunicação entre processos , em vez da comunicação entre hosts. Da mesma forma, a verificação de erros é implementada de forma muito limitada. Se o UDP é simples assim, por que um processo iria querer usá-lo? O UDP é um protocolo muito simples com um mínimo de overhead. Se um processo quiser enviar uma pequena mensagem e não se preocupar muito com a confiabilidade, o ele é uma boa escolha. Enviar uma pequena mensagem através do UDP exige menor interação entre o emissor e o receptor do que quando usamos o TCP ou o SCTP. Portas conhecidas no UDP A Tabela a seguir mostra alguns exemplos de portas conhecidas usadas pelo UDP. Alguns números de porta podem ser usados tanto pelo UDP quanto pelo TCP. Portas UDP Confiável Versus Não confiável A camada de transporte oferece duas opções de serviços de transporte de dados: confiável ou não confiável. Se o programa na camada de aplicação requerer confiabilidade, necessitamos utilizar um protocolo de camada de transporte confiável que implemente mecanismos de controle de fluxo, controle de erros e ordenação de pacotes. Isso implica em um serviço mais lento e mais complexo. Por outro lado, o programa pode não requerer confiabilidade no transporte de dados; Por qual motivos ?? Por implementar mecanismos próprios de controle de fluxo, controle de erros e ordenação de pacotes; Por requerer serviços mais rápidos; Finalmente pela natureza do serviço não exigir controle de fluxo e de erros (aplicações em tempo real). Para esses casos, podemos usar um protocolo não confiável. Na Internet, existem três protocolos diferentes de camada de transporte. Como já mencionado. O UDP é um protocolo sem conexão (connectionless) e não confiável; O TCP e o SCTP são orientados a conexão (connection-oriented) e confiáveis. Esses três protocolos são capazes de atenderem às exigências dos diversos programas da camada de aplicação. Pensemos então !!! Se a camada de enlace é confiável e implementa controle de fluxo e de erros, realmente precisamos disso também na camada de transporte? A resposta é sim. A confiabilidade na camada de enlace é implementada entre dois nós adjacentes. Na maioria dos casos, precisamos da confiabilidade fim a fim (end-to-end). Como a camada de rede na Internet não é confiável (modalidade best effort), necessitamos implementar confiabilidade na camada de transporte. Para compreender que o controle de erros na camada de enlace não é suficiente para garantir o controle de erros na camada de transporte, vejamos a próxima figura Datagramas de Usuário Os pacotes UDP, denominados datagramas de usuário, possuem um cabeçalho de tamanho fixo, de 8 bytes. Porta de origem. Esse campo especifica o número da porta usada pelo processo em execução no host de origem. Ele tem 16 bits de comprimento, significando que o número da porta pode variar de 0 a 65535. Se o host de origem for um cliente , o número da porta, na maioria dos casos, é um número de porta solicitado pelo processo cliente e escolhido randomicamente pelo software UDP em execução no host de origem Se o host de origem for um servidor, enviando uma resposta , o número da porta, na maioria dos casos, é um número de porta conhecido. Porta de destino. Esse campo especifica o número da porta usado pelo processo em execução no host de destino. Ele também tem 16 bits de comprimento. Se o host de destino for um servidor (um cliente transmitindo uma solicitação), o número da porta, na maioria dos casos, é um número de porta conhecido Se o host de destino for um cliente (um servidor transmitindo sua resposta), o número da porta, na maioria das vezes, é um número de porta provisória. Nesse caso, o servidor copia o número de porta provisória que recebeu no pacote de solicitação. Comprimento. Esse campo de 16 bits define o comprimento total de um daïagrama UDP, compreendendo cabeçalho mais dados. Os 16 bits podem definir um comprimento total entre 0 a 65.535 bytes. Entretanto, o comprimento total deve ser menor, pois um datagrama UDP deve ser repassado em um datagrama IP de comprimento total igual a 65.535 bytes. o campo de comprimento em um datagrama UDP, na verdade, é desnecessário um datagrama UDP deve ser encapsualdo em um datagrama IP. Checksum. Esse campo de 16 bits é usado para detectar erros na transmissão de datagrama UDP(cabeçalho mais dados). Operação do UDP Serviços Sem Conexão (Connectionless) Como mencionado anteriormente, o UDP implementa serviços de transporte sem conexão. Isso significa que cada datagrama de usuário enviado pelo UDP é um datagrama independente. Não existe nenhuma relação entre os diferentes datagramas de usuário, mesmo se eles forem provenientes de um mesmo processo de origem e tiverem o mesmo programa de destino. Os datagramas de usuário não são numerados. Além disso, não existem mecanismos para estabelecer e/ou terminar uma conexão virtual, ao contrário do que acontece com o TCP. Isso significa que cada datagrama de usuário pode trafegar por um caminho diferente. Cada solicitação deve ser suficientemente pequena para caber em um único datagrama de usuário. Apenas processos que transmitem mensagens curtas devem usar o UDP. Controle de Fluxo e de Erros O UDP é um protocolo de transporte muito simples e não confiável. Não implementa controle de fluxo e, portanto, nenhum mecanismo de janelamento. O receptor pode ser inundado com um número excessivo de mensagens que chegam a ele. O UDP não implementa mecanismos de controle de erros, exceto o checksum. Isso significa que o emissor não sabe se uma mensagem foi perdida ou duplicada. Quando o receptor detecta um erro por meio do checksum, o datagrama de usuário é descartado de maneira imperceptível. A ausência de controle de fluxo e de controle de erros significa que um processo de aplicação usando UDP deve implementar esses mecanismos. Encapsulamento e desencapsulamento Para transmitir uma mensagem de um processo a outro, o protocolo UDP encapsula e desencapsula mensagens em um datagrama IP. Formação de Filas No UDP portas são associadas à filas. Quando um processo no lado cliente é iniciado, este solicita para o sistema operacional um número de porta. Algumas implementações criam tanto uma fila de chegada como uma de saída associada a cada processo. Outras criam apenas uma fila de chegada associada a cada processo. Uso do UDP O UDP é adequado para um processo que requeira comunicação solicitação-resposta simples com pouca preocupação com controle de erros e de fluxo. Normalmente, ele não é usado para um processo como o FTP que precisa transmitirum volume muito grande de dados Uso do UDP O UDP é adequado para um processo que implemente mecanismos internos de controle de fluxo e de erros. Por exemplo, o processo TFTP (Trivial File Transfer Protocol) implementa mecanismos internos de controle de fluxo e de erros. Ele pode usar o UDP de maneira fácil. Uso do UDP O UDP é um protocolo de transporte indicado para multicast. O recurso de multicast está embutido no software UDP, mas não no software TCP. O UDP é muito utilizado no gerenciamento de redes, protocolo SNMP. O UDP é usado em alguns protocolos de roteamento para atualização de rotas como o RIP (Routing Information Protocol) TCP O segundo protocolo da camada de transporte a é denominado TCP (Transmission Control Protocol) que, assim como o UDP, é um protocolo de comunicação entre processos finais (programa a programa). Portanto, o TCP, bem como o UDP, usa números de portas. Diferentemente do UDP, o TCP é um protocolo orientado a conexão; Ele cria uma conexão virtual entre dois processos TCPs pata a transmissão de dados. Além disso, o TCP implementa mecanismos de controle de fluxo e de erros na camada de transporte. Serviços TCP Comunicação entre processos Assim como o UDP, o TCP implementa a comunicação entre processos utilizando números de porta. Portas usadas pelo Serviços de Entrega de Fluxo de Dados O TCP diferentemente do UDP, é um protocolo orientado a fluxo de dados. No UDP, um processo (um programa aplicativo) envia mensagens, com delimitadores predefinidos, para o UDP. O UDP acrescenta seu próprio cabeçalho a cada uma dessas mensagens e as entrega para transmissão pelo IP. O TCP, por outro lado, possibilita a um processo aplicativo enviar dados na forma de um fluxo de bytes e possibilita ao processo de recepção receber dados na forma de um fluxo de bytes O TCP cria um ambiente no qual os dois processos parecem estar conectados por um "canal“ imaginário que transporta seus dados pela Internet. Fluxo de dados no TCP Buffers de Transmissão e Recepção Como existe a possibilidade dos processos de transmissão e de recepção não gerarem ou lerem dados em uma mesma velocidade, o TCP precisa de buffers para seu armazenamento. Existem dois buffers, um buffer de transmissão e um buffer de recepção, um em cada direção. Uma forma de implementar um buffer é usar uma matriz circular de posições (1 byte) Segmentos Embora o sistema de buffers trate da disparidade entre as velocidades dos processos de geração e leitura de dados, precisamos de mais um passo antes de podermos efetivamente transmitir os dados. A camada IP, como provedora de serviços para o TCP, precisa enviar dados em pacotes, não na forma de um fluxo de bytes. Na camada de transporte, o TCP agrupa determinado número de bytes em pacotes, denominados Segmento. Segmentos TCP Comunicação Full- Duplex o TCP oferece serviço full-duplex no qual dados podem fluir em ambos as direções simultaneamente. O TCP diferentemente do UDP, é um protocolo orientado a conexão. Já estudamos que esta é uma conexão virtual, e não uma conexão física. Um segmento TCP é encapsulado em um datagrama IP e pode ser recebido fora de ordem, perdido ou corrompido e, em seguida, precisa ser reenviado. Cada um deles pode ser transmitido por um caminho diferente até atingir o destino. Não existe uma conexão física. Formato do TCP Um segmento TCP é formado por um cabeçalho de 20 a 60 bytes, seguido pelos dados do programa aplicativo. O cabeçalho tem 20 bytes quando não existem informações opcionais sendo transmitidas (até 60 bytes). Endereço da porta de origem Trata-se de um campo de 16 bits que identifica o número da porta do programa de aplicação no host que está enviando o segmento (origem). Esse campo tem o mesmo objetivo do endereço da porta de origem no cabeçalho UDP. Endereço da porta de destino. Trata-se de um campo de 16 bits que identifica o número da porta do programa de aplicação no host que está recebendo o segmento (destino). Esse campo tem o mesmo objetivo do endereço da porta de destino no cabeçalho UDP. Número de seqüência Esse campo de 32 bits identifica o número atribuído ao primeiro byte de dados de um segmento. Como dissemos anteriormente, o TCP é um protocolo de transporte orientado a fluxo de dados. Número de confirmação Esse campo de 32bits identifica o número de bytes que o receptor espera receber da outra parte. Se o receptor tiver recebido corretamente o número de bytes x da outra parte, ele define x + 1 como o número de confirmação. Comprimento do cabeçalho Esse campo de 4 bits identifica a quantidade de palavras de 4 bytes de um cabeçalho TCP. O comprimento do cabeçalho tem entre 20 e 6O bytes. Conseqüentemente, o valor desse campo pode ser entre 5 (5 x 4 : 20) e 15 (15 x 4 - 60) Reservado Trata-se de um campo de 6 bits reservado para uso futuro. Controle Esse campo define 6 bits de controle (flags) distintos . Controle Esses bits possibilitam a implementação de controle de fluxo, estabelecimento e encerramento de uma conexão virtual e a configuração do modo de transferência de dados no TCP. Tamanho da janela Esse campo define o tamanho de uma janela TCP, em bytes, que a outra parte deve manter. O comprimento desse campo é de 16 bits, significando que o tamanho máximo de uma janela é de 65.535 bytes. Normalmente, esse valor é conhecido como janela receptora (rwnd) e é determinado pelo receptor. Nesse caso, o emissor deve obedecer àquilo que está configurado pelo receptor Checksum Esse campo de 16 bits contém o valor calculado do checksum. O cálculo do checksum para o TCP segue o mesmo procedimento descrito para o UDP. Entretanto, a inclusão do checksum no datagrama UDP é opcional, ao passo que a inclusão do checksum no TCP é obrigatória. Urgent Pointer Esse campo de 16 bits, que é válido apenas se o flag URG (Urgente) estiver ativo, é usado quando um segmento contém dados urgentes. Ele define o número que deve ser acrescentado ao número de seqüência para obter o número do último byte urgente da seção de dados do segmento. Opções Esse campo pode conter um total de até 40 bytes de informações opcionais que serão inclusas ao cabeçalho TCP. OBRIGADO
Compartilhar