You are on page 1of 22

Sistemas Distribudos

Departamento de Computao
Universidade Federal de Sergipe

Comunicao por Datagrama UDP

Prof. Kalil Araujo Bispo


kalil@dcomp.ufs.br

Introduo

Cama da de Transporte

Modelo OSI/ISO e TCP/IP

Responsvel pela transferncia eficiente, confivel e


econmica dos dados entre origem e destino

Independente do tipo, topologia ou configurao das redes


fsicas existentes entre elas

Garante ainda que os dados cheguem sem erros e na


sequncia correta

Prov mecanismos que possibilitam a troca de dados fim-afim, ou seja, a camada de transporte no se comunica com
mquinas intermedirias na rede

Introduo

Camada de Transporte

Possui dois protocolos principais que so

UDP (User Datagram Protocol)


TCP (Transmission Control Protocol)

Outros protocolos

SCTP (Stream Control Transmission Protocol)


Protocolo confivel que opera sobre um servio de pacotes no
confivel e sem conexo, como o caso do IP
DCCP (Datagram Congestion Control Protocol)
Protocolo de Controle de Congestionamento de Datagramas
Implementa conexes bidirecionais unicast, controle de
congestionamento nao-confiavel de datagramas.

Datagrama UDP

Um datagrama uma unidade de transferncia bsica


associada a uma rede de comutao de pacotes em que
a entrega, hora de chegada, e a ordem no so
garantidos.
Protocolo simples da camada de transporte

No confivel

No h garantia de entrega
Servio sem conexo

Datagrama UDP

Caso garantias sejam necessrias, preciso


implementar uma srie de estruturas de controle,

Timeouts

Retransmisses

Acknowlegments

Controle de fluxo

Cada datagrama UDP tem um tamanho e pode ser


considerado como um registro indivisvel

Comunicao por Datagrama UDP

Comunicao entre processos sem a existncia de


confirmao ou novas tentativas de envio

No h garantia de entrega

Para receber ou enviar mensagens, um processo cria uma


associao entre um soquete com IP e uma porta do host
local

O servidor associar seu soquete a uma porta de servio

Um cliente vincula seu soquete a qualquer porta local livre

O mtodo receive retorna a mensagem, o ip e a porta do


remente

Problemas relacionado
Comunicao com Datagramas

Tamanho da mensagem

O processo destino precisa especificar um vetor de


bytes de tamanho particular pare receber as
mensagens
Se for grade demais, a mensagem truncada
O protocolo IP permite datagramas de at 216 bytes

Problemas relacionado
Comunicao com Datagramas

Bloqueio

Normalmente os soquetes fornecem send no bloqueante e


receive bloqueantes para comunicao com datagramas

A operao send retornar quando tiver passado a


mensagem para as camadas UDP e IP

Ao chegar, a mensagem colocada em uma fila de


recepo vinculada ao soquete de destino

A mensagem recuperada quando a operao receive for


realizada

Se nenhuma mensagem tiver um soquete associado, a


mensagem descartada

Problemas relacionado
Comunicao com Datagramas

Bloqueio

O mtodo receive bloqueia a execuo do processo


at que um datagrama seja recebido

Exceo: timeout fornecido ao soquete


Caso precise fazer outra operao, usar threads
separadas

Problemas relacionado
Comunicao com Datagramas

Timeouts

Recepo bloqueante adequado para uso em um


servidor que esteja esperando receber requisies de
seus clientes

No adequado que um processo espere


infinitamente para receber algo

Limites temporais podem ser configurados nos


soquetes

difcil escolher um timeout apropriado

Problemas relacionado
Comunicao com Datagramas

Recepo Annima

O mtodo receive no especifica uma origem para as


mensagens
Obtm uma mensagem endereada para seu
soquete, independente da origem
Retorna o IP e a porta do remetente, permitindo
verificar de onde veio a mensagem
possvel associar um soquete de datagrama a um IP
e porta em particular

Envio e recepo apenas desse endereo

Modelo de Falhas

O modelo de falhas para canais de comunicao definiu a


comunicao confivel em termos de 2 propriedades

Integridade

Validade

O modelo de falhas pode ser usado em datagramas UDP,


