Introducción a redes y sockets de comunicación.

    La plataforma Java es apreciada y ampliamente utilizada, al menos en parte, debido a la gran cantidad de clases que tiene y que facilitan la escritura de programas que utilizan e interactúan con los recursos de Internet y la World Wide Web (www). De hecho, los navegadores compatibles con Java utilizan dicha capacidad de la plataforma para transportar y ejecutar subprogramas a través de Internet.

    En este apartado y los subsecuentes se proporcionará una muy breve introducción a lo siguiente:

  1. Conceptos básicos de redes: se describen de manera general las capacidades de red de la plataforma Java y se proporciona también una descripción introductoria de las redes de comunicación, con la finalidad de que el lector se familiarice con los términos y conceptos fundamentales que es preciso comprender antes de pasar a la práctica.
  2. Procesamiento de URLs: aquí se explica cómo es que los programas pueden utilizar las URL (Uniform Resource Locator) para acceder a información en Internet. Una URL es la dirección de un recurso en Internet. Los programas Java pueden utilizar una URL para conectarse y recuperar información a través de una red. Se muestra también cómo crear y analizar una URL, cómo abrir una conexión a una URL y cómo leer y escribir en esa conexión.
  3. Uso de Sockets: se explica de manera general cómo usar los sockets para que sus programas puedan comunicarse con otros programas en la red. Un socket es un punto de enlace de comunicación bidireccional entre dos programas que se ejecutan en la red.

     Tanto los conceptos como la mayoría de los ejemplos expuestos en esta introducción han sido tomados o adaptados de los descritos en el tutorial Custom Networking de The Java Tutorials.

Conceptos básicos de redes de comunicación.

    Un protocolo es un conjunto de reglas: los protocolos de red son estándares y políticas formales conformados por restricciones, procedimientos y formatos que definen el intercambio de paquetes de información para lograr la comunicación entre dos puntos, servidores, dispositivos o entidades a través de una red.

    Las computadoras que funcionan en Internet en general se comunican entre sí utilizando dos protocolos de comunicación:

  1. Protocolo de Control de Transmisión (TCP - Transmission Control Protocol): es un protocolo basado en conexión que proporciona un flujo de datos confiable entre dos computadoras.
  2. Protocolo de Datagramas de Usuario (UDP - User Datagram Protocol): es un protocolo que envía paquetes de datos independientes, llamados datagramas, de una computadora a otra sin garantía de llegada o entrega. Este protocolo, no está basado en una conexión establecida entre dos puntos.

    Estos dos protocolos están relacionados con la capa de transporte del modelo OSI (Open System Interconnection). El modelo OSI es un modelo de referencia para los protocolos de redes de comunicación creado en 1980 por la organización Internacional de Normalización (ISO - International Organization for Standardization):

     Cuando se escriben programas en Java que se comunican a través de la red, se está programando a nivel de la capa de aplicación. Por lo general, no es necesario que se preocupe por las capas asociadas con TCP y UDP, sino que en su lugar, se pueden utilizar las clases del paquete java.net, mismas que proporcionan comunicación de red independiente del sistema subyacente. Sin embargo, para decidir qué clases de Java deben usar sus programas, es preciso comprender en qué se diferencian TCP y UDP.

    Si dos aplicaciones quieren comunicarse entre sí de manera confiable, establecen una conexión y envían datos de un lado a otro a través de esa conexión. Esto es análogo a hacer una llamada telefónica.

    TCP proporciona un canal punto a punto para aplicaciones que requieren comunicaciones confiables. Http, ftp y telnet son ejemplos de aplicaciones que requieren un canal de comunicación confiable. El orden en el que se envían y reciben los datos a través de la red de comunicación es fundamental para el éxito de estas aplicaciones.

    Por otro lado, UDP proporciona una comunicación que no está garantizada entre dos aplicaciones en la red y no está basado en conexiones (como TCP); sino que envía paquetes de datos independientes, llamados datagramas, de una aplicación a otra. Enviar datagramas es muy parecido a enviar una carta a través del servicio postal: el orden de entrega no es importante (al menos en principio) y no está garantizado, y cada mensaje es independiente de los demás.

Puertos.

    Habitualmente, una computadora tiene una única conexión física a la red y los datos destinados a ella llegan a través de dicha conexión. Sin embargo, los datos pueden estar destinados a diferentes aplicaciones que se ejecutan en la computadora. Entonces, ¿cómo sabe la computadora a qué aplicación enviar los datos? La respuesta es: mediante el uso de puertos. Los protocolos TCP y UDP utilizan puertos para asignar los datos entrantes a un proceso particular que se ejecuta en una computadora.

    Los datos transmitidos a través de Internet van acompañados de información de direccionamiento que identifica a la computadora y el puerto al que están destinados. La computadora se identifica por su dirección IP de 32 bits, que el Proveedor de Servicio de Internet (ISP - Internet Service Povider) utiliza para enviar datos a la computadora correcta en la red. Los puertos se identifican mediante un número de 16 bits, que TCP y UDP utilizan para entregar los datos a la aplicación correcta.

    Los números de puerto van de 0 a 65 535 (16 bits). Los números de puerto que van del 0 al 1023 están restringidos y reservados para su uso por servicios conocidos como HTTP y FTP y otros servicios del sistema. Estos puertos se denominan puertos conocidos. Las aplicaciones que utilicen puertos no deberían utilizar los puertos conocidos.

    Como analogía, considere la dirección IP como el número telefónico de una casa, y el número de puerto como la persona con la que quiere hablar y que habita en dicha casa. Esta analogía puede resultar extraña a los nativos digitales, pero antes de la era digital y los teléfonos inteligentes, así funcionaban las cosas.

    En la comunicación basada en conexión como TCP, una aplicación de servidor vincula un socket a un número de puerto específico. Esto tiene el efecto de registrar el servidor en el sistema para recibir todos los datos destinados a ese puerto. Luego, un cliente puede reunirse con el servidor en el puerto del servidor.

    Por otro lado, en la comunicación basada en datagramas como UDP, el paquete de datagrama contiene el número de puerto de su destino y UDP enruta el paquete a la aplicación apropiada.

    El siguiente video (ByteByteGo) es breve y bastante útil en la comprensión y funcionamiento general de lo descrito hasta aquí:


No hay comentarios.:

Publicar un comentario