Вы находитесь на странице: 1из 6

UNIVERSIDAD TÉCNICA DE BABAHOYO.

Facultad De Administración, Finanzas E Informática

CURSO
Noveno Semestre Matutino

CARRERA
Ingeniería En Sistemas

MATERIA
Programación en Redes II

ENSAYO

DATAGRAMAS

ALUMNO

EDISON FERNANDO GARCIA GARCIA


DATAGRAMAS

INTRODUCCIÓN

Las redes actuales utilizan el packet switching para la transferencia de datos. Los datos se

envuelven en paquetes que se transfieren desde un origen a un destino, donde se extraen

de uno en uno los datos de uno o más paquetes para reconstruir el mensaje original.

Los nodos que se comunican a través de Internet utilizan principalmente dos protocolos:

 TCP - Transsmision Control Protocol

 UDP - (Universal User) Datagram Protocol

El protocolo UDP - (User Universal) Datagram Protocol - se utiliza para

comunicaciones en la que no se garantiza una transmisión fiable (reliable). UDP no está

orientado a conexión, por lo tanto no garantiza la entrega. UDP envía paquetes de datos

independientes, denominados datagramas, desde una aplicación a otra.

El envío de datagramas es similar a enviar una carta a través del servicio postal: El orden

de salida no es importante y no está garantizado, y cada mensaje es independiente de

cualquier otro.

En las comunicaciones basadas en datagramas como las UDP, el paquete de datagramas

contiene el número de puerto de su destino y UDP encamina el paquete a la aplicación

apropiada, como ilustra la figura

El API Java para UDP proporciona una abstración del ``paso de mensajes", esto es, la

forma más simple de comunicación entre ordenadores. Esto hace posible a un proceso
emisor transmitir un único mensaje a un proceso receptor. Los paquetes independientes

que contienen esos mensajes se denominan datagramas. En Java, el emisor especifica el

destino usando un socket (una referencia indirecta a un puerto particular usada por el

proceso receptor en la máquina receptora).

Un datagrama enviado mediante UDP es trasmitido desde un proceso emisor a un proceso

receptor sin reconocimiento o recomprobaciones. Si tiene lugar un fallo, el mensaje puede

no llegar. Un datagrama es transmitido entre procesos cuando un proceso lo envía y otro

proceso lo recibe. Cualquier proceso que necesite enviar o recibir mensajes debe en

primer lugar crear un socket a un dirección de Internet y a un puerto local. Un servidor

enlazará ese socket a un puerto servidor - uno que se hace conocido a los clientes de

manera que puedan enviar mensajes al mismo. Un cliente enlaza su socket a cualquier

puerto local libre. El método receptor devuelve la dirección de Internet y el puerto del

emisor, además del mensaje, permitiendo a los receptores enviar una respuesta. (León,

2017)

DESARROLLO

¿Qué es?

Un datagrama es un paquete de datos que constituye el mínimo bloque de información en

una red de conmutación por datagramas, la cual es uno de los dos tipos de protocolo de

comunicación por conmutación de paquetes usados para encaminar por rutas diversas

dichas unidades de información entre nodos de una red, por lo que se dice que no está

orientado a conexión. La alternativa a esta conmutación de paquetes es el circuito virtual,

orientado a conexión. (Wikipedia, 2018)

¿Para qué se usa?


En la técnica de datagramas, cada paquete se trata de forma independiente gracias a que

puede contener en la cabecera la dirección de origen y destinatario. Mediante un

encaminador, también conocido como enrutador o, más popularmente, router, la red

puede encaminar cada fragmento hacia el receptor o ETD (Equipo Terminal de Datos)

por rutas diferentes.

Este funcionamiento es la diferencia esencial con la conmutación por circuito virtual y

determina sus virtudes y defectos, que también condicionan su idoneidad al tipo de

aplicación de la red. (Wikipedia, 2018)

Ejemplos de código en JAVA

Una aplicación cliente/servidor en el que el servidor reenvía el mismo mensaje que le

envían los diferentes clientes.

 Código del Cliente

