it-swarm.com.de

Können TCP via UDP implementiert werden?

Ich hatte eine komische Idee. Ich habe von Software gehört, die nach meinem Verständnis UDP verwendet, um Dateien zu übertragen, wodurch der Overhead in TCP -Paketen verringert wird.

Wenn meine App TCP erfordert und mein LAN über ein Software-Setup verfügt, um mit einem anderen Rechenzentrum auf der anderen Seite der Küste zu kommunizieren. Wäre es möglich, die eigentlichen Daten über UDP zu senden, aber nicht an beiden Enden TCP zu simulieren?

Ich erinnere mich vage an etwas über 7 Schichten, aber ich bin nicht sicher, ob das Protokoll eine der Schichten war, und ich bin nicht sicher, ob es unmöglich ist, TCP perfekt zu simulieren/zu implementieren, wenn UDP über das Netzwerk verwendet wird. Hat jemand irgendwelche Ideen oder Informationen über solche Projekte?

24
user34537

Wenn Sie fragen, ob Sie UDP als Layer 2 verwenden können, lautet die Antwort ja. Es gibt verschiedene Protokolle, mit denen Sie mithilfe eines UDP-Transports einen Tunnel zu einem anderen Netzwerk erstellen können, z. B. L2TP und even IPsec (mit NAT traversal) . Sie können dies auch auf der Anwendungsschicht tun.

Wenn Sie fragen, ob TCP in UDP implementiert werden kann, lautet die Antwort Nein. Erstens haben TCP Pakete und UDP Pakete ein inkompatibles Format. Zweitens haben TCP und UDP unterschiedliche Protokollnummern (im IP Header zu sehen), was bedeutet, dass TCP Verkehr, der für einen UDP-Port bestimmt ist, nicht an den Server weitergeleitet wird korrektes Protokoll der oberen Schicht.

16
mpontillo

Sowohl TCP als auch UDP sind auf der IP aufgebaut, aber TCP verwendet eine andere Paketstruktur. In Layer-2 ist es nicht möglich, das TCPnachzuahmen. _ mit UDP-Paketen.

Wenn Sie die Kontrolle über Quelle und Ziel haben, ist es natürlich möglich, einen zuverlässigen UDP-Tunnel für die Pakete TCP zu erstellen. Dies würde einige interne Informationen (Paketnummer, Ack/Nack-Flags) im Hauptteil des UDP-Pakets erfordern.

Es gibt ein interessantes Projekt http://udt.sourceforge.net/

Es ist ein Broadcast-fähiger, zuverlässiger Dateiübertragungsmechanismus, der auf UDP basiert.

13
Viktor Latypov

PseudoTCP ist ein Protokoll, das TCP -Algorithmen oberhalb des UDP implementiert. Es wurde eingeführt, da der NAT-Durchlauf für TCP viel komplizierter ist als UDP. Einige P2P-Anwendungen benötigen jedoch eine zuverlässige Datenübertragung zwischen Knoten.

Soweit ich weiß, gibt es zwei PseudoTCP-Varianten: Libjingle und Libnice.Libjingle ist eine Open-Source-Bibliothek von Google, die ursprünglich für gtalk gedacht war. Sie können sich das File-Sharing-Beispiel von libjingle anschauen: https://developers.google.com/talk/libjingle/file_share . Vor kurzem verwenden Chrome-Desktops auch PseudoTCP-Implementierung von libjingle für zuverlässige Verbindungen.

5
Qinjin

Eine Möglichkeit, dies jetzt unter Linux-3.18 + zu tun, ist die Verwendung von Foo über UDP (FOU), die generische UDP-Encapsulation ( GUE ) implementiert. Hier ist eine gute Einführung in FOU und die Manpage für ip-fou .

Oder wenn Sie ein [Open Source] UDP-basiertes Dateiübertragungssystem wünschen, gibt es Dinge wie UDT , UFTP , Tsunami-UDP und sogar Googles QUIC .

3
Pierz

