No conozco una librería de funciones de Excel para manipular binarios, máscaras o direcciones IP, aunque escribiendo ésta entrada ví que la versión 2016 de Office ya tiene unas funciones que yo no conocía para hacer conversión entre bases numéricas. Sin embargo, en mi experiencia y contando conque soy ingeniero de sistemas y por ende sé algo de programación, he venido recolectando unas cuantas fórmulas con las que usualmente trabajo mis ip plannings o esquemas de direccionamiento. Así que si necesitan un conjunto de fórmulas para trabajar con redes IP, he aquí su respuesta 🙂 Aunque algunos lectores se pueden sentir tentados a sólo copiar el archivo final, les sugiero que lean detenidamente esta entrada para comprender las operaciones y aprender un poco de lógica de programación en un ambiente un poco hostil a la programación, lo encontrarán útil dado que muchas herramientas que usamos no están diseñadas para programar. Cuando terminen de leer ésta entrada recuerden dos cosas: 1) Yo no doy soporte de lo que hago/escribo en este blog, a veces respondo los comentarios otras veces no, a veces lo hago rápido otras no, 2) Uds. van a copiar estas fórmulas en sus propios trabajos y si no las comprenden probablemente no puedan extender su utilidad o incluso pueden no serles útiles. Teniendo en cuenta lo anterior, lean detenidamente y comprendan lo que hace cada parte de la fórmula. Disfrútenlo.

Resumen: Fórmulas de excel, intercambiar máscara en decimal por su longitud/prefijo, calcular dir. de red, convertir binario a decimal, hallar la clase de una IP, convertir una IP a cuatro decimales

Introducción

Para comenzar voy a dar un breve repaso sobre cómo funcionan las fórmulas en cualquier hoja de cálculo y en particular en Excel. Aunque estoy casi seguro que más del 80% de los lectores saben manejar bien su aplicativo les sugiero que lean esta introducción, porque nunca sobra algún tip nuevo para trabajar con esta versátil herramienta. De otro lado, si de verdad creen que no necesitan un repaso básico, pueden comenzar con la siguiente sección en la cual empezaré a desarrollar las fórmulas como tales.
Una celda puede contener valores en diferentes formatos, en particular en texto y numéricos, estos dos formatos determinan que se puedan hacer operaciones matemáticas o no (en el caso de los textos). Aunque las fechas parezcan texto, son internamente un número entero, por lo que a una fecha se le pueden sumar o restar dígitos enteros, cada unidad sería un día, por ende cierta fecha más 7 es la fecha del mismo día en la semana siguiente y esa misma fecha menos 7 sería la fecha del mismo día de la semana pero de la semana anterior. De otro lado, casi cualquier otra cosa que no sea una fecha se interpreta como si fuera un texto, por ende a éstos no se les puede aplicar ninguna operación matemática (suma, resta, multiplicación, división, potencia, raíz, logaritmo, etc). Este último es el caso de las direcciones IP, que una vez ingresadas en una celda se tratan como un texto, por ende, hay que separar sus octetos y luego convertirlas a números para poder aplicarles las operaciones de direccionamiento que conocemos. Otro ejemplo es una máscara escrita en su notación de longitud o prefijo, por ejemplo /24, aunque es un nro, debido al caracter “/” ya no se le pueden aplicar cálculos numéricos.

