it-swarm.com.de

Verbinden Sie zwei Ubuntu-Systeme über USB miteinander

Gibt es eine Möglichkeit, eine Verbindung zwischen zwei Ubuntu-Systemen über USB herzustellen, indem Sie ein USB-Kabel an beide anschließen?

In einer einfachen Testumgebung möchte ich ein paar Zeichen von einem System zu einem anderen senden, im Grunde genommen einen kleinen Chat.

In einem etwas fortgeschritteneren Test möchte ich eine TCP) - Verbindung herstellen und die USB-Verbindung wie jede andere LAN-Verbindung behandeln.

1
Socrates

Im Folgenden wird Ethernet über USB beschrieben

RNDIS

Die Remote Network Driver Interface Specification (RNDIS) ist ein proprietäres Microsoft-Protokoll, das hauptsächlich über USB verwendet wird. Es bietet eine virtuelle Ethernet-Verbindung zu den meisten Versionen der Betriebssysteme Windows, Linux und FreeBSD. Eine teilweise RNDIS-Spezifikation ist von Microsoft erhältlich. Es wurde jedoch beobachtet, dass Windows-Implementierungen Anforderungen ausgeben, die nicht in dieser Spezifikation enthalten sind, und dass Einschränkungen nicht dokumentiert sind. 1

Das Protokoll ist eng an die Programmierschnittstellen und -modelle von Microsoft gekoppelt, insbesondere an die Network Driver Interface Specification (NDIS), die Betriebssystemen außer Windows fremd sind. Dies erschwert die Implementierung von RNDIS auf Nicht-Microsoft-Betriebssystemen, aber Linux, 2 FreeBSD, NetBSD 4 und OpenBSD [5] implementieren RNDIS nativ.

Das USB Implementers Forum (USB-IF) definiert mindestens drei nicht proprietäre CDC-Protokolle (USB Communications Device Class) mit vergleichbarer "Virtual Ethernet" -Funktionalität. Eine davon (CDC-ECM) ist älter als RNDIS und wird häufig für die Interoperabilität mit Nicht-Microsoft-Betriebssystemen verwendet, funktioniert jedoch nicht mit Windows.

[PATCH] USB: usbnet (8/9) -Modul für RNDIS-Geräte

Ethernet_over_USB Wikipedia

Es gibt zahlreiche Protokolle für Ethernet-Netzwerke über USB. Die Hauptmotivation für diese Protokolle besteht darin, einen anwendungsunabhängigen Datenaustausch mit USB-Geräten anstelle von speziellen Protokollen wie Video oder MTP zu ermöglichen. Auch wenn USB kein physisches Ethernet ist, sind die Netzwerkstacks aller gängigen Betriebssysteme so eingerichtet, dass sie IEEE 802.3-Frames transportieren, ohne dass der zugrunde liegende Transport von Bedeutung ist.

Die wichtigsten Industrieprotokolle sind (in chronologischer Reihenfolge): Remote-NDIS (RNDIS, ein Microsoft-Herstellerprotokoll), Ethernet-Steuerungsmodell (ECM), Ethernet-Emulationsmodell (EEM) und Netzwerksteuerungsmodell (NCM). Die drei letztgenannten Protokolle gehören zur größeren Protokollgruppe der Communications Device Class (CDC) des USB Implementers Forum (USB-IF). Sie können von der USB-IF heruntergeladen werden (siehe unten). Die RNDIS-Spezifikation ist auf der Microsoft-Website verfügbar. In Bezug auf De-facto-Standards legen einige Standards, wie z. B. ECM, die Verwendung von USB-Ressourcen fest, über die frühe Systeme nicht verfügten. Kleinere Modifikationen des Standards, sogenannte Subsets, ermöglichen jedoch praktische Implementierungen auf solchen Plattformen. Bemerkenswerterweise benötigen selbst einige der modernsten Plattformen geringfügige Anpassungen, weshalb die Unterstützung dieser Untergruppen weiterhin erforderlich ist.

Von diesen Protokollen ist ECM mit Abstand das einfachste - Frames werden einfach nacheinander ohne Änderung gesendet und empfangen. Dies war eine gute Strategie für USB 1.1-Systeme (aktuell, als das Protokoll ausgegeben wurde) mit 64-Byte-Paketen, jedoch nicht für USB 2.0-Systeme, die 512-Byte-Pakete verwenden.

Das Problem ist, dass Ethernet-Frames eine Größe von ungefähr 1500 Byte haben - ungefähr 3 USB 2.0-Pakete und 23 USB 1.1-Pakete. Je nach Funktionsweise des USB-Systems wird jedes Paket als Übertragung gesendet, eine Reihe von Paketen mit maximaler Länge, die durch ein kurzes Paket oder ein spezielles ZLP (Zero-Length-Paket) abgeschlossen werden. Danach gibt es eine Buslatenz, bei der nichts gesendet wird, bis eine andere Übertragung eingeleitet werden kann. Dies reduziert die Busauslastung, was bedeutet, dass für beträchtliche Bruchteile der Buszeit nichts gesendet wird. Eine Lücke alle 23 Frames ist nicht erkennbar, aber eine Lücke alle drei Frames kann für den Durchsatz sehr kostspielig sein.

Folgendes wurde beantwortet Superuser

Ethernet über USB-Treiber sind in Linux enthalten. Die relevanten Treiber für die Hostgröße sind CDC_ETHER und RNDIS. Ihre Gegenstücke in Slave-Größe (die in der Software im Wesentlichen eine USB-Ethernet-Bridge emulieren) sind USB_ETH, USB_ETH_RNDIS. USB_G_Android unterstützt auch das RNDIS-Protokoll, was in meinem Fall großartig ist, da die fraglichen Geräte den Kernel Android=) verwenden, sodass der Treiber standardmäßig aktiviert ist.

Die gemessene Bandbreite der USB-Bridge mit dem USB_G_Android-Treiber beträgt ~ 130 Mbit/s von Host zu Slave und ~ 90 Mbit/s umgekehrt.

1
Yaron

Sie können zwei normale USB-Anschlüsse (wie die meisten Computer) nicht mit einem Kabel verbinden. Die beiden Seiten einer USB-Verbindung sind nicht symmetrisch. Sofern Sie nicht zufällig über ein Gerät mit einer USB-OTG-Schnittstelle (Google it) und den entsprechenden Treibern verfügen, können Sie nicht einfach zwei USB-Anschlüsse anschließen.

Sie können stattdessen ein Paar USB-zu-Ethernet-Adapter besorgen, diese einstecken und jetzt TCP einfach ausführen diese Verbindung.

Wenn Sie wirklich nur Zeichen austauschen und keinen Netzwerkstapel ausführen möchten, können Sie ein Paar USB-zu-Seriell-Adapter erwerben und diese mit einem Nullmodemkabel verbinden.

0
JayEye