Wenn für meine App TCP erforderlich ist und in meinem LAN Software eingerichtet ist, um Mit einem anderen Rechenzentrum auf der anderen Seite der Küste zu kommunizieren, auf dessen Ende Software Eingerichtet ist. Wäre es möglich, die eigentlichen Daten über UDP zu senden, aber TCP an beiden Enden zu simulieren?

Ein UDP-Socket befindet sich in einem anderen Namespace als ein Socket mit TCP. Sie können UDP nicht an einem Ende schreiben und TCP am anderen Ende senden oder empfangen. TCP und UDP sind Peer-Protokolle; beide existieren in der Schicht über IP. Sie können nicht eins verwenden, um das andere zu fälschen.

3
user207421

Ja, Sie können ein Protokoll für UDP entwickeln, das TCP simuliert. Wenn Sie jedoch TCP vollständig simulieren, hätte dies technisch mehr Aufwand. Weil TCP als Paket implementiert ist und Ihr simulierter TCP im Paketkörper implementiert ist.

Wenn Sie nur ein oder zwei Funktionen von TCP benötigen (z. B. grundlegende Reihenfolge), ist die Implementierung in UDP hilfreich.

Halo verwendet 2-3 (IIRC) UDP-Protokolle, die verschiedene Funktionen von TCP simulieren, und dann vollwertige TCP zum Initialisieren von Spielzuständen. Ich habe dich beim ersten Networking erschossen, GDC-Veröffentlichung

In einem Fall senden sie beispielsweise drei doppelte UDP-Pakete, um den Paketverlust zu überwinden.

Wenn Sie die Software auf beiden Seiten steuern und es kostengünstig ist, ein eigenes Protokoll zu erstellen, kann UDP vielseitig eingesetzt werden.

3
Nathan Goings

Hmm, ich glaube schon. Sie müssen an beiden Enden einen Proxy verwenden, dies sollte jedoch möglich sein.

Das größte Problem, auf das Sie stoßen werden, ist, dass UDP mit der Idee entwickelt wurde, dass es Ihnen egal ist, ob einige Pakete nicht zum anderen Ende gelangen.

Hier ist ein Link mit weiteren Informationen:

http://www.cyberciti.biz/faq/key-differenzen-zwischen-tcp-und-udp-protocols/

IMHO ist es keine gute Idee, Dateien über UDP zu übertragen. 

1
user978122

Die Probleme von TCP liegen in seinen Algorithmen, nicht in seinen Headern.

Natürlich können Sie die TCP -Algorithmen auch über UDP implementieren. Das wäre praktisch dasselbe wie das Tunneln von TCP -Datagrammen innerhalb von UDP-Datagrammen. Dazu müssen Sie jedoch jedem Paket ein paar Byte mehr Overhead hinzufügen und einen anderen Endpunkt zum Auspacken der Pakete benötigen.

UDP selbst ist nur eine dünne Schicht neben IP: Es ist eine bequeme Möglichkeit, auf IP-paketvermittelte Netzwerke zuzugreifen, ohne in Kernel eintauchen zu müssen oder eine spezielle Behandlung von Routern zu erhalten. Der Hauptgrund für die Implementierung eines zuverlässigen Transports über UDP ist die Abkehr von TCP Algorithmen zugunsten einer effizienteren Lösung. FileCatalyst wurde oben als eine Firma erwähnt, die dies tut, und meine eigene Firma Data Expedition, Inc. tut dies ebenfalls.

Sie könnten also TCP Algorithmen über UDP implementieren, möchten dies aber nicht.

1
Seth Noble

Sie können so etwas wie eine Verbindung über UDP simulieren, und Sie können auch Zuverlässigkeitsprüfungen, Sortierung und erneute Übertragung usw. hinzufügen. - aber dann ist es immer noch kein TCP, es ist nur der Weg.

Natürlich kann eines der Enden eine Art "Hub" oder "Proxy" sein, das eine Anpassung durchführt. Dann haben Sie keine 2-End-Lösung, sondern eine 4-End-Lösung - ein Paar mit "echtem" TCP und das andere mit dem "selbstgestrickten" "TCP" -, das Sie verwenden zusammen mit einem entsprechend gestalteten Programm.

0
glglgl