Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Klatsch und Tratsch (https://www.delphipraxis.net/34-klatsch-und-tratsch/)
-   -   Berechnung der IP-Adressen-Bereiche (https://www.delphipraxis.net/105689-berechnung-der-ip-adressen-bereiche.html)

Matze 27. Dez 2007 15:48


Berechnung der IP-Adressen-Bereiche
 
Hallo zusammen,

ich komme nicht dahinter, wie man anhand der IP und der Subnetmask den Adressenbereich ermitteln kann. :oops:

Ich habe mir den Wikipedia-Artikel durchgelesen und versucht, das alles nachzuvollziehen, doch so ganz klappt es nicht. Wie man von der Anzahl der Bits auf die Subnetmask kommt, habe ich verstanden, das ist ja verhältnismäßig simpel. Einfach so viele 1er hinschreiben, wie man Bits hat, den Rest zu 32 Bit mit Nullen ergänzen und dann die Binärzahlen in Dezimalzahlen umwandeln.
So gehe ich vermutlich bei den Anfangswerten wie "172.23.66.111/21" vor, um erst einmal die Subnetmask zu erhalten.

Ich würde nun gerne anhand der Wikipedia-Beispiele (denn dazu gibt die Lösung) versuchen, das zu verstehen, denn nicht mal die einfachsten Beispiele verstehe ich:

10.0.0.44 / 255.0.0.0
Mal geht es bei der 0 der Subnetmask von 1 bis 254 und mal von 0 bis 255

Ich glaube einfach, mir fehlen da Grundlagen.

Ich würde am Ende gerne verstehen, wie man diese Wikipedia-Beispiele selbst nachrechnen kann:

Code:
10.0.0.44       255.0.0.0               10.0.0.1     bis 10.255.255.254
172.16.232.15   255.255.0.0             172.16.0.1   bis 172.16.255.254
172.23.66.111   255.255.248.0           172.23.64.1  bis 172.23.71.254
192.168.0.1     255.255.255.0           192.168.0.1  bis 192.168.0.254
172.23.66.109   255.255.255.240         172.23.66.97 bis 172.23.66.110
192.168.10.23   255.255.255.255         192.168.10.23
Kann mir dabei jemand helfen (Denkanstöße) oder weiterführende Links nennen, mit denen man dies leicht nachvollziehen kann?
Die Anzahl der möglichen IPs ist auch immer gefragt, doch das bekomme ich vermutlich hin.

Grüße, Matze

mkinzler 27. Dez 2007 16:29

Re: Berechnung der IP-Adressen-Bereiche
 
Zitat:

Mal geht es bei der 0 der Subnetmask von 1 bis 254 und mal von 0 bis 255
Die erste und die letzte Ip eines Bereichs haben eine besondere Bedeutung: Diwe 1. steht für das Netzt und die letzte ist die Broadcast-Adresse, auf welche alle Clients reagieren.

Man undiert die Bitmuster
Code:
  10.0.0.44         
 255.0.0.0
= 10.0.0.0

SirTwist 27. Dez 2007 18:01

Re: Berechnung der IP-Adressen-Bereiche
 
Eine IP-Adresse gehört immer zu einem bestimmten IP-Netz, und die Subnetmaske teilt die IP-Adresse auf in einen vorderen Teil (dieser bestimmt das IP-Netz) und einen hinteren Teil (dieser bestimmt die Adresse des Rechners innerhalb des Netzes).

Es gibt eine etwas einfachere Notation: 10.0.0.44/8 oder 172.16.23.42/16. Bei dieser Notation wird hinter dem Schrägstrich angegeben, wie groß jeweils der Teil für die Netzadresse ist und für die Hostadresse.

Du musst die Zahlen der IP-Adressen etc. in Binärzahlen umrechnen:

Code:
Aus 10.0.0.44 wird dann 00001010.00000000.00000000.00101100 (IP-Adresse)
Aus 255.0.0.0 wird dann 11111111.00000000.00000000.00000000 (Subnetmaske)
Diese Subnetmaske entspricht dann der Notation "/8". Das nennt man auch den Suffix. Also die ersten 8 Bits der IP-Adresse bilden den Netzwerkteil. Die restlichen 24 Bits bilden den Hostteil.

Die Netzadresse für 10.0.0.44 bekommst Du einfach dadurch heraus, dass Du nur die Bits nimmst, bei denen in der Subnetmaske eine 1 steht:

Code:
10.0.0.44 = 00001010.00000000.00000000.00101100
255.0.0.0 = 11111111.00000000.00000000.00000000
            -----------------------------------
            00001010.00000000.00000000.00000000
Also ist die Netzadresse "10.0.0.0". Bei den Suffixen (Suffices) "/8", "/16" und "/24" ist das sehr einfach, denn dann nimmst Du einfach nur die erste Zahl, bzw. die ersten beiden oder die ersten drei Zahlen der IP-Adresse.

Schwierigeres Beispiel, nämlich 192.168.23.142/26. Um die "/26" in Langform umzurechnen, musst du also eine 32stellige Binärzahl nehmen und die ersten 26 Stellen mit 1 belegen, den Rest mit 0. Das macht dann 255.255.255.192:

Code:
192.168.23.142  = 11000000.10101000.00010111.10001110
255.255.255.192 = 11111111.11111111.11111111.11000000
                  -----------------------------------
                  11000000.10101000.00010111.10000000 = 192.168.23.128
Also ist 192.168.23.128 die Netzwerkadresse. Bei der Subnetmaske siehst Du hinten 6 Nullen, mit 6 Bits kann man maximal Werte von 0 bis 63 darstellen, also können in dem Netzbereich nur die nächsten 63 Zahlen verwendet werden. Also von 192.168.23.128 bis 192.168.23.191. Ab 192.168.23.192 fängt das nächste Teilnetz an.

Nun ist aber die allererste IP-Adresse im Netz immer das Netz selber, also kannst Du die 192.168.23.128 nicht benutzen. Auch die letzte IP-Adresse ist reserviert (die 192.168.23.191), das ist die sogenannte Broadcast-Adresse.

Das einzige, was Du jetzt noch brauchst, ist eine Tabelle der möglichen Suffixe und die daraus resultierenden Netzmasken:
Code:
/0 = 0.0.0.0      /8  = 255.0.0.0     /16 = 255.255.0.0
/1 = 128.0.0.0    /9  = 255.128.0.0   /17 = 255.255.128.0
/2 = 192.0.0.0    /10 = 255.192.0.0   /18 = 255.255.192.0
/3 = 224.0.0.0    /11 = 255.224.0.0   /19 = 255.255.224.0
/4 = 240.0.0.0    /12 = 255.240.0.0   /20 = 255.255.240.0
/5 = 248.0.0.0    /13 = 255.248.0.0   /21 = 255.255.248.0
/6 = 252.0.0.0    /14 = 255.252.0.0   /22 = 255.255.252.0
/7 = 254.0.0.0    /15 = 255.254.0.0   /23 = 255.255.254.0
etc ;-)
Der Rest ist nur noch Umwandlung in Binärzahlen und damit rechnen.

SirTwist

Matze 27. Dez 2007 19:22

Re: Berechnung der IP-Adressen-Bereiche
 
Hallo SirTwist,

das ist so hervorragend erklärt, dass ich das Thema so eingestellt habe, damit es nach 4 Wochen nicht automatisch entfernt wird. Vielleicht hilft dein Beitrag auch noch anderen. Große Klasse und herzlichen Dank (dir natürlich auch, Markus). :thumb:

Eine Frage habe ich allerdings noch, die bei einem komplizierteren Beispiel aufgetreten ist, als du es genannt hast:

Code:
172.23.66.111 = 10101100.00010111.01000010.01101111
255.255.248.0 = 11111111.11111111.11111000.00000000
                -----------------------------------
                10101100.00010111.01000000.00000000
Da hat die Subnetmask am Ende 14 Nullen und somit ergibt sich ein Bereich von 2^14 = 16384.
Diesen kann man natürlich nicht so einfach auf die letzte Zahl addieren. Ich dachte mir daher, mit der letzten Zahl kann man die Ziffern von 0 bis 255 darstellen und hat somit 256 Möglichkeiten.
Daher ergibt sich für die Erhöhung der vorletzten Zahl:

Code:
16384 div 256 = 64
Für die Erhöhung der letzten Zahl würde sich diese Erhöhung ergeben, falls es in anderen Fällen einen Rest geben sollte:

Code:
16384 mod 256 = 0
Das würde doch heißen, ich muss zur vorletzten Zahl 64 dazuaddieren und käme zu folgendem Ergebnis: 172.23.130.111 (Broadcast)

herauskommen sollte jedoch: 172.23.71.254

Was mache ich denn in diesem Fall falsch? ;)

