logo
  • 攻略大全
Android的USB网络共享功能

一、什么是USB网络共享?

USB 共享网络是一种基于 USB 接口的数据传输和资源共享解决方案,例如 Android设备作为一个usb网卡连接到其他主机,将Android设备的网络共享给主机使用。在Android系统设置中的 “开发者选项” 中,可以找到usb的默认配置选择USB 共享网络的功能,选择还包括其MTP,PTP等。默认的网络共享协议是RNDIS,是将TCP/IP封装在USB报文里,实现网络通信。(即将TCP/IP包 封装成为USB总线要求的格式)类似的封装报文的情况也出现在PPPoE(将点对点协议(PPP)封装在以太网(Ethernet)框架中)等技术中。

另外还有NCM和ECM协议:cdc ethernet usb规范规定的CommunicationsDevice Class “Ethernet Model” protocol。USB NCM,属于USB-IF定义的CDC(Communication Device Class)下的一个子类:Network Control Model,用于Host和Device之间交换以太网帧。NCM主要用于高速网络场景下比如HSPA和LTE数据服务。NCM协议规范基于ECM改进而来,支持了更高的数据率。使用NCM的主要优点在于它在单个USB批量传输中传输多个数据报。NCM允许设备和主机使用一个USB传输有效地传输一个或多个以太网帧。USB传输被格式化为NCM传输块(NTB)。有两种NTB格式:NTB-16和NTB-32。前者用来表示长度小于65536字节的NTB,后者用来表示不超过4GB的NTB。

二、RNDIS的使用

一般Android系统默认就支持该功能,可以在开发者选项中选择开启,如果ODM厂商有自己做适配也可以通过属性开启:

setprop sys.usb.config rndis //仅开启rndis

setprop sys.usb.config rndis,adb //开启rndis同时支持有线adb

如果想了解属性配置如何实现的,可以看看专门讲usb gadget驱动的这篇文章:https://www.cnblogs.com/blogs-of-lxl/p/16815102.html

开启RNDIS网络共享后,如果Android设备的USB口硬件上支持otg的话,可以通过usb直接连到主机端,主机端有RNDIS HOST驱动的话就可以识别到一个usb网卡,Android设备有网络的情况下,主机端就可以间接通过Android设备上网了。usb tethering 本质上是利用tcp/ip协议栈的转发功能, 和softap以及 bluetooth tethering 类似 (tcp/ip 网络协议栈的数据包转发来实现网络共享, 通常是使用iptables 命令来操作 其nat表来配置的)

问题1: windows无法正常识别RNDIS网卡

解决方法:更新一下RNDIS网卡驱动

问题2: Android或Linux主机无法正常识别RNDIS网卡

解决方法:内核编译配置加上RNDIS HOST的支持

+CONFIG_USB_USBNET=y

+CONFIG_USB_NET_RNDIS_HOST=y

另外如果Android主机端需要默认启用usb网卡的DHCP服务,则可以修改如下系统服务的配置文件:

diff --git a/frameworks/base/core/res/res/values/config.xml b/frameworks/base/core/res/res/values/config.xml

index 93b1ed2de..bc2ce5cb5 100755

--- a/frameworks/base/core/res/res/values/config.xml

+++ b/frameworks/base/core/res/res/values/config.xml

@@ -414,7 +414,7 @@

- eth\\d

+ eth\\d|usb\\d

Copyright © 2088 红星游戏活动中心-最新网游动态礼包放送 All Rights Reserved.
友情链接