Moin,
eigentlich wusste ich das alles, bis auf die Tatsache, dass wirklich der Bereich 192.168.0.0/16, also unter anderem auch _ein_ Netz und 256*256-2 Host-IPs für privat freigegeben ist, nicht nur 192.168.0.0/24 mit 256 Netzen und 256-2 Host-IPs.
Na das ist doch das gleiche? Freigegeben ist der Bereich 192.168.0.0 bis 192.168.255.255. Was du damit machst kannst du halten wie die Bauarbeiter. Oder so. (Oh, und hör am besten auf, von 'Host-IPs' zu sprechen, das verwirrt alle Leute inklusive dir nur. Es gibt nichts was intrinsisch eine 'Host-IP' oder eine 'Netzadresse' etc. ist. Alle IP-Adressen sind gleich erschaffen. Sie werden nur von der herrschenden Klasse zu dem gemacht was sie sind. pun intended)
Trotzdem konnte ich eine Frage noch nicht klären. Ist es technisch unmöglich, dass _ein_ Rechnersystem mit zwei Netzwerkkarten gleichzeitg im Netz 192.168.0.0/16 _und_ im Netz 192.168.2.0/24 sein kann? Oder war hier nur die IP ungünstig gewählt?
Technisch möglich ist das natürlich. Du kannst konfigurieren was du willst, und Routen setzen wie du willst und dieser Fall ist genau so wie jeder andere. Wenn du es dir richtig betrachtest ist der von dir geschilderte Fall (zwei Routen wobei eine einen Teil einer anderen abdeckt) sogar der Normalzustand: Du hast eine Route zum Internet also 0.0.0.0/0 und eine Route zu deinem privaten Netz 192.168.0.0/24. Das ist prinzipiell nicht anders als eine Route zu 192.168.0.0/16 und eine Route zu 192.168.2.0/24.
Warum das funktioniert (für entsprechende Werte von 'funktioniert' zu denen ich gleich noch kommen werde): Routing geht in der Regel nach dem "longest match"-Prinzip vor. D.h. wenn mehrere Routen im Prinzip in Frage kommen würden, wird diejenige mit den meisten Einsen in der Bitmaske gewählt. (Bei CIDR noch einfacher: die höchste Zahl nach dem Schrägstrich gewinnt.)
Das Routing würde ja dann so aussehen:
Netzwerkziel Netzwerkmaske Gateway Schnittstelle
0.0.0.0 0.0.0.0 192.168.2.1 192.168.2.20
192.168.2.0 255.255.255.0 192.168.2.20 192.168.2.20
192.168.0.0 255.255.0.0 192.168.1.20 192.168.1.20
Jo, 192.168.2.0/24 ist eine Teilmenge von 192.168.0.0/24 ist eine Teilmenge von 0.0.0.0/0.
Hm, wenn ich jetzt
ping 192.168.2.21
aufrufe, woher weiß das Routing dann, ob das ein Host im Netz 192.168.0.0/16 oder einer im Netz 192.168.2.0/24 ist?
Ganz einfach: par ordre de mufti (siehe oben) liegt das Ziel hinter der 192.168.2.0/24-Route. Und das ist der Wert von "funktioniert" den ich oben meinte: Wenn du glaubst du könntest dann noch Rechner mit einer Adresse der Form 192.168.2.X in dem 192.168.0.0/16-Netz ansprechen, geht das nicht so einfach. Genauso wie du keine Rechner mit Adressen der Form 192.168.X.Y hinter der 0.0.0.0/0-Route so einfach ansprechen kannst. (Nur stört dich das in der Regel nicht.)
Du kannst aber Ping dazu überreden das richtige Interface zu nehmen (dieser Routing-Kram ist ja 'nur' dazu da, für eine beliebige Ziel-IP-Adresse herauszufinden auf welchem Interface das Paket raussoll) mit der Option -I. Bei IPv6-Link-local-Adressen (Bereich fe80::/10) ist das sogar noch schlimmer: Die müssen nur pro Link (also in der Regel Ethernet oder PPP-Verbindung, ohne Router dazwischen) eindeutig sein, und du hast in der Regel soviele verschiedene Link-local-Gültigkeitsbereiche, wie du Interfaces hast (bis auf lo ist eigentlich jedes Interface mit mindestens einem Link verbunden), und die haben auch noch alle die gleiche Netzadresse und -maske: fe80::/10. Trotzdem sind sie nützlich, man muss halt nur das Routing ein bisschen umgehen und immer den passenden Link dazu angeben.
Henryk Plötz
Grüße aus Berlin
~~~~~~~~ Un-CDs, nein danke! http://www.heise.de/ct/cd-register/ ~~~~~~~~
~~ Help Microsoft fight software piracy: Give Linux to a friend today! ~~