Jeg kan anbefale at man lige læser de første par afsnit af Wikipedia artiklen om netop dette emne. :)
https://en.m.wikipedia.org[...]
Når det kaldes en subnet "maske" er det fordi dens formål er at bortmaskere den del af en IP adresse, der hører til en host på subnettet (host identifieren), og kun efterlade den del der udgør subnettets prefix, typisk de første 3 tal på mellem 0 og 255.
Når det lige er 0-255 er det fordi hver tal er én byte, 8 bit, og altså maksimalt kan repræsentere 2^8 = 256 forskellige værdier, ergo maksimum 255 når 0 medtages.
Bemærk i øvrigt at når hver tal er en byte, er 255.255.255.0 ikke er lig 1110 binært, som en anden bruger foreslog. Det er et 32 bit (4 bytes) langt tal, og er i stedet 11111111 11111111 11111111 00000000 i binært. Når det bruges som maske for et subnet bliver hver del "bitwise AND"-et sammen med IP adressen. "Bitwise AND" er et lidt teknisk term. Det betyder at man evaluerer en logisk AND operation for hver bit overfor den tilsvarende bit i det andet tal. En logisk AND operation er sand (=1) hvis, og kun hvis, begge elementer er sande (=1).
Dvs.:
1 AND 1 = 1,
1 AND 0 = 0,
0 AND 1 = 0, og
0 AND 0 = 0.
Som det fremgår overlever en bit i et binært tal altså kun en AND operation hvis den møder en bit der også er 1 i det andet tal.
Lad os prøve at gøre det med det første tal i en IP adresse, sammen med det første tal i subnet masken: 159 og 255, for nu at bruge dr.dk igen. 159 skrives 10011111 i binært, og 255, som maksimalværdien er en byte, er 11111111. Så vi har altså:
10011111
AND
11111111
=
10011111
... Hvilket bare giver 159 igen. Det samme sker for de næste 2 bytes af dr.dk's IP adresse, da de næste 2 bytes af subnetmasken også er 255. Det sidste tal, 38 (00100110 i binært), møder derimod et binært tal på udelukkende nuller i masken, da subnetmaskens sidste tal er 0 (decimal)! Derfor fjernes det helt og aldeles ved bitwise AND:
00100110
AND
00000000
=
00000000
En subnetmaske på 255.255.255.0 lader altså kun de 3 første bytes af en IP adresse stå; det er dem der udgør det subnets prefix.
Et par sidste take-aways fra diskussionen ovenfor er for det første, at det umiddelbart ikke giver mening at have subnetmasker med bytes på andet end 255 og 0. Sådanne masker vil have et andet bitmønster i sin binære repræsentation, og vil ikke maskere hele bytes af IP-adressen, men i stedet bare ændre dem til nogle helt andre tal.
For det andet kan man spørge hvorfor en subnetmaske overhovedet er nødvendig. Kan man ikke bare tage de første 3 tal mellem 0 og 255 selv? Hvorfor det her bitwise hurlumhej? Det er et helt validt spørgsmål, og svaret er at det er fordi en IP adresse ikke repræsenteres ved 4 individuelle bytes i en computers RAM. Den repræsenteres i stedet ved ét, samlet 32 bit langt heltal: En såkaldt integer. Skal den integer, der udgør network prefixet, filtreres ud af en IP adresse foregår det altså ved AND operationen ovenfor.
Denne sidste kommentar har IP adresser i øvrigt fuldstændig én til én til fælles med farver i et bitmap billede: Også de er 4 bytes (RGBA), samlet i ét 32 bit langt heltal, og gemt i en matrix med billedets dimensioner.
Håber det hjalp. :)
--