que sofrem as seguintes falhas

Falhas por omisso erro na soma de verificao ou


falta de espao no buffer

Ordenamento entrega diferente da ordem que as


mensagens foram enviadas

Modelo de Falhas

Aplicativos que usam datagramas UDP podem efetuar


seus prprios controles para conseguir comunicao
confivel
Um servio de entrega confivel pode ser construdo a
partir de outro que sofra falhas por omisso

Confirmaes de recebimento

Emprego de UDP

Para algumas aplicaes, aceitvel usar um servio que


esteja exposto a falhas por omisso ocasionais

Ex: DNS, VOIP

UDP no sofre a sobrecarga necessria a entrega de


mensagens garantidas
Fontes de sobrecarga

Necessidade de armazenar informaes de estado na


origem e no destino

Transmisso de mensagens extras

Latncia do remetente

API Java para Datagramas UDP

Fornece comunicao por meio de duas classes

DatagramPacket

Construtor com uma instncia composta por um vetor


de bytes (mensagem), comprimento da mensagem, IP
e a porta do soquete de destino
Instancias podem ser transmitidas entre processos
quando um processo realiza a operao de send e
outro de receive
Construtor para recepo de mensagens composta
por um vetor de bytes (mensagem) e comprimento da
mensagem

DatagramPacket
Principal Construtor
DatagramPacket(byte[]buf, intlength, InetAddressaddress,
intport)

Principais Operaes
InetAddress getAddress() Devolver endereo anexado ao pacote
byte[] getData()

Devolver dados anexados ao pacote

int getLength()

Devolver nmero de bytes dos dados

int getPort()

Devolver porta

API Java para Datagramas UDP

Fornece comunicao por meio de duas classes

DatagramSocket

Fornece mecanismos para a criao de sockets


para envio e recepo de datagramas UDP
Construtor com o sem numero de porta

DatagramSocket
Operaes Principais
DatagramSocket()

Construtor cria socket UDP associado a


qualquer porta livre

DatagramSocket(int port)

Construtor cria socket UDP associado


porta especificada

send(DatagramPacketp)

Envie pacote

receive(DatagramPacketp)

Receba pacote

close()

Fecha o socket

Cliente UDP
import java.net.*;
import java.io.*;
public class UDPClient{
public static void main(String args[]){
// args give message contents and server hostname
DatagramSocket aSocket = null;
try {
aSocket = new DatagramSocket();
byte [] m = args[0].getBytes();
InetAddress aHost = InetAddress.getByName(args[1]);
int serverPort = 6789;
DatagramPacket request = new DatagramPacket(m, m.length(), aHost, serverPort);
aSocket.send(request);
byte[] buffer = new byte[1000];
DatagramPacket reply = new DatagramPacket(buffer, buffer.length);
aSocket.receive(reply);
System.out.println("Reply: " + new String(reply.getData()));
}catch (SocketException e){System.out.println("Socket: " + e.getMessage());
}catch (IOException e){System.out.println("IO: " + e.getMessage());}
}finally {if(aSocket != null) aSocket.close();}
}
}

Servidor UDP
import java.net.*;
import java.io.*;
public class UDPServer{
public static void main(String args[]){
DatagramSocket aSocket = null;
try{
aSocket = new DatagramSocket(6789);
byte[] buffer = new byte[1000];
while(true){
DatagramPacket request = new DatagramPacket(buffer, buffer.length);
aSocket.receive(request);
DatagramPacket reply = new DatagramPacket(request.getData(),
request.getLength(), request.getAddress(), request.getPort());
aSocket.send(reply);
}
}catch (SocketException e){System.out.println("Socket: " + e.getMessage());
}catch (IOException e) {System.out.println("IO: " + e.getMessage());}
}finally {if(aSocket != null) aSocket.close();}
}
}

Referncias

George Coulouris, Jean Dollimore, Tim Kindberg,


Sistemas Distribudos - Conceitos e Projeto. Addison
Wesley

Captulo 4

Sistemas Distribudos
Departamento de Computao
Universidade Federal de Sergipe

Comunicao por Datagrama UDP

Prof. Kalil Araujo Bispo


kalil@dcomp.ufs.br

You might also like