Räkna ut nätmasken
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.
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.
Tyckte du om den här artikeln? Då kanske du även tycker om någon av våra böcker.
Relaterat
-
Fortsatt låga IPv6-siffror i Sverige
Det är fortfarande knappt fem procent av internetanvändarna som har tillgång till IPv6. Det visar Post- och telestyrelsens senaste kartläggning. Samtidigt ökar andelen internetoperatörer som använder adressöversättning.
-
Grunderna i nätverk – del 2
I den här andra delen av serien om grunderna i nätverk ska vi utforska DNS-systemet. Vi kan lära oss mycket om internet och nätverk genom att slå upp information i DNS-servrarna. En DNS innehåller mer information än bara IP-adressen till en domän.
-
Grunderna i nätverk – del 1
I del 1 av denna artikelserie tittar vi på hur ett vanligt hemmanätverk fungerar. Detta är grunden för alla typer av nätverk. Vi utgår från nedanstående skiss och går igenom del för del, alltifrån hur datorerna får en IP-adress till hur de hittar ut på internet och kan slå upp rätt adress.
-
Tidssynkronisering med NTP
-
Vem gör vad i stadsnäten?
I de flesta öppna stadsnät i Sverige finns det tre huvudaktörer. Dessa är nätägaren, kommunikationsoperatören och tjänsteleverantören.
Senaste nyheterna och inläggen
-
Docker Desktop för Linux är här
Nu finns Docker Desktop även för Linux. Precis som Docker Desktop för macOS och Windows, finns även Kubernetes inkluderat i Linux-versionen. Man använder även ett VM för att köra containrarna.
-
Fortsatt låga IPv6-siffror i Sverige
Det är fortfarande knappt fem procent av internetanvändarna som har tillgång till IPv6. Det visar Post- och telestyrelsens senaste kartläggning. Samtidigt ökar andelen internetoperatörer som använder adressöversättning.
-
Hårda och mjuka länkar i Linux
Hårda länkar är filnamn som pekar på en inode. Mjuka länkar är en speciell filtyp som pekar på hårda länkar, eller andra mjuk läknar. En inode i sin tur innehåller metadata om filen, samt information om var den faktiska datan finns lagrad på disken.
-
Drifta din egen molnlagring med Seafile
Seafile är ett program med öppen källkod för att synkronisera och lagra filer. Det kan liknas med ett privat Dropbox. Seafile har både en webbklient och klienter för Linux, Windows, macOS, Android och iPad/iPhone.
CyberInfo Sverige är ett IT- och medieföretag i nordvästra Skåne som tillhandahåller böcker, utbildningar, nyheter och konsulttjänster inom Linux, säkerhet och programmering.
CyberInfo Sverige är godkänd för F-skatt, är momsregistrerat och innehar
utgivningsbevis för webbplatsen www.cyberinfo.se.