• Nenhum resultado encontrado

User Datagram Protocol

N/A
N/A
Protected

Academic year: 2021

Share "User Datagram Protocol"

Copied!
14
0
0

Texto

(1)

User Datagram Protocol

UDP: Protocolo utiliza para distinguir para qual usuário

ou aplicativo deve ser encaminhado um datagrama

destinado a uma máquina que esteja executando mais de

um processo.

Problemas:

Os processos são criados e destruídos dinâmicamente e os

transmissores raramente sabem o bastante para identificar um

processo de uma outra máquina.

Deseja-se substituir os processos (no caso de uma reinicialização

da máquina) sem informar a todos os transmissores.

Como permitir que um transmissor entre em contato com um

servidor (de arquivos, por exemplo) sem saber qual processo na

máquina de destino.

(2)

User Datagram Protocol

• Solução:

• Portas de protocolo: São pontos de destino abstratos,

identificadas por um número inteiro positivo.

• Elas utilizam “buffer”, que modo que os dados que

chegarem antes que um processo esteja pronto para

aceitá-los não sejam perdidos. Os buffers são

implementados como filas.

• Para comunicar-se com uma porta exterior, um

transmissor precisa conhecer tanto o endereço IP como

o número da porta na máquina de destino.

• Além da porta de destino, uma mensagem UDP deve ter

também a informação sobre a porta de origem para

onde as respostas deverão ser endereçadas.

(3)

User Datagram Protocol

• Assim como o IP, o UDP oferece um serviço não-confiável

de transmissão sem conexão.

• Desta forma, fica a cargo do aplicativo resolver o problema

da confiabilidade, como perda de mensagens, duplicação,

retardo, transmissão defeituosa e perda de conectividade.

• Formato de mensagens UDP:

O campo Comprimento contém o número de octetos na mensagem UDP

(4)

User Datagram Protocol

• Pseudocabeçalho UDP

• Tem como finalidade verificar se a mensagem UDP

atingiu o seu destino correto.

• O destino correto consiste em uma máquina específica e

uma porta específica dentro desta máquina.

• O pseudocabeçalho não é transmitido junto como a

mensagem UDP, mas a soma de verificação o abrange.

• No destino final, o pseudocabeçalho é remontado a

(5)

User Datagram Protocol

• Encapsulamento UDP

(6)

User Datagram Protocol

• Contradição entre organização em camadas e o cálculo da

soma de verificação UDP.

• Multiplexação: O software UDP aceita mensagens de

muitos programas aplicativos e os passa ao IP.

• Demultiplexação: E aceita mensagens UDP recebida de IP

e as passa ao programa aplicativo apropriado.

• Quando o UDP recebe uma mensagem, verifica se o

número da porta de destino confere com uma das portas

atualmente em uso. Se não houver correspondência, a

mensagem é descartada e uma mensagem de erro é

enviada. Caso contrário, o UDP enfileira a mensagem na

porta apropriada. Se não houver espaço na fila, a

mensagem é descartada e uma mensagem de erro é gerada.

(7)
(8)

User Datagram Protocol

• Como deverão ser atribuídos números de porta de

protocolo?

1. Uso de autoridade central que atribua números de

portas de acordo com a necessidade e publique a lista.

2. Atribuição dinâmica: Sempre que um programa

necessita de uma porta, o software de rede atribui uma.

Para saber que número de porta a máquina de destino

está usando, o emissor enviar uma mensagem

perguntando: “que porta o serviço X está usando?”

• O TCP/IP usa uma abordagem híbrida. Algumas portas são

atribuídas a priori e outras são deixadas a cargo dos

aplicativos.

(9)

UDP: Programação Socket

Interação Cliente/Servidor usando UDP:

Servidor

Cliente

Cria Socket:

socketServidor =

DatagramSocket()

Lê mensagem de

socketServidor

Escreve resposta

em socketServidor

Cria Socket:

socketCliente =

DatagramSocket()

Cria endereço: host, porta de

origem. Envia mensagem

em socketCliente

Lê resposta de socketCliente

(10)

Programação Socket com UDP:

Exemplo usando JAVA

import java.io.*; import java.net.*;