Grüße, Matze

SirTwist 27. Dez 2007 22:02

Re: Berechnung der IP-Adressen-Bereiche
 
Zitat:

Zitat von Matze
Code:
172.23.66.111 = 10101100.00010111.01000010.01101111
255.255.248.0 = 11111111.11111111.11111000.00000000
                -----------------------------------
                10101100.00010111.01000000.00000000
Da hat die Subnetmask am Ende 14 Nullen und somit ergibt sich ein Bereich von 2^14 = 16384.

Du vergisst, hier die Netzadresse zu bilden:
Code:
172.23.66.111 = 10101100.00010111.01000010.01101111
255.255.248.0 = 11111111.11111111.11111000.00000000
                -----------------------------------
                10101100.00010111.01000000.00000000 = 172.23.64.0
Und für den danachfolgenden Wertebereich brauchst Du eigentlich gar nicht so kompliziert mit div und mod zu rechnen. Du nimmst den Wert der Subnetmaske, der nicht 255 oder 0 ist (also die 248) und ziehst diesen von 256 ab (macht 8). Jetzt weißt Du, dass Du in der Netzadresse (172.23.64.0) den dritten Wert immer um 8 erhöhen oder vermindern musst, um das jeweils nächste oder vorige Netz zu erhalten. Das nächste Netz ist also 172.23.72.0, das vorige 172.23.56.0.

