User Datagram Protocol - intranet.ifs.ifsuldeminas.edu.br€¦ · • Pseudocabeçalho UDP •Tem...

14
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.

Transcript of User Datagram Protocol - intranet.ifs.ifsuldeminas.edu.br€¦ · • Pseudocabeçalho UDP •Tem...

Page 1: User Datagram Protocol - intranet.ifs.ifsuldeminas.edu.br€¦ · • Pseudocabeçalho UDP •Tem como finalidade verificar se a mensagem UDP atingiu o seu destino correto. •O destino

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.

Page 2: User Datagram Protocol - intranet.ifs.ifsuldeminas.edu.br€¦ · • Pseudocabeçalho UDP •Tem como finalidade verificar se a mensagem UDP atingiu o seu destino correto. •O destino

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.

Page 3: User Datagram Protocol - intranet.ifs.ifsuldeminas.edu.br€¦ · • Pseudocabeçalho UDP •Tem como finalidade verificar se a mensagem UDP atingiu o seu destino correto. •O destino

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

• O campo Soma de Verificação é opcional, pois evita overhead em redes de alta confiabilidade.

Page 4: User Datagram Protocol - intranet.ifs.ifsuldeminas.edu.br€¦ · • Pseudocabeçalho UDP •Tem como finalidade verificar se a mensagem UDP atingiu o seu destino correto. •O destino

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

partir do datagrama IP

Page 5: User Datagram Protocol - intranet.ifs.ifsuldeminas.edu.br€¦ · • Pseudocabeçalho UDP •Tem como finalidade verificar se a mensagem UDP atingiu o seu destino correto. •O destino

User Datagram Protocol

• Encapsulamento UDP

• Colocação conceitual em camadas

Page 6: User Datagram Protocol - intranet.ifs.ifsuldeminas.edu.br€¦ · • Pseudocabeçalho UDP •Tem como finalidade verificar se a mensagem UDP atingiu o seu destino correto. •O destino

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.

Page 7: User Datagram Protocol - intranet.ifs.ifsuldeminas.edu.br€¦ · • Pseudocabeçalho UDP •Tem como finalidade verificar se a mensagem UDP atingiu o seu destino correto. •O destino

User Datagram Protocol

Page 8: User Datagram Protocol - intranet.ifs.ifsuldeminas.edu.br€¦ · • Pseudocabeçalho UDP •Tem como finalidade verificar se a mensagem UDP atingiu o seu destino correto. •O destino

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.

Page 9: User Datagram Protocol - intranet.ifs.ifsuldeminas.edu.br€¦ · • Pseudocabeçalho UDP •Tem como finalidade verificar se a mensagem UDP atingiu o seu destino correto. •O destino

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

Fecha socketCliente

Page 10: User Datagram Protocol - intranet.ifs.ifsuldeminas.edu.br€¦ · • Pseudocabeçalho UDP •Tem como finalidade verificar se a mensagem UDP atingiu o seu destino correto. •O destino

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]);

Page 11: User Datagram Protocol - intranet.ifs.ifsuldeminas.edu.br€¦ · • Pseudocabeçalho UDP •Tem como finalidade verificar se a mensagem UDP atingiu o seu destino correto. •O destino

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

socketCliente.close();}}

Page 12: User Datagram Protocol - intranet.ifs.ifsuldeminas.edu.br€¦ · • Pseudocabeçalho UDP •Tem como finalidade verificar se a mensagem UDP atingiu o seu destino correto. •O destino

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

socketServidor.receive(datagramaRecebido);

Page 13: User Datagram Protocol - intranet.ifs.ifsuldeminas.edu.br€¦ · • Pseudocabeçalho UDP •Tem como finalidade verificar se a mensagem UDP atingiu o seu destino correto. •O destino

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

}

}

}

Page 14: User Datagram Protocol - intranet.ifs.ifsuldeminas.edu.br€¦ · • Pseudocabeçalho UDP •Tem como finalidade verificar se a mensagem UDP atingiu o seu destino correto. •O destino

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.

voidsetSoTimeout(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.