OK, von oben;
Stimmen Sie über Ihre Frage von mir ab. Ihre Frage ist aufgrund Ihrer Antworten in Kommentaren zur Antwort anderer nicht klar genug. Sie haben angenommen, dass die Lösung netzwerktechnisch ist, scheinen es aber nicht zu wissen, und erwecken den Eindruck, dass Sie hoffen, dass Ihnen jemand die Antwort gibt, die Sie benötigen.
Sie haben die folgende Problemanforderung;
Host1 und Host2 sind über Router1 und Router2 mit zwei Verbindungen zwischen ihnen verbunden. Jeder Router dupliziert jedes von Hosts kommende Paket, bevor er sie gleichzeitig an beide Verbindungen weiterleitet. Dann sorgen entweder der Peer-Router oder der IP-Stack des Zielhosts für die Beseitigung redundanter Pakete.
- Sofern die Verbindung Ihres Endhosts zu seinem lokalen Router nicht doppelt so schnell ist wie der Datenverkehr über eine einzelne Verbindung zwischen
router1
und router2
, wie Sie nicht erwähnt haben, benötigen Ihre Hosts zwei Verbindungen zu ihrem lokalen Router. Es gibt KEINE native Software oder ein natives Produkt , das auf einem Endhost ausgeführt werden kann und zwei TCP-Streams über dieselbe oder zwei separate NICs entfernt und aus einem alternativen Stream fehlende Pakete aus dem ersten Stream abruft . Woher weiß ich das? Da das Networking nicht so funktioniert, waren IP & TCP einfach nicht so konzipiert. Es gibt vielleicht Produkte zum Duplizieren von Paketen, aber diese sind eine Nische, nicht weit verbreitet, weil es die falsche Antwort auf die Frage ist.
Warum ist das so eine verrückte Bitte?
Sie scheinen zu versuchen, einen runden Stift in ein quadratisches Loch zu stecken. Mein Verständnis Ihrer Problemanforderung besteht darin, dass Sie Redundanz für die Daten Ihrer Anwendung wünschen, die zwischen Remote-Hosts übertragen werden. Bei einem Verbindungsfehler werden die Daten zweimal Ende an Ende gesendet. Das ist alles, wovor Sie sich hier mit zwei TCP-Flows schützen, einem Ausfall der physischen Schicht 1. Wenn das Senden eines Pakets von einem Host zum anderen unterbrochen wird, kommt es zu einem verspäteten Eintreffen auf beiden Router-zu-Router-Verbindungen. Wenn ein vorübergehendes Problem auf einer Verbindung auftritt, jedoch nicht auf der anderen, wie z. B. eine Überlastung, muss der Router am Ende der Verbindung beide TCP-Streams gleichzeitig verfolgen, um festzustellen, ob ein Paket auf Verbindung 2 mit der fortlaufenden Sequenznummer in der Verbindung ankommt Header, und auf Link1 ist nichts angekommen, dann ist das Paket auf Link1 zu spät, und wenn es auftaucht, muss es verworfen werden.
Was ist, wenn Sie sich in einer Situation befinden, in der Link1 überlastet ist, aber aufgrund eines guten QoS-Schemas kein Datenverkehr unterbrochen wird, es sich jedoch um Warteschlangen handelt? Pakete nach Link1 befinden sich jetzt immer hinter Link2. Was passiert, wenn Link2 jetzt ausfällt und der Router Pakete auf Link1 an die Endhosts weiterleitet, Dup-Pakete empfängt, stoppt und erneut überträgt usw. und eine Verzögerung verursacht. Hier wurde nichts erreicht.
Weiter zu einer Lösung;
Eine bessere Idee wäre meiner Meinung nach, Dual-Layer-2-Verbindungen zwischen den beiden Endhosts zu haben und ihre Broadcast-Domänen so zu erweitern, dass sie jeweils die NIC einschließen. Sie können dies über direkte Layer-2-Verbindungen, MPLS / VPLS-Erweiterung, Carrier-Layer-2-Service tun, treffen Sie Ihre Wahl, das ist hier nicht unbedingt relevant. Wenn Sie das Layer-2-Netzwerk zwischen Hosts erweitern, müssen Sie sich nicht mit TCP herumschlagen oder verrückte Korrekturen in Form von schwarzer Magie oder Pflaster vornehmen. TCP ist völlig unabhängig von der zugrunde liegenden Technologie und Sie haben weiterhin die Redundanz von Schicht 1 / physischer Verbindung.
Wenn Sie eine MPLS-basierte Lösung verwenden, können Sie Funktionen wie Traffic Engineering (MPLS-TE) verwenden, um die Latenz über die Verbindungen hinweg zu überwachen und immer die Verbindung mit der niedrigsten Latenz zu verwenden. Sie können BFD mit MPLS FRR verwenden, wodurch Sie im Laufe der Zeit zwischen den Links 50 ms ~ ausfallen können. Ich weiß, dass Sie gesagt haben, Sie wollen keine Redundanz-Failover-Lösung, aber 50 ms sind meiner Meinung nach ziemlich schnell. Wenn Ihre Anwendung einen Konnektivitätsverlust von 50 ms nicht bewältigen kann, müssen Sie zum Zeichenbrett der Anwendung zurückkehren. Kein System ist zu 100% in Betrieb. Sie müssen Ausfälle, geplante Wartungsarbeiten und Ausfälle durch böswillige Absichten / Sicherheitsmaßnahmen planen. zu allen irgendwann auftreten. Sie müssen realistisch sein.
In einem Kommentar sagten Sie Folgendes:
Nun, IP SLA ist die Technologie, die bisher mindestens an einem Ende verwendet wird ... :) Trotzdem dauert es ziemlich lange, bis beide Enden einen Verbindungsfehler erkennen, und die Anwendung ist manchmal nicht mehr synchron ... und die Verbindungen können manchmal funkeln ... deshalb suchen wir etwas ohne Verzögerung
Keine solche Sache; Es muss Zeit vergehen, bis mögliche Ereignisse Wirklichkeit werden. Sie müssen dies auf ein "akzeptables" Verzögerungsniveau überdenken.
Auch in einem anderen Kommentar sagten Sie;
BGP Es dauert eine ganze Weile, bis festgestellt wird, dass die als betriebsbereit geltende Route jetzt nicht mehr verfügbar ist. Schließlich erkennen die Router dies und wechseln die aktiven Routen, aber es braucht Zeit, und das Protokoll auf Anwendungsebene kann darunter leiden
BGP hat einen Hallo-Timer, der die Anwesenheit seines unmittelbaren Nachbarn erkennt. Die Standardeinstellung ist 30 Sekunden. Ich vermute, dass Sie sich auch darauf beziehen. Wenn beide Router in Ihrer Topologie BGP mit dem ISP an jedem Standort oder sogar direkt miteinander sprechen, erstellen Sie über diese Peerings IP-in-IP-Tunnel von GRE- oder L2TP (v3) -Tunneln zwischen den beiden Routern, über diese Tunnel wird BFD oder ausgeführt IP SLA. Jetzt können Sie einen End-to-End-Konnektivitätsverlust in 1 oder 2 Sekunden erkennen und mithilfe von Tacking-Objekten zum anderen Tunnel umleiten.
Alles in allem scheinen Sie verschiedene Ebenen der Technologie zu verwechseln. BGP soll kein schnelles Umleiten ermöglichen, TCP soll nicht dupliziert werden und so weiter. Sie suchen nach den falschen Abstraktionsebenen, um dieses Problem anzugehen. Ich hoffe das hat geholfen.