基于RNDIS协议的虚拟网卡程序实现。

合集下载

rndis原理

rndis原理

rndis原理rndis原理是指Remote Network Driver Interface Specification (远程网络驱动程序接口规范),是由微软公司推出的一种网络设备驱动程序接口规范。

它的作用是将网络设备(如手机、平板电脑、物联网设备等)连接到计算机,并通过USB接口进行通信。

rndis原理的核心是将网络设备模拟成一个虚拟的以太网适配器,使得计算机可以像使用普通以太网适配器一样与网络设备进行通信。

具体来说,rndis通过USB的数据传输功能将网络设备上的数据封装成网络数据包,然后通过USB接口传输到计算机,计算机再将数据包解封装并发送到网络上。

rndis原理的实现主要依赖于以下几个关键技术:1. USB设备描述符:rndis设备通过USB设备描述符向计算机描述自己的功能和特性。

计算机根据设备描述符的信息来加载相应的驱动程序,并与rndis设备建立通信。

2. 网络控制模型:rndis设备通过网络控制模型与计算机进行通信。

网络控制模型定义了一组标准命令,用于控制和配置rndis设备的网络参数,例如IP地址、子网掩码、网关等。

通过这些命令,计算机可以向rndis设备发送网络配置信息,使其能够正确地与网络进行通信。

3. 数据传输模型:rndis设备通过数据传输模型与计算机进行数据交换。

数据传输模型定义了一组标准命令和数据结构,用于封装和解封装网络数据包。

rndis设备将网络数据包封装成数据传输模型定义的格式,并通过USB接口传输给计算机。

计算机通过解封装数据包,获取其中的网络数据,并将其发送到网络上。

rndis原理的优点在于它的通用性和易用性。

由于rndis将网络设备模拟成一个普通的以太网适配器,所以它可以与任何支持以太网协议的计算机进行通信。

此外,rndis设备不需要安装额外的驱动程序,只需要计算机上已有的以太网驱动程序即可。

这使得rndis 设备的使用非常方便,几乎可以在任何计算机上直接使用。

TCPIPOverUSB用USB传输以太网数据,给你的MCU加个网卡

TCPIPOverUSB用USB传输以太网数据,给你的MCU加个网卡

TCPIPOverUSB用USB传输以太网数据,给你的MCU加个网卡RNDIS和ECM的热插拔问题最近修复了一波 RNDIS 和 ECM的热插拔通信异常问题,添加了通过menuconfig配置RNDISdelay linkup的配置选项。

问题修复点如下:RNDIS:当存在通信链接时热插拔 Windows会发送REMOTE_NDIS_RESET_MSG,该指令未实现,现已实现。

当存在通信链接时热插拔 eth_tx线程大几率会死等传输完成的信号量通知,导致LWIP卡死。

当存在通信链接时热插拔 eth_rx的接收缓冲未重置,导致接收数据异常。

ECM:当存在通信链接时热插拔 eth_tx线程大几率会死等传输完成的信号量通知,导致LWIP卡死。

当存在通信链接时热插拔 eth_rx的接收缓冲未重置,导致接收数据异常。

现已测试stm32f469i-discovery / LWIP2.0.2 / Windows 10 1903下 RNDIS,iperf传输过程中反复热插拔后功能正常, delay linkup宏开启前后功能正常,连续热插拔功能正常。

现已测试stm32f469i-discovery / LWIP2.0.2 / MacOS Mojave 10.14.2下 ECM,iperf传输过程中反复热插拔后功能正常。

相关Pull Request:关于NDISRNDIS全称Remote NDIS 是Microsoft定义的一种USB以太网卡模型,说到RNDIS 必须要说说另一个东西,NDIS。

NDIS(Network Driver Interface Specification)是网络驱动程序接口规范的简称。

它横跨传输层、网络层和数据链路层,定义了网卡或网卡驱动程序与上层协议驱动程序之间的通信接口规范,屏蔽了底层物理硬件的不同,使上层的协议驱动程序可以和底层任何型号的网卡通信。

NDIS为网络驱动程序创建了一个完整的开发环境,只需调用NDIS函数,而不用考虑操作系统的内核以及与其他驱动程序的接口问题,从而使得网络驱动程序可以从与操作系统的复杂通讯中分离,极大地方便了网络驱动程序的编写。

NDIS函数

NDIS函数

NDIS函数简明手册面向无连接的函数:MiniportAllocateComple 调用它来指示以前调用的NdisMAllocateMemoryAsync已经完成MiniportCheckForHang 检查NIC的内部状态MiniportDisableInterrupt 禁止NIC产生中断MiniportEnableInterrupt 允许NIC产生中断MiniportHalt 重新分配和重新注册NIC占用的资源并且终止NIC以使它不再有用MiniportHandleInterrupt 延期用来完成I/O中断函数的执行MiniportInitialize 出始化NICMiniportISR 作为NIC中断服务例程以高权值运行MiniportQueryInformation 查询微端口驱动程序的性能和当前状态MiniportReconfigure 未使用MiniportReset 对NIC发出一个硬件重置MiniportReturnPacket 从上层接收一个包,这个包是在这之前通过调用NdisMIndicateReceivePacket函数传上去的包MiniportSend 如果驱动程序没有MiniportSendPadcets或MiniportWanSend函数,它用来将一个包通过NIC传递到网络上MiniportSendPackets 通过NIC传递一组包到网络上MiniportSetInformation 变换(设置)关于微端口驱动程序或它的NIC的信息MiniportShutdown 当系统暂时关闭时,将NIC恢复到初始状态MiniportSynchronizeISR 同步访问与MiniportISR或MiniportDisableInterrupt共享的资源。

如果有运行在DIRQL下的NIC驱动程序函数与驱动程序的MiniportISR或MiniportDisableInterrupt函数共享资源,需要此函数MiniportTimer 如果微端口的NIC不产生中断,用于轮询NIC的状态MiniportTransferData 将由NIC接收到的包的内容拷贝到一个给定的包缓存中MiniportWanSend 如果驱动程序控制着W AN NIC,通过NIC发送一个包到网络上面向连接微端口的上层函数:DriverEntry 由操作系统调用来激活和初始化微端口驱动程序MiniportAllocateComplete 调用它来指示以前调用的NdisMAllocateMemoryAsync已经完成MiniportChecKForHang 检查NIC的内部状态MiniportCoActivateVc 激活一个虚连接(VC)MiniportCoCreateVc 为一个VC建立VC状态MiniportCoDeactivateVc 为一个VC释放VC的状态MiniportCoDeleteVc 删除一个VCMiniportCoRequest 查询微端口驱动程序的能力和当前状态或改变(设置)有关微端口驱动程序或它的NIC的信息MiniportCoSendPackets 通过一个NIC发送一组包到网络上MiniportDisableInterrupt 禁止一个NIC产生中断MiniportEnableInterrupt 允许一个NIC产生中断MiniporeHalt 收回和注销NIC占用的资源并且终止NIC以使它不再使用MiniportHandIeInterrupt 延期用来完成I/O中断函数的执行MiniportInitialize 初始化NICMiniportISR 作为NIC中断服务例程以高权值运行MiniportReconfigure 未使用MiniporeReset 对NIC发出一个硬件重置MiniportReturnPacket 从上层接收一个包,这个包是在这以前通过调用NdisMCoIndicateReceivePacket传上去的MiniportShutdown 一个可选择函数,当系统关闭时,将NIC恢复到它的初始状态MiniportSynchronizpISR 同步访问与MiniportISR或MiniportDisableInterrupt共享的资源,如果有运行在DIRQL下的NIC驱动程序函数与驱动程序的MiniportISR或MiniportDisableInterrupt函数共享资源MiniportTimer 如果微端口NIC不产生中断,轮询一个NIC状态MiniportWanSend 如果驱动程序控制着W AN NIC ,通过网络接口卡发送一个包到网络上初始化和注册函数NdisMInitializeWrapper 为微端口驱动程序初始化NDIS库数据结构NdisMRegisterMiniport 向NDIS提供有关微端口驱动程序的信息NdisMSetAttributes 向NDIS库报告微端口驱动程序所支持的NIC的类型并且传递指向微端口的环境区域的句柄。

微软RNDIS协议

微软RNDIS协议

微软RNDIS协议协议名称:微软RNDIS协议一、引言微软RNDIS(Remote Network Driver Interface Specification)协议是一种用于在主机计算机与远程设备之间进行网络通信的协议。

该协议旨在提供一种标准化的接口,使主机计算机能够通过USB、以太网或其他物理介质与远程设备进行通信。

本协议的目的是确保通信的稳定性、可靠性和安全性。

二、协议范围本协议适用于所有使用微软RNDIS协议进行网络通信的主机计算机和远程设备。

三、术语定义1. RNDIS:Remote Network Driver Interface Specification,即远程网络驱动程序接口规范,是一种用于主机计算机与远程设备之间进行网络通信的接口规范。

2. 主机计算机:指运行操作系统的计算机,用于控制和管理远程设备。

3. 远程设备:指通过USB、以太网或其他物理介质与主机计算机进行通信的设备。

四、协议规定1. 连接建立主机计算机与远程设备之间的连接建立过程应符合以下规定:- 主机计算机通过识别远程设备的RNDIS功能来确认设备是否支持RNDIS协议。

- 主机计算机向远程设备发送连接请求,请求建立网络连接。

- 远程设备收到连接请求后,根据协议规定进行回应,确认连接建立。

2. 数据传输主机计算机与远程设备之间的数据传输过程应符合以下规定:- 数据传输应使用RNDIS协议规定的数据包格式。

- 数据包应包含必要的控制信息,以确保传输的完整性和准确性。

- 数据传输过程中,主机计算机应监测数据传输状态,及时处理传输错误或异常情况。

- 远程设备应接收并处理主机计算机发送的数据包,确保数据的正确接收和处理。

3. 错误处理在数据传输过程中,如出现错误或异常情况,应按照以下规定进行错误处理:- 主机计算机应根据错误类型和严重程度采取相应的措施,如重新发送数据、请求重传或中断连接。

- 远程设备应根据错误类型和严重程度采取相应的措施,如发送错误响应、请求重传或中断连接。

微软RNDIS协议

微软RNDIS协议

微软RNDIS协议协议名称:微软RNDIS协议一、引言微软RNDIS协议(Remote Network Driver Interface Specification)是一种用于网络驱动程序的通信协议,旨在提供一种标准化的方式,使计算机和网络设备之间能够进行可靠的通信。

本协议的目的是定义RNDIS协议的标准格式,以确保各种设备和操作系统之间的互操作性和兼容性。

二、协议概述1. RNDIS协议的作用RNDIS协议旨在为计算机和网络设备之间的通信提供一种标准化的接口。

它允许计算机通过USB或其他物理接口连接到网络设备,并通过网络设备进行数据传输。

RNDIS协议定义了通信的数据格式、命令和状态,以及设备和驱动程序之间的交互方式。

2. RNDIS协议的基本原理RNDIS协议的基本原理是将网络设备模拟为一个虚拟网络适配器,使其能够与计算机的网络堆栈进行通信。

计算机将RNDIS设备视为一个网络接口,通过发送RNDIS命令和数据包来与设备进行通信。

RNDIS设备接收命令并执行相应的操作,然后将数据包传输给计算机。

三、协议内容1. RNDIS命令格式RNDIS协议定义了一系列命令,用于设备和驱动程序之间的通信。

每个命令由一个命令标识符、参数和数据组成。

命令标识符用于唯一标识每个命令,参数用于传递命令的附加信息,数据用于传输命令所需的数据。

2. RNDIS数据包格式RNDIS协议定义了数据包的格式,用于在计算机和设备之间传输数据。

数据包由一个包头和数据组成。

包头包含了数据包的长度、类型和其他相关信息,而数据则是实际传输的数据。

3. RNDIS状态和通知RNDIS协议定义了一系列状态和通知,用于设备和驱动程序之间的状态同步和事件通知。

设备可以向驱动程序发送状态和通知,以指示设备的状态变化或发生的事件。

四、协议实施1. RNDIS设备驱动程序接口RNDIS协议要求设备制造商提供符合RNDIS规范的设备驱动程序。

设备驱动程序需要实现RNDIS协议定义的接口,以便与计算机进行通信。

微软RNDIS协议

微软RNDIS协议

微软RNDIS协议协议名称:微软RNDIS协议1. 引言本协议旨在定义微软远程网络设备接口规范(Remote Network Device Interface Specification,简称RNDIS),以便实现在微软操作系统上与远程设备的通信。

本协议适合于任何支持RNDIS协议的远程网络设备。

2. 范围本协议适合于所有使用微软操作系统的设备,包括但不限于个人电脑、服务器、挪移设备等。

3. 术语定义在本协议中,以下术语的定义适合于所有相关条款和条件:- RNDIS:远程网络设备接口规范,用于实现微软操作系统与远程设备的通信。

- 远程设备:指支持RNDIS协议的任何外部设备,如网络适配器、无线网卡等。

- 主机:指运行微软操作系统的计算机或者设备。

- RNDIS驱动程序:指在主机上运行的软件模块,用于管理RNDIS设备与主机之间的通信。

4. 协议要求4.1 RNDIS设备的功能要求远程设备必须满足以下要求,以支持RNDIS协议:- 支持基于USB或者以太网的物理接口。

