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.

Upload: others

Post on 14-Oct-2020

10 views

Category:

Documents


0 download

TRANSCRIPT

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.