Wichtig ist, beim Rechnen mit den Netzadressen, immer erst den Host-Anteil auszufiltern (also die UND-verknüpfung mit der Subnet-Maske durchzuführen).

Böser Stolperstein: Natürlich geht nicht jede Kombination aus Subnetmaske und Netzadresse. Bei /20 kann man z.B. 172.23.48.0, 172.23.64.0 und 172.23.80.0 bilden, aber 172.23.56.0/20 ist kein gültiges IP-Netz, 172.23.56.0/21 dagegen schon.

Gruß,
SirTwist

Matze 27. Dez 2007 22:08

Re: Berechnung der IP-Adressen-Bereiche
 
Hallo SirTwist, danke für deine Antwort.

Zitat:

Zitat von SirTwist
Du vergisst, hier die Netzadresse zu bilden

Tatsache, blöder Fehler von mir.

Du sagst, das nächste Netz sei 172.23.72.0. Dabei müsste es sich, wenn ich das richtig verstanden habe, um den Broadcast handeln. Folglich müsste ich doch die Adresse davor nehmen. Wäre diese nicht 172.23.71.255?
Denn das Ergebnis ist 172.23.71.254.

Grüße

DeddyH 28. Dez 2007 10:29

Re: Berechnung der IP-Adressen-Bereiche
 
Der Broadcast bildet sich durch "Auseinsen" aller Bits der IP-Adresse, in denen die Netzmaske eine 0 enthält. Nimmst Du statt der 1 eine 0, erhältst Du die Netzadresse.

Code:
172.23.66.111 = 10101100.00010111.01000010.01101111
255.255.248.0 = 11111111.11111111.11111000.00000000
                -----------------------------------
                10101100.00010111.01000000.00000000  <-- Netzadresse

172.23.66.111 = 10101100.00010111.01000010.01101111
255.255.248.0 = 11111111.11111111.11111000.00000000
                -----------------------------------
                10101100.00010111.01000111.11111111  <-- Broadcast


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:20 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz