Unisoc RNDIS上网业务流程学习笔记

RNDIS启动流程图


这是从RNDIS标准协议上截取的一个流程图,本文将以此流程图并结合Wireshark的抓包展开说明。

总体流程概述

根据RNDIS的初始化流程图,我们可以看到USB从上电启动到进行上网,粗略可分为以下三个阶段:

  1. 设备描述符枚举阶段(此流程非本文重点,暂且略过);
  2. RNDIS控制协商阶段,此阶段主要进行数据业务前RNDIS设备的配置操作及状态管理;
  3. RNDIS数据包业务阶段,即上网业务;

RNDIS消息类型


RNDIS控制消息

Initialize消息


从抓包截图可以看到,初始化消息主要确定Host与Device两端的版本号媒介承载协议MTU以及对齐方式等等。

Query消息


抓包可以看出,Query和Set的消息很多,且相互穿插在一起,终其原因,主要是需要Query和Set的OID(Objective ID)消息较多,主要涉及的OID包括:

  1. OID_GEN_SUPPORTED_LIST
  2. OID_GEN_PHYSICAL_MEDIUM
  3. OID_GEN_MAXIMUM_FRAME_SIZE
  4. OID_GEN_LINK_SPEED
  5. OID_GEN_MEDIA_CONNECT_STATUS
  6. OID_802_3_MAXIMUM_LIST_SIZE
  7. OID_802_3_CURRENT_ADDRESS
  8. OID_802_3_PERMANENT_ADDRESS
  9. OID_GEN_MAXIMUM_TOTAL_SIZE
  10. OID_GEN_VENDOR_DESCRIPTION
  11. OID_GEN_XMIT_OK
  12. OID_GEN_RCV_OK

以查询OID_802_3_CURRENT_ADDRESS为例,在该消息中Host端获得了本端MAC地址,此为网络业务的第1个配置


Set消息


Set的OID相对Query阶段来说,不是很多,主要为了识别组播报文和设置过滤器吧,从抓包的结果来看,目前主要有2条,涉及的OID包括:

  1. OID_GEN_CURRENT_PACKET_FILTER
  2. OID_802_3_MULTICAST_LIST

KeepAlive消息


当RNDIS相关的配置协商完成之后,Host侧便发起了保活消息,从抓包结果看Unisoc的保活周期为2.5s。

Indicate Status消息


从抓包的结果来看,状态消息大部分场景下用来指示Device端的网络连接情况。

RNDIS数据消息

DHCP阶段

Host在保活阶段一旦收到网络已连接的Indicate Status通知,即会发起DHCP报文,此阶段一旦协商成功,Host将获得本端IP地址对端IP地址,此为网络业务的第2、3个配置。此阶段结束,离上网业务只剩一步之遥,那就是对端MAC地址

ARP阶段

该阶段主要是为了获得上网业务的第4个配置(对端MAC地址),如图,又分为3个子阶段。

IP传输阶段

至此,网络传输所需的底层链路(4元组配置)打通,此后便进入IP数据传输流程。在传输过程中,RNDIS会发送Query的控制消息,查询设备侧发送和接收状态(OID)是否正常。

后记

此文为项目中RNDIS上网业务的调研笔记,若有错误,请多指正。

后后记

RNDIS数据的解析,原生Wireshark只能解析到USB URB层,后面是RAW DATA;为了调研方便,我就用lua语言开发了rndis的解析插件,因为lua的插件是wireshark从某个版本以来一直就支持的。
rndis.lua的解析插件本人也已上传至资源库。
链接: link.
具体使用方法:在安装目录的init.lua文件最后一行添上**dofile(DATA_DIR…“rndis.lua”)**就可以了。

