Calculadora Ip Subnetting

Calculadora IP Subnetting :root { –primary-blue: #004a99; –success-green: #28a745; –light-background: #f8f9fa; –white: #ffffff; –gray-text: #6c757d; } body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; background-color: var(–light-background); color: var(–gray-text); line-height: 1.6; margin: 0; padding: 20px; } .loan-calc-container { max-width: 700px; margin: 30px auto; background-color: var(–white); padding: 30px; border-radius: 8px; box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1); } h1, h2 { color: var(–primary-blue); text-align: center; margin-bottom: 20px; } .input-group { margin-bottom: 20px; display: flex; flex-direction: column; } .input-group label { margin-bottom: 8px; font-weight: bold; color: var(–primary-blue); } .input-group input[type="text"], .input-group input[type="number"] { padding: 10px 12px; border: 1px solid #ced4da; border-radius: 4px; font-size: 1rem; box-sizing: border-box; /* Include padding and border in the element's total width and height */ } .input-group input[type="text"]:focus, .input-group input[type="number"]:focus { border-color: var(–primary-blue); outline: none; box-shadow: 0 0 0 0.2rem rgba(0, 74, 153, 0.25); } button { background-color: var(–primary-blue); color: var(–white); border: none; padding: 12px 20px; border-radius: 4px; font-size: 1.1rem; cursor: pointer; transition: background-color 0.3s ease; width: 100%; margin-top: 10px; } button:hover { background-color: #003366; } .result-section { margin-top: 30px; padding: 20px; background-color: var(–primary-blue); color: var(–white); border-radius: 4px; text-align: center; } .result-section h3 { margin-top: 0; color: var(–white); } #subnetting-results { font-size: 1.3rem; font-weight: bold; margin-top: 10px; word-wrap: break-word; } .article-content { margin-top: 40px; padding: 25px; background-color: var(–white); border-radius: 8px; box-shadow: 0 2px 10px rgba(0, 0, 0, 0.08); } .article-content h2 { text-align: left; color: var(–primary-blue); margin-bottom: 15px; } .article-content p, .article-content ul, .article-content li { margin-bottom: 15px; color: var(–gray-text); } .article-content code { background-color: var(–light-background); padding: 2px 6px; border-radius: 3px; font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; } .article-content strong { color: var(–primary-blue); } /* Responsive adjustments */ @media (max-width: 600px) { .loan-calc-container { padding: 20px; } .input-group label { font-size: 0.95rem; } button, .result-section { padding: 10px 15px; font-size: 1rem; } #subnetting-results { font-size: 1.1rem; } }

Calculadora IP Subnetting

Resultados del Subnetting

Introduzca una dirección IP y máscara de subred para ver los resultados.

¿Qué es el Subnetting y por qué es importante?

El subnetting, o subredes, es el proceso de dividir un espacio de direcciones IP (protocolo de Internet) en redes más pequeñas y manejables. En lugar de tener una gran red, se crean múltiples subredes lógicas dentro de esa red principal. Esto se logra "tomando prestados" bits del campo de host de una dirección IP y utilizándolos para crear identificadores de subred.

La implementación de subredes es fundamental en la administración de redes por varias razones:

  • Mejora del Rendimiento: Al segmentar una red grande, se reduce la cantidad de tráfico de difusión (broadcast traffic) que cada dispositivo tiene que procesar. Esto disminuye la congestión y mejora el rendimiento general de la red.
  • Seguridad: Las subredes permiten aislar diferentes departamentos o grupos de usuarios. Se pueden aplicar políticas de seguridad específicas a cada subred, lo que ayuda a controlar el acceso y a proteger los datos sensibles.
  • Eficiencia en la Asignación de Direcciones IP: Permite asignar bloques de direcciones IP de manera más granular, evitando el desperdicio de direcciones en redes pequeñas.
  • Gestión Simplificada: Las redes más pequeñas son más fáciles de administrar, solucionar problemas y monitorear.

¿Cómo funciona el Subnetting?

El subnetting se basa en la estructura de las direcciones IP y las máscaras de subred. Una dirección IP (IPv4) consta de 32 bits, divididos en cuatro octetos (grupos de 8 bits). La máscara de subred también tiene 32 bits y se utiliza para determinar qué parte de la dirección IP representa la red y qué parte representa al host dentro de esa red.

Una máscara de subred tiene una secuencia de bits '1' seguidos de una secuencia de bits '0'. Los bits '1' indican la porción de red y los bits '0' indican la porción de host. Por ejemplo, una máscara 255.255.255.0 en binario es 11111111.11111111.11111111.00000000. Esto significa que los primeros 24 bits identifican la red y los últimos 8 bits identifican los hosts. La notación CIDR (Classless Inter-Domain Routing) es una forma abreviada de representar la máscara de subred, indicando el número de bits de red (por ejemplo, /24 para 255.255.255.0).

Al "tomar prestados" bits del campo de host, se aumenta el número de bits de red, creando así subredes. Cada bit prestado duplica el número de subredes posibles.

Fórmula Clave:

  • Número de Subredes: 2s (donde 's' es el número de bits prestados del campo de host).
  • Número de Hosts por Subred: 2h – 2 (donde 'h' es el número de bits restantes en el campo de host). Restamos 2 porque la primera dirección IP de la subred es la dirección de red y la última es la dirección de broadcast, y ambas no se pueden asignar a hosts individuales.

Ejemplo Práctico

Supongamos que tenemos la dirección IP 192.168.1.0 con una máscara de subred 255.255.255.192 (que en notación CIDR es /26).

  • La máscara 255.255.255.192 en binario es 11111111.11111111.11111111.11000000.
  • Esto significa que tenemos 26 bits para la red (los 24 de los tres primeros octetos más 2 bits del último octeto).
  • Originalmente, con una máscara /24 (255.255.255.0), teníamos 8 bits para hosts. Ahora, hemos prestado 2 bits para la subred, dejando 8 - 2 = 6 bits para hosts.
  • Número de Subredes: 22 = 4 subredes.
  • Número de Hosts por Subred: 26 – 2 = 64 – 2 = 62 hosts utilizables.

La dirección 192.168.1.0 /26 es la primera subred. Las otras subredes serían: 192.168.1.64 /26, 192.168.1.128 /26, y 192.168.1.192 /26.

Esta calculadora te ayudará a determinar rápidamente los detalles de tus subredes IP.

function ipToDecimal(ip) { var parts = ip.split('.'); var decimal = 0; for (var i = 0; i < parts.length; i++) { decimal = decimal * 256 + parseInt(parts[i], 10); } return decimal; } function decimalToIp(decimal) { var ip = []; for (var i = 0; i > (8 * i)) & 255); } return ip.join('.'); } function getCIDRFromMask(mask) { if (mask.startsWith('/')) { return parseInt(mask.substring(1), 10); } var parts = mask.split('.'); var cidr = 0; for (var i = 0; i < parts.length; i++) { var octet = parseInt(parts[i], 10); if (octet === 255) { cidr += 8; } else if (octet === 0) { break; } else { var bits = 0; for (var j = 0; j > (7 – j)) & 1) { bits++; } } cidr += bits; break; } } return cidr; } function getMaskFromCIDR(cidr) { if (cidr 32) return "Invalid CIDR"; var mask = ""; for (var i = 0; i = 8) { octet = 255; cidr -= 8; } else { for (var j = 0; j < cidr; j++) { octet |= (1 << (7 – j)); } cidr = 0; } mask += octet + (i < 3 ? "." : ""); } return mask; } function isValidIp(ip) { if (typeof ip !== 'string') return false; var parts = ip.split('.'); if (parts.length !== 4) return false; for (var i = 0; i < parts.length; i++) { var octet = parseInt(parts[i], 10); if (isNaN(octet) || octet 255) return false; } return true; } function isValidSubnetMask(mask) { if (typeof mask !== 'string') return false; if (mask.startsWith('/')) { var cidr = parseInt(mask.substring(1), 10); return !isNaN(cidr) && cidr >= 0 && cidr <= 32; } return isValidIp(mask); } function calculateSubnetting() { var ipAddressInput = document.getElementById("ipAddress").value; var subnetMaskInput = document.getElementById("subnetMask").value; var resultDisplay = document.getElementById("result-display"); if (!isValidIp(ipAddressInput)) { resultDisplay.innerHTML = "Error: Formato de Dirección IP inválido."; return; } var cidr; if (subnetMaskInput.startsWith('/')) { cidr = parseInt(subnetMaskInput.substring(1), 10); if (isNaN(cidr) || cidr 32) { resultDisplay.innerHTML = "Error: Valor CIDR inválido."; return; } } else { if (!isValidIp(subnetMaskInput)) { resultDisplay.innerHTML = "Error: Formato de Máscara de Subred inválido."; return; } cidr = getCIDRFromMask(subnetMaskInput); } var mask = getMaskFromCIDR(cidr); if (mask === "Invalid CIDR") { resultDisplay.innerHTML = "Error: Máscara de Subred inválida."; return; } var ipParts = ipAddressInput.split('.').map(Number); var maskParts = mask.split('.').map(Number); var networkAddressParts = []; var broadcastAddressParts = []; var numHosts = 0; var numSubnets = 0; var bitsForHost = 32 – cidr; numHosts = Math.pow(2, bitsForHost) – 2; numSubnets = Math.pow(2, 32 – 32); // This formula is more complex for calculating *total possible subnets if we were using a different mask. For a given mask, it defines ONE subnet. var networkAddressDecimal = ipToDecimal(ipAddressInput) & ipToDecimal(mask); var broadcastAddressDecimal = networkAddressDecimal | (~ipToDecimal(mask) & 0xFFFFFFFF); networkAddressParts = decimalToIp(networkAddressDecimal).split('.'); broadcastAddressParts = decimalToIp(broadcastAddressDecimal).split('.'); var firstUsableHostParts = […networkAddressParts]; if (bitsForHost > 0) { var lastOctet = parseInt(firstUsableHostParts[3], 10); if (lastOctet < 255) { firstUsableHostParts[3] = (lastOctet + 1).toString(); } else { var thirdOctet = parseInt(firstUsableHostParts[2], 10); if (thirdOctet < 255) { firstUsableHostParts[2] = (thirdOctet + 1).toString(); firstUsableHostParts[3] = "0"; } else { var secondOctet = parseInt(firstUsableHostParts[1], 10); if (secondOctet < 255) { firstUsableHostParts[1] = (secondOctet + 1).toString(); firstUsableHostParts[2] = "0"; firstUsableHostParts[3] = "0"; } else { var firstOctet = parseInt(firstUsableHostParts[0], 10); if (firstOctet 0) { var lastOctet = parseInt(lastUsableHostParts[3], 10); if (lastOctet > 0) { lastUsableHostParts[3] = (lastOctet – 1).toString(); } else { var thirdOctet = parseInt(lastUsableHostParts[2], 10); if (thirdOctet > 0) { lastUsableHostParts[2] = (thirdOctet – 1).toString(); lastUsableHostParts[3] = "255"; } else { var secondOctet = parseInt(lastUsableHostParts[1], 10); if (secondOctet > 0) { lastUsableHostParts[1] = (secondOctet – 1).toString(); lastUsableHostParts[2] = "255"; lastUsableHostParts[3] = "255"; } else { var firstOctet = parseInt(lastUsableHostParts[0], 10); if (firstOctet > 0) { lastUsableHostParts[0] = (firstOctet – 1).toString(); lastUsableHostParts[1] = "255"; lastUsableHostParts[2] = "255"; lastUsableHostParts[3] = "255"; } } } } } resultDisplay.innerHTML = ` Dirección de Red: ${networkAddressParts.join('.')} /${cidr} Máscara de Subred: ${mask} Dirección de Broadcast: ${broadcastAddressParts.join('.')} Primer Host Utilizable: ${bitsForHost > 0 ? firstUsableHostParts.join('.') : 'N/A'} Último Host Utilizable: ${bitsForHost > 0 ? lastUsableHostParts.join('.') : 'N/A'} Número de Hosts Utilizables por Subred: ${bitsForHost > 0 ? numHosts : 0} `; }

Leave a Comment