Trabajo en Red Básico
Los ordenadores que se ejecutan en Internet comunican unos con otros utilizando los protocolos
TCP y UDP, que son protocolos de 4 capas.
Cuando se escriben programas Java que se comunican a través de la red, se está programando en
la capa de aplicación. Típicamente, no se necesita trabajar con las capas TCP y UDP -- en su
lugar se puede utilizar las clases del paquete java.net. Estas clases porporcionan comunicación
de red independiente del sistema. Sin embargo, necesitas entender la diferencia entre TCP y
UDP para decidir que clases Java deberían utilizar tus programas.
Cuando dos aplicación se quieren comunicar una con otra de forma fiable, establecen una
conexión y se envían datos a través de la conexión. Esto es parecido a hacer una llamada de
teléfono --se establece una comunicación cuando se marca el número de teléfono y la otra
persona responde. Se envían y reciben datos cuando se habla por el teléfono y se escucha lo
que le dice la otra persona. Al igual que la compañia telefónica, TCP garantiza que los datos
enviados por una parte de la conexión realmente llegan a la otra parte y en el mismo orden en
el que fueron enviados (de otra forma daría un error).
|
Definición:
TCP es un protocolo basado en conexión que proporciona un flujo fiable de datos entre dos
ordenadores.
|
Las aplicaciones que requieren fiabilidad, canales punto a punto para comunicarse, utilizan
TCP para ello. Hyper Text Transfer Protocol (HTTP), File Transfer Protocol (ftp), y Telnet
(telnet) son ejemplos de aplicaciones que requieren un canal de comunicación fiable. El orden
en que los datos son enviados y recibidos a través de la Red es crítico para el éxito de estas
aplicaciones -- cuando se utiliza HTTP para leer desde una URL, los datos deben recibirse en
el mismo orden en que fueron enviados, de otra forma tendrás un fichero HTML revuelto, un
fichero Zip corrupto o cualquier otra información no válida.
Para muchas aplicaciones esta garantía de fiabilidad es crítica para el éxito de la
transferencia de información desde un punto de la conexión al otro. Sin embargo, otras formas
de comunicación no necesitan esta comunicación tan estricta y de hecho lo que hace es estorbar
porque la conexión fiable anula el servicio.
Considera, por ejemplo, un servicio de hora que envía la hora actual a sus clientes cuando
estos lo piden. Si el cliente pierde un paquete, ¿tiene sentido volver a enviar el paquete? No
porque la hora que recibiría el cliente ya no sería exacta. Si el cliente hace dos peticiones y
recibe dos paquetes del servidor en distinto orden, realmente no importa porque el cliente
puede imaginarse que los paquetes no están en orden y pedir otro. El canal fiable, aquí no es
necesario, causando una degradación del rendimiento, y podría estorbar a la utilidad del
servicio.
Otro ejemplo de servicio que no necesita un canal de fiabilidad garantizada es el comando
ping. El único objetivo del comando ping es comprobar
la comunicación entre dos programas a través de la red. De hecho, ping
necesita conocer las caidas o los paquetes fuera de orden para determinar
lo buena o mala que es la conexión. Así un canal fiable invalidaría este servicio.
El protocolo UDP proporciona una comunicación no garantizada entros dos aplicaciones en la Red.
UDP no está basado en la conexión como TCP. UDP envía paquetes de datos, llamados
datagramas de una aplicación a la otra. Enviar datagramas es como envíar
una carta a través del servicio de correos: el orden de envío no es importante y no está
garantizado, y cada mensaje es independiente de los otros.
|
Definición:
UDP es un protocolo que envía paquetes de datos independientes, llamados
datagramas desde un ordenador a otro sin garantías sobre su llegada. UDP
no está basado en la conexión como TCP.
|
Puertos
Generalmente hablando, un ordenador tiene una sola conexión física con la Red. Todos los datos
destinados a un ordenador particular llegan a través de la conexión. Sin embargo, los datos
podría ser utilizados por diferentes aplicaciones ejecutándose en el ordenador. ¿Entonces cómo
sabe el ordenador a qué aplicación enviarle los datos? A través del uso de los
puertos.
Los datos transmitidos por internet están acompañados por una información de dirección que
identifica el ordenador y el puerto al que están destinados. El ordenador está identificado por
su dirección IP de 32 bits, esta dirección se utiliza para envíar los datos al ordenador
correcto en la red. Los puertos están identificados por un número de 16 bits, que TCP y UDP
utilizan para envíar los datos a la aplicación correcta.
En aplicaciones basadas en la conexión, una aplicación establece una conexión con otra
aplicación uniendo un socket a un número de puerto. Esto tiene el efecto de registrar la
aplicación con el sistema para recibir todos los datos destinados a ese puerto. Dos aplicaciones
no pueden utilizar el mismo puerto: intentar acceder a un puerto que ya está utilizado dará un
error.
En comunicaciones basadas en datagramas, los paquetes de datagramas contienen el número de
puerto del destinatario.
|
Definición:
Los protocolos TCP y UDP utilizan puertos para dirigir los datos de entrada a los procesos
particulares que se están ejecutando en un ordenador.
|
Los números de puertos tienen un rango de 0 a 65535 (porque los puertos están representados por
un número de 16 bits). Los puertos entre los números 0 - 1023 están restringidos -- están
reservados para servicios bien conocidos como HTTP, FTP y otros servicios del sistema. Tus
aplicaciones no deberían intentar unirse a estos puertos. Los puertos que están reservados para
los servicios bien conocidos como HTTP y FTP se llaman
puertos bien conocidos.
A través de las clases del paquete java.net, los programas Java puede utilizan TCP o UDP para
comunicarse a través de Internet. Las clases URL, URLConnection, Socket, y SocketServer
utilizan el TCP para comunicarse a través de la Red. Las clases DatagramPacket y DatagramServer
utilizan UDP.