Java para programadores (11.1). Fundamentos de comunicaciones

La programación en red se refiere a un desarrollo que implica distintos procesos corriendo en uno o en varios ordenadores y que leen y escriben información en stream que los interconecta.

Las comunicaciones se manejan con los objetos explicados anteriormente de gestión de Stream. La única diferencia, es la forma de establecer la conexión.

Lo  primero que tenemos que entender son los conceptos de

  • Servidor – Maquina que inicia el proceso y queda esperando que alguien le solicite conexión
  • Cliente – Maquina que inicia la conexión al servidor

Observad que los roles de cliente/servidor son únicamente formales, el que espera (Servidor) y el que solicita conexión (cliente)

Para que dos máquinas puedan intercambiar conexión, han de mantener algún tipo de unión; en este caso va a ser la red, y ambas han de soportar el protocolo elegido.

El paquete java.net proporciona soporte para dos de los protocolos más usuales

TCP – significa Transmission Control Protocol, y permite una comunicación confiable entre dos aplicaciones. TCP se usa generalmente sobre Internet, que se conoce como TCP / IP. Con este protocolo, el cliente establece una conexión con el servidor y transmite tantos datos como el servidor esté dispuesto a aceptar, al finalizar, cierra la conexión. El protocolo garantiza que los datos serán entregados en su destino sin errores y en el mismo orden en que se transmitieron.

UDP – significa User Datagram Protocol, un protocolo sin conexión que permite la transmisión de paquetes de datos entre aplicaciones. En este protocolo no se recibe acuse de entrega de los paquetes, ósea que el proceso que envía los datos no sabe si el otro proceso los ha recibido o no. Como contrapartida, existe una sobrecarga inferior por el protocolo

Puerto – Tanto TCP como UDP usa el concepto de número de puerto para determinar la conexión entre emisor y receptor, en un equipo pueden existir 65.535 puertos. Hay puertos asignados a funciones concretas (ver lista). Por regla general, nunca utilizaremos puertos por debajo de 1024, y deberemos revisar que puerto de nuestra maquina está libre.

IP – Dirección del ordenador. Existen dos versiones

  • IPv4 (versión 4 del protocolo IP) usa direcciones de 32 bits por lo que tiene capacidad para direccionar únicamente 4.294.967.296.
    Normalmente se representan por 4 grupos de tres dígitos. Cada grupo es un byte, por lo que solo pueden tomar el valor de 0 a 255
    Dado que se utilizan en internet, se han reservado rangos de direcciones para uso interno (NO en internet). Solo deberíamos utilizar estos, para redes internas

    • 0.0.0 – 10.255.255.255
    • 16.0.0 – 172.31.255.255
    • 168.0.0 – 192.168.255.255
    • 254.0.0 – 169.254.255.255

IPv6 (versión 6 del protocolo IP) usa direcciones de 128 bits por lo que tiene capacidad para 340 sextillones de direcciones y está destinado a sustituir IPv4, cuya capacidad en Internet ya está agotada
Se escriben como 8 grupos de 4 dígitos hexadecimales. P.ej: 2001:0db8:85a3:08d3:1319:8a2e:0370:7334
Mas información https://es.wikipedia.org/wiki/IPv6

Los tipos de direcciones IPv6 pueden identificarse tomando en cuenta los rangos definidos por los primeros bits de cada dirección.

  • ::/128
    La dirección con todo ceros se utiliza para indicar la ausencia de dirección, y no se asigna ningún nodo.
  • ::1/128
    La dirección de loopback es una dirección que puede usar un nodo para enviarse paquetes a sí mismo (corresponde con 127.0.0.1 de IPv4). No puede asignarse a ninguna interfaz física.
  • ::1.2.3.4/96
    La dirección IPv4 compatible se usa como un mecanismo de transición en las redes duales IPv4/IPv6. Es un mecanismo que no se usa.
  • ::ffff:0:0/96
    La “dirección IPv4 mapeada” se usa como mecanismo de transición en terminales duales.
  • fe80::/10
    El prefijo de enlace local (link local, en inglés) específica que la dirección solamente es válida en el enlace físico local.
  • fc00::/7
    El prefijo de dirección local única (en inglés, unique local address). Está definido por la RFC 4193. Se usa en sustitución de las direcciones site-local.
  • ff00::/8
    El prefijo de multicast. Se usa para las direcciones multicast.
    Hay que resaltar que no existen las direcciones de difusión (en inglés, broadcast) en IPv6, aunque la funcionalidad que prestan puede emularse utilizando la dirección multicast FF01::1/128, denominada “todos los nodos” (en inglés, all nodes).

URLs

Una URL es una cadena de texto que define el protocolo, puerto y recurso al que se desea acceder

En Java, dispone de un objeto URL que representa la dirección URL, Este objeto, siempre representa un valor absoluto, independientemente que se haya creado con una dirección absoluta o relativa.

La estructura de una Url es:

La parte de host puede ser sustituida por una dirección IP. Podemos utilizar IPs cuando no dispongamos de servidores DNS que nos resuelvan el nombre de dominio, y siempre que el servidor sea capaz de responder directamente a una IP (Servidor por defecto)

Una forma rápida de verlo, es escribiendo una clase para probar URL:

Java. Clase para probar la URL

Al ejecutarlo, recibiremos una salida como:

 

Acerca de Miguel Garcia

Programador, Desarrollador web, Formador en distintas areas de informatica y director de equipos multidisciplinares.
Esta entrada fue publicada en Formacion, Java y etiquetada , , , . Guarda el enlace permanente.

Deja un comentario

Este sitio usa Akismet para reducir el spam. Conoce cómo se procesan los datos de tus comentarios.