Att kunna räkna ut nätmasken på ett snabbt och enkelt sätt underlättar vid planerandet och byggandet av TCP/IP-nätverk. Det är nätmasken som bestämmer hur stort ett nät kan vara och hur IP-adresserna kommer att se ut.

I denna artikel kommer jag endast att gå igenom IPv4, då IPv6 fungerar på ett lite annorlunda sätt. IPv4 är fortfarande det som används mest idag även om IPv6 har fått en rejäl ökning de senaste två åren, framförallt eftersom allt fler VPS-leverantörer erbjuder IPv6 som standard. Men här kommer vi alltså att gå igenom hur IPv4-nätverk fungerar och är uppbyggda med fokus på nätmasken.

Vad är en IP-adress och var kommer nätmasken in i bilden?

En IP-adress är som ett telefonnummer som pekar på en viss enhet i nätverket. Enheten kan vara alltifrån en skrivare eller en mobiltelefon till en dator eller server.

Med IP-adressen kan du nå den specifika datorn i det nätverket den befinner sig. Men det är här nätmasken kommer in. Det är nätmasken som bestämmer nätets gränser, det vill säga vilka som är den första respektive sista adressen i nätverket.

Om vi tar ett vanligt hemmanätverk så brukar dessa ha adresser i nätet 192.168.0.0/24. Vad betyder då detta? Jo, en hel del faktiskt. Utifrån denna information får vi reda på allt vi behöver för att koppla in oss på nätverket och kunna nå de andra datorerna i samma nätverk. Först och främst tittar vi på /24. Detta innebär att nätet har en 24-bitars nätmask. En 24-bitars nätmask innebär att de första 24 bitarna redan är satta för själva nätet, det vill säga de är upptagna och går inte att använda för datorer.

Här kommer vi in på det binära talsystemet. Varje bit är en etta eller en nolla. Om vi sätter 24 stycken “ett”-bitar från vänster till höger, i kolumner om 8 bitar separerade med punkter, och fyller ut resterande 8-bitarna med nollor så att vi sammanlagt får 32 bitar, kommer det att se ut som nedan. En komplett IP-adress eller nätmask har sammanlagt 32 bitar.

11111111.11111111.11111111.00000000

Om vi översätter detta till vanlig decimalform får vi nätmasken enligt nedan:

255.255.255.0

Detta innebär i sin tur att vi bara kan använda den sista oktetten (oktett är en sekvens om 8 bitar) till adresser i vårt nätverk. Adresserna vi kan använda är således 0–255. Men detta är faktiskt inte helt sant, första adressen, nollan, går inte att använda som adress på en enhet; den är reserverad för att peka på själva nätet. Den sista adressen går heller inte att använda, 255, den är reserverad för broadcast-trafik.

Nu vet vi alltså att vi kan använda adresser i spannet 192.168.0.1 till 192.168.0.254 till våra datorer. Dessutom vi att nätmasken ska vara 255.255.255.0. T.ex. kan du använda adressen 192.168.0.15 med nätmasken 255.255.255.0 för din dator.

ANNONS FÖR VÅRA EGNA BÖCKER Demonerna på internet

Räkna ut nätmasken

Finns det då något enkelt sätt att räkna ut hur många adresser det finns i ett visst nät? Det finns det, och det är dessutom inte särskilt svårt. Om $n$ är nätmasken i slash-notation får vi formeln:

\[2^{32-n}\]

Om vi antar att nätmasken är 24, från vårt exempel ovan, får vi 256 adresser.

\[2^{32-24}=256\]

Ett exempel till

Om vi istället har nätet 172.168.0.0/16 så ser vi att vi har nätmasken /16 i slash-notation vilket innebär att de första 16-bitarna redan är satta. Detta blir då som nedan:

11111111.11111111.0.0

Och detta i sin tur kan översättas till:

255.255.0.0

Här har vi istället två oktetter som vi kan använda för adresser i vårt nät. Vi har således adresserna från 172.168.0.0 till 172.168.255.255 (tänk dock på att 0 och 255 inte går att använda till enheter – dessa är reserverade).

Om vi använder formeln från ovan får vi antalet adresser i nätet.

\[2^{32-16}=65536\]

Detta innebär i sin tur att det får plats 65534 datorer i nätverket (65536-2).

Några små program för att räkna ut nätmasken

Baserat på formeln $2^{32-n}$ kan vi göra följande enkla Pythonprogram för att snabbt och enkelt räkna ut antalet adresser i nätet.

#!/usr/bin/env python3

try:
    slash = int(input("Ange nätmasken i slash-notation: "))
except(ValueError):
    print ("Ange endast heltal mellan 0 och 32")
    quit()

if ((slash < 1) or (slash > 32)):
    print ("Ange endast värden mellan 0 och 32")
    quit()

print ("Totalt antal adresser i nätet:", 2**(32-slash))
print ("Totalt antal användbara adresser i nätet:", 2**(32-slash)-2)

Jag har även gjort ett lite större Python-program som även visar hur nätmasken ser ut i dotted-decimal-formatet. Programmet finns på Github och heter subcalc.py.

Jag har även gjort ett annat program i PHP som heter netcalc.php. Detta program visar resultatet både i binärt format, dotted-decimal-format samt hur många sammanlagda adresser det finns och hur många adresser som är användbara till enheter.