[linux] Re: cups (printing) en ip-addres/mask
Peter Fokker
nllgg op berestijn.nl
Za Jun 24 19:56:41 CEST 2006
"Gijs Hillenius" wrote:
>
> >>>>> Hugo van der Kooij writes:
[...]
> > Je netwerk is dus 172.16.2.16/28 (loopt van 16 t/m 31)
>
> Dank! Leg deze noob aub nog even uit hoe je dat nu doet --> 32 min 28
> is 4 en 2 totdemacht 4 = 16, zo kom je bij het eerste ip-address in
> dit segment, dat denk ik nog te willen snappen. Maar waar komt de
> dat "getal" 32 vandaan?
>
> Ik vermoed dat een vergelijkbaar onbegrip mijnerzijds ook mijn
> nfs-server beperkt...
Een ip4-adres neemt 4 octetten = 32 bits in beslag.
De eerste P bits duiden het netwerk aan.
Daarbij hebben voor het netwerkadres de resterende 32 - P
bits altijd de waarde 0.
Diezelfde P bits gevolgd door (32 - P) bits met waarde 1
vormen tezamen het broadcast adres.
Vroeger was er een standaard-indeling in classes (class A,
class B, class C, etc.) waarbij je aan het (begin) van een IP-adres
kon zien van welke klasse het bijbehorende netwerk was.
Tegenwoordig werkt het met variabele netwerkgroottes.
Keyword: CIDR (Classless Internet Domain Routing, google
is your friend). De grootte van het netwerk wordt bepaald
door de zogenaamde 'prefix'. In jouw voorbeeld
172.16.2.26/28 is de prefix P dus 28 bits lang, en je
hebt 32 - P = 32 - 28 = 4 bits om een host aan te wijzen
binnen dat netwerk. Van die 16 adressen raak je er 2 kwijt,
nl. 1 waarin alle bits 0 zijn (dat is nl. je netwerk-adres,
zie boven) en 1 waarin alle bits 1 zijn (dat is je broadcast
adres). Netto dus: 16 - 2 = 14 mogelijke hosts op dat net.
Het kan niet anders dan dat het adres 172.16.2.26 een
host-adres is (en geen netwerkadres). Dat zie je het
snelst door het laatste octet binair uit te schrijven:
26 (decimaal) = 0001.1010 (binair)
De laatste 4 bits zijn hier niet 0, het kan dus geen netwerkadres zijn,
sowieso niet op een /28 netwerk. [*]
Als je dat aan CUPS voert, inclusief de prefix /28, dan
raakt CUPS daar misschien van in de war, juist omdat de laatste
32 - 28 = 4 bits niet 0 zijn. In dit specifieke geval
zou het netwerkadres moeten eindigen op 0001.0000 (binair)
oftewel 16 (decimaal), zoals Hugo ook al meldde.
Het broadcast adres vereist dat de laatste bits allemaal
1 zijn. In dit voorbeeld dus: 0001.1111 (binair) oftewel
31 (decimaal).
Dit soort berekeningen zijn altijd lastig te doen, vooral
als het gaat om een andere prefix dan eentje die precies
op een octet-grens ophoudt (/8, /16, /24), al wordt het minder
lastig naarmate je meer ervaring krijgt (maar dan nog...).
Op mijn Linux-machine heb ik een handig tooltje ipcalc(1).
Daarmee kun je dit soort berekeningen overlaten aan de computer.
Voorbeeld:
$ ipcalc -m -b -n 172.16.2.26/28
NETMASK=255.255.255.240
BROADCAST=172.16.2.31
NETWORK=172.16.2.16
$ _
De output van ipcalc kun je prima gebruiken om allerhande
(bash-achtige) config-files mee te genereren.
HTH,
--Peter Fokker
[*] Merk op dat een prefix /31 niet bijzonder handig of
efficient is. Je hebt exact 1 bit voor een host en
je raakt altijd 2 adressen kwijt aan netwerkadres
en broadcast. Het kleinste nuttige netwerk (en de
grootste netwerk-prefix) moet dus /30 zijn, voor
een netwerk met netto 2 hosts (en netwerk adres en
een broadcast adres).
--
Doe mee aan de marktwerking in de Nederlandse spelling:
koop het Witte Boekje in augustus 2006 - http://wittespelling.nl
More information about the Linux
mailing list