Wie ist der nächste Hop in der Routing-Tabelle definiert?


8

Was enthält eine Routing-Tabelle, nur die Ziel-LAN-Adresse beim nächsten Hop? Aber was bedeutet dieser nächste Sprung, wenn man sich dieses Beispiel ansieht?

Geben Sie hier die Bildbeschreibung ein

Ich sehe nicht die allgemeine Regel, wie ein nächster Hop definiert wird. (für Netzwerkziel 10.0.0.0, 11.0.0.0, 13.0.0.0 verstehe ich, aber nicht die anderen)

Ich benutze auch den Befehl 'ip route add <> src <> via <>, was soll im <> sein? Ich benutze Linux Ubuntu als virtuelle Maschine in virtualbox

Antworten:


5

Ich vermute, dass der Fehler "rtnetlink reply: invalid argument" darauf zurückzuführen ist, dass entweder die IP-Adresse, die Maske und das Gateway nicht derselben Klasse angehören (Klasse A oder B oder C). oder weil eine "statische" Adresse mit einem DHCP-Adressbereich in Konflikt steht.

Die Tabelle für R8 in Ihrem Schema ist keine Routing-Tabelle, sondern beschreibt, was R8 mit Adressen macht. Wo zum Beispiel 10.0.0.0 steht, sollte dies das 10.0.0.0/24 Netzwerksegment und nicht die IP-Adresse bedeuten.

Bei Subnetzwerken, auf die von R8 aus nicht direkt zugegriffen werden kann, z. B. 16.0.0.0/24, leitet die Routing-Tabelle die Nachricht an den Router weiter, der dem Zielnetzwerk am nächsten liegt, und dieser Router leitet die Nachricht dann entsprechend weiter Routing-Tabelle. In diesem Fall werden an 16.0.0.X adressierte Nachrichten an das Gateway 10.0.0.2 weitergeleitet. Dies ist die Adresse von R7, die sie an den richtigen Empfänger weiterleitet.

Der in R8 ausgeführte Routing-Befehl sollte ungefähr so ​​aussehen:

ip route add 16.0.0.0/24 via 10.0.0.2 src 10.0.0.1

Der Parameter src wird beim Hinzufügen einer Route zu einem Multihomed-Host verwendet, um die Kontrolle über die Quell-IP-Adresse zu haben, von der Ihr Host sendet. Es kann in einfachen Fällen weggelassen werden. Dadurch wird hier sichergestellt, dass die Rückmeldung über das Subnetz 10.0.0.0/24 zurückgegeben wird. Es können jedoch auch andere Werte verwendet werden, wenn wir aus irgendeinem Grund R7 bevorzugen, um die Nachricht nicht über dieses Teilnetz zurückzugeben.

Beachten Sie, dass der von Ihnen angegebene src nur den Verkehr beeinflusst, der von Ihrem Ende ausgeht. Wenn ein fremdes Paket weitergeleitet wird, hat es offensichtlich bereits eine Quell-IP-Adresse, sodass es normalerweise unverändert weitergeleitet wird (es sei denn, es wird NAT verwendet, und dies kann auch überschrieben werden).

Ich stelle fest, dass man im Allgemeinen nicht für jedes Ziel Routen angeben muss. So wie ein Computer in seiner Routing-Tabelle ein Standard-Gateway angeben kann, bei dem es sich um eine Sammeladresse handelt, die alle Nachrichten an Adressen empfängt, die er nicht kennt, verfügt auch ein Router über eine eigene Routing-Tabelle, die ein Gateway enthalten kann. Die Gateway-Adresse des Routers wird durch die Standardroute von dargestellt 0.0.0.0.

Beachten Sie, dass es durchaus möglich ist, sogar eine Gateway-Schaltung im Netzwerk einzurichten, zum Beispiel:
R1 ➝ R4 ➝ R8 ➝ R7 ➝ R6 ➝ R2 ➝ R1.
Die Anzahl der Hops ist hier nicht optimiert, aber Nachrichten werden weiterhin von jedem Subnetz zu jedem anderen Subnetz gesendet. Ein gutes Netzwerkdesign umfasst normalerweise einen oder mehrere zentralisierte Router, um die Anzahl der Hops zu minimieren.


