O seguinte descreve Ethernet sobre USB
A Especificação da Interface de Driver de Rede Remota (RNDIS) é uma Protocolo proprietário da Microsoft usado principalmente em cima de USB. Ele fornece um link Ethernet virtual para a maioria das versões do Windows, Linux e Sistemas operacionais do FreeBSD. Uma especificação parcial do RNDIS está disponível da Microsoft, mas as implementações do Windows foram observadas solicitações de emissão não incluídas nessa especificação, e para ter restrições não documentadas. 1
O protocolo é strongmente acoplado às interfaces de programação da Microsoft e modelos, mais notavelmente a especificação de interface de driver de rede (NDIS), que são alheios a sistemas operacionais diferentes do Windows. este complica a implementação do RNDIS em sistemas operacionais não-Microsoft, mas Linux, 2 FreeBSD, 3 O NetBSD 4 e o OpenBSD [ 5] implementar o RNDIS nativamente.
O USB Implementers Forum (USB-IF) define pelo menos três protocolos de classe de dispositivos de comunicações USB (CDC) não proprietários com funcionalidade comparável de "Ethernet virtual"; um deles (CDC-ECM) é anterior ao RNDIS e é amplamente usado para interoperabilidade com sistemas operacionais não-Microsoft, mas não funciona com o Windows.
[PATCH] USB: usbnet (8/9 ) módulo para dispositivos RNDIS
Existem inúmeros protocolos para redes no estilo Ethernet via USB. A principal motivação para esses protocolos é permitir a troca de dados independente de aplicativos com dispositivos USB, em vez de protocolos especializados, como vídeo ou MTP. Mesmo que o USB não seja uma Ethernet física, as pilhas de rede de todos os principais sistemas operacionais são configuradas para transportar quadros IEEE 802.3, sem importar muito o que o transporte subjacente realmente é.
Os principais protocolos da indústria são (em ordem cronológica): Remote NDIS (RNDIS, um protocolo de fornecedor da Microsoft), Ethernet Control Model (ECM), Ethernet Emulation Model (EEM) e Network Control Model (NCM). Os últimos três fazem parte do grupo de protocolos Classe de dispositivos de comunicações (CDC) do Fórum de implementadores USB (USB-IF). Eles estão disponíveis para download no USB-IF (veja abaixo). A especificação RNDIS está disponível no site da Microsoft. Em relação aos padrões de fato, alguns padrões, como o ECM, especificam o uso de recursos USB que os sistemas antigos não tinham. No entanto, pequenas modificações do padrão, os chamados subconjuntos, possibilitam implementações práticas em tais plataformas. Notavelmente, até mesmo algumas das plataformas mais modernas precisam de acomodações menores e, portanto, o suporte para esses subconjuntos ainda é necessário.
Destes protocolos, o ECM é de longe o mais simples - os quadros são simplesmente enviados e recebidos sem modificação, um de cada vez. Essa foi uma boa estratégia para sistemas USB 1.1 (atuais quando o protocolo foi lançado) com pacotes de 64 bytes, mas não para sistemas USB 2.0 que usam pacotes de 512 bytes.
O problema é que os quadros Ethernet têm cerca de 1500 bytes - cerca de 3 pacotes USB 2.0 e 23 pacotes USB 1.1. De acordo com o funcionamento do sistema USB, cada pacote é enviado como uma transferência, uma série de pacotes de comprimento máximo terminados por um pacote curto ou por um ZLP especial (pacote de comprimento zero). Depois disso, há latência de barramento, onde nada é enviado até que outra transferência possa ser iniciada. Isso reduz a ocupação de ônibus, o que significa que nada é enviado por frações consideráveis de tempo de ônibus. Um intervalo a cada 23 quadros não é perceptível, mas um intervalo a cada três quadros pode ser muito caro para o processamento.
Os seguintes foram respondidos superusuário
Os drivers Ethernet over USB estão incluídos no Linux. O relevante drivers de tamanho de host são CDC_ETHER e RNDIS. Seu tamanho de escravo contrapartes (que basicamente emulam uma ponte USB-Ethernet em software) são USB_ETH, USB_ETH_RNDIS. USB_G_ANDROID também suporta Protocolo RNDIS, o que é ótimo no meu caso, já que os dispositivos em pergunta usar o kernel do Android, então o driver está habilitado por padrão.
A largura de banda medida da ponte USB usando o USB_G_ANDROID driver é ~ 130Mbps de host para escravo e ~ 90Mbps o contrário.