Para recordar un poco la dinámica de las fórmulas en una hoja de cálculo, recordemos que cualquier celda tiene una referencia compuesta por la letra que indica su columna y un nro que indica su fila, por ejemplo A4 es el contenido de la celda de la columna A y la fila 4. Una referencia en una fórmula llama el contenido de tal celda y le aplica una operación, una referencia es como una variable de programación o una letra en una ecuación algebraica. Si el contenido de una celda comienza por signo =, + o – implica que el contenido es una fórmula con referencias a valores de otras celdas, funciones y operaciones sobre esos valores. Cuando se termina de digitar una fórmula y se oprime enter aparece el valor resultante de realizar las operaciones escritas en ella. Por ejemplo, si una celda se llena con el siguiente contenido:
=(B2+C2)/2
en esta celda aparecerá el promedio de los valores que haya en B2 y C2 si éstos son numéricos, si no lo son aparecerá algún tipo de error dado que la operación es numérica (suma y división). P. ej: si en B2 está el valor 6 y en C2 10, la celda en la que se encuentra la fórmula anterior mostrará 8 (6+10)/2, es decir, el resultado de la operación. Una de las cosas que resulta útil de las fórmulas, es que una vez escritas se pueden variar los valores de las celdas referenciadas y automáticamente cambia el valor de la celda que contiene la fórmula (comportamiento por defecto). Es importante comprender que el contenido de la celda y su valor es distinto, la fórmula o su contenido “real” se ve en la barra de fórmulas debajo del menú de la aplicación y el valor es el que se ve en la celda misma (comportamiento por defecto). La tecla F2 permite editar la fórmula desde la celda misma, sin usar la barra de fórmulas.
Otra cosa importante es que cuando se arrastra o copia una fórmula, ésta se adapta a la posición a la cual la movemos, cambiando las referencias en la fórmula, por ejemplo, si copiamos la celda del ejemplo anterior (no el texto dentro de ella) y la pegamos una celda más abajo, al mirar el contenido de ésta nueva celda aparecería:
=(B3+C3)/2
Es decir, si la copiamos hacia abajo aumentan los números de cualquier referencia que contenga, de igual manera si la copiamos hacia la derecha aumentan las letras, por ejemplo =(D3+E3)/2. Consecuentemente, si copiamos las fórmulas hacia arriba aumentará el nro y si las copiamos hacia la izquierda disminuirá la letra. En este mismo sentido, podemos seleccionar un grupo de celdas vacías, presionar F2, escribir una fórmula y terminar con Control + Enter, de ésta forma la fórmula digitada se copiará (con las referencias cambiadas correspondientemente) en todas las celdas seleccionadas.

Algunas veces necesitamos que parte de la fórmula se quede fija, para ésto se usa el signo $ delante de la parte de la referencia que queremos fijar. Por ejemplo, si la fórmula fuera =$B3*C3/2, copiar esta fórmula hacia la izquierda o derecha no cambiaría la B, las demás sí; igualmente si la fórmula fuera =B$3*C3/2, copiar la fórmula hacia arriba o abajo no cambiaría ese tres que está marcado por el signo $, el otro sí (o los otros si hubieran más referencias). Se puede deducir, que si una referencia tiene este signo delante de sus dos partes nunca cambiará: $b$3 siempre será el valor de esa celda sin importar para dónde se mueva o copie la fórmula. La tecla F4 en excel fija una referencia, es decir, cuando estamos en una fórmula y el cursor esta en una referencia de celda, presionar F4 hace aparecer los caracteres de $ en la fila y la columna. Estas referencias fijas son muy útiles cuando tenemos un valor de referencia que quisieramos aplicar a todo un conjunto de valores pero variar de vez en cuando a manera de parámetro.
Las hojas de cálculo tienen operadores típicos de formulas matemáticas. Los paréntesis funcionan igual que en una calculadora o en operaciones matemáticas manuales: priorizan las operaciones entre parentesis para obligar a que se hagan en cierto orden, en el ejemplo del promedio se obliga a que se haga la suma antes de la división y a ese resultado se le divide por dos. De otro lado hay otros operadores no matemáticos, por ejemplo el & que concatena o pega el contenido de celdas, la coma, el punto y coma “;” que separa los argumentos de una función y finalmente una gran cantidad de funciones, por ejemplo elevar un nro a cierta potencia: =potencia(B2;C2), si en B2 está el nro 2 y en C2 el 5, la celda va a mostrar el valor 32, es decir, 2 a la quinta potencia, alternativamente se puede usar un caracter de acento circunflejo ^ para hacer lo mismo =B2^C2

También van a ser muy importantes ciertas funciones, por ejemplo las condicionales que nos permitirán crear fórmulas condicionadas, con ellas podemos simular programas simples. Por ejemplo la función si(COND;TRUE_STATEM;FALSE_STATEM) ejecuta TRUE_STATEM o FALSE_STATEM dependiendo si COND es verdadera o falsa, ambos argumentos pueden ser cualquier cosa, desde un valor fijo hasta una fórmula completa. Otra función que cualquier ingeniero debe conocer es el buscarv()/buscarh(), éstas funciones buscan un valor dado en una matríz o área de datos y de ella extrae un valor correspondiente al valor buscado. Veremos un ejemplo en los siguientes apartes y les aseguro que me lo agradecerán.

