Protocolos de comunicación y puertos.

Un protocolo de comunicación es un sistema de mensajes digitales y unas normas para el intercambio de los mensajes entre las computadoras a través de las telecomunicaciones.

En las comunicaciones en red hay cientos de protocolos de comunicación entre las computadoras. Uno de los más utilizados es el protocolo http que establece las normas de comunicación entre los servidores y los navegadores web o el protocolo SMTP que indica cómo realizar el envío de un correo electrónico.

Las redes están divididas en niveles.

En el gráfico se representa el modelo de capas como funciona a nivel de Internet, especificando en cada nivel del modelo, que protocolos de comunicación actúan en Internet.

  • El nivel físico se encarga de administrar el hardware de red.
  • El nivel enlace de datos de la topología de la red, detección de errores y direccionamiento físico.
  • El nivel de red identifica que ruta existen en las redes.
  • El nivel de transporte realiza el transporte de datos de una computadora.
  • El nivel de sesión es el encargado de administrar el enlace que hay entre dos máquinas.
  • El nivel de presentación realiza la representación de información de tal forma que, si dos computadoras tienen diferentes representaciones internas de la información, los datos de la comunicación se les presenta de manera que puedan conocerlos.

IP es un protocolo de comunicación perteneciente al nivel de red que es el encargado de llevar la información entre una maquina origen a una maquina destino. Los datos de las aplicaciones son encapsulados en lo que se conoce como paquetes o data-gramas.

Cualquier máquina que quiera establecer una conexión a través de Internet o en una red local debe de tener una dirección IP, que no es más que un identificador inequívoco de la maquina en la red. Este número está formado por doce numero decimales divididos en grupos de tres. Cada grupo de elementos puede tomar valores entre 0 a 255.

La direcciones IP están compuestas por lo tanto de 32 bits, agrupado en 8 en 8.

Teóricamente al tener 32 bits existen 4.294.967.296 direcciones posible. Aunque parezca una cifra escandalosa el número de direcciones se ha agotado en la actualidad. esto es debido a que no se pensó el gran auge que ha tenido Internet y que se ha desperdiciado asignaciones debido a que dentro de una subred la primera dirección y la última no puedo ser asignadas y que no todas las direcciones son necesarias en una subred, luego son desperdiciadas a nivel global.

Una dirección IP  los números están divididos en 2 partes:

  • Identificadores de red:  son los números más a la izquierda de una dirección IP y a través de ellos se intensifica la red que se desea conectar. el número de valores que identifica una red depende del tipo de red a la que se quiera conectar.
  • Identificador de host: son los números más a la derecha que identifican a un host dentro de la red a la que se deja conectar.

Cuando se está programando en Java, una preocupación que se ha tener en cuenta es sobre que protocolo de la capa de transporte se quiere realizar la aplicación.

Hay dos tipo de posibilidades:

  • TCP: Cuando dos aplicaciones quieran comunicarse de manera fiable. Se proporciona un canal punto a puntuara el tipo de aplicaciones que lo necesiten. HTTP, FTP y telnet son ejemplos de aplicación que requieren un canal de comunicación de este tipo, puesto que el orden en el que se enviase y reciben los datos intercambiados es fundamental para el éxito de las aplicaciones.
  • UDP: Proporciona una comunicación   que note está garantizada entre dos aplicaciones de red. Los paquetes IP son enviados sin importar si la máquina de destino los recibe.

Un ejemplo de aplicaron donde tienen sentido el protocolo UDP puede ser una en la que un servidor esta enviado la hora actual de un cliente cuando este lo requiera. Si el cliente pierde el paquete, no tienen mucho sentido volver a enviarlo puesto que el tiempo no será correcto. La fiabilidad proporcionada por el protocolo TCP es innecesaria esto esté aso debido a que se produce una pérdida de rendimiento y puede obstaculizar el correcto funcionamiento del servicio.

Los datos transmitidos a través de la red van acompañados por la dirección IP del equipo de destino y por el puerto de la aplicación de destino, os puertos están identificados por un numero de 16 bits, en TCP o UDP utilizan para entregar los datos a la aplicación correcta.

En las comunicaciones TCP, la aplicación que actualmente como servidor proporciona un socket con numero especifico de puerto. esto tienen como efecto que el servidor recibe todos los datos a través de este puerto.

La comunicación UDP, el paquete continente el número de puerto y la ruta UDP para la aplicaron especifica:

Los puertos pueden tomar los valores dentro del rango 0-65535. Lo numero de los puertos desde el 0 hasta el 1023 están reservados para los protocolos como HTTP, FTP y otros servicios del sistema.

Comunicación entre aplicaciones.

Java nos permite la reutilización de los Objetos en memoria. Sin embargo, los objetos existen en memoria mientras la JVM esté en funcionamiento. Sería bueno si los objetos que se crean pudieran existir más allá de que exista una JVM en ejecución.

En este contexto surge la serializacion.

La serializacion es el proceso por el cual un Objeto es codificado en un medio con el propósito de transmitirlo por una conexión de red como una serie de bytes.

Si queremos que un objeto sea serializable, debemos implementar la interface sarializable, es decir, añadir “implements Serializable” en la definición de la clase.

Las clases ObjectInputStream y ObjectOutputStream permiten serializar y deserializar un objeto. L a clase ObjectOutputStream contiene muchos métodos para escribir datos, pero el más destacado es:

Public final void writeObject(Object x) trhow IOException.

 

Como se puede observar, todos los objetos que contiene la clase son serializable.

 

En el siguiente ejemplo, se crea un ObjectoOutputStream, que en este caso es un fichero llamado “employees.ser”. El objeto ObjectOutputStream se escribe el empleado creado y se cierra el flujo del archivo.

 

La clase abre el archivo por medio de la clase FileInputStream el cual se le pasa como parámetro a la clase ObjectInputStream que es el encargado de serializar el objeto.

Por medio del método readObject y un casting, la información del stream es convertida a un objeto dentro de la clase.

  • La clase abre el archivo por medio de la clase FileInputStream el cual se le pasa como parámetro a la clase ObjectInputStream que es el encargado de serializar el objeto.

    Por medio del método readObject y un casting, la información del stream es convertida a un objeto dentro de la clase.

    Roles Cliente y Servidor.

    El modelo cliente-servidor es un modelo computacional que actúa como una aplicación distribuida particionando las tareas y la carga de trabajo de los proveedores de recursos, llamados servidores, y los solicitantes de servicios llamados clientes

    Se puede decir que las funciones del servidor son:

    • Aceptar las peticiones de los clientes.
    • Procesar las peticiones de los clientes.
    • Realizar validación de las peticiones.
    • Formateo de los datos.