Buscar este blog

jueves, 17 de enero de 2013

SUBNNETING

Esta es una entrada para describir la técnica actual de creación de subredes (subnetting en inglés), que resulta un poco compleja al principio, pero si se entienden los principios básicos es muy fácil. Todos los que hemos pasado por un curso de CCNA la conocemos y el nombre técnico es VLSM por sus siglas en inglés Variable Length Subnet Masks o creación de subredes de longitud de máscara variable. Ésta entrada supone el conocimiento básico de las direcciones IP con clase y la función de la máscara de red/subred en una dirección IP asignada a un dispositivo de red. Estos tutoriak ayudara a los alumnos a una mejor comprension de la tecnica de subneting ya que explica de otra manera el subnetteo , una alternativa interesante a la explicada en la curricula de ccna, este materia fue bajados de un blog Cesar Cabrera a quien agradecemos su publicacion.. Antes de comenzar hay que aclarar un término que se va a usar en todo el documento: máscara de subred. La máscara consiste en 32 bits con los cuales cada nodo de una red IP determina si los paquetes se dirigen a una red diferente a la propia. La estructura de esta máscara es igual que la de la dirección IP pero su composición es una secuencia de unos seguida por una secuencia de ceros, la secuencia de unos determina qué parte de una dirección IP es la dirección de red, con frecuencia se dice que la máscara de subred delimita la parte de red y de host de una dirección IP. Dado que la máscara es una secuencia de unos seguida de ceros, ésta se suele representar con un número que indica cuántos unos tiene (ya se sabe que al principio) y a ese número se le suele llamar prefijo (estrictamente hablando, el prefijo incluiría la dirección de subred). Para que quede más claro, una máscara 255.255.255.0 tiene 32 bits de los cuales los primeros 24 son unos y los últimos 8 son ceros, por lo tanto el prefijo es /24. En éste documento el término máscara hará referencia tanto a la máscara de subred en decimal y como al prefijo recién descrito, es decir, serán equivalentes. Esquemas de máscara fija Primero hay que repasar la base de la creación de subredes, por lo menos para entender por qué el término máscara variable. Un esquema de direccionamiento es una forma de decir cómo se va a repartir la capacidad de numeración de hosts que tiene cierta red, básicamente consta de una dirección de red base, una máscara de red, una máscara de subred y la enumeración de las subredes. Usualmente la máscara de red (la de la red base) suele ser una dirección de clase, es decir, una que usa uno, dos o tres octetos (clase A, B y C respectivamente). Para ilustrar la idea, un esquema de direccionamiento consistiría en lo siguiente: Dirección base y máscara: 192.168.11.0/24, ésta es la dirección que nos proporcionan y de la cual sólo podemos variar arbitrariamente la máscara (alargarla solamente) y los números en la parte de host (el último octeto). Nueva máscara (subredes): /27, si agregamos 3 bits a la máscara original (24+3=27), tendremos la capacidad de dividir el potencial de hosts (255) en 8 subredes (2^3) y en cada subred podríamos tener hasta 32 host en potencia (2^5), pero no podemos usar el host #0 ni el host #31 ya que éstas direcciones especiales corresponden a la dirección de red y de broadcast para cada subred (parte de host toda en 0 y toda en 1 respectivamente). Enumeración de las subredes: la primera subred (después de la cero) va a ser numerada como 192.168.11.32/27, la primera dirección asignable sería 192.168.11.33 (la cero no se puede usar) y la última sería 192.168.11.62 (hay que recordar que la 63 es la dirección de broadcast -parte de host toda en unos- para ésta subred y no se puede usar para un host ni un enrutador). Si quisieramos enumerar más subredes con la misma máscara, además de la primera (con ésta máscara tenemos 8 subredes en total, 27-24=3 bits de subred y 2^3=8), la numeración de las subredes aumentaría en saltos de a 32 (2^5) y así tendríamos las otras subredes hasta llegar al límite. Es decir, las siguientes subredes serían 192.168.11.64/27, 192.168.11.96/27, 192.168.11.128/27, 192.168.11.160/27, 192.168.11.192/27, 192.168.11.224/27 y para cada una tendríamos una dirección de broadcast y un rango de direcciones asignables a los hosts de cada subred. Note que cada dirección de subred es la anterior más 32, eso sería si usamos máscara fija. En este esquema, todas las redes tienen la misma capacidad de numeración de hosts, es decir, todas las subredes pueden numerar hasta 30 hosts (2^5=32 menos la dir. de red y de broadcast que no se pueden asignar a ningún host) y esta capacidad está dada por la máscara /27 que agrega 3 bits para subred a la máscara original, alargandola y dejando 5 bits para numerar hosts. Ésta capacidad fija se nota en que la máscara de todas las subredes es la misma, lo único que varía en cada subred es la dirección y sus parámetros (dir. de red/broadcast y rango de direcciones asignables), eso la hace poco flexible y desperdicia capacidad de numeración de la red original. Usando máscara fija, los requerimientos se pueden presentar de dos formas: pidiendo una cantidad de subredes o pidiendo una cantidad de hosts por subred. En el primer caso determinar la longitud de la máscara es fácil y directo, dado que sólo debo agregar los bits que se necesitan para cierta cantidad de subredes, por ejemplo, para 5 subredes necesito 3 bits, ya que con tres bits puedo numerar hasta 8 subredes (2^3). Por otro lado, si me piden una cantidad de hosts no es posible determinar directamente la longitud de la máscara, debo determinar la cantidad de bits de hosts necesaria y luego restarla a los bits de hosts que tengo en la red base y esa diferencia es el aumento en la máscara de subred, por ejemplo, si la máscara base es de 24 bits y me piden redes de por lo menos 20 hosts, para éste número necesito 5 bits (2^5=32-2=30) y estos 5 bits se los quito a los 8 de host que tenía para hosts en la máscara inicial, es decir 3 bits para subredes, por lo tanto la máscara que debería usar para redes de por lo menos 20 hosts sería 24+3=27 bits. Esquemas de máscara variable Con la máscara variable se resuelven los problemas mencionados, tanto la falta de flexibilidad como del despercicio de direcciones. Básicamente lo que se hace en VLSM es permitir que la información de direccionamiento se use sólo cuando es efectiva, es decir, cuando se asigna un rango de direcciones, a tal rango se le asigna una máscara de subred dependiente de la capacidad de hosts que debe numerar y el resto se deja en reserva para otras subredes o para uso futuro, con la posibilidad de que el tamaño de las subredes futuras puede ser diferente al de las ya asignadas. Para ilustrar vamos a usar el mismo ejemplo anterior: la dirección base es 192.168.11.0/24, tenemos el último octeto para asignar subredes y hosts y vamos a usar VLSM para hacerlo. La primera diferencia grande es que en el anterior esquema si, por ejemplo, nos decían que necesitaban redes de 5, 10 y 30 hosts, la única posibilidad era hacer redes de a 30 hosts y esperar que el esquema soportara eso, en otras palabras, las redes de 5 hosts tenían una capacidad ociosa de 25 hosts y las de 10 tenían 20 hosts que probablemente no se usarían nunca. En VLSM, podemos elegir máscaras según las necesidades individuales de cada subred, es decir para 5 hosts necesito 3 bits, por lo tanto sólo dejo tres bits para hosts y el resto para numerar la subred (24 de la máscara original más 5 de la subred = 29), para la red de 10 hosts necesito 4 bits, osea que puedo usar para la subred una máscara de 28 bits y para la de 30 hosts necesito 5 bits (2^5=32, puedo usar el resto para la subred) uso una máscara de 27 bits. Ya establecidas las máscaras según la capacidad, puedo asignar las direcciones concretas, preferiblemente tomando las subredes más grandes de los números más bajos. En nuestro caso empezaré con la red más grande que es de 30 hosts y por lo tanto necesita una máscara de 27 bits. Si no tengo direcciones asignadas todavía, asumo un esquema de dirección fijo y numero ésta primera red como si fuera la número uno (sin usar la cero). Esto es una preferencia personal, lo verdaderamente importante es que ninguna dirección de host/subred combinada con su máscara esté dentro del rango de numeración de otra subred. Los enrutadores Cisco detectan este tipo de conflicto y no dejan asignar direcciones de ésta manera. Otra forma menos compleja de comenzar sería empezar con la subred cero y eso es perfectamente válido si se usa VLSM, en éste caso la dirección de la primera subred sería 192.168.11.0/27 (la única diferencia con la red base es la máscara más larga) y ocuparía el rango de .1 hasta .30 en hosts válidos y .31 sería la dir. de broadcast. En mi estilo (dejando una red del tamaño de la más grande sin asignar al principio del rango), la dirección específica de la primera subred sería 192.168.11.32/27, igual que el ejercicio con máscara fija, pero en éste caso, el resto de la capacidad de la red original sigue disponible con máscaras de otros tamaños como veremos. Con ésta subred asignada, quedan en uso los números de .33 hasta .63 (dir. de broadcast) y por lo tanto la siguiente dirección de subred debe estar justo después de ese rango (o antes ya que no usamos la cero). Las siguientes direcciones a asignar serían las de la subred de 10 hosts. Recordando lo ya dicho sobre esta red, para numerar hasta 10 necesito por lo menos 4 bits, ya que 2^4=16, restando las direcciones de red y de broadcast tengo 14 direcciones válidas de host. Si voy a usar 4 bits para la parte de host me quedan 28 para la parte de subred (32-4=28), esta subred usaría una máscara /28 por su capacidad. Entonces la numeraríamos después de la ya asignada, .32. La siguiente dirección usable sería .64, dado que la primera subred asignada ocupa hasta la dirección .63, por lo tanto la siguiente subred sería 192.168.11.64/28, con esa máscara, sabemos que las direcciones asignables van desde la .65 hasta la .79, como vemos, en éste caso la máscara nos obliga a sumar sólo 15 direcciones más, si nos pasaramos de eso, la máscara haría que la red fuera diferente, ya que la dirección .80 con máscara /28 tiene sus últimos 5 bits en cero, que son los bits que quedan para hosts, por lo tanto es una dirección de red y es diferente a la dirección de red de cualquier host entre .65 hasta .79. Como vemos, seguimos con el resto del rango libre para asignar como queramos, y como hemos numerado las redes con números consecutivos, sabemos perfectamente qué rangos no se pueden usar para otras subredes. Nos queda la última subred de 5 hosts. Para numerar 5 hosts elegimos una máscara de 29 bits, dado que sólo tenemos que dejar 3 bits para hosts y podemos usar los primeros cinco para subred (24+5=29). Sabemos que la siguiente subred debería estar fuera de los números ya asignados y la última subred terminaba en .79, por lo tanto la siguiente sería .80. La máscara nos dice qué direcciones quedan reservadas, 2^3 hosts potenciales, por lo tanto las direcciones asignables son .81 hasta .86 con dirección de broadcast .87, todas las con máscara /29 y aún nos quedan direcciones para asignar (un rango escondido al principio desde .0 hasta .31 y desde la .88 que sería la siguiente subred hasta el máximo del rango .255). Analicemos en binario lo que acabamos de hacer. Tenemos tres subredes, la subred 192.168.11.32/27, la 192.168.11.64/28 y la 192.168.11.80/29. Los últimos octetos serían de la siguiente manera en binario: Último octeto: 00100000 (.32/27) Máscara 11100000 Último octeto: 01000000 (.64/28) Máscara 11110000 Último octeto: 01010000 (.80/29) Máscara: 11111000 Como se observa, las combinaciones de direcciones de red y máscaras elegidas nunca son iguales, es decir, aunque las últimas dos direcciones de subred coinciden en sus primeros dos bits, la máscara las distingue unívocamente. Otra cosa notable, es que las direcciones de red siguen teniendo, en sus bits de hosts, sólo ceros. Ésto último es muy importante, dado que si se asigna una red grande después de una pequeña, puede ser necesario dejar un espacio sin asignar para cumplir el requisito de tener los bits de host en cero. Por ejemplo, si se deseara asignar una subred de 25 hosts después de la última, necesitaríamos una máscara de /27 (2^5-2=30 hosts) y la siguiente dirección de red después de la .88/29 con ésta máscara (/27) sería .96/27 que tiene sus últimos 5 bits en cero. Notese que entre .88 y 96 queda un espacio disponible, pero que sólo se puede usar para redes de tamaño pequeño, por ejemplo una red de 6 hosts (2^3-2) o dos redes de 2 hosts (2^2-2). En el esquema de ejemplo, si quisieramos asignar una nueva subred, primero estableceríamos cuántos hosts debe numerar, seleccionamos la máscara adecuada para la cantidad de hosts y buscamos un rango de direcciones que no esté asignado, bien sea antes de la primera gran subred (192.168.11.32/27) o después de la última pequeña subred (192.168.11.80/29).