Como ésta no es una lección de hoja de cálculo, dejaré ese tema hasta aquí. El resto tendrán que deducirlo en el resto de la publicación junto con el uso de las funciones que vamos a usar.

Para quienes necesiten repasar subnetting les recomiendo una serie de publicaciones que hice hace algunos años en las que describo desde cómo diseñar subredes con VLSM hasta ejercicios fáciles y difíciles, allí comprenderán la dinámica del subnetting.

Para terminar con la introducción, es indispensable comprender que la hoja de cálculo no es la herramienta idónea para muchos de los análisis que quisiéramos hacer, así que muchas de las fórmulas o instrucciones que yo sugiero pueden resultar engorrosas o largas. Si en sus trabajos se encuentran frecuentemente con cálculos como éstos o más complejos, tal vez sea necesario conseguir una utilidad de administración de red que permita programar reportes o que ya los tenga disponibles.

Operaciones con máscaras de red: calcular la longitud dada la máscara en decimal, hallar la máscara dada la longitud

La cantidad de máscaras y prefijos correspondientes son muy pocos (unos 24 valores siendo estrictos) y en vez de buscar una fórmula compleja que tome cualquier máscara completa y la procese hasta llegar a contar sus unos, mejor usamos la primera y más útil de las funciones que vamos a ver: buscarv(). Este es el camino más fácil, les recuerdo, una hoja de cálculo no está hecha para estos menesteres, pero la función de buscarv/buscarh sí es muy útil y para eso está hecha la aplicación. Por ende, yo sugiero crear una tabla en la que ubiquemos las máscaras posibles y sus datos, por ejemplo: longitud, valor en decimal y formato binario. Como mencioné en la descripción, la versión 2016 de Excel ya tiene funciones que convierten entre diferentes bases (dec.a.bin, bin.a.dec, hex.a.bin, hex.a.dec, etc.). Empezando con la máscara 255.0.0.0 o /8, podemos construir una tabla que nos dé tanto máscaras en decimal, longitudes y su representación binaria por lo menos en el octeto incompleto. La siguiente es una imagen que nos puede dar una idea:

TablaMascaras

TablaMascaras

A partir de esta tabla es muy fácil hallar cualquier máscara y su longitud. Si tenemos una cantidad importante de datos, para los cuales necesitamos obtener alguno de los valores de la tabla usaríamos la función buscarv(). Créanme: su vida va a ser otra después de que sepan usarla 🙂

En resumen, ésta función busca un valor en la primera columna de una matriz y de ésta obtiene un valor correspondiente al encontrado. Vamos a describirlo más en detalle. La función recibe cuatro argumentos, el primero es un valor a buscar, por ejemplo un nro que represente la longitud del prefijo: 28 (numéricamente o como referencia a una celda); el segundo argumento es una matriz de la cual, la primera columna, debe contener todas las longitudes de máscaras (en el caso del ejemplo enteros de 8 a 31); el tercer argumento es el dato que queremos obtener, por ejemplo, cómo se escribe en decimal una máscara /28?, en el ejemplo la 5a columna, contando desde la columna inicial de la matriz (las de longitudes), contiene la máscara correspondiente en decimal, por ende el 3er argumento es 5. En otras palabras, buscarv busca el valor que indicamos en el primer argumento en toda la primera columna de la matriz y retorna el valor correspondiente. El último argumento indica si los datos están ordenados o no y tiene que ver con la eficiencia de la operación, en general siempre se puede poner falso en la última posición. Recuerden que cualquier cosa que no sea un número no se le pueden aplicar operaciones matemáticas, por eso la columna de longitudes no tiene el / que siempre le ponemos, eso arruinaría nuestro cálculo.

La fórmula sería:
=BUSCARV(A3,Tablas!E2:G25,5,FALSO)
asumimos que en A3 hay un nro de 1 a 32 que sería la longitud de la máscara, en la hoja Tablas, en la columna E y fila 2 estarían las longitudes posibles (de 1 a 32) y en la columna I estarían las máscaras en decimal. Si quisieramos el cálculo inverso (de la máscara en decimal obtener la longitud) hay que recordar que la función buscar() busca el primer valor en la primera columna, es decir que si queremos hallar una longitud dada la máscara en decimal, la primera columna debe ser las máscaras en decimal y en alguna columna después de ésta debería estar la longitud correspondiente.