Código del cliente ClienteUDP.java:


import java.net.*;
import java.io.*;

public class ClienteUDP {

// Los argumentos proporcionan el mensaje y el nombre del


servidor
public static void main(String args[]) {

try {
DatagramSocket socketUDP = new DatagramSocket();
byte[] mensaje = args[0].getBytes();
InetAddress hostServidor = InetAddress.getByName(args[1]);
int puertoServidor = 6789;

// Construimos un datagrama para enviar el mensaje al


servidor
DatagramPacket peticion =
new DatagramPacket(mensaje, args[0].length(),
hostServidor,
puertoServidor);

// Enviamos el datagrama
socketUDP.send(peticion);
// Construimos el DatagramPacket que contendrá la
respuesta
byte[] bufer = new byte[1000];
DatagramPacket respuesta =
new DatagramPacket(bufer, bufer.length);
socketUDP.receive(respuesta);

// Enviamos la respuesta del servidor a la salida estandar


System.out.println("Respuesta: " + new
String(respuesta.getData()));

// Cerramos el socket
socketUDP.close();

} catch (SocketException e) {
System.out.println("Socket: " + e.getMessage());
} catch (IOException e) {
System.out.println("IO: " + e.getMessage());
}
}
}

 Código del Servidor

Código del servidor ServidorUDP.java:


import java.net.*;
import java.io.*;

public class ServidorUDP {

public static void main (String args[]) {

try {

DatagramSocket socketUDP = new DatagramSocket(6789);


byte[] bufer = new byte[1000];

while (true) {
// Construimos el DatagramPacket para recibir peticiones
DatagramPacket peticion =
new DatagramPacket(bufer, bufer.length);

// Leemos una petición del DatagramSocket


socketUDP.receive(peticion);

System.out.print("Datagrama recibido del host: " +


peticion.getAddress());
System.out.println(" desde el puerto remoto: " +
peticion.getPort());

// Construimos el DatagramPacket para enviar la


respuesta
DatagramPacket respuesta =
new DatagramPacket(peticion.getData(),
peticion.getLength(),
peticion.getAddress(),
peticion.getPort());
// Enviamos la respuesta, que es un eco
socketUDP.send(respuesta);
}

} catch (SocketException e) {
System.out.println("Socket: " + e.getMessage());
} catch (IOException e) {
System.out.println("IO: " + e.getMessage());
}
}

Conclusión

Para la mayoría de los programas de la red, el utilizar un flujo TCP/IP en vez de un


datagrama UDP es más sencillo y hay menos posibilidades de tener problemas. Sin
embargo, cuando se requiere un rendimiento óptimo, y está justificado el tiempo adicional
que supone el realizar la verificación de los datos, los datagramas pueden resultar útiles.

El paso de datagramas entre máquinas se parece a un lanzamiento rápido. Cuando se ha


lanzado el datagrama a su destino, no hay ninguna seguridad de que llegue o incluso de
que haya alguien allí para agarrarlo. Igualmente, cuando se recibe el datagrama, no es
seguro de que no se haya dañado por el camino o el que lo haya enviado esté todavía ahí
para recibir su respuesta.

Java implementa los datagramas por encima del protocolo UDP de TCP/IP utilizando dos
clases. El objeto DatagramPacket (paquete de datagrama) contiene los datos y el
DatagramSocket (conector de datagrama) es el mecanismo que utiliza Java para enviar
o recibir los DatagramPackets.

(Elorduy, 2018)

Bibliografía
Elorduy, G. (2018). Datagramas . Obtenido de
https://javaparajavatos.wordpress.com/2017/09/02/datagramas/

León, C. R. (3 de Febrero de 2017). 7. Las clases Java DatagramPacket y DatagramSocket.


Obtenido de
http://nereida.deioc.ull.es/~cleon/doctorado/doc06/doc06/html/node8.html

Wikipedia. (22 de Agosto de 2018). Datagrama . Obtenido de


https://es.wikipedia.org/wiki/Datagrama

Вам также может понравиться