TCP/IP, una vision simple.
TCP/IP hecho simple
El TCP/IP es un misterio para muchas personas, al tiempo que es la herramienta de comunicación más eficiente que podemos, hoy por hoy, encontrar. Se ha convertido en una “navaja suiza” en las comunicaciones.
Casi todas las comunicaciones actuales, incluidas la telefonía, la televisión, y por supuesto Internet, están basadas en TCP/IP. Por lo tanto es muy importante el definirlo, y conocerlo con más o menos profundidad, para entender cómo y porqué se realizan las comunicaciones.
Hasta hace muy poco tiempo esto era un conocimiento exclusivo de unos pocos “gurús” de la informática, pero el uso de la informática por el ciudadano de a pie, y por encima de ella del uso intensivo de Internet por ellos da lugar a la necesidad de conocer el qué representan tantos numeritos, para que sirven y como se usan.
El interfaz de red
Sin ser muy purista ni detallado ( sin entrar en modelos ni teorías ) vamos a decir que la interfaz de red es el medio que nos une a la red. Que da simple ¿no?.
Realmente podemos interpretar la interfaz de red como la tarjeta de red, o la tarjeta inalámbrica ( incluso si tiene pinta de PenDrive ). También puede ser la interfaz de red la conexión por infrarrojos, o la conexión por firewire, o el módem, o …. vamos lo que quiera que sea nos ‘enganche’ con el resto.
Naturalmente, cada interfaz de red tiene que poderse distinguir de las otras, y si tenemos más de una, cada una puede estar conectada a una red distinta. Consecuencia de esto es que cada una de las interfaces ha de tener su conflagración, sus numeritos, propios.
La Dirección IP
De igual modo que los teléfonos se distinguen entre si por su numero, los extremos de una comunicación TCP/IP se distinguen entre sí, entre otras cosas, por la dirección IP. En contra de lo que pueda parecer en un primer momento, la dirección IP es un numero, sólo uno. Claro que está en binario y formado por una secuencia de 32 posiciones de unos y ceros. Dicho esta forma suena más o menos terrible y, sin lugar a dudas, duro de manejar. Siguiendo ciertos criterios matemáticos y de conveniencia ( agrupar las posiciones de 8 en 8 y pasarlas de base 2 a base 10 ) se ha desarrollado una representación más fácil de la dirección basada en cuatro números separados por puntos. cada uno de estos números pueden tomar valores entre 0 y 255.
El por qué de los puntitos es muy simple, no es lo mismo 10.112.2.45 que 101.12.24.5 y ambos tienes la misma secuencia de números, si ignoramos los puntos.
Importante: Las Direcciones IP son secuencias de Unos y Ceros de 32 posiciones
Otro detalle a tener en cuenta es que si tengo un sistema con más de un interfaz, tendré mas de una dirección IP. Como mínimo tendré una por cada interfaz.
¿Esto quiere decir que un interfaz puede disponer de más de una IP?
SI. Así de rotundo, si puede ser. Y , a veces, es muy útil. aunque ahora no discutiremos eso, más adelante veremos.
La Mascara de Red
El uso de números para distinguir entre si los extremos de la comunicación no es nuevo, recurrimos de nuevo a los números de teléfono, como ejemplo. Y siguiendo con el ejemplo, todos nosotros, cuando conocemos los números de teléfonos habituales de nuestro entorno, realizamos mentalmente una “disección” de los mismos. Pensamos que si comienza por XXX es de tal provincia y si le sigue ZZZ debe ser de tal barrio. Este conocimiento al que llegamos por la experiencia no es, ni mucho menos descabellado. al contrario es totalmente cierto. De hecho se usa una división del numero en distintos elementos para conocer el camino para llegar de uno a otro.
Realmente lo importante es saber que teléfono está en nuestra propia central, es decir, con cual podemos conectar directamente, y cual no. Esa llamada hacia ‘fuera’ se la encaminamos a una centralita de mayor nivel, y así consecutivamente.
El problema es cuando la división no es fija. Por ejemplo en Madrid, con muchos más habitantes que Sevilla, y con números de teléfono de igual longitud: 9 cifras, se toman dos cifras por la izquierda para determinar la pertenencia a la provincia ( el 91 ). Por otro lado en Sevilla se toman 3 ( 954 ), de hecho 95 determina toda Andalucía, 8 provincias. Es la parte del numero conocido como prefijo.
Cuando hablamos de ordenadores nos encontramos con situaciones semejantes. Una vez hemos repartido direcciones ( números ) hemos de saber que parte hace de “prefijo” y que parte no. De esa manera se puede establecer cual de los destinatarios está en nuestra red local y cual está fuera. El método es el mismo, necesitamos trazar una frontera entre la parte fija y la variable de nuestro “numero de red”. Como nuestros ordenadores sólo entienden de unos y ceros…. la solución está clara. Si el prefijo es de 3 cifras, lo podemos indicar con otro numero ( que es una tira de unos y ceros ) que tenga tres unos y el resto ceros. Si el prefijo es de 9 cifras serian nueve unos seguidos de ceros hasta los treintaidos.
Claro que de nuevo tenemos un una serie difícil de manejar, si hacemos el juego que hicimos con la dirección IP, cortarla en cuatro grupos y darla en decimal. Claro, que en este caso siempre serán una serie de unos seguidos de ceros, no pueden estar intercalados, por lo que los números que saldrán serán son sólo unos pocos. En particular, el que más veremos sera el 255, que en binario forma el 11111111.
De esta forma si te dicen que vamos a comunicar entre 192.168.1.25 con máscara 255.255.255.0 con 192.168.1.32 con mascara 255.255.255.0 se puede saber que están en la misma red, por que tienen la misma parte fija.
/—————————- Origen ————————-\ /—————————- Destino ————————\
Direccion 192.168.1.25 => 11000000.10101000.00000001.00011001 Direccion 192.168.1.32 => 11000000.10101000.00000001.00100000
Mascara 255.255.255.0 => 11111111.11111111.11111111.00000000 Mascara 255.255.255.0 => 11111111.11111111.11111111.00000000
Resultado 11000000.10101000.00000001.00000000==Resultado 11000000.10101000.00000001.00000000
Mientras que si queremos comunicar 192.168.1.25 con 192.168.2.25 resulta :
/—————————- Origen ————————-\ /—————————- Destino ————————\
Direccion 192.168.1.25 => 11000000.10101000.00000001.00011001 Direccion 192.168.2.25 => 11000000.10101000.00000010.00011001
Mascara 255.255.255.0 => 11111111.11111111.11111111.00000000 Mascara 255.255.255.0 => 11111111.11111111.11111111.00000000
Resultado 11000000.10101000.00000001.00000000 Resultado 11000000.10101000.00000010.00000000
Lo cierto es que por cada dirección IP tenemos que tener una máscara de red. Tantas como direcciones, ni más ni menos. Aunque pueden coincidir.
La puerta de enlace
También conocido por su acepción inglesa gateway. Cuando hemos de comunicar con una red externa, es decir, con una equipo que no está en nuestra red ( ver la máscara de red ), hemos de encontrar la manera de poner nuestros paquetes en camino. La solución es simple: Buscar algún equipo que tenga, al menos dos interfaces de red, una en nuestra red y otra en el exterior. Eso es la puerta de enlace, la dirección del equipo que nos pone en contacto, nos enlaza, con el exterior, y habitualmente, nos hace de puerta de entrada.
La puerta de enlace suele ser un router ( enrutador ). Es decir un computador especializado en mantener varias interfaces y repartir datos entre ellas. No hay ningún problema en que ese papel sea asumido por un PC con varias interfaces. Aunque suele ser asumido por otras plataformas propietarias, como Cisco , 3Com, dLink , etc, que producen hardware especializado en estas labores. Más barato ( en comparación ) y eficiente.
Resumiendo: Un router es un sistema especializado en repartir paquetes entre las distintas redes.
Los Puertos
La explicación no es muy fácil, pero veremos como vamos….
La información entre los extremos se realiza en ‘paquetes’, no de forma continua. Es decir, si te voy a transmitir un fichero no te envío los caracteres uno tras otro seguidos, sino que se agrupan en porciones, enviándose porción por porción. Estas porciones o paquetes viajan de forma independiente por la red y cada una de ellas tiene la dirección de origen y destino. Además lleva añadida información para poder comprovar que no se ha estropeado por el camino.
Han provado a abrir dos ventanas del navegador contra la misma pagina web, por ejemplo en google, y acceder a contenidos distintos? ( por ejemplo hacer dos búsquedas ). Si lo has hecho, habrás visto que cada ventana recibe su información de forma coherente. Si lo piensas un poco no es tan lógico. Has enviado y recibidos paquetes desde tu máquina hacia y desde google. Pero no se han liado, cada ventana ha recibido los que debía.
¿Pero como los han distinguido? Los paquetes tienen el mismo origen y el mismo destino. Pero se han diferenciado entre si.
El Socket
El socket es la herramienta que nos permite este comportamiento. Usaremos la palabra inglesa ( si, ya se que significa calcetín ), pero es que la usa todo el mundo. El Socket es un conjunto de cosas realmente, vamos paso a paso. Cuando una aplicación va a enviar y a recibir paquetes le pide al sistema operativo ( al que sea: Windows, Linux, Mac Os , … ) que le reserve un poco de memoria. Esta memoria se usará como un buzón.
Cuando la aplicación quiere enviar datos deja estos en este buzón, de donde lo recoge el protocolo de red y monta los paquetes. y cuando estos llegan al destino son entregados a la aplicación que los espera dejando los datos en su buzón.
Estos buzones están numerados, y los paquetes tienen el numero de buzón de origen y de destino como parte de la dirección de origen y destino. Algo así como calle, puerta y piso.
Naturalmente, para hacer llegar datos a una apelación, tengo que saber en que puerto. Para eso tenemos unas listas de los puertos que suelen tener asociadas las aplicaciones.
En Linux y Mac OS ( y casi todos los Unix y derivados ) esto es un fichero de texto de nombre /etc/services en Windows es c:/windows/system32/drivers/etc/services. Bueno suponiendo que tu unidad de sistema es C: y tu directorio de sistema es /windows, puede ser /winnt.
TCP frente a UDP
Además de todo esto de lo que hemos hablado tenemos dos maneras de comunicarnos: TCP y UDP. Ya se que el UDP no aparece en el nombre del protocolo, pero es que TCP es un UDP evolucionado. UDP es el medio más sencillo. es decir, que se envían los paquetes…. y punto. Es decir, no hay señalizaciones, ni retroalimentación, ni vinificación de entrega, ni tan siquiera control en el orden en que se reciben los paquetes. Todo eso lo tiene TCP.
Esto obliga a hacerse una pregunta…. UDP para que sirve entonces?. La pregunta se contesta mirando TCP más de cerca. Para establecer una conexion realiza un intercabio de información del tipo : ¿ estas ahi?, ¿ puedes recibir paquetes ahora?, ¿ cuantos puedes guardar en memoria?, ¿ midamos cuanto tarda antes de empezar…, Venga, empezamos….
Claro que este diálogo ocupa recursos…. y tiempo. Para algunas cosas está muy bien: si yo te quiero mandar un fichero, una foto, una canción, o lo que sea… quiero asegurarme de que lo recibes todo, yademás en su orden. de otro modo no me interesa. Pero para otras funciones, si el intercambio es corto, o lo importante es la velocidad, frente a la información, no es interesante. Por Ejemplo en la transmisión de voz o vídeo, preferimos un ’saltito’ y que vaya sincronizado, a que llegue todo, pero sin sincronía
Resumiendo: TCP= Tiempo de conexion y desconexion con transmision fiable.UDP= Rapidez sin confirmación.
El DNS
SI os pido que en navegador de Internet pongáis 64.233.183.147, al menos a día de hoy os aparecerá la pagina de Google…. pero me diréis en seguida si no es mas fácil decir que pongáis www.google.com. Claro, en lo dicho hasta ahora los nombres de los servidores n han aparecido para nada. ¿ De donde los sacamos? Del DNS.
El DNS ( Domain Name Service = Servicios de Nombres de Dominio ) es un conjunto distribuido de servidores que contienen una base de datos en la que se emparejan ( ya veremos las excepciones ) los nombres de máquina con su dirección ip.
Realmente es un poco más complicado. pero lo que se reserva es el dominio ( por ejemplo Google ) en una autoridad de registro, por ejemplo ‘.com‘. Las autoridades de registro, es decir, los responsables del buen funcionamiento de todas las direcciones que terminan en ‘.loquesea‘ , son a la vez los encargados de otorgar y controlar los nombres de dominio ( lo que está delante del ‘.’). Por ejemplo en españa, el dominio de registro ‘.es’ lo controla RedIris.
Esta base de datos tiene una ‘cabecera’ que es cada registrador para su ambito de registro. luego cada servidor consulta a otro de mayor rango hasta alcanzar a estos. Dicho en ‘román paladino’ si montas un servidor DNS en tu oficina seria para controlar tu dominio local y para consultar lo que ‘no sepa’ al servidor de tu proveedor en internet. Luego este consultaría a los siguientes, hasta los ‘masters‘.
Y todo esto es sólo para que no tengas que acordarte las ip de los sitios, solo de su nombre. Claro que todo tiene consecuencias. Si lo piensas bien, cuando pones www.google.com preguntas por una máquina que se llama ‘www’ del dominio ‘google’ registrado en ‘.com‘. Lo de poner ciertos nombres de máquina igual que el servicio que soporta es más una costumbre que otra cosa, claro que simplifica mucho el que la web esté en la máquima www.dominio.registrador y el correo en mail.dominio,registrador.
Metiendo más el dedo en la llaga se puede llegar a ver otras consecuencias. Se guardan parejas ip-nombre , claro que puede habar una ip con varios nombres y al revés. Un ejemplo simple es:ftp.rediris.es corresponde a 130.206.1.5, pero curiosamente zeppo.rediris.es también tiene la misma dirección ip. Realmente es la misma máquina, se llama zeppo, está en las máquinas de RedIris, pero como tiene instalado el servicio ftp es más fácil llamarla también ftp, de manera que sea fácil de recordar.
Como detalle, cerrando este apartado, decir que puedes usar cualquier servidor DNS al que puedas llegar, el protocolo es tan simple que no usa autentificación ninguna. De hecho puedes usar algunos con soporte comercial y muy rápidos.