En la hoja que dejo para descarga, pueden ver este ejemplo.

Obtener la dir. de red de una dir IP clase C

Como en los ejercicios típicos de subnetting, vamos a hacer nuestros cálculos con un solo octeto con el fin de simplificar, es decir, asumiendo que tratamos una dir IP de clase C. La última fórmula en esta misma publicación explica como convertir una IP completa en cuatro decimales, pero por lo pronto no nos preocuparemos de eso.
El cálculo de nuestra computadora (aplicar AND bit a bit de la máscara con la dir IP) es mucho más simple que el que vamos a hacer, en la hoja de cálculo no tenemos un cálculo directo, por ende tendremos que hacerlo en decimal, que, aunque no lo crean, es más difícil.

El dato clave es la longitud de la máscara (o en su defecto la máscara misma); en el punto anterior aprendimos cómo obtener este dato a partir de la máscara en decimal. Va a ser un poco difícil explicar mi razonamiento, así que les voy a dejar de tarea que lean sobre la división algebraica. Voy a aplicar la división algebraica para quitar los bits de la porción de host pero haciendolo todo en decimal. Disculpen pero no se me ocurrió una solución más simple con las herramientas a mano :/
Recuerden, nos ocuparemos sólo del último octeto. Sacaremos la potencia del bit más significativo de la porción de host (MSB por sus siglas en inglés), si la máscara es /28, el MSB en la porción de host es el cuarto (28+4=32) cuya potencia es 2^4=16, si el último octeto de la IP es 149, matemáticamente hablando 149 = 9*16+5, es decir que si restamos 5 tendremos un nro que es el menor valor que resulta ser múltiplo de 16, 149-5=144, éste es un valor válido de máscara /28 (tiene los últimos 4 bits en cero), en otras palabras, borramos en decimal los dígitos binarios que estaban en la porción de host. Finalmente, como sabemos, la porción de host son los ceros en la máscara, o los unos que faltarían para completar 32 (la longitud de una IP), es decir 32-Long, en nuestro caso 32-28=4. No les voy a hacer una demostración matemática, pero éste cálculo funciona para un octeto, es como borrar los bits que están en la porción de host, igual al AND que hace la compu 🙂 Es más difícil explicarlo. La función Residuo() nos arroja la parte entera que quedaría de dividir un nro por otro, en nuestro ejemplo 149/16 y la función arrojaría 5. En resumen, para obtener una máscara tendríamos que restar al valor del último octeto el residuo de dividir ese nro por la máxima potencia de su porción de host.

Lo anterior, escrito en fórmula de Excel sería:
=A2-RESIDUO(A2,2^(32-B2))
En A2 debe estar el último octeto de la IP, el 149, en B2 esta la longitud de la máscara, es decir 28. En otras palabras para cualquier valor de octeto que escribamos en A2 y longitud que escribamos en B2, aparecerá la dirección de red en la celda donde esté escrita esta fórmula.

Hallar la clase de una dirección IP

Este es un cálculo rápido que sólo tiene en cuenta las clases A, B y C. En nuestro ejemplo escribo que el resultado Clase C tiene un * dado que podría ser también Clase D o E.
Como saben las clases están determinadas por el valor del primer octeto de la IP, así que asumiremos que ya lo tenemos aislado como valor numérico en una celda. En el siguiente apartado veremos cómo separar una IP en sus octetos, lo dejo de último porque son las fórmulas más largas.

La función a usar acá es si(), que recibe una condición y dos argumentos más: lo que ejecutará si la condición es verdadera y lo que ejecutará si la condición es falsa. Cualquier parecido con la programación… no, no se parecen la verdad :/
La primera condición (lo que se preguntará el PC) será si el valor es menor a 128, en éste caso la IP sólo puede ser clase A y eso será lo que pondremos en el argumento de la porción verdadera, “A”; en el argumento de falso pondremos de nuevo la función si() pero preguntando si el valor es menor que 192, dado que ésta condición está en el apartado de falso de la función precedente, el valor ya debe ser mayor a 128. Si la segunda condición es verdadera, significa que el octeto es mayor o igual a 128 y menor que 192, por ende debe ser un valor clase B y finalmente cualquier otro valor sería clase C* (puede ser clase C, D o E). La fórmula es la siguiente:
=SI(G2<128,"A",SI(G2<192,"B","C*"))
Donde G2 es un valor de 0 a 255 y debe representar el primer octeto de una dirección IP.