public class ClienteUDP {

public static void main(String argv[]) throws Exception {

int porta;

byte[] dadosEnviados;

byte[] dadosRecebidos = new byte[1024]; String frase = null;

String fraseModificada = null;

//argv[1] contem o numero da porta do servidor no host porta = (new Integer(argv[1])).intValue();

//Cria Stream de entrada. Redireciona entrada do teclado BufferedReader entradaDoUsuario =

new BufferedReader(new InputStreamReader(System.in));

//Cria socket cliente

DatagramSocket socketCliente = new DatagramSocket();

//Localiza o host especificado na linha de comando.

//A classe InetAddress contem as informacoes de end. IP do host InetAddress enderecoIP = InetAddress.getByName(argv[0]);

(11)

Programação Socket com UDP:

Exemplo usando JAVA

//Le frase do teclado

frase = entradaDoUsuario.readLine(); dadosEnviados = frase.getBytes();

//Cria datagrama de envio. Em JAVA, a classe DatagramPacket e' usada para //conter as informacoes do datagrama. Estas informacoes sao: array de //bytes (dadosEnviados), comprimento do array, endereco IP do destino, //porta UDP do destino.

DatagramPacket datagramaEnviado =

new DatagramPacket(dadosEnviados, dadosEnviados.length, enderecoIP, porta); //Envia datagrama para servidor

socketCliente.send(datagramaEnviado); //Espera resposta do servidor

//Cria datagrama para receber mensagem do servidor DatagramPacket datagramaRecebido =

new DatagramPacket(dadosRecebidos, dadosRecebidos.length); //Recebe datagrama do servidor

socketCliente.receive(datagramaRecebido); //Imprime resultado

fraseModificada = new String(datagramaRecebido.getData());

System.out.println(enderecoIP.getHostName() + " : " + fraseModificada); //Fecha socket

(12)

Programação Socket com UDP:

Exemplo usando JAVA

import java.io.*;

import java.net.*;

import java.util.*;

public class ServidorUDP {

public static void main(String argv[]) throws Exception

{

byte[] dadosEnviados;

byte[] dadosRecebidos = new byte[1024];

String frase, fraseModificada;

InetAddress enderecoIPDoCliente;

int portaDoCliente;

//Cria socket UDP na porta 6789

DatagramSocket socketServidor = new DatagramSocket(6789);

while(true)

{

//Cria datagrama para receber mensagem do cliente

DatagramPacket datagramaRecebido =

new DatagramPacket(dadosRecebidos, dadosRecebidos.length);

//Recebe datagrama

(13)

Programação Socket com UDP:

Exemplo usando JAVA

//O servidor deve obter o endereco IP do cliente e a porta UDP de origem. //Isto se deve ao fato do protocolo UDP ser sem conexao, ou seja, cada pacote //enviado deve conter o endereco do destino.

enderecoIPDoCliente = datagramaRecebido.getAddress(); portaDoCliente = datagramaRecebido.getPort();

//Executa o processamento. Neste caso, converte a frase para letras maiusculas frase = new String(datagramaRecebido.getData());

System.out.println(enderecoIPDoCliente.getHostName() + " : " + frase); fraseModificada = frase.toUpperCase();

//Prepara resposta para ser enviada ao cliente //Converte String para byte[]

dadosEnviados = fraseModificada.getBytes();

//Cria datagrama para enviar a resposta ao cliente

DatagramPacket datagrama = new DatagramPacket(dadosEnviados, dadosEnviados.length,

enderecoIPDoCliente, portaDoCliente);

//Envia resposta para o cliente socketServidor.send(datagrama);

//Para assegurar que nenhuma parte da mensagem anterior continue presente, // preencha o buffer de dados recebidos com 0.

Arrays.fill(dadosRecebidos, (byte)0); }

} }

(14)

Programação Socket com UDP

Resumo dos métodos utilizados

:

Class DatagramSocket

void

close

() : Fecha o socket UDP.

void

connect

(

InetAddress

address, int port) : Conecta o socket a um endereço

remoto.

void

disconnect

() : Desconecta o socket.

InetAddress

getInetAddress

() : Retorna o endereço ao qual este socket esta

conectado.

InetAddress

getLocalAddress

() : Obtém o endereço local, ao qual o socket esta

associado.

int

getLocalPort

() : Retorna o número da porta ‘a qual o socket esta

associado.

int

getPort

() : Retorna a porta remota deste socket.

void

receive

(

DatagramPacket

p) : Recebe um datagrama.

void

send

(

DatagramPacket

p) : Envia um datagrama.

void

setSoTimeout

(int timeout) : Habilita/Desabilita SO_TIMEOUT, para o tempo

timeout, em milisegundos. Este é o máximo tempo que o método receive irá

esperar por datagrama.

Referências

Documentos relacionados

Sirona Dental Systems GmbH 2 Avisos e instruções de segurança Instruções de utilização Módulo de parede XIOS Plus.. Área em torno

SINDICATO dos Trabalhadores das Indústrias Transformadores, Energia e Actividades do Ambiente do Centro Sul e Regiões Autonomas - SITE

Os testes intradérmicos não devem ser realizados em vacas após o sétimo mês de gestação, bezerros com menos de seis meses de vida, e nem em animais com endoparasi- toses ou

(Fonte: Oil Field Familiarization Training Guide) ... 7 Tabela 2: Tipos de Brocas e seus Valores Típicos de Coeficiente de Fricção .... Esses fatores impulsionaram a busca por

Lance algumas bolinhas na direção da criança, ela deve tentar através da percepção de tempo e reação tentar recolher a bolinha com o copo. Alternar o movimento em ambos

A execução Oficina Saúde no Envelhecer teve grande potencialidade de promoção do envelhecimento saudável para os idosos que participaram ativamente dos encontros,

1- Cadastro de Pessoa Física: Nome, Número do cartão fidelidade, CPF, RG, Sexo, Data de nascimento, Data de cadastro (cliente desde), Endereço Completo (Rua, Numero,..

• Aprimora a estabilidade ao abrir um projeto do Revit 2012 que contém uma tabela de marcador de posição de tubulação.. • Aprimora a consistência de formação de unidade