Descargar la presentación
La descarga está en progreso. Por favor, espere
1
Programando Clientes TCP
2
La Clase InetAddress Una dirección IP es la dirección absoluta de un computador cualquiera en toda la internet. En la versión actual consiste en un valor guardado en 4bytes. Datos pueden ser mandados de un computador a otro en la internet sólo si se tiene este número del destinatario. No tiene constructores, se crea un nuevo objeto InetAddress haciendo InetAddress n = InetAddress.getLocalHost() InetAddress n = InetAddress.getByName(nombre) Y tiene los siguientes métodos: String nombre = n.getHostName() String direccion = n.getHostAddress() Ver programa ejemplo InetExample.java y Names.java NOTAS
3
El Socket Un socket es un extremo de un link de comunicación entre dos programas que corren en una red. El socket está asociado (amarrado, bound) a un número de port de modo que la capa TCP pueda identificar exactamente la aplicación a la cual están destinados los datos que llegan a un computador. Normalmente un servidor que corre en un computador específico tiene un socket que está asociado a un número de port específico. El servidor espera, “oyendo” por el socket a que un cliente quiera establecer alguna comunicación. Para que un cliente pueda comunicarse con el servidor debe saber a qué port está asociado el socket por el cual el servidor está aceptando llamadas. Para hacer una petición de conexión el cliente debe tratar de hacer un rendezvous con por el port donde está escuchando el servidor.
4
El Socket (2) Si todo sale bien, el servidor acepta la conexión. Con la aceptación el servidor recibe un nuevo socket asociado a un port nuevo (cuyo número no necesariamente conoce). El port original (por donde escuchaba) queda libre para seguir escuchando otras peticiones. Se crea un link de comunicaciones bi-direccional entre el servidor y el cliente. En el servidor, el extremo está asociado al nuevo port. En el cliente, si la conexión fue aceptada por un servidor, se crea un socket asociado a un port (cuyo nombre no es necesariamente conocido). El cliente y el servidor se comunican escribiendo datos en o leyendo datos desde el socket.
5
Sockets en el Cliente en Java (1)
Cuando un programa cliente (llamador) en java desea conectarse con un servidor (en cualquier lenguaje!) debe saber primero dónde esta corriendo (host) y en que port está escuchando. El host lo puede dar como dirección (Ej: “ ”) o como nombre (ej: achawall.dcc.uchile.cl). Sabiendo esto puede intentar un “rendezvous” con el servidor. Esto se hace intentando crear una conexión TCP y recogiendo el extremo del circuito virtual en un socket Socket llamando; llamando = new Socket(host,5555); Este queda esperando hasta que se realiza la conexión en el servidor y se crea el socket, que es el extremo local de la conexión. El otro extremo (servidor) NO está asociado al port Ese se usó solamente para oir.
6
Sockets en el Cliente en Java (2)
Esto puede ocacionar un error si el host no existe, no está alcanzable por la red o no hay ningún servidor oyendo por ese socket. Para eso hay naturalmente un timeout. Conviene por esto siempre ejecutarlo en un bloque try con el catch capturando la excepción “UnknownHostException”.
7
Sockets en el Cliente en Java (3)
Si todo sale bien con la conexión, podemos abrir un canal de lectura y/u otro de escritura para poder recibir y/o enviar datos. PrintWriter out = new PrintWriter(llamando.getOutputStream(), true); BufferedReader In = new BufferedReader( new InputStreamReader(llamando.getInputStream())); getInputStream y getOutputStream abren flujos de datos orientados a la lectura y escritura de bytes por la línea. Printwriter y BufferedReader son “filtros” que permiten leer y escribir strings. out.print(“hola”); out.println(“como estas”); String linea = in.readLine(); El servidor debe enviar una marca de fin de línea (ascii) !!!! Veamos un cliente que se conecta al servidor echo de una máquina Unix. Modifíquelo para que se conecte a otros.
8
Un cliente para el servidor de date
El servidor de date espera que alguien se conecte con un rendezvous al port 13 (1) y luego responde enviando la fecha de sus sistema (2). Luego corta la comunicación (unilateralmente) (3). 2 3 Client Date server 1 13 DateClient
9
Un cliente para el servidor echo
El servidor de echo espera que alguien haga un rendezvous en el port 7 (1). Luego lee líneas de texto desde el cliente y responde enviando lo mismo que recibió. Esto lo sigue haciendo hasta que el cliente se desconecta. 2 3 Client Echo server 1 7 EchoClient
10
Programas Cliente en Java
¿Cómo habría que modificarlo para que se conecte con el servidor www (80) y muestre el archivo pedido? ¿Cómo habría que modificarlo para que se conecte con el servidor finger (79) y muestre la consulta pedida? ¿Cómo habría que modificarlo para que se conecte con el servidor ftp ( ???) y realice el diálogo? ¿Cómo se vería un cliente genérico que sirva de marco para todo esto?
11
Un cliente genérico para java
import java.io.*; import java.net.*; public class Cliente { public static void main(String[] args) throws IOException { Socket echoSocket = null; PrintWriter out = null; BufferedReader in = null; if (args.length != 2) System.out.println(“Use: java GClient <host> <port> ”); int nport = Integer.parseInt(args[1]); try { echoSocket = new Socket(args[0], nport); out = new PrintWriter(echoSocket.getOutputStream(), true); in = new BufferedReader(new InputStreamReader(echoSocket.getInputStream())); } catch (UnknownHostException e) { System.err.println("Don't know about host: "+ args[0]); System.exit(1); } catch (IOException e) { System.err.println("Couldn't get I/O for the connection to: "+args[0]); } <<Process protocol according to port number>>
12
Constructores para sockets
Socket(String host, int port) el port debe estar en el rango 1-65,535 Socket(Inet Address host, int port)lo mismo pero con un objeto InetAddress como parámetro Socket(String host, int port, String localHost, int localport) Cada comunicación TCP consiste de un host y un port local y un host y un port remoto. Este constructor permite definir todos ellos. Especificar un host local sólo tiene sentido cuando el computador es multihomed (más de una dirección). Null = default address. Algunas veces es necesario definir el port local de un cliente por los firewalls. 0 = el sistema asigna uno dentro de los disponibles. Los números 0 a 1024 no deben usarse ya que los usan servicios “bien conocidos” como echo, telnet finger, ftp.
13
Más métodos socket en Java
InetAddress getInetAddress() retorna la dirección IP del host remoto al cual el socket está conectado int getPort() retorna el número de port al que se conectó el socket en el otro computador InetAddress getLocalAddress() retorna la dirección IP del computador local int getLocalPort() retorna el número de port local, este normalmente no va explicitado en el programa cliente . void setSoTimeout(int timeout)pone un timeout para la operación de lectura (read) efectuada en este socket. 0 = no timeout, lo cual puede bloquear la operación en forma indefinida (default). Si la operación de lectura no es completada en ese tiempo se lanza una InterruptedIOException int getSoTimeout() retorna el timeout del socket
14
Más métodos socket en Java
void setTcpNoDelay(boolean on) Habilita/deshabilita el uso del algoritmo de Nagel’s que hace más eficiente la operación de escritura retardando el envío de peqyueñas cantidades de información hasta que hay suficiente. CUIDADO, esto puede introducir demoras inaceptables para ciertas aplicaciones. boolean getTcpNoDelay() retorna verdadero o falso dependiendo si el algoritmo de Nagel está funcionando o no void setSoLinger(boolean on, int val) permite definir el time-out del “linger” del socket. Linger es el tiempo que la comunicación del socket permanece “abierta” una vez que el programa la ha cerrado recibiendo paquetes de confirmación que aún no habían llegado y evitar que otra aplicación use el port durante ese tiempo. int getSoLinger () returns the current linger setting or –1 if not set. void setSendBufferSize(int size) int getSendBufferSize() void setReceiveBufferSize(int size) int getReceiveBufferSize() Sockets.java
15
Exceptions originadas por Socket
La mayoría de los constructores de sockets lanzan una exception, la cual debe ser atrapada en un bloque try-catch. La mayoría de las exceptions son subclases de la clase IOException BindException: el port local que se pidió usar no pudo ser usado. Tipicamente esto sucede cuando el port ya está en uso. ConnectException: la conexín fue rechazada porque no había ningún programa servidor escuchando en el host remoto. NoRouteToHostException: el host remoto no pudo ser alcanzado ya sea por que la comunicación falla o porque está detrás de una firewall UnknownHostException: la dirección dada no es válida (falla en el DNS Lookup)
16
Programando Servidores
17
Programando servidores
Qué pasa en el servidor cuando el cliente trata de hacer un rendezvous ? El server empieza a oir requests de clientes en un ServerSocket Después de que el rendezvous se hizo )
18
Sockets en el Servidor (1)
El servidor debe empezar por crear un socket servidor y asociarlo a un port desde donde escucuchará peticiones de posibles clientes que quieran conectarse. ServerSocket escuchando; escuchando = new ServerSocket(5555); Con esto sólo ha creado el socket pero no está escuchando. Para poder empezar a escuchar debe hacer: Socket = escuchando.accept(); Esta instrucción hace varias cosas: accept bloquea la ejecución del programa hasta que recibe una petición de un cliente por ese port (recordemos: llamando = new ....) cuando llega un requerimiento de conexión, se crea un circuito virtual entre ambos computadores. El cliente recibe un extremo de esa conexión y el servidor la otra. Este otro extremo se asocia a otro socket que el sistema escoge convenientemente.
19
Sockets en el Servidor (2)
El servidor puede ejecutar los mismos métodos sobre su socket para abrir un flujo de entrada y salida de datos. Aquí es importante el protocolo de la comunicación que a estas alturas no es más que el lenguaje de comunicación entre servidor y cliente: cuándo leer/escribir, qué datos mandar, cómo reaccionar, etc... Notar que tanto el servidor como el cliente están con un socket de la misma clase después de haber establecido la comunicación), por lo tanto el servidor también puede ejecutar métodos tales como: InetAddress getInetAddress() int getPort() InetAddress getLocalAddress() int getLocalPort() void setSoTimeout(int timeout), int getSoTimeoute() void setSoLinger(Boolean on, int val), int getSoLinger() (el delay después de un close()) close()
20
Un Date Server 3) Responder con la fecha 4) Cerrar conexion Client
13 1) Crear server socket 2) escuchar DateServer DateClient2
21
Un Servidor Echo 4) Imprimir lo mismo 3) Leer linea Client Date server
7 1) Crear Server Socket 2) Empezar a escuchar Do 3 & 4 until client disconnects or sends a line with ** EchoServer EchoClient2
22
Programemos algo simple
El TalkServer espera que alguien trate de comunicarse El TalkClient pregunta por un nombre de host y trata de coomunicarse Luego de efectuada la comunicación, todo lo que se escriba en el cliente será transmitido al servidor y mostrado en pantalla Bla bla del teclado Bla bla Talk Server Talk client
23
Esquema de los programas
Open server socket port =4444 While(true) { accept call open reading from socket while (true) { read line from socket if (line.equals(“bye”)) break; write line to screen } //end of the call } s=new Socket(args[0],4444) open writing to socket while (true) { read line from keyboard write to socket if (line.equals(“bye”)) break; } TalkServer TalkClient
24
Transmisión de Archivos Upload de archivo
Hagamos ahora un programa que envía un archivo de un programa a otro. El que recibe el archivo se pone a escuchar para que le manden un archivo (es el servidor !!!) El emisor del archivo sabe donde está escuchando el receptor para recibir la petición de transmisión de archivos. El traspaso se hace a nivel de bytes para poder traspasar cualquier tipo de archivo.
25
Upload de Archivos Ver programas ArchEmisor.java ArchReceptor.java
2) El emisor trata de contactar al recibidor 1) El receptor queda escuchando a ver si alguien quiere mandarle algo Enviar bytes 5) Escribir bytes en archivo 3) Leer bytes desde archivo Repetir 3,4,5 hasta que todo el archivo sea transmitido Ver programas ArchEmisor.java ArchReceptor.java
26
Version 2 Download El servidor de archivos El cliente
Empieza escuchando en un puerto acordado Cuando llega un requerimiento se lee el nombre de archivo a transmitir Se abre el archivo localmente y se empieza a leer y a transmitir por el socket (flujo de bytes) El cliente Intenta un rendezvous con el servidor Pide el nombre del archivo al usuario y lo transmite al servidor. Abre un archivo localmente para escribir Lee bytes del socket y los escribe en el archivo
27
Download de archivos Ver programas ArchServer.java ArchCliente.java
1) Nombre de archivo desde teclado 2) Solicitar archivo 4) Enviar archivo 3) Leer archivo 5) Escribir archivo Repetir 3,4,5 hasta que todo el archivo sea transmitido Ver programas ArchServer.java ArchCliente.java
28
Servidores Concurrentes
29
Qué pasa cuando varios clientes tratan de conectarse al mismo tiempo a un servidor
Una forma es ir atendiéndolos de a uno en un ciclo: como en el programa que atiende pedidos de archivos Se acepta una conexión Se lee la petición Se lee desde el archivo y se escribe en el socket hasta encontrar una marca de fin de archivo A este tipo de servidores se les llama servidores iterativos El problema es que todo cliente tiene que esperar su turno para ser atendido Si uno de ellos pide un archivo muy grande los demás tienen que esperar La mayor parte de la espera es debido a operaciones de IO, hay capacidad de CPU ociosa ! NOTAS
30
Un servidor secuencial (iterativo) atendiendo a más de un cliente
A SERVER A CLIENT 4444
31
Durante la conversación no puede oír por el puerto 4444
A SERVER A CLIENT 4444
32
Sólo después de efectuar la transmisión se pone a escuchar de nuevo por el 4444
A SERVER A CLIENT 4444
33
Si el servicio consiste en transferir un archivo, el cliente debe digitar el nombre
A SERVER A CLIENT 4444
34
¿Qué sucede si el servidor tiene que esperar mucho para que un cliente escriba el nombre de un archivo? A CLIENT A SERVER Timeout A CLIENT 4444 A CLIENT
35
Un Servidor Concurrente
Un servidor concurrente atiende a varios clientes al mismo tiempo. Más aún, mientras está atendiendo sigue escuchando El problema es que todo cliente tiene que esperar su turno para ser atendido. Si uno de ellos pide un archivo muy grande los demás tienen que esperar La mayor parte de la espera es debido a operaciones de IO, hay capacidad de CPU ociosa! Se trata de crear un nuevo proceso o línea de ejecución cada vez que un cliente “llega” a pedir un servicio. NOTAS
36
Servidores Comcurrentes: hay procesos separados para atender el puerto y para transferir el archivo
A SERVER A CLIENT 4444
37
Después que el cliente contacta al servidor, éste crea otro proceso para para atender al cliente y se queda escuchando el puerto 4444 por otro A SERVER A CLIENT 4444
38
Mientras el nuevo proceso está atendiendo al primer cliente, el segundo cliente puede contactar al servidor en el puerto 4444 A SERVER A CLIENT 4444
39
Y el servidor crea otro proceso
A SERVER A CLIENT 4444
40
Ahora un tercer cliente contacta al servidor
A SERVER A CLIENT 4444
41
Y un tercer proceso esclavo o thread es creado
A SERVER A CLIENT 4444
42
Algoritmo de Servidor Concurrente
Programa principal o “master” del servidor 1. Crear un Socket de servidor En un ciclo infinito: 2. Aceptar requerimientos de clientes 3. Cuando llega una petición de un cliente crear un nuevo proceso “esclavo” que atienda paralelamente la petición (esto no debe bloquear la ejecución del programa master del servidor) 4. Volver a 2. Proceso esclavo: 1. Recibir los parámetros de la comunicación (socket o flujos de entrada y/o salida) 2. Atender al cliente (ej: leer el nombre del archivo, transmitir el archivo) 3. Retornar (desaparecer !) NOTAS
43
Cómo (y por qué) crear procesos paralelos
Si existe sólo una CPU, ¿Por qué crear procesos paralelos? Porque algunos programas se escriben más fácilmente así. De hecho, la programación de un servidor es a veces más fácil si se hace de esta manera. Porque sí hay más de un procesador !!!!! (¿dónde?) El concepto de procesos paralelos implentados a nivel de S.O. aparecen con UNIX y C. La forma de crearlos es ejecutando una función llamada fork() int i = fork() provoca que se cree un proceso exactamente igual al que se está ejecutando. La única diferencia es que en el proceso hijo (el nuevo creado) la variable i vale cero. Esto se usa para saber quién soy yo. En programación de servidores concurrentes, si soy el hijo ejecuto la parte que corresponde al proceso esclavo. Si soy el padre (i tiene un valor distinto de cero y es el id del proceso hijo creado) sigo recibiendo peticiones NOTAS
44
Cómo usar threads para hacer servidores concurrentes
Hacer una clase Thread que tenga como variables de un objeto un socket y flujos de entrada y/o salida. Programar el constructor de modo que reciba como parámetro un socket y haga todo lo necesario para dejar inicializado el ambiente para empezar a atender al cleinte (por ejemplo, abrir flujos de datos de entrada y/o salida del socket recibido) Programar el método run de modo que implemente el protocolo necesario. Programar un método main que en un ciclo infinito se ponga a escuchar en un port dado la llegada de clientes. Con cada cliente nuevo crear un thread nuevo y pasar como parámetro el socket. MultiFileServer MultiFileThread
45
Comunicación Servidor-Cliente sin conexión
Hasta ahora hemos visto cómo se logran comunicar 2 programas estableciendo entre ellos un circuito virtual a través de una conexión TCP/IP. Sabemos que en una conexión de este tipo se genera mucho tráfico y que la comunicación es más lenta, ya que el protocolo subyacente de confirmación, retransmisión, descarte y/o reordenación de paquetes se basa en mensajes de datagramas. Habíamos visto que a veces el usuario debería optar por una transmisión sin conexión, especialmente si no es necesario garantizar la llegada de todos los datagramas. Para eso existen en JAVA todos lor recursos de modo de mandar un datagrama aislado a un destinatario dado. NOTAS
46
Manejo de Datagramas en JAVA
La comunicación se basa en armar paquetes UDP y enviarlos a la internet con la siguiente información: Datos: un arreglo de bytes Número de port del destinatario: int Dirección Internet del destinatario: InetAddress El servidor se pone a escuchar en un socket dado si hay paquetes destinados a él. El cliente arma un paquete y lo lanza a la internet. El servidor recibe el paquete y extrae los datos, número de port y dirección internet del enviador. Si necesita responder manda un paquete a la dirección (port y dirección internet) que venía en el paquete recibido NOTAS
47
UDP: comunicación con datagramas
DATAGRAMA: un mensaje independiente, autocontenido, enviado a través de la internet internet, cuya llegada, tiempo de llegada y contenido no están garantizados (como el cooreo regular en algunos países....) Una vez que un servidor está escuchando, el cliente podría crear un datagrama con la dirección del servidor, número de puerto y el mensaje. A SERVER A CLIENT ? 4444 4444 message
48
Enviando datagramas con protocolo UDP
Luego éste podría abrir un socket y enviar el datagrama a la internet. El “algoritmo de enrutamiento” encontrará el camino al computador blanco. A SERVER A CLIENT ? 3333 4444
49
Enviando datagramas con protocolo UDP
Antes que el datagrama abandone al cliente, éste recibe la dirección del computador de origen y el número de socket. A SERVER A CLIENT ! 3333 4444
50
Enviando datagramas con protocolo UDP
Luego de que el datagrama es enviado, el computador del cliente puede empezar a escuchar en el puerto creado para enviar el datagrama si es que se espera una respuesta del servidor. A SERVER ? A CLIENT 3333 4444
51
Enviando datagramas con protocolo UDP
El servidor puede extraer la dirección del cliente y el número del puerto para crear otro datagrama con la respuesta. A SERVER ? A CLIENT 3333 4444 answer
52
Enviando datagramas con protocolo UDP
Finalmente el datagrama es enviado con la respuesta al “cliente”. Cuando un datagrama es enviado no hay garantía de que llegará al su destino. Si se desea comunicación confiable, debera proveerse de un mecanismo de chequeo, o usar... A SERVER ? A CLIENT 3333 4444 TiroPaquetesNoEnd ReciboPaquetesCheck
53
Clases para Datagramas en JAVA: envío
Definición: Un datagrama es un mensaje independiente, autocontenido que se manda de un programa a otro por la red pero que su llegada, tiempo de llegada y contenido no estan garantizados. Crear un socket por donde mandar el datagrama DatagramSocket ds = new DatagramSocket(); Crear y armar el datagrama byte[] datos = new byte[256]; InetAddress direccion = InetAddress.getByName(“ DatagramPacket paquete = new DatagramPacket(datos, datos.length,direccion,4444); Mandarlo ds.send(paquete); Esperar respuesta socket.receive(packet); //limpiarlo antes !!! NOTAS
54
Clases para Datagramas en JAVA: recepción
Para poder recibir tengo que escuchar en un port acordado (ya que de otra manera no hay cómo ponerse de acuerdo) DatagramSocket socket = new DatagramSocket(4444); Preparar un Datagrama para recibir datos byte[] datos = new byte[256]; DatagramPacket paquete = new DatagramPacket(datos,datos.length); Ponerse a escuchar si alguien manda un datagrama a este computador a este port socket .receive(paquete); Sacar los datos, el port y la dirección de donde venía int port = paquete.getPort(); InetAddress dirección = paquete getAddress(); String contenido = new String(paquete.getData()); Mandar una respuesta DatagramPacket respuesta = new DatagramPacket(datos, datos.length, port, direccion); NOTAS
55
Servidor Reloj Remoto Múltiple
Un servidor reloj remoto estará poniendo al día el reloj con los paquetes UDP UDPClockServerThread.java UDPClockMServer.java
56
Multicasting 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” => 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” NOTAS
57
El Paradigma del Multicast
PROG2 PROG1 PROG2 PROG2
58
Multicast & 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 NOTAS
59
Multicast 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 ( ) 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 ! NOTAS
60
Qué 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 NOTAS
61
Apoyo 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)
62
Un 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
63
Time 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. NOTAS
64
MBone 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 NOTAS
65
Broadcast 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: > Para una subred de 16 hosts > Se debe en todo caso especificar el número de port
66
¿ 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 NOTAS
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.