Vielen Dank! : D Und wenn ich in der IP-Route richtig verstehe, füge <> über <> src <> hinzu, im ersten <> sollte das Zielnetzwerk sein, im dritten <> sollte die Schnittstelle des aktuellen Routers sein, und im zweiten <>, sollte die Schnittstelle mit der Schnittstelle des dritten <> verbunden sein, aber am anderen Ende?
Faceb Faceb

Ihr Beispiel ist von R8 -> R7, aber sagen wir, ich möchte von R8 -> R7 -> R6 oder von R8 -> R7 -> R6 -> R2 gehen, dann sind src und via gleich, aber nur die Ziele ändern sich (15.0.0.0 bzw. 14.0.0.0)?
Faceb Faceb

Ja, in beiden Fällen muss R8 keine weiteren Routen als R7 kennen.
Harryc

Ok, aber wie soll die Schnittstelle sein (dev), wenn ich den Befehl ip route add <> dev <> src <> via <> verwende? Und ist mein erster Kommentar unter Ihrer Antwort richtig? :)
Faceb Faceb

Ich bin ein bisschen verloren zwischen <> s. Dev gibt die Schnittstelle / das Subnetz an, über die / das die Nachricht gesendet werden soll. Im Fall von Multi-Home akzeptieren einige IP-Add-Befehle direkt den Schnittstellennamen (eth0 usw.) und nicht eine IP-Adresse. Src gibt die Schnittstelle / das Subnetz an, über die die Rückmeldung / Antwort zurückkommen soll.
Harryc

2

Die anderen sind mehr als einen Hop (Router) entfernt. Was den Router R8 betrifft, möchte er nur die zu verwendende Schnittstelle und die IP des nächsten Routers kennen, um das Zielnetzwerk zu erreichen. Dann geht er zum nächsten Router und dieser Router verwendet seine eigene Routing-Tabelle, um den nächsten zu bestimmen hüpfen. Um zum 15.0.0.0-Netzwerk zu gelangen, definiert die Routing-Tabelle die Schnittstelle 3 (13.0.0.4) und den Hop als nächsten Router (13.0.0.2). Sobald der Datenverkehr von R2 empfangen wurde, verwendet R2 seine eigene Routing-Tabelle, um die beste Route zum 15.0.0.0-Netzwerk zu ermitteln, das sich außerhalb der 15.0.0.1-Schnittstelle befindet.


Und es gibt das Ziel-Gateway an, das die Adresse des nächsten Routers in der Leitung ist.
Brian

Vielen Dank! :) Ich benutze auch einen Befehl 'ip route add <> src <> via <>, was soll im <> sein?
Faceb Faceb

Dies ist kein Experte, aber die erste Klammer wäre die Ziel-IP oder die Netzwerk- und Subnetzmaske des Zielnetzwerks, gefolgt vom Gateway des nächsten Hops. Beispiel für R8 zum 14-Netzwerk, IP-Route 14.0.0.0 255.0 .0.0 13.0.0.2). Das src ist mir nicht sicher, aber es kann dort sein, um eine Route für eine bestimmte Quell-IP zu definieren, entweder eine Workstation oder einen Router, und das Via wäre die Schnittstelle, auf der es ausgehen soll. Wie ich schon sagte, kein Experte hier, kann jemand dies für mich überprüfen? Vielen Dank.
Brian

Ok, weil ich 'ip route add <Ziel-IP> src <Schnittstelle des aktuellen Routers> über <Schnittstelle nächster Router in Zeile> verwendet habe, aber der Fehler in' Antwort auf rtnetlink: ungültiges Argument '
Faceb Faceb

Wie kann ich andere Benutzer dazu bringen, dies zu betrachten? :) Ich brauche wirklich eine Antwort :)
Faceb Faceb

1

Ich bin mir nicht sicher, woher Ihre Design- und Routing-Tabelle stammt. In einer Umgebung wie Ihrer werden die Routen zu den Remote-Netzwerken normalerweise über Routing-Protokolle (dh dynamisches Routing) definiert. Die Verwendung statischer Routen (vom Benutzer / Administrator definiert) mit allen redundanten Pfaden, die Sie haben, führt schließlich zu Routing-Schleifen oder schwarzen Löchern.

