Title: Server-Client communication without connection
1Server-Client communication without connection
- When the communication consists of sending and/or
receiving datagram packets instead of a data
stream it is called a connectionless
communication - This means there is no virtual link created
between both end of a communication. - This is very near to how the packages are
actually delivered over the over the internet. - This is why the arriving, order or uniqueness of
packages cannot be guaranteed.
2Datagram management with JAVA
- Communication is based on assembling UDP packages
and sending them to the interent. An UDP package
consists of - Data a bytes array
- Destination Port int
- Destination Address InetAddress
- A server start by listening at a certain port for
packages. - The client assembles a packages and send it to
the net. - The server receives the package (routed by the
net to its final destination) and extracts the
data. - If the server needs to answer, it extracts the
sender address and port (the client must be
listening for packages)
3Classes for Datagrams in Java Send
- Create a socket for sending a Datagram to the
internet - DatagramSocket ds new DatagramSocket()
- Create and assemble the Datagram
- byte data new byte256
- InetAddress address InetAddress.getByName(www.c
tc.cl) - DatagramPacket pack new DatagramPacket(data,
data.length,address,4444) - Send
- ds.send(pack)
- Wait for an answer
- socket.receive(pack) //make sure it is clean
before, perhaps by using a new one !!!
EchoUDPClient DateUDPClient
4Classes for Datagrams in Java Receive
- Start listening for Datagrams on a certain socket
- socket new DatagramSocket(4444)
- Preparing a Datagram for receiving data
- byte data new byte256
- DatagramPacket pack new DatagramPacket(data,data
.length) - Start listening for a package
- socket .receive(pack)
- Obtaining the data and address and port of sender
- int port pack.getPort()
- InetAddress address pack getAddress()
- String content new String(pack.getData())
- Or just by using the data variable which points
to the byte-array
DateUDPServer EchoUDPServer
5An UDP Ping Client
- We will use the echo server by default
- In a unix machine there is normally an echo
server listening at port 7 for UDP and for TCP
requests - It is not the same server, but it is possible to
open 2 sever sockets for the same port but for
different protocols - The Ping client will send a package to the server
with time of issue, which will be returned by the
server - By comparing time in the Datagram and current
time we can have the round-trip delay - The program will also calculate max/min and avg
Ping.java
6Multicasting
- Qué pasa cuando se quiere hacer un broadcasting
de datos demasiado pesados ? - Por cada cliente, el servidor queda mucho rato
pegado escribiendo datos. - Imáginémonos ahora la situación en una
videoconferencia se trata de transmitir varios
frames de video por segundo a una cantidad grande
de oyentes gt no es posible en la práctica! - En el Multicasting se trata de transmitir una
sola vez la información a un punto en la
internet, y desde ahà la leen los clientes. - Esto implica que el hardware (el de la red, se
entiende) debe ser multicastingable
7El Paradigma del Multicast
PROG2
PROG1
PROG2
PROG2
8Multicast Broadcast
- Multicast Broadcast son protocolos que permiten
a una aplicación poner un paquete único en la red
el cual será recibido por varias aplicaciones - Broadcast trabaja sólo dentro de la red local. Un
paquete mandado por broadcast lo recibirán todos.
- Requiere soporte de hardware de la red local.
- Un paquete de multicast sólo lo recibirán los
programas que se registraron para ello
previamente - Multicast requiere apoyo en el host y los routers
9Multicast
- Multicast en Java es similar a UDP excepto que el
envÃo-recibo de paquetes debe ser implementado
para una dirección IP en el rango (224.0.0.0 -
239.255.255) - Para poder recibir paquetes de multicast el
cliente debe haber previamente haber expresado su
interes en unirse a un grupo multicast
identificado por una direccion IP multicast y un
port. - La red (es decir los ruteadores) se encargarán de
transmitir los paquetes a todas las aplicaciones
interesadas en la internet (teóricamente!) - Cualquier aplicación puede mandar paquetes al
grupo !
10Qué pasa cuando se lanza un paquete
- El paquete será tomado por todas las máquinas de
la red local interesadas. - Además, los ruteadores tomarán el paquete y lo
mandarán a las redes vecinas si hay una
aplicación interesada - El determinar si hay una aplicación interesada en
las redes adyacentes añade una complejidad
significativa al algoritmo de ruteo - El problema es cómo va a saber el ruteador si una
vecina a la vecina está interesada - Esto requiere el almacenaje de mayor información
en las tablas de ruteo
11Apoyo de Java para Multicast
- MulticastSocket extensión de DatagramSocket
- MulticastSocket( ) se amarra a cualquier port
libre - MulticastSocket(int port) usa port especÃfico
- Muchos socekts multicast pueden ser amarrados al
mismoport! (no como en TCP o UDP) - Métodos heredados (send, receive) 3 nuevos
- joinGroup(InetAddress group)
- leaveGroup(InetAddress group)
- setTimeToLive(int ttl)
12Ejemplo de Multicast en Java
import java.io. import java.net. public class
MulticastClient public static void
main(String args) throws IOException
MulticastSocket socket new MulticastSocket(4446)
InetAddress address
InetAddress.getByName("224.2.2
.3") socket.joinGroup(address) byte buf
new byte256 DatagramPacket packet while(tru
e) packet new DatagramPacket(buf,
buf.length) socket.receive(packet)
String received new String(packet.getData())
System.out.println("Received " received)
try Thread.currentThread().sleep(0)
catch (InterruptedException e)
import java.io. import java.net. import
java.util. public class MulticastServer
static public void main(String args)
DatagramSocket socket null BufferedReader
in null boolean moreQuotes true
try socket new DatagramSocket()
while (true) InetAddress grupo
InetAddress.getByName("224.2.2.3")
for (int i1 ilt 1000 i)
String dString i"--"(InetAddress.getLocalHost(
)) byte buf
dString.getBytes() DatagramPacket packet
new DatagramPacket(buf,
buf.length, grupo, 4446)
socket.send(packet) try
Thread.currentThread().sleep(200) catch
(InterruptedException e)
catch (IOException e)
13Sending video by Multicast
MulticastMovieServer
MulticastMovieClient
14Un Chat basado en Multicast
- No hay servidor.
- Cada participante corre el mismo programa
uniéndose al grupo multicast - Los mensajes salen como datagramas multicast a
la red, por lo cual cualquier aplicación
interesada lo recibirá - No hay garantÃa de si llegará, en cuanto rato, en
qué órden ni si se duplicarán !
MulticastChat
15Comunicación de Grupo con Multicast
- Provee
- Tolerancia a fallas basada en la replicidad de
servicios un servicio replicado consiste en un
grupo de servidores. El cliente manda el request
a todos los servidores que realizan la misma
operación. - Encuentro de servicios de descubrimiento de
servidores clientes y servidores usan mensajes
de multicast para localizar servicios presentes
en la red para poder registrar sus interfaces y y
hacer lookup de interfaces de otros servicios - Mejor performance por datos replicados a veces
se replican los datos en los computadores cliente
(cache) cuando estos varÃan el servidor manda
mensajes por multicast - Propagación de eventos de notificación para
notificar a procesos interesados en ciertos
eventos que estos tuvieron lugar (jini)
16Modelo de Multicast para grupos
Multicast tiene cualidades que lo hacen más
eficiente para transmitir un mensaje a varios
miembros de un grupo Modelo message(g,m)
operación de transmisión de un
mensaje m a los miembros de un grupo
g deliver(m) operación de proceso
de mensaje m sender(m)
identificación del que manda el mensaje
group(m) grupo de destino del mensaje
open/closed group el grupo puede/no puede
recibir mensajes
mandados por un por un
miembro que no pertenece al grupo
17Spontaneous Networking
- Multicasting is the right way to program systems
when the participants in the session may come and
go very frequently - This is the case of spontaneous networking with
mobile devices in a room - Someone announce her presence to the other
members by sending message to all at regular
intervals - The fact that someone has left is recorded by the
others when there have been no messages from her
since a certain period of time
18An Awareness Example
- The MulticastRegister program will show all
people participating in the multicast group - It implements a thread that will send every
second a packet with the client's identification - It starts 3 other threads
- ReceiveThread will listen to packets sent by
other members of the group. When it receives one,
it will register it in a vector containing a pair
(participant-id, time) with the time the last
packet received from a participant was received - ChckThread check the vector every 2 seconds the
vector and deletes the entries from the
participants whose last package was received more
than 10 seconds ago - RefreshThread it simply refreshes the list
showing the active participants according to the
vectors content
19Reliable Multicast
Reliable multicast implica que se cumplen 3
propiedades Integridad el mensaje que se
manda es igual al que se procesa y que ningún
mensaje es procesado dos veces. Un proceso p hace
la operación deliver(m) una sola vez y p ?
group(m) Validez si un proceso manda un
mensaje multicast, tarde o temprano él también lo
procesará si pertenece al grupo Agreement
si un proceso procesa un mensaje m el resto de
los miembros del grupo también lo hará
20Reliable Multicast con IP !
- Cada proceso p mantiene un número de secuencia
S(p,g) para cada grupo g al que pertenece. - También mantiene un registro R(q,g) que es el
número de secuencia del último mensaje procesado
del proceso q que mandó al grupo g. - Cuando p quiere mandar un mensaje a g incluye el
número S(p,g) y pares ltq,R(q,g)gt, luego
incrementa S(p,g). - Un proceso del grupo procesa el mensaje mandado
por p sólo si el S R(p,g) 1 - Si S lt R(p,g) es un mensaje repetido y lo
descarta - Si S gt R(p,g) 1 significa que perdió un
mensaje y manda un ack negativo para que lo mande
de nuevo. - Integridad se alcanza por la detección de
duplicados y los checkeos de IP en los
datagramas. Validez por propiedad de IP.
Agreement implica que los procesos siempre
guardan copias de mensajes enviados para
enviarlos de nuevo - para que esto funcione los proceso no deben
fallar !!!! -
21Ordenando los mensajes de Multicast
- Se usa un cola de mensajes multicast para
guardarlos antes de procesarlos. Se trata de
asignar un número de secuencia para cada mensaje
en el cual todos estén de acuerdo. Cada proceso q
en un grupo g mantiene un número A(q,g), el más
grande de la secuencia acordada que se ha
observado para un grupo g y P(q,g) el mayor de la
secuencia propia. Cuando p quiere mandar un
mensaje - Manda en forma segura ltm,igt siendo m el mensaje
e i un identificador único para m - cada proceso q responde a p con una proposición
para acordar un número de secuencia para ese
mensaje P(q,g) Max(A(q,g), P(q,g))1. Cada
proceso guarda en su cola el mensaje con el
número de secuencia que propuso provisionalmente
ordenado de menor a mayor número de secuencia - p recolecta todos los números de secuencia
propuestos y selecciona el mayor a como el que se
usará definitivamente y lo transmite en un
mensaje broadcast seguro lti,agt - cada proceso entonces ordena la cola de mensajes
antes de procesarlos según los números de
secuencia acordados -
22Time to Live
- Los paquetes multicast incluyen (como todos los
paquetes de internet) un campo TTL que en este
caso adquiere la importancia de evitar que se
propague demasiado por la internet - Por esto también es posible en java definir el
TTL que saldrán de un socket dado.
23MBone
- Multicast no está muy difundida en la internet.
Esto es por un lado porque se genera muho tráfico
y, por el otro, la ausencia de ruteadores con el
protocolo IGMP - Hay una subred llamada MBone que comunica islas
de redes multicas permitiéndo que los paquetes
multicast viajen entre ellas a través de túneles.
- Un tunel omunica los routers de dos redes que no
están fÃsicamente adjacentes. - Los paquetes serán pasados de una red a otra como
si estuvieran conectados fÃsicamentes
24Broadcast
- Broadcast es similar a Multicast pero en una red
local - Cada red basada en broadcast (como ethernet)
tiene una dirección de broadcast IP. Cualquier
mensaje mandado a esta dirección será recibido
por todos los coputadores de esa red. - Usualmente esta es la última dirección IP de la
subred - Clase C 192.1.2.0 -gt 192.1.2.255
- Para una subred de 16 hosts 197.84.66.192 -gt
197.84.66.207 - Se debe en todo caso especificar el número de
port
UDPBroadcastClient/Server
25 Broadcast o Multicast ?
- Si se puede elegir es mejor usar multicast porque
moleta sólo a las máquinas interesadas. - A veces es necesario tener privilegios sobre la
red para usar la direccion multicast. - Multicast permite definir varios grupos dentro de
la misma red - El tráfico generado es el mismo se pone un
paquete en la red pero todos lo leerán - Broadcast no tiene absolutamente ningúna
diferencia con UDP en Java. Sólo la dirección IP
es especial