[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