Introducción a la red (3)

Hoy seguimos en #introred con el protocolo IP. El protocolo IP es importantísimo, pues nos permite comunicar dos máquinas cualquiera de la red de redes. Funciona a grandes rasgos mediante direcciones IP, máscaras de red y routers.

Direcciones IP

En una red IP cada host tiene una dirección. Estas son números de 32 bits que se escriben en decimal por grupos de 8 bits separados por puntos. Por ejemplo, la IP de elbinario.net es 37.187.244.133. Al ser grupos de 8 bits, pueden ir de 0 a 255. Sin embargo, el 0 y el 255 se usan solamente en casos especiales que ya veremos más adelante.

Con una dirección IP es muy fácil identificar a alguien, porque los proveedores de internet por cuestiones legales llevan un registro de a qué cliente, con que nombre y apellidos, DNI y demás datos personales asignan una IP. Además, también registran la hora de la conexión. Por esto, si se quiere mantener privacidad en internet hay que evitar dejar rastros de la dirección IP verdadera. Por eso en elbinario.net nos ponemos tan pesados con el uso de tor, proxys y estas cosas.

Lo que he comentado antes de IP’s de 32 bits en grupos de 8 bit es cierto para IPV4. Este es el protocolo de red que hoy dia se usa mayoritariamente. Permite aproximadamente 2 ^ 32 hosts. Hay una organización a nivel mundial, la ICANN, que gestiona los distintos rangos de direcciones IP. El último bloque disponible se asignó a china y las IPV4 empiezan a escasear, aunque todavía podemos estirarlas unos años más. Por esto, se ha creado IPV6. Este es un protocolo de red nuevo que tiene capacidad para direccionar 2 ^ 128 hosts, un número tan enorme que dudo que lo consumamos jamás. Además, IPV6 incluye numerosas mejoras y simplificaciones en su cabecera que le dan mucho más sentido al protocolo.

Máscaras de red

Las máscaras de red son una forma de especificar rangos de direcciones IP. Para que esto se entienda mejor, vamos a ver un ejemplo de cómo se podría especificar un rango en decimal. Por ejemplo, para expresar el rango de 30 a 39 se podría escribir 30/1, de tal forma que el /1 indique que el primer dígito se mantiene igual ( el 3 ), y que todos los demás varian ( 30, 31, 32, 33, 34, 35, 36, 37, 38, 39 ). Y lo mismo se puede hacer en binario. Para especificar rangos de direcciones IP se escribe en el formato IP/Máscara.

Esta máscara indica cuantos dígitos binarios de la IP se mantienen constantes en ese rango. Por ejemplo, como una IPV4 tiene 32 bits, el rango 192.168.1.0/24 seríe desde 192.168.1.0 hasta 192.168.1.255. Aunque los rangos /8, /16 y /24 son muy fáciles de ver en decimal, para otros rangos como /12 ya se necesita saber binario sí o sí. Os dejo aquí unos cuantos ejemplos :

192.168.1.0/24 : 192.168.1.0 - 192.168.1.255 ( 256 hosts )
172.16.0.0/12 : 172.16.0.0 - 172.31.255.255 ( 1048576 hosts )
10.0.0.0/8 : 10.0.0.0 - 10.255.255.255 ( 16777216 hosts )

Por otra parte, existen rangos internos y externos. Los 3 rangos internos son los que acabo de dar arriba, y se refieren a ordenadores dentro de nuestra red local. Los externos se usan a nivel global en internet.

Esto se hizo porque se veía que las IPV4 se agotaban, y que era insostenible que una organización o empresa grande tuviese una IP en internet por cada uno de sus ordenadores, así se crearon estos rangos. Aunque mi IP interna pueda ser, por ejemplo, 192.168.1.165, la IP externa es la que el ISP le ha dado a mi router.

El router sabe a que IP mandar los datos que le llegan porque sabe que IP’s mandaron ciertos paquetes en la capa TCP, de forma que si tu conectas desde 192.168.1.165 a 37.187.244.133, este paquete IP, cuando pase por tu router de casa, su IP origen será sustituida por la que el ISP le ha dado al router. Cuando 37.187.244.133 responda con los datos pertinentes, el router de casa sabrá que esa petición la hizo 192.168.1.165 porque ha analizado los datos de niveles superiores a IP, como pueden ser TCP o UDP. Esto se conoce como NAT ( Native Address Translation ).

Además, NAT obliga a que si quieres montar un servidor en tu casa, tengas que reconfigurar tu router para que los paquetes que le llegen a cierto puerto ( por ejemplo, el puerto 80 del HTTP ), sean reenviados al servidor en la red interna.

Routers

Debido a que, obviamente, no todo internet está en el mismo cable, se necesitan máquinas que reenvíen el tráfico de una red a otra. Estas máquinas son los routers. No sólo es un router el cachivache que nos da el ISP y que tenemos en casa, sino que hay routers distribuidos por todo internet para poder encaminar el tráfico.

Los routers saben hacia donde reenviar los datos porque disponen de una tabla de enrutamiento. Todos los sistemas operativos en red disponen de una, la cual en sistemas POSIX se puede ver con el comando route, o, concretamente, en gnu/linux, con ip route que es un comando más moderno y recomendable. Por ejemplo, esta es la tabla de rutas de mi ordenador :

default via 192.168.1.1 dev eth0 
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.137

Default indica que se aplicarán sus reglas a cualquier tráfico que no concuerde con ninguna de las demás. Así que cuando se quiera mandar tráfico al exterior de internet, se enviará primero a 192.168.1.1 ( el router de casa ), confiando en que este sabrá enrutarlo. Y para enviar datos al rango 192.168.1.0/24, se especifica en la segunda linea que se debe usar el dispositivo eth0 ( la interfaz de red cableada ).

Ahora pasemos a ver la tabla de rutas de mi router ( a la cual, por cierto, tengo acceso porque he hackeado el router, que si no sería imposible ver dicha información ).

192.168.1.0/24 dev br0 proto kernel scope link src 192.168.1.1 
default dev ppp0.1 scope link

Como se puede ver la configuración del router es bien sencilla. Indica que se debe usar la interfaz br0 ( un bridge que une la wireless y la ethernet del router ), para el rango 192.168.1.0/24, y que para enviar datos a internet se use ppp0.1, que es la interfaz ADSL.

No todos los routers tienen configuraciones tan sencillas. De hecho, tan sólo el PC y router de casa tienen tan poca configuración, debido a que no hay mucho que decidir. Es obvio que en un router los datos que vayan a internet deben mandarse al ISP primero por la interfaz de adsl, fibra óptica o lo que sea. Sin embargo, a medida que el paquete vaya recorriendo la gran telaraña que es internet, pasará por routers con configuraciones muy complicadas. Por ejemplo, si conecto a un host que está en otro continente, el paquete pasará por mi router de casa, por 3 o 4 routers de mi ISP, por cableado para la ciudad, para el país, para el continente en el que esté y saldrá por los cables submarinos de fibra óptica intercontinentales en camino hacia el servidor.

En la siguiente entrega hablaré sobre el protocolo Ethernet, y en las siguientes muy por encima sobre el cifrado en el caso de redes wireless, y haré un anexo con comandos, configuraciones y utilidades de red que podemos usar bajo gnu/linux. También puede que explique algunos posibles ataques de red.

Saludos !!

Compartir

Deja una respuesta

Your email address will not be published. Required fields are marked *

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax