Protocolos TCP/IP y otros protocolos de nivel de aplicacación de Internet estándares
El principio de divide y vencerás es el que
se sigue en el diseño de redes. La transmisión de datos de un sistema a otro
se separa en diferentes capas o niveles.
La organización ISO (International Standards
Organization) en su día creó un modelo para la interconexión de sistemas abiertos
conocido como OSI (Open Systems Interconnection)
El modelo OSI divide en 7 capas el proceso
de transmisión de información entre equipos informáticos, desde el hardware
físico, hasta las aplicaciones de red que maneja el usuario.
A lo largo del tiempo han habido diferentes Sistemas de redes basados en el modelo OSI, pero han sido las Capas Internet las que han tenido más repercusión.
| CAPAS OSI |
CAPAS INTERNET |
COMENTARIO |
| 7 |
Aplicación |
FTP, SMTP , POP3, TELNET, HTTP..... |
Son tanto las aplicaciones Estándares como las nuestras programadas en Java que se comunican a través de la red. |
| 6 |
Presentación |
| 5 |
Sesión |
| 4 |
Transporte |
TCP |
Transfer Control Protocol: Provee un canal punto a punto para aplicaciones que requieren una comunicación fiable |
| 3 |
Red |
IP |
Internet Protocol: Routing y direcciones |
| 2 |
Enlace de Datos |
Protocolos de acceso al hardware asociado |
Se encarga de la transmisión de bits a través de un canal de comunicación. Define la velocidad, funciones de sincronización e integridad de los datos |
| 1 |
Física |
Nivel de aplicación
Las Capas Internet engloban en una sola capa las capas Sesión, Presentación y Aplicación.
aquí nos encontramos con protolos o aplicaciones tanto estándares como no estándares. Entre los protocols estándares están
- FTP (File Transfer Protocol)
- utilizado para la transmisión de ficheros
- SMTP (Simple Mail Transfer Protocol)
- utilizado como correo saliente de nuestra aplicación de correo electrónico
- POP3 (Post Office Protocol versión 3)
- utilizado como correo entrante de nuestra aplicación de correo electrónico
- es como ir a la oficina de correos a recoger nuestro correo
- en Internet la ofcina de correos es un ordenador de nuestro ISP (Internet Service Provider), el cual almacena nuestro correo hasta que nuestra aplicación de correo electrónico se conecta a este ordenador para bajar dichos correos.
- TELNET (Terminal Emulation)
- utilizado en el mundo UNIX y LINUX para conectarnos a un servidor remoto e interactuar a través de la línea de comando como si realmente estubiéramos fisicamente delante de dicho servidor, aunque éste pueda estar por ejemlo en Londres.
- HTTP (Hypertext Transfer Protocol)
- utilizado para la transmisión de páginas Web.
Los números de Puerto
Los podemos entender como números de oficinas dentro de un edificio. El edificio (Equipo Informático) tiene una dirección IP, pero dentro de él encontramos que cada tipo de negocio (aplicaciones estándares como HTTP, FTP, TELNET o cualquier aplicación creada por nosotros) dispone de su propia oficina que es el puerto.
A diferencia de una dirección IP que detrás de ella siempre hay un Sistema informático tangible, los puertos son intangibles.
Los números de puerto del 0 al 1024 están reservados para protocolos o aplicaciones estándares. Por tanto cualquier aplicación que puediéramos crear nosotros y que no siguiera ningún estándar tendría que tener un número superior al 1024.
Realización de conexiones Cliente/Servidor desde aplicaciones Java a través de los Sockets
Los Sockets son el mecanismo que permite a las aplicaciones poderse comunicar con los protocolos TCP/IP.
Tenemos que tener en cuenta lo siguiente. El servidor está ofreciendo un servicio (un proceso o aplicación) al mundo exterior. Y para poder darlo estará escuchando a que algún proceso exterior lo requiera. Es entonces cuándo el servidor es libre de aceptar la petición o rechazarla.
Si la acepta, entonces se abre un canal virtual que une a las dos aplicaciones de ambos Sistemas, cliente y servidor.
Cuando desarrollemos nuestro navegador, éste tendrá primeramente que conectarse a un Servidor de páginas Web. Este será el código a escribir si nos quisiéramos conectar por ejemplo a www.yahoo.com
Socket socket = new Socket("www.yahoo.com", 80); |
- "www.yahoo.com", 80
- al Constructor sobrecargado de la Clase Socket le pasamos como primer argumento la dirección IP o su alias y como segundo argumento el número de puerto por el cual el servidor en cuestión está escuchando.
Además del navegador también nos vamos a crear un pequeño servidor que su trabajo va a consistir en recibir peticiones de los clientes a través del protocolo HTTP y mostrar dichas peticiones. Este es parte del código correspondiente a dicho servidor
ServerSocket serverSocket = new ServerSocket(9090);
Socket socket = serverSocket.accept(); |
- ServerSocket serverSocket = new ServerSocket(9090);
- en este caso está claro que el servidor no conoce de antemano quienes son los clientes que se van a querer conectar a él.
- por lo tanto sólo le pasamos como argumento el puerto por el cual va a estar esperando.
- elegimos el puerto 9090 para que no entre en conflicto con ningún otro servidor que pudiera ya estar ejecutándose en nuestro ordenador.
- Socket socket = serverSocket.accept();
- éste es un método de tipo bloqueante, lo que significa que el flujo principal de la aplicación se queda clavado en este método y no se desbloquea hasta que es invocado.
- para hacer una metáfora, es como si en este caso el servidor pusiera la oreja para escuchar posibles peticiones y no pudiera hacer otra cosa que no fuera escuchar.
Cuando empecemos a realizar las primeras pruebas de nuestro navegador, las haremos llamando a nuesto servidor Web con el siguiente código:
Socket socket = new Socket("localhost", 9090); |
- localhost
- éste es el alias de la dirección IP 127.0.0.1
- a esta dirección se la denomina loopback porque sólo llega hasta el modem o tarjeta de red de nuestro ordenador, pero no sale a la red.
- en ocasiones es muy útil hacer un ping a esta dirección para discernir si el problema de conexión es debido a la red o a nuestro propio Sistema ya sea por problemas de tarjeta de red o modem o del propio Software de las capas TCP/IP.
El protocolo IP (Internet Protocol)
Es uno de los protocolos más simples y quizás gracias a su simplicidad ha sido el protocolo estrella que ha revolucionado Internet.
Este protocolo persigue dos objetivos
- poner en contacto equipos informáticos
- para que una conexión Cliente/Servidor sea factible es necesario que el cliente sepa dónde está ubicado el servidor. En Internet esto se consigue gracias a las direcciones IP.
- el protocolo IP utiliza el enrutamiento para discernir el camino más idóneo a través de diferentes redes interconectadas
- el paquete de bits que viaja a través de Internet denominado datagrama tiene un campo llamado tiempo de vida.
- este campo indica el tiempo máximo en segundos que el datagrama en cuestión puede estar en Internet. Cuando este campo se decrementa hasta valer cero, entonces es destruido.
- aunque el tiempo de vida se mide en segundos, cada vez que el datagrama pasa por un Router éste decrementa en 1 el tiempo de vida aunque no haya pasado 1 segundo.
- de esta forma se consigue que si por ejemplo queremos bajarnos una pagina Web de un servidor que está caído, los datagramas no están dando vueltas por Internet indefinidamente y nuestro navegador de forma inmediata nos indica que el servidor web al cual queremos acceder no está disponible.
- recuerdo hace unos años que hubo una caída de todo Internet porque un Router en vez de decrementar el tiempo de vida, lo aumentaba de forma desmesurada. El resultado fue que todos aquellos datagramas que pasaban por ese Router que no tenían un destino final correcto por las razones expuestas anteriormente empezaron a divagar por Internet pasando de Router a Router hasta que colapsaron definitivamente la red de redes.
- defragmentación y ensamblado
- en la década de los sesenta del siglo pasado los grandes ordenadores tenían lo que se denominaba Sistemas Propietarios. Cada fabricante de Ordenadores utilizaba un Sistema Operativo totalmente diferente al Sistema Operativo de la competencia y en extensión también utilizaba su propio Sistema de comunicaciones de red.
- ellos creían que siendo diferentes a los demás les conferia un grado de seguridad más alto y así no serían atacados por otros Sistemas.
- de la misma forma que después de la Segunda guerra mundial España decidió que su ancho de vía sería más ancho que del resto de Europa para no ser invadidos vía ferroviaria por sus posibles enemigos, lo mismo hicieron las diferentes redes de los sistemas propietarios dando tamaños diferentes a los tamaños de los datagramas.
- pues bien cuando un datagrama viaja por la red de redes y tiene que atravesar una red que tiene un tamaño de datagrama más pequeño que el que está viajando, entonces se defragmenta al tamaño apropiado de los datagramas de esa red y cuando sale de dicha red entonces vuelve a reensamblar los diferentes datagramas pequeños hasta volver a reconstruir el datagrama original.
El protocolo TCP (Transport Control Protocol)
Establece un canal virtual de comunicación entre un cliente y un servidor.
El protocolo TCP interactúa con su capa superior de nivel de aplicación y deposita los datos a transmitir en segmentos, los cuales son inintroducidos en datagramas que viajana por la red.
Este protocolo persigue entre otros objetivos:
- fiabilidad en la transmisión de los datos
- imaginemos que queremos enviar una novela a través de correo convencional (a alguna mente pensante se le ha ocurrido llamar al correo convencional s-mail. La letra "s" es el acrónimo de snail es decir correo caracol por la lentitud respecto al correo electrónico).
- y que dicha novela la enviamos en sobres que contienen cada uno de éstos sólamente una página. La persona que recibiera nuestra novela por entregas tendría que ir abriendo los sobres y para leer la novela en su orden correspondiente tendría que ordenar las páginas y si viera que le falta alguna página nos lo haría saber para que le reenviáramos esa página.
- pues esto mismo es lo que hace el protocolo TCP, pero en vez de sobres lo que utuliza son los segmentos y si le falta algún segmento se lo hace saber al sistema que está enviando los datos para que vuelva a reenviar dicho segmento.
- control de flujo
- imaginemos que desde nuestro ordenador de casa nos queremos conectar a un ordenador muy potente y que trabaja con fibra óptica.
- está claro que si aceptáramos toda la información a la velocidad que este ordenador puede enviar, en menos de un minuto nos desbordaría el buffer de nuestra tarjeta de red y nos sería imposible engullir toda la informacón que nos estaría enviando y por tanto nos hundiría en la miseria.
- para evitar esta situación el ordenador potente nos envía de entrada unos cuantos datagramas a su velocidad habitual y se espera a que nosotros le respondamos y le digamos que queremos recibir más datos.
- dependiendo del tiempo que tardemos en responder el ordenador potente se da cuenta de la capacidad limitada que tenemos de engullir dichos datagramas y entonces el ordenador potente nos enviía los datos a nuestra velocidad. De esta forma todos nos podemos transmitir datos entre todos con un control de flujo controlado por el protocolo TCP.
Infosintesis Solutions Group, S.L.
Formación, asesoramiento y desarrollo de proyectos informáticos