Convertir una IP a cuatro celdas numéricas

Finalmente, aunque parecería fácil, las fórmulas que aparecen en ésta parte resultan largas y complejas, por lo que me tocó poner fórmulas intermedias en celdas auxiliares. Generalmente las direcciones IP están en una sola celda y por su formato la hoja de cálculo las interpreta como valores de texto y por ende no se pueden hacer los cálculos que hicimos en los apartes anteriores. Antes de eso debemos convertirlas a valores decimales.

Para separar valores en Excel usamos las funciones hallar() y extrae(), la primera encuentra la posición en la que se encuentra cierto caracter o parte de un texto, en nuestro caso queremos hallar los puntos para separar los octetos. Es necesario usar esta función porque los puntos no siempre van a estar en las mismas posiciones, por ejemplo en la dirección 10.10.10.10 el primer punto está en la posición 3 contando de izquierda a derecha, pero en la IP 100.10.10.10 está en la posición 4 y siendo más generales podría haber una dirección 1.10.10.10, pero para los demás puntos la posición va a ser más variable todavía. En cualquier caso la posición de los puntos va a estar cambiando dependiendo de la dirección IP. Por eso necesitamos un método general. La segunda función extrae una parte del texto, con base en una posición inicial y la cantidad de caracteres. Ya verán que estos argumentos nos complican mucho la vida.

Primero, vamos a hallar el primer punto en una dir IP. La fórmula sería:
=HALLAR(".",A2,1)
En A2 está por supuesto la dir IP completa como un texto, la fórmula busca un punto desde la primera posición a la izquierda (el nro 1) y devuelve su posición. Para hallar el segundo punto usamos la misma función, sólo que en esta ocasión le indicaremos que empiece a buscar desde un caracter después del primer punto:
=HALLAR(".",A2,HALLAR(".",A2,1)+1)
Como ven la función se va complicando, lo que en la primera fórmula era simplemente 1 para indicar que buscara desde el primer caracter, en ésta es hallar(...) porque necesitamos partir de la posición del primer punto. Como la fórmula se vuelve difícil de leer la he simplificado dejando la primera fórmula en una celda auxiliar y referenciando la celda en la que se encuentra tal cálculo:
=HALLAR(".",A2,B2+1)
suponiendo que en B2 está el cálculo de la primera función.
Finalmente, como ya supondrán, para hallar la posición del tercer punto repetiremos el llamado indicandole a la función que empiece a buscar desde la posición del segundo punto:
=HALLAR(".",A2,HALLAR(".",A2,HALLAR(".",A2,1)+1)+1)
También pueden simplificarla, se los dejo de tarea. De hecho a mí se me complicó mucho y dejé todo en celdas auxiliares 🙂

Y para qué queremos saber dónde están los puntos? Para dividir la IP en sus octetos con la función extrae(). Esta toma caracteres de una celda, desde una posición inicial indicada en su segundo argumento, el tercer argumento le dice cuántos caracteres debe extraer. Para obtener el primer octeto usaremos la siguiente fórmula:
=EXTRAE(A2,1,D2-1)
donde A2 es la IP completa y D2 es la posición del primer punto. En otras palabras, extrae desde el 1er caracter tantos caracteres como la posición del primer punto menos el punto mismo. Para obtener el segundo octeto le diremos a extrae() que tome de A2, la diferencia entre la posición del 1o y el segundo punto contando desde la posición del primer punto:
=EXTRAE(A2,D2+1,E2-D2-1)
Para el tercer octeto se repite el razonamiento, en E2 está posición calculada del segundo punto, pero para el último octeto no repetimos exactamente. En el último necesitamos que se extraiga una cantidad de caracteres que la dicta la posición del último punto y la longitud total de la IP. Ésto último lo hacemos con la función largo(). La fórmula sería la siguiente:
=EXTRAE(A2,F2+1,LARGO(A2)-F2)

Convertir decimales a binario y viceversa

