IPv6 FLSM: Subnetting a lunghezza fissa su 128 bit
Simulatore interattivo per dividere una rete IPv6 in sottoreti uguali. BigInt, notazione compressa :: e calcolo prefisso senza broadcast.
Obiettivi di apprendimento
Indice — 7 sezioni
- Cos'è il subnetting IPv6 FLSM — definizione, 128 bit, spazio immenso
- Come funziona — BigInt, ::, formula, confronto IPv4 vs IPv6
- Simulatore IPv6 FLSM Interattivo — id ipv6FlsmSim, live JS
- Esempio pratico guidato — 2001:db8::/64 in 4 subnet /66
- Errori comuni — parsing ::, overflow prefisso, off-by-one
- Verifica / Esercizio — attività di laboratorio
- Riepilogo — takeaways
1. Cos'è il subnetting IPv6 FLSM
FLSM IPv6 = dividi una rete madre /prefix in n sottoreti uguali tutte con stesso newPrefix. Non si sottraggono broadcast/rete: ogni indirizzo è host utilizzabile, salvo riservati (Subnet-Router anycast). Spazio totale mai esauribile: /64 standard LAN contiene 2^64 ≈ 1.8e19 indirizzi.
IPv6 usa 128 bit rappresentati come 8 gruppi esadecimali da 16 bit: 2001:0db8:0000:0000:0000:0000:0000:0001. La compressione :: sostituisce una sola sequenza contigua di gruppi zero con :: → 2001:db8::1. Regola: una sola :: per indirizzo, longest run.
Perché fare FLSM in IPv6? Anche con spazio enorme, l'enterprise divide 2001:db8:abcd::/48 in /64 per VLAN, o un /64 ISP in 4×/66 per sedi uguali. Stessa logica IPv4, aritmetica diversa: tutto con BigInt perché JS Number arriva solo a 2^53.
In IPv6 non esiste il broadcast L2 mappato come 255.255.255.255. Si usa multicast ff02::1. Quindi il concetto di "indirizzi utilizzabili = 2^(host)-2" sparisce. In FLSM IPv6Subnet size è semplicemente 2^(128-newPrefix). Non sottrarre 2!
2. Come funziona — dal testo al BigInt
Split su "::" → left + right, riempi zeri fino a 8 gruppi. Ogni h = parseInt(h,16) → BigInt. Acc = (acc << 16n) + BigInt(h)
bitsNeeded = ceil(log2(numSubnets)).
newPrefix = prefix + bitsNeeded. Es. 4 subnet → 2 bit → /64→/66. subnetSize = 1n << (128-newPrefix)base = ipv6ToBigInt(ip) & mask(prefix). Per i=0..n-1: subnetBase = base + subnetSize*i, subnetEnd = subnetBase + subnetSize -1n → bigIntToIPv6()
| Concetto | IPv4 FLSM | IPv6 FLSM |
|---|---|---|
| Bit totali | 32 | 128 |
| Conversione | Number & shift 8 bit | BigInt & shift 16 bit (hextet) |
| Notazione compatta | non esiste | :: zero-compression, una sola volta |
| Formula prefisso | newPrefix = prefix + ceil(log2 n) | Identica! Ma su 128 bit |
| Dimensione subnet | 2^(32-newPrefix) –2 host | 2^(128-newPrefix) tutti usabili |
| Broadcast | Sì, ultimo addr | No, multicast ff02::1 |
| Esempio tipico | 192.168.0.0/24 → 4×/26 | 2001:db8::/64 → 4×/66 → 4.6e18 addr ciascuna |
3. Simulatore Interattivo IPv6 FLSM
Inserisci indirizzo con o senza ::, prefisso iniziale e numero sottoreti. Il tool allinea alla rete, calcola con BigInt e genera tabella resultTable.
Subnet ID = primo indirizzo della subnet con nuovo prefisso. Range = da Subnet ID a Subnet ID + subnetSize -1. A differenza di IPv4, IPv6 non utilizza un indirizzo di broadcast e non si applica la tradizionale sottrazione di network e broadcast address usata nel calcolo degli host IPv4.. Dimensione = 2^(128-newPrefix) in notazione decimale ed esponenziale. Copia la riga per la relazione.
4. Esempio pratico guidato
Obiettivo: dividere 2001:db8::/64 in 4 subnet uguali.
Step 1: n=4 → bitsNeeded = ceil(log2 4)=2. Step 2: newPrefix=64+2=66. Step 3: subnetSize=1<<(128-66)=2^62 = 4611686018427387904 addr. Step 4: base = 2001:db8:: = 2001:0db8:0000:0000::. Mask /64 → base allineata. Subnet: 0: 2001:db8::/66 (range :: — ::3fff:ffff:ffff:ffff), 1: 2001:db8:0:0:4000::/66 ... fino a 3: 2001:db8:0:0:c000::/66. In notazione compressa il simulatore mostra 2001:db8::, 2001:db8::4000:0:0:0 etc. a seconda della compressione ::.
5. Errori comuni
Valido: 2001:db8::1, ::1, 2001:db8:0:0:0:0:0:1. Non valido: 2001::db8::1 (due ::), 2001:db8:gggg:: (g non hex), 9 gruppi. Il simulatore con filter(Boolean) e controlli alert blocca.
Se prefix=120 e chiedi 32 subnet → bitsNeeded=5 → newPrefix=125 OK. Ma prefix=120 + 1024 subnet → bitsNeeded=10 → newPrefix=130 >128 → errore "non compatibile". Formula limite: newPrefix ≤128, quindi max subnet = 2^(128-prefix).
Number.MAX_SAFE_INTEGER = 2^53-1, IPv6 richiede 128 bit → devi usare 0n, 16n, << BigInt, & 0xffffn. Se usi parseInt senza BigInt perda precisione e range sbagliato. Il simulatore usa BigInt ovunque.
In IPv6 FLSM non sottrarre 2! Range = subnetSize intero. L'unico indirizzo riservato in ogni /64 è il Subnet-Router anycast (ultimo 0), ma non si sottrae per conteggio host didattico.
6. Verifica / Esercizio pratico
🔬 Attività — Lab IPv6 FLSM
Usa il simulatore sopra con questi 3 casi e consegna tabella:
- Caso base:
2001:db8:abcd::/48in 256 subnet → qual è newPrefix? (risposta attesa /56 — standard site). Quanto vale subnetSize? - ISP → Customer:
2001:db8::/32in 16 sedi → newPrefix? Range prima e ultima subnet? - Edge:
::/0è valido? Prova::1/128in 2 subnet → cosa succede? Perché newPrefix 129 >128 è bloccato?
1. 256 =2^8 → bits=8 → newPrefix 48+8=56 → size 2^(72)=4.7e21. Ogni subnet è un /56 assegnabile a VLAN/cliente. 2. 16=2^4 → /36 → size 2^92 enorme. 3. /128 è un singolo host, non divisibile: bitsNeeded 1 → newPrefix 129 >128 → alert incompatibile. Coerente: un /128 non si subnetta.