- 实现RNDIS设备类描述符和功能描述符。

- 支持RNDIS命令集,包括设备初始化、数据传输、状态通知等。

- 提供有效的设备识别信息,如供应商ID、产品ID等。

4.2 主机的功能要求主机必须满足以下要求,以支持RNDIS协议:- 安装RNDIS驱动程序,用于与RNDIS设备进行通信。

- 支持USB或者以太网的物理接口。

- 实现RNDIS主机类描述符和功能描述符。

- 支持RNDIS命令集,包括设备初始化、数据传输、状态通知等。

5. 协议流程5.1 设备初始化5.1.1 远程设备初始化远程设备在与主机建立连接后,应发送初始化请求给主机。

初始化请求应包括设备识别信息、设备能力等。

主机在接收到初始化请求后,应进行相应的设备初始化操作。

5.1.2 主机初始化主机在接收到远程设备的初始化请求后,应发送初始化响应给远程设备。

初始化响应应包括主机的能力信息、RNDIS驱动程序版本等。

虚拟网卡设置方法

虚拟网卡设置方法

虚拟网卡设置方法一、虚拟网卡设置定义:1.虚拟网卡是用软件模拟网络环境,模拟网络适配器,windows 系统自带此软件。

2.可以添加硬件向导,添加新硬件,检测过后,选择添加新设备,再选择从列表中选取,选中网卡下一步,查找制造商"Microsoft'有一个设备"Microsoft Loopback Adapter',选中它,安装完成后,查看硬件〔管理〕器,会多出一个新网卡,这就是虚拟网卡。

二、虚拟网卡设置流程:1.建立虚拟网卡先点电脑右下角的圆形,会看到一个页面,在页面的左上角有"控制面板',在右上角区域的查看方式中,选择小图标,方便查看栏目,然后找到"设置管理器'就OK啦!2.在"控制面板'中,我们找到"网络适配器',添加虚拟网卡就可以了,我们首先选中"网络适配器',然后点击上面的操作选中"添加过时硬件';3.点击"添加过时硬件'后我们进入正规流程,点击下一步,我们必须要选择"安装手动从列表中选择的硬件',在点击下一步;4.选择"网络适配器',然后点击下一步;选择必须要安装的"网络适配器',左边选择厂商"Microsoft',右边网络适配器选择"loopback',点击下一步;5.下一步,下一步,正在安装支持的软件,即虚拟网卡;6.提示成功安装硬件,设置向导完成,点击完成,"虚拟网卡'就创建好了,随后我们可以在网上邻居查看验证。

7.创建完成后,我们可以在"控制面板'的设备管理器中的网络适配器中多了一个loopback adapter,然后在网上邻居的网络连接中,也能找到一个本地连接2,这个就是我们创建的虚拟连接,也就是我们所说的虚拟网卡。

微软RNDIS协议

微软RNDIS协议

微软RNDIS协议协议名称:微软RNDIS协议1. 引言本协议旨在规范微软RNDIS(Remote Network Driver Interface Specification)协议的标准格式,以确保设备之间的网络驱动程序接口的互操作性和一致性。

本协议适用于使用微软RNDIS协议的设备和应用程序。

2. 范围本协议适用于以下情况:- 设备和应用程序使用微软RNDIS协议进行网络驱动程序的通信。

- 设备和应用程序需要遵循微软RNDIS协议的规范和要求。

3. 定义以下术语在本协议中具有以下定义:- 设备:指使用微软RNDIS协议的硬件设备。

- 应用程序:指使用微软RNDIS协议的软件应用程序。

- RNDIS:指Remote Network Driver Interface Specification,是微软定义的一种网络驱动程序接口规范。

4. 协议规范4.1 协议版本设备和应用程序应遵循最新版本的微软RNDIS协议规范,以确保互操作性和一致性。

4.2 协议支持设备和应用程序应支持微软RNDIS协议的所有必需功能和特性。

4.3 协议交互设备和应用程序之间的协议交互应遵循微软RNDIS协议规范中定义的消息格式和交互流程。

4.4 数据传输设备和应用程序之间的数据传输应遵循微软RNDIS协议规范中定义的数据包格式和传输机制。

4.5 错误处理设备和应用程序应实现适当的错误处理机制,以处理协议交互和数据传输过程中可能出现的错误情况。

4.6 安全性设备和应用程序应实现适当的安全措施,以保护协议交互和数据传输的安全性和机密性。

5. 实施指南5.1 设备实施指南设备实施者应遵循以下指南:- 实现微软RNDIS协议规范中定义的必需功能和特性。