Unisoc RNDIS上网业务流程学习笔记相关推荐

  1. 深信服上网行为管理(AC)、安全网关(SG)学习笔记

    深信服上网行为管理的学习笔记,由于AC软件版本更新相关特性可能变动,仅供参考哈.. 权威内容请访问深信服官方社区:https://bbs.sangfor.com.cn/ 目录 默认IP 接口保留地址 ...

  2. 学习笔记:上网认证6 批量wifi 使用 freeradius 实现统一中央认证

    我的文章 学习笔记:上网认证5  设置wifi(AP)通过FreeRadius认证  实现了在同一个网段内(freeradius 和 wifi lan口同网段)的认证服务器,但在校内freeradiu ...

  3. CCNP学习笔记(6)

    一.交换机 1.二层交换 特性: ①基于MAC地址转发数据帧 ②硬件工作 ③处理数据效率高,数据传输延时低 ④转发广播 2.三层交换 特性: ①提供路由功能 ②提高安全性 ③流量管理 3.网络方案中交 ...

  4. BizTalk学习笔记系列之二:实例说明如何使用BizTalk

    BizTalk学习笔记系列之二:实例说明如何使用BizTalk --.BizTalk学习笔记系列之二<?XML:NAMESPACE PREFIX = O /> Aaron.Gao,2006 ...

  5. CososJS学习笔记(1) 环境配置(填坑版,让你少走弯路!)

    这段时间比较了国外的phaser.pixi.create等h5游戏框架以及国内的egret.cocosjs之后,最后还是决定使用cocosjs进行h5游戏的开发. 先简单地说一下个人的观点:首先pix ...

  6. 2020年高等数学方法与提高(上海理工大学)学习笔记汇总

    写在前面: [1] 本系列文章涉及内容已与授课教师联系,已获得许可.如有不妥之处,请联系博主740925018@qq.com. [2] 对授课教师表示衷心感谢.贾老师的高等数学方法与提高.数学分析等课 ...

  7. 学习笔记(三)——CSS进阶

    在网页的布局和页面元素的表现方面,要掌握的最重要的概念是css的盒子模型(BoxModel)以及盒子在浏览器中的排列(定位),这此概念用来控制元素在页面上的排列和显示方式,形成CSS的基本布局. 文章 ...

  8. 大型网站架构学习笔记

    前言 最近一直在拜读两本书: 1.李智慧老师的<大型网站技术架构 核心原理与案例分析> 2.曾宪杰老师的<大型网站系统与Java中间件实践> 看了并结合自己目前的工作进行了思考 ...

  9. 【学习笔记】低代码平台(LCAP:Low-Code Application Platform)

    学习笔记:低代码平台(LCAP:Low-Code Application Platform) [概念] 开发者写很少的代码,通过低代码平台提供的界面.逻辑.对象.流程等可视化编排工具来完成大量的开发工 ...

最新文章

  1. Javascript中最常用的61段经典代码
  2. 热敏电阻温度特性曲线_NTC热敏电阻如何选型
  3. 工控软件IFIX加入WEB显示图表
  4. mysql lost connection to server during query
  5. JWT(JSON Web Token)的基本原理
  6. c语言转化音乐格式转换器安卓版,MP3格式转换器APP
  7. Hexo设置背景图片轮播效果
  8. 如何备份光猫html文件夹,华为光猫分区备份,还原,制作固件教程
  9. 服务器网页内容修改了不变动,修改服务器网页
  10. php判断无理数,关于e是无理数的证明
  11. QT 软键盘实现
  12. Flutter时间转换工具类
  13. Cathy Zhang 箭头函数与普通函数的区别
  14. Web全栈开发学习笔记—Part2 与服务端通信—d.在服务端将数据Alert出来
  15. nth_element(C++)
  16. 千锋好程序员与京东云大数据共建班,开班典礼在京东总部圆满举行
  17. 基于ZKEACMS的.Net Core多租户CMS建站系统
  18. 这可能是最非主流的斯坦·李纪念方式。论编程语言与超级英雄的联系
  19. 拼图游戏 Vue 版本
  20. BUUCTF Reverse pyre

热门文章

  1. 基于强化学习SAC_LSTM算法的机器人导航
  2. C++中怎么表示根号下的数字(用cmath中的sqrt()可以开根号)
  3. 小说里的编程 【连载之十七】元宇宙里月亮弯弯
  4. Python保存TXT文件
  5. 计算机休眠风扇不停,Windows7系统睡眠风扇还在转怎么解决【图文教程】
  6. 如何编写高质量的Java代码
  7. 20155210 2016-2017-2 《Java程序设计》第7周学习总结
  8. 图片太大了怎么改小KB?教你2招无损图片压缩
  9. mysql的master slave_Mysql 数据库的同步(master slave) 详解
  10. 读书笔记--高效能人士的七个习惯+执行4原则