DIFERENCIAS VLSM,CIDR Y SUMARIZACION

¿Qué es VLSM? VLSM es la sigla de Variable Length Subnet Masks o, en español, máscara de subred de longitud variable o máscara variable. Básicamente es la técnica por la cual se diseña un esquema de direccionamiento usando varias máscaras en función de la cantidad de hosts, es decir, la cantidad de hosts determina la longitud de la máscara o longitud del prefijo de red. ¿Y para qué el término? pues para diferenciarlo de la antigua forma de diseñar subredes: máscara única o máscara fija, es decir, cuando diseñabamos con ese paradigma, sólo se podía elegir una máscara de subred o longitud del prefijo de red, lo cual implicaba que la red más grande mandaba y que las redes más pequeñas estaban obligadas a ser ineficientes porque tendrían obligatoriamente una capacidad sin uso que, probablemente, nunca se iba a necesitar y nunca se podría recuperar porque el esquema sólo admite una sola máscara. ¿Qué es CIDR? CIDR es una sigla que significa Classless Inter-Domain Routing o, en español, Enrutamiento interdominio sin clase y consiste en la capacidad de un enrutador de usar protocolos que no consideran las clases como los límites naturales de las subredes. En otras palabras, CIDR significa que un protocolo de enrutamiento tiene en cuenta el direccionamiento VLSM en sus actualizaciones de enrutamiento y puede enviar actualizaciones incluyendo las máscaras de subred (porque no es una sólo sino una diferente para cada subred). El objetivo de CIDR es permitir un esquema de sumarización flexible, en especial para los enrutadores en el backbone de Internet que eran aquellos cuya tabla de enrutamiento era tan grande que estaban llegando a su límite antes de tiempo. ¿Qué es sumarización? Sumarización es una transliteración de la palabra inglesa summarization, que realmente se debería decir resúmen de rutas. Ésta es la técnica que usa un enrutador/protocolo de enrutamiento que envía actualizaciones de enrutamiento en las que una dirección de red representa la conectividad con varias redes que tienen un prefijo común. La idea es que si un enrutador tiene detrás suyo varias redes/subredes que tienen una porción de su parte de red igual entre sí, éste enrutador puede enviar en sus actualizaciones de enrutamiento hacia adelante (suponiendo que son sólo atrás y adelante) una sola dirección de red para todas las redes que tienen el mismo prefijo y esa dirección especial es la parte que tienen en común como si fuera una sola subred con la máscara indicando la parte en común de las que tiene detrás suyo. Un ejemplo habla más: las direcciones 10.1.0.0/16, 10.10.0.0/16, 10.15.0.0/16, todas tienen en común los primeros 12 bits, es decir que éstas tres subredes se podrían resumir en la única dirección 10.0.0.0/12, si éstas redes están “detrás”, el enrutador enviará en sus actualizaciones hacia “adelante” una sola dirección de red para ellas en vez de las tres

