Curiosidades del protocolo IP

Iniciado por CrazyKade, Noviembre 14, 2019, 03:00:39 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Noviembre 14, 2019, 03:00:39 PM Ultima modificación: Noviembre 14, 2019, 03:12:06 PM por CrazyKade
Muy buenas a todos, hoy les traigo una curiosidad que estoy seguro que muchos desconocen y otros han pasado por alto cuando han estudiado las materias de networking en la universidad. Tratase de las conversiones de las direcciones IP tal como las conocemos a diferentes bases numéricas. ¿No entendiste nada? No importa, quédate, seguí leyendo que estoy seguro que este post te va a gustar.
Todos sabemos que una dirección IP (v4) consta de cuatro octetos decimales separados por puntos. También sabemos que nuestro querido protocolo utiliza direcciones de 32 bits lo cual nos da un espacio de direccionamiento de 2^32 direcciones. De estas, reserva 2^24 para redes privadas y 2^28 para multidifusión.

Cuando trabajamos con redes, hay que tener en cuenta que muchos de los conceptos que usamos habitualmente son solo eso: <<Conceptos>>, ya que en la práctica las cosas suelen ser muy diferentes y aquí nos encontramos con un claro ejemplo: El hecho de que nosotros escribamos una dirección IP mediante 4 octetos separados por punto, no significa ni que el ordenador lo entienda así, ni que así sea realmente una dirección IP. Los octetos y los puntos son solo una <<notación>>, algo que utilizamos a nivel humano para hacer parecer simple algo que en realidad no lo es tanto. Recordemos por favor que en ultima instancia todo se convierte a binario, tanto para que pueda ser computado como para que pueda ser transmitido por un medio físico, y las direcciones IP no son la exepción.

Tomando el caso de la famosa 192.168.1.1, si convertimos a binario los cuatro octetos obtendremos 11000000.10101000.00000001.00000001, bello ¿no? Pero esto no debería ser ninguna ciencia para nosotros a estas alturas. Lo que por ahí hemos pasado por alto es que así como cuando escribimos una IP en base 256 (octetos separados por puntos) y el ordenador internamente la traduce a binario, si escribimos una o la misma IP pero esta vez en una base diferente tal vez el ordenador lo traduzca igualmente a binario y todo marche correctamente. ¿Funcionará? ¡Vamos a probarlo!
En este momento mi gateway está en la dirección 192.168.1.1 y si le mando paquetes ICMP Request obtengo las respuestas correctamente:



Ahora vamos a cambiar de base a la dirección IP. Vamos a llevarla de base 256 a base 16 (hexadecimal). Luego de la conversión, obtenemos 0xc0a80101. Vamos con el ICMP Request:



Parece magia, pero no lo es. Simplemente el ordenador ha convertido a binario la dirección IP sin importarle en qué base está expresada y con esa información ha armado los paquetes ICMP.
Vamos con un último ejemplo: Esta vez convertiremos la IP desde su base nativa 256 a una base decimal, o base 10. Esto es muy útil cuando por algún motivo necesitemos manejar una dirección IP como un número entero.
El método de conversión es muy sencillo. Si tenemos una dirección IP de tipo a.b.c.d podemos aplicar la siguiente fórmula: (a x 256^3) + (b x 256^2) + (c x 256^1) + (d x 256^0).
Volviendo a nuestra dirección IP inicial, 192.168.1.1 si le aplicamos esta fórmula obtendremos 3232235777. Nuevamente volvamos a la línea de comandos a ver qué pasa al tirarle un ping.



Impresionante, ¿Verdad? Nuevamente el ordenador tradujo a binario la IP sin importar mucho que esté en base 10.
Pueden hacer la siguiente prueba en casa: Una de las IPs públicas de Google es 172.217.30.238 por tanto si la introducimos en la barra de búsqueda de nuestro navegador y damos enter, nos llevará sin pensarlo mucho al home de Google. Ahora podemos probar convertir esta ip a diferentes bases y probar de ingresarlas al navegador y ver qué pasa.

En fin, esto fue todo por este post, espero les haya gustado, déjenme comentarios y tal vez haya más. Un abrazo para todos y siempre es genial escribir en underc0de, comunidad a la que aprecio mucho.

CrazyKade


lol. ¿funcionara  para diferentes terminales?