Aunque alguna vez lo hice, muy torpemente con muchos pasos intermedios, preparando ésta entrada veo que la versión 2016 de Excel tiene las funciones dec.a.bin() y todas las combinaciones útiles de conversión entre dec, bin, hex y oct. Por lo tanto no voy a hacer ninguna fórmula para ésto que es realmente un dolor ya saben donde. Si quieren recordar y practicar conversión binaria les recomiendo la lectura Conversión binaria fácil, en esa publicación describo algunos trucos que hacen mucho más fácil la conversión de binario a decimal y viceversa manualmente.

Sugerencias adicionales

Recuerden usar bien los caracteres de $ para fijar las referencias, cuando se arrastran o copian las fórmulas estas cambian correspondientemente, a veces desconcierta un resultado extraño o sobre todo tipos de errores que nunca hemos visto y, al principio, nos podemos tardar un buen rato comprendiendo que queríamos que las fórmulas de toda una columna o fila referenciaran siempre a la misma celda. También sé que hay otras formas de hacer todo lo que hicimos, haciendo macros por ejemplo, y estoy seguro que entre los lectores van a aparecer ideas creativas para hacerlo aún más fácil, pero a veces es más importante la usabilidad que la fórmula misma. Por lo anterior, también les doy un par de tips para que sus hojas de cálculo sean más fáciles de usar. Por favor dejen en sus comentarios las ideas que se les ocurra para hacer más fáciles los cálculos o alguna otra sugerencia.

Estas aplicaciones vienen con muchas herramientas que se pueden usar para evitar que los usuarios se confundan: bloquear celdas para evitar su edición, limitar los valores de las celdas a rangos específicos o tipos de contenido, dar formato personalizado a las celdas, etc.. Yo usualmente formateo en colores pastel las celdas que contienen fórmulas para evitar escribir valores directamente, obviamente lo mejor sería bloquear tales celdas.

De otro lado, a veces queremos usar la misma fórmula para hacer cálculos diferentes sobre una columna completa, tenemos dos alternativas: escribir dos fórmulas en diferentes columnas variando sólo el valor que queremos cambiar o escribir una sóla fórmula con un parámetro fijo. A ésto último lo llamaremos parametrizar, de tal manera que cambiando un valor se obtendrá una columna completa de información diferente. Un caso sería que una celda tenga la clase (A, B o C) y dependiendo de éste valor se escriba la máscara por defecto correspondiente o se calcule la cantidad de hosts por subred. Para estos casos es importante recordar que el parámetro debe estar fijo en la fórmula (con el signo de $), sino, la referencia va a cambiar cuando copiamos la fórmula. Otro problema con el cual podemos tropezar parametrizando es que la misma columna nos arrojará diferente información cada vez que cambiamos el valor del parámetro, por ende no podríamos comparar directamente el impacto de la variación del parámetro. Yo en estas situaciones copio la columna y la pego como sólo valores, de tal manera que no se copie la fórmula sino sus resultados, este "truco" sirve en muchas ocasiones, por ejemplo con los resultados de las tablas dinámicas. Sobre éstos valores brutos podemos hacer análisis, comparaciones o incluso operaciones complejas sin problemas y pueden representar el estado de las cosas en determinado momento.

Conclusiones




  • La siguiente es una hoja de cálculo en Excel con ejemplo de las funciones descritas en ésta entrada: Hoja de cálculo de ejemplo. A mí me sacó un error de coincidencia de las extensiones, espero que a uds no :(, confíen que el archivo no es malicioso 😉

Como ven, una hoja de cálculo es una herramienta muy útil para administrar redes o diseñar soluciones IP. Alguna vez escuché decir a alguien que "qué sería de un ingeniero sin Excel" y ... pues sí :D. La verdad es que hoy en día es indispensable saber aprovechar las herramientas que vienen en las hojas de cálculo, sobre todo porque la cantidad de datos con la que trabajamos suele ser muy grande para hacer cálculos manuales o sólo sumas y promedios. De otro lado, para ciertos propósitos especializados no es la herramienta idónea, si en su trabajo le toca hacer cosas más complejas que las que hice acá, probablemente su empresa necesite usar o comprar una aplicación especializada que o bien tenga herramientas especializadas que hagan los cálculos que se necesitan o que se puedan programar para una versatilidad total. A continuación les dejo un archivo de Excel con todos los ejemplos que hemos trabajado en ésta publicación. Gracias y hasta la próxima.

Deja un comentario