TRUCOS DE CONVERSION BINARIA

PRIMER TRUCO CONVERSION BINARIO A DECIMAL A lo largo de mi experiencia como docente he notado dificultades en muchos alumnos para lograr una completa comprension de la tecnica de subnneting,fundamentalmente por la base del subneting es la compresion de los sistemas de numeracion binario y decimal, navegando en la web he encontrado unos trucos interesantes que les puede ayudar a los alumnos a entender mejor la conversion de binario a decimal Sistemas de numeración posicionales El sistema de numeración binario es una forma de contar usando sólo los dígitos 0 y 1, similar a nuestro sistema decimal que usa los símbolos 0 a 9. Ambos sistemas se denominan posicionales dado que la posición de un dígito particular en una cifra determina qué cantidad representa (o cuánto vale), por ejemplo en la cifra 2153 el dos vale 2000 unidades (de lo que sea que se esté contando), el 1 significa 100 unidades, el 5 representa 50 y, finalmente, el 3 son sólo 3 unidades, es decir, 2153 son 2000 + 100 + 50 + 3 = 2153. Si el número anterior no fuera 2153 sino 2152, aunque el número 2 aparece dos veces en la cifra, significa dos cantidades totalmente diferentes, uno representa 2000 unidades y otro sólo 2. El sistema decimal toma su nombre del hecho de que usa 10 dígitos distintos (lo cual coincide con la cantidad de dedos que tenemos en las manos) y también se le llama sistema en base 10. Cuando hay posibilidad de confusión sobre la base de una cifra se agrega un subíndice al final de ésta para notar la base, p. ej.: 10010 es el valor cien, pero representa una cantidad totalmente diferente de 1002 que en realidad representa 4 unidades. En un sistema posicional, un dígito en la primera posición (de derecha a izquierda) representa unidades rasas, es decir, 9 son nueve unidades, 5 son 5 unidades, pero si la cifra es igual o mayor a la base (10 en éste caso) se usa la posición para indicar que el dígito representa mucho más que los que vale solito (o en la primera posición), por ejemplo diez unidades se representan en decimal como la cifra 10 porque el 1 ya representa una decena (10×1 = 10) más cero unidades rasas (10×0 = 0), así mismo 100 significa 1*100, más cero decenas y cero unidades. Como se observa, un dígito particular se debe multiplicar por el valor de su posición (contando las posiciones desde cero) para saber cuántas unidades representa, por ejemplo: 300 es 3*102 = 3*100 = 300. El valor o peso de un dígito es la base elevada a la posición que ocupa contando desde cero, es decir, el peso de la primera posición de una cifra en base 10 vale 100, es decir 1, la segunda posición vale 101, es decir 10 unidades, la tercera es 102 y así sucesivamente. Los conceptos anteriores son muy fáciles de comprender porque estamos acostumbrados a contar en sistema decimal usando base 10, sin embargo, cuando pasamos a otra base se nos dificulta un poco porque ya no es intuitivo saber cuánto representa una cantidad escrita en otro sistema, por ejemplo si yo escribo la cifra 11002 no es evidente cuántas unidades representa, como es base 2, significa que cada dígito se multiplica por una potencia de dos y no una de 10 como acostumbramos. Hay que notar dos cosas antes de seguir: 1) Cualquier número elevado a la cero es 1 (20=1, 80=1, 100=1, etc.), 2) Todos los sistemas de numeración cuentan las posiciones desde cero; de lo anterior se deduce que el número menos significativo en cualquier sistema de numeración representa unidades. Primer truco: potencias de dos Empezando con el sistema binario, las potencias de dos son muy fáciles de deducir (o calcular) porque son el doble del valor anterior, si 20=1, 21=2, 22=4, 8, 16, 32, 64, 128, 256, 512, 210=1024, etc. Según lo anterior, saber cuántas unidades representa un número en binario es un juego fácil: si un dígito sólo puede ser cero o uno, lo único que tengo que hacer para saber cuánto representa una cifra binaria es sumar el valor de las posiciones en las cuales hay unos en la cifra binaria. Por ejemplo: 1100 es 8+4=12, porque el último 1 vale 23=8 y el penúltimo vale 22=4. En teoría, se multiplican los unos por el valor de su posición y se suman, pero esta definición es más complicada de lo que debe, en realidad el binario es el sistema de numeración más simple que existe, en una cifra en decimal la multiplicación y la suma son complicadas porque un dígito puede ser un número de 0 a 9 pero en binario sólo es 1 ó 0, es decir se cuenta (y suma) la posición o no, lo cual lo hace intuitivo, casi trivial. En conclusión, el primer truco es saberse las potencias de dos. Segundo truco: potencias de dos menos uno El primer nivel de dificultad está resuelto si sabemos cómo funcionan los sistemas posicionales particularmente el sistema binario, es decir, sumar potencias de dos. Llamemos a éste primer truco potencias de dos, dado que consiste en saber las potencias de dos o saber calcularlas (trivial, ¿o no?). Sin embargo, a pesar de lo fácil que puede ser obtener éstas potencias y sumarlas, un número binario grande puede llegar a ser difícil de convertir si hay que hacer muchas sumas, por ejemplo el número 11111112 significa sumar 64+32+16+8+4+2+1 = 127. El cálculo anterior no es física cuántica pero puede resultar engorroso, por lo cual resulta muy útil notar un par de patrones interesantes que son la base de los otros trucos. Un número binario que sólo contenga un bit en uno y el resto en cero es trivial: debe ser una potencia de dos y sólo tengo que recordar que las potencias de 2 comienzan en el valor 1 (20=1, el bit menos significativo) y duplico el valor cada vez que aumente de posición hasta llegar a la posición del bit que está en uno: 10000000 = 128, porque si duplico 1 siete veces obtengo 128 (27). De la misma manera, para saber cuánto es el número 10000000000000 = 8192 (213) (duplico 1 13 veces) o uno más fácil: 100000 es 32 (25 o 1 duplicado 5 veces). Luego hay que notar otro patrón interesante (segundo truco, potencias de dos menos uno): cualquier número que sea una potencia de dos menos uno está compuesto por una serie de unos: 11111 = 31 (note que 31 es 32-1), 63=111111 (64-1), 1111111=127 (128-1) y así. Tengan en cuenta que cuando se calcula un número de éstos, el bit más significativo no es la potencia de 2 a la que le restamos 1, es la potencia de dos anterior a la que le restamos 1 (los bits más significativos en los tres ejemplos anteriores son 16, 32 y 64). Yo les recomiendo practicar mucho y comprobar todo resultado hasta que se tenga suficiente práctica en ello. Tercer truco: mezclarlos anteriores El peligro de los trucos anteriores es que no se hagan los cálculos con cuidado, los trucos descritos no implican que podamos deducir cuánto representa una cifra binaria con sólo mirarla, de hecho, el error más común en éste tipo de conversiones es no contar bien las potencias de dos, por ejemplo comenzando por 2 (21) en vez de por 1 (20) o simplemente contando mal la cantidad de dígitos (contar 6 bits en vez de 7 o 9 en vez de 8). En otras palabras, reconocer los patrones nos ahorra un trabajo que puede ser engorroso pero no nos libera de calcular y tener mucho cuidado con la conversión. Lo mejor para aprender algo es no mecanizarlo desde un principio, sino dejar que la mecanización aparezca con la maestría (muchos ejercicios), así que no se confíen. Una vez que recordamos los dos trucos anteriores (potencias de dos y potencias de dos menos uno), se puede jugar con el concepto de numeración posicional para encontrar más números sin tener que hacer cálculos complejos. Por ejemplo, ¿qué valor decimal representa el número 10001111?, el sistema posicional nos dice que hay que sumar todos los unos multiplicados por su potencia, sin embargo según el primer truco, el bit más significativo vale 128 (27) y según el segundo truco, los últimos cuatro bits deben ser una potencia de dos menos uno (de hecho es 16-1, porque el bit nro. 5 es 24=16), por lo tanto el número descrito es 128+15=139, en vez de 128+8+4+2+1. De nuevo, no es que sea mecánica cuántica pero sí nos ahorra algún minuto de cálculos, sobre todo cuando hablamos de números grandes, por ejemplo: 1000011111111, el cual, inmediatamente sé que es 4096+255=4351, lo que sin los “trucos” sería 4096+128+64+32+16+8+4+2+1. El primer cálculo se puede hacer en la mente con confianza, el segundo no necesariamente (o bueno sólo algunas mujeres ;) ). Cuarto truco: restar en vez de sumar La última recomendación para facilitar la conversión mental es ser muy práctico(a). Con los patrones binarios descritos en las secciones anteriores, se tienen herramientas para lograr una capacidad interesante de hacer conversiones rápido, mentalmente y con mucha confianza, sin embargo no todos los números binarios caerán en las categorías anteriores. Existen números cuya conversión es más difícil, por ejemplo, el número 11110000 no se ajusta a ninguno de los patrones anteriores, la única solución a éstas alturas es sumar las potencias de dos: 128+64+32+16=240. Una forma más fácil de haber hecho el cálculo anterior sería haber notado que 8 bits en uno son 255 (28 – 1=255), sin embargo a éste número le faltan los primeros 4 bits, en otras palabras, podría haber hecho 255-15=240, el cual es un cálculo más fácil que el primero. Ésta última forma de calcular los valores decimales es muy poderosa, porque nos invita a pensar que cuando un número binario tiene muchos unos, es más fácil tomar la potencia de dos menos uno más cercana (mayor que el número objetivo) y restarle los valores de las posiciones en las cuales haya ceros: 1111110111, en éste número hay 10 bits, es decir, debe ser una cantidad cercana a 1024 (210) pero restándole la potencia 3 (23=8), es decir 1024-8=1016. Y así mismo, si el número no tuviera sólo un cero sino unos cuantos, todavía podría ser más fácil restar que sumar. En otras palabras, tomar siempre como pivote del cálculo un número que sea una potencia de dos menos uno: piensa diferente, no potencias de dos sino potencias de dos menos uno.