TCP/IP - POR CONCEPTOS

Vamos a intentar explicar, en lenguaje no técnico y sin querer entrar en profundidades, unos conceptos básicos sobre el TCP/IP y que aunque con frecuencia mucha gente los usa de una manera casi coloquial.... también es verdad que muchas veces, o bien no se sabe (y nadie se atreve a preguntar) de qué se está hablando, o bien muchos de los conceptos son imaginaciones de lo que realmente quiere decir :-)

Muchas veces, en una conversación sobre Internet, alguien pregunta "¿Cómo establece la conversación el navegador?"... y alguien responde: "muy fácil, se abre un socket con el servidor y ya está".

Lo que ya está, es que el que ha preguntado se ha quedado como estaba..... y no se atreve a preguntar más.....

¿Qué es un socket?

Todos hemos oído hablar de la palabra winsock, winsockets, o socket a secas. Tiene una mala traducción: al pie de la letra es "enchufe", y en algunos sitios, lo traducen por conexión, canal, o palabras similares....

Vamos a intentar explicar qué es un socket (vamos a respetar el termino anglosajón). Un socket no es nada más que la combinación de una máquina y un puerto, con otra máquina (que puede ser incluso la misma) y otro puerto.

Aquí nos surge un nuevo concepto: puerto. Vamos a hablar un poco de él, antes de retomar la pregunta anterior.

¿Qué es un puerto?

Veamos el concepto únicamente bajo el sentido del TCP/IP. Puerto, no es nada más que un numero de 16 bits. Por tanto un número entre 1 y 65535 (2 elevado a 16 menos 1)

¿Para qué sirven?.... Pues depende de la aplicación o del programa que quiera usar ese puerto. En principio, los puertos 1024 hacia abajo están reservados a las rutinas del sistema operativo, o mejor dicho a los programas estándares del TCP/IP.

Las RFC son los documentos en los que se empezó a publicar el estándar TCP/IP. En ellos se han definido (y se van definiendo), todos los estándares del protocolo, y podemos considerarlos como la "Biblia" que hay que respetar al pie de la letra (si no, el TCP no funcionaría...)

En dichas especificaciones, están definidos los servicios básicos que nos suministra o puede suministrar una máquina con ese protocolo. En ellas, están definidas las funcionalidades de los puertos 1024 e inferiores. Por ejemplo, el puerto 80 se reserva para un posible servidor web. El 21 para un posible servidor ftp. Etc....

¿Cómo un programa o una rutina del sistema operativo utilizan un puerto?

Bien, imaginémonos que el sistema operativo, tiene, llamémosle un "gestor", que controla dichos puertos. Al arrancar el sistema, dicho gestor tiene apuntados a todos los puertos como "libres". Las propias rutinas del sistema operativo, al ir iniciándose, le solicitan al gestor el uso de un puerto.

Es decir, es como si le dijesen: "Soy el Servidor de Páginas Web, mi nombre de programa es xxxxx, y quiero el puerto 80". El gestor anterior, verifica que nadie la haya pedido antes dicho puerto, y si es así, lo "apunta" en sus tablas y le devuelve un OK al programa que lo ha llamado.

Así, van colgándose una por una todas las rutinas del sistema operativo. Igualmente, los programas de usuario que instalemos pueden utilizar las mismas llamadas al "gestor" para ir solicitando puertos al sistema. (Por desgracia, los troyanos, también pueden hacerlo)

El servidor Web

En particular, el Servidor Web (es decir, cualquier máquina que tenga activo dicho servidor) utiliza por defecto el puerto 80.

Por tanto, cuando accedemos a una determinada página, lo que hace nuestro navegador es intentar abrir un socket. Es decir, tal y como habíamos hablado al principio, lo que hace es enviar un mensaje a la máquina destino, puerto 80, dando como datos, nuestra máquina y un puerto cualquiera que esté libre en ese momento y que el navegador se ha encargado de pedírselo al "gestor" de puertos que hemos comentado anteriormente.

Máquina, dirección, nombre

Acabamos de definir en el párrafo anterior, que se envía un mensaje a la maquina destino. Pero... cuando tecleamos una página, lo que tecleamos es por ejemplo "www.microsoft.com" y esto es un nombre. Anteriormente hemos comentado que un socket era la combinación de una máquina y un puerto con otra máquina y un puerto. Es decir, aquí no hablábamos de nombres, sino de dirección IP.

Por tanto, para poder establecer ese famoso socket, nuestro navegador necesita saber cual es la dirección IP de www.microsoft.com.

DNS's

Para ello, están los DNS's (Domain Name Solver). Lo primero que hace nuestro navegador, es investigar la dirección IP de un determinado nombre. Recordemos que al definir la conexión de Internet en nuestro PC, damos como dato las direcciones IP de los DNS's que nos suministra nuestro proveedor a Internet (ISP). O bien nuestro proveedor nos da una dirección IP automática y DNS's automáticos al conectarnos (como en el caso del ADSL, por ejemplo).

En resumen: nuestra máquina, cuando está conectada, tiene las direcciones IP de uno o dos servidores de nombres (DNS's). Por tanto, lo primero que hace en el caso de querer resolver la dirección de www.microsoft.com, es preguntarle a los servidores de nombres (estos, a su vez, si no lo conocen, preguntarán a otros servidores de nombres superiores -como veremos más adelante-.) y en resumen, al final el navegador tendrá la dirección de www.microsoft.com.

Con esta dirección, puerto 80, dirección de nuestro PC y el puerto que le haya asignado el "gestor", es como se abrirá el socket al servidor Web. El servidor a su vez, lo único que hará es enviar los datos de la página solicitada al puerto que le acabas de decir en nuestra máquina. El navegador, cuando recibe esos datos, simplemente los muestra en su ventana.

----------------------------------------------------------------

Este es el primer capítulo de una saga dedicada a intentar explicar concepto de TCP/IP desde lo más básico. Iremos ampliando conceptos y posteriormente profundizando un poco más en estos temas.

Un saludo,

Jose Manuel Tella Llop
jmtella@compuserve.com

4 Abril 2002