- 遵循微软RNDIS协议规范中定义的消息格式和交互流程。

- 遵循微软RNDIS协议规范中定义的数据包格式和传输机制。

- 实现适当的错误处理机制。

- 实现适当的安全措施。

5.2 应用程序实施指南应用程序实施者应遵循以下指南:- 实现微软RNDIS协议规范中定义的必需功能和特性。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
GAO Do ng- f e i , ZHANG Zh i - h o ng
( S c h o o l o f I n f o r ma t i o n E n g i n e e r i n g , Z h e n g z h o u U n i v e r s i t y , Z h e n g z h o u 4 5 0 0 0 0, C h i n a )
Ab s t r a c t : Mi c r o s o f t ' s R NDI S p r o t co o l e n a bl e s E he t me t c o mm u n i c a t i o n t o t r a n s mi t o v e r t h e US B b u s . An d Mi c r os o f t i n he t r e a l i z a t i o n o f R NDI S u s i n g t h e TCP p r o t o c o l , t h e c o mmu n i c a t i o n e ic f i e n c y i s n o t h i g h. To r e mo v e he t TCP hr t e e - wa y h a n d s h a k e p r o c e s s t o i mp r o v e he t c o mmu n i c a t i o n e ic f i e n c y o f he t RNDI S p r o t o c o l , i t d e s c r i b e s he t RNDI S p r o t o c o l s t r u c t u r e s nd a he t i r a p pl i c a t i o n o n n e t wo r k i n g e -
第2 3卷 第 2期 2 0 1 3年 2月
计 算 机 技 术 与 发 展
COMP UT ER T ECHNOL OGY AND DEVE LOP MENT
V o 1 . 2 3 N o . 2 Fe b.的虚 拟 网卡 程序 实现
q u i p me n t 。 a n a l y z e d he t RNDI S p r o t co o l c o mmu n i c a io t n p r o c e s s e s b a s e d o n US B 2. 0 nd a R NDI S p r o t o c o 1 . Co mb i n e d wi h t h o s t US B d e —
关键 词 : U S B协 议 ; R N D I S协议 ; L I B U S B技术 ; Wi n d o w s M o b i l e 设备; 虚拟 网卡 中 图分 类号 : T P 3 3 4 文献标 识码 : A 文章 编 号 : 1 6 7 3 — 6 2 9 X( 2 0 1 3 ) 0 2 - 0 0 8 5 - 0 4
d o i : 1 0 . 3 9 6 9 / j . j s s n . 1 6 7 3 — 2 0 1 3 . 0 2 . 0 1 9
Re a l i z a t i o n o f Vi r t u a l Ne t wo r k Ca r d Pr o g r a m Ba s e d o n RNDI S Pr o t o c o l
v i c e s。 d e s i g n nd a i mp l e me n t v i r t u a l c a r d p r o c e d u es r b a s e d o n Wi n d o ws Mo b i l e . On he t b a s i s o f n o d r i v e i n LI BUS B- he t p r o g r a m i mp l e — me n t s he t RNDI S p r o t o c o l ba s e d o n UDP p r o t co o 1 . Te s t s p r o v e d t h e RNDI S p r o t co o l b a s e d o n UDP p r o t o c o l me ho t d i s mo e r e ic f i e n t t h n a TCP c o mmu n i c a t i o n s .
高 东飞 , 张 志 鸿
( 郑 州大 学 信 息 工程 学 院 , 河南 郑州 4 5 0 0 0 0 )
摘 要 : 微 软提 出 的 R N D I S 协议 使 得 以太 网通 信 能够 在 U S B总线 上传输 , 而微 软在 实现 R N D I S时使用 T C P协议 , 通信 效 率不高。 为 略去 1 、 C P三 次握 手过程 , 提高 R N D I S 协 议 的 通信 效 率 , 论文在 U S B 2 . 0协 议 和 R N D I S协议 的 基 础上 , 介绍 了 R N D I S 协议 的结 构及 其在 U S B网络 设备 上 的应用 , 分析 了 R N D I S协议 的通 信流 程 , 同时 结合 U S B设 备 主机 , 设 计并 实 现 了基 于 Wi n d o w s M o b i l e 设 备 的虚拟 网卡 程序 。该程 序 在 L I B U S B无 驱设 计 的基 础上 , 实 现 了基 于 U D P协议 的 R N D I S 协 议 的方法 , 通 过测 试证 明基 于 U D P协议 的 R N D I S协议 方法 比 T C P 方 式 的通信 效率 更高 。
相关文档
最新文档