Mit anderen Worten, jedes Subnetz Ihres Diagramms kann tatsächlich über jede Schnittstelle von R8 erreicht werden, abhängig von der Konfiguration der anderen Router.

Zum Beispiel: Wenn Sie die Schnittstelle 1 von R8 als nächsten Hop für 14.0.0.0 definieren (was bedeutet, dass Pakete, die an eine IP des 14.0.0.0 /? Subnetzes gerichtet sind, über die Schnittstelle 1 gesendet werden), und wenn R4 (die tatsächliche Der nächste Sprung von Schnittstelle 1 von R8) hat eine weitere statische Aufladung von 14.0.0.0 bis R1. Ihr Paket wird R8-> R4-> R1-> Ziel kreuzen. Wenn Sie in diesem Beispiel Ihr Paket für 14.0.0.0 weiterhin an R4 senden, R4 jedoch mit einer anderen statischen Anweisung für 14.0.0.0 konfiguriert ist, die auf R8 verweist, haben Sie eine Routing-Schleife, und Ihr Paket springt zwischen diesen R8 und R4 bis zum Ablauf der TTL.

Die gleiche Theorie gilt für jedes andere entfernte Netzwerk wie 12.0.0.0, bei dem es weniger offensichtlich ist, ob R8 sein Paket an R2 oder R4 weiterleiten soll.

Das Wichtigste ist, dass IP-Pakete keinen Speicher haben. Sie werden lediglich durch Auswertung ihres Ziels weitergeleitet (dh Router kümmern sich nicht um die Schnittstelle, von der das Paket empfangen wurde - es sei denn, Sie verwenden Dinge wie Quell- Routing, aber das ist hier nicht der Fall).

In der von Ihnen veröffentlichten Tabelle wird nicht angezeigt, ob statisches oder dynamisches Routing verwendet wird (es fehlt auch das Subnetz dieser Netzwerke). Wenn dies jedoch keine bestimmte theoretische Übung ist, benötigen Sie dynamisches Routing.

Dynamisches Routing kann den besten Pfad von einem Router zu einem Zielnetzwerk definieren, indem verschiedene Parameter wie Anzahl der Sprünge, Bandbreite, Latenz usw. verwendet werden (abhängig vom spezifischen dynamischen Routing-Protokoll). Außerdem können sie Fehler redundanter Verbindungen ordnungsgemäß verwalten.

Wenn Sie sich für ein anderes Beispiel für 12.0.0.0 entscheiden, das auf Abstürze des R3- und R3-Routers hinweist, leiten Sie weiterhin Pakete, die beispielsweise für 12.0.0.5 bestimmt sind, an ein Schwarzes Loch weiter. Wenn Sie sich für den Lastausgleich auf 12.0.0.0 mit 2 Routen (mit derselben Metrik) durch R3 und R4 entscheiden, wenn R4 ausfällt (oder eine seiner Schnittstellen defekt ist), leitet R8 das Paket 1 weiter an R3, das Paket, weiter 2 bis R4, das Paket 3 bis R3 und so weiter. Dies führt zu scheinbar zufälligen Dingen, denn wenn die Pakete TCP verwenden, werden die fehlenden erneut übertragen, wodurch weniger offensichtlich wird, dass die Hälfte Ihres Datenverkehrs in den Papierkorb verschoben wird (z. B. zeitweiliger Leitungsverlust einiger Dienste, Langsamkeit usw.).

Wenn Sie Linux verwenden, kann Quagga die Software für dynamisches Routing sein. Es wird jedoch davon ausgegangen, dass andere Router ein dynamisches Routing-Protokoll ausführen.

Wenn Ihr Ziel jedoch darin besteht, eine statische Route festzulegen, sollten diese Befehle funktionieren (ich gehe von / 24 aus, aber wenn es klasse ist, könnte es eine / 8 sein):

ip route add 14.0.0.0/24 dev eth3

gleich von:

ip route add 14.0.0.0/24 via 13.0.0.2

Auf jeden Fall wird die zweite normalerweise in einem Multiaccess-Netzwerk bevorzugt (kein Multicast- / Broadcast-Verkehr erforderlich, keine Tonnen von ARP-Anforderungen usw.).

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.