Unisoc RNDIS上网业务流程学习笔记
Unisoc RNDIS上网业务流程学习笔记
RNDIS启动流程图
这是从RNDIS标准协议上截取的一个流程图,本文将以此流程图并结合Wireshark的抓包展开说明。
总体流程概述
根据RNDIS的初始化流程图,我们可以看到USB从上电启动到进行上网,粗略可分为以下三个阶段:
- 设备描述符枚举阶段(此流程非本文重点,暂且略过);
- RNDIS控制协商阶段,此阶段主要进行数据业务前RNDIS设备的配置操作及状态管理;
- RNDIS数据包业务阶段,即上网业务;
RNDIS消息类型
RNDIS控制消息
Initialize消息
从抓包截图可以看到,初始化消息主要确定Host与Device两端的版本号,媒介承载协议,MTU以及对齐方式等等。
Query消息
抓包可以看出,Query和Set的消息很多,且相互穿插在一起,终其原因,主要是需要Query和Set的OID(Objective ID)消息较多,主要涉及的OID包括:
- OID_GEN_SUPPORTED_LIST
- OID_GEN_PHYSICAL_MEDIUM
- OID_GEN_MAXIMUM_FRAME_SIZE
- OID_GEN_LINK_SPEED
- OID_GEN_MEDIA_CONNECT_STATUS
- OID_802_3_MAXIMUM_LIST_SIZE
- OID_802_3_CURRENT_ADDRESS
- OID_802_3_PERMANENT_ADDRESS
- OID_GEN_MAXIMUM_TOTAL_SIZE
- OID_GEN_VENDOR_DESCRIPTION
- OID_GEN_XMIT_OK
- OID_GEN_RCV_OK
以查询OID_802_3_CURRENT_ADDRESS为例,在该消息中Host端获得了本端MAC地址,此为网络业务的第1个配置。
Set消息
Set的OID相对Query阶段来说,不是很多,主要为了识别组播报文和设置过滤器吧,从抓包的结果来看,目前主要有2条,涉及的OID包括:
- OID_GEN_CURRENT_PACKET_FILTER
- 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上网业务流程学习笔记相关推荐
- 深信服上网行为管理(AC)、安全网关(SG)学习笔记
深信服上网行为管理的学习笔记,由于AC软件版本更新相关特性可能变动,仅供参考哈.. 权威内容请访问深信服官方社区:https://bbs.sangfor.com.cn/ 目录 默认IP 接口保留地址 ...
- 学习笔记:上网认证6 批量wifi 使用 freeradius 实现统一中央认证
我的文章 学习笔记:上网认证5 设置wifi(AP)通过FreeRadius认证 实现了在同一个网段内(freeradius 和 wifi lan口同网段)的认证服务器,但在校内freeradiu ...
- CCNP学习笔记(6)
一.交换机 1.二层交换 特性: ①基于MAC地址转发数据帧 ②硬件工作 ③处理数据效率高,数据传输延时低 ④转发广播 2.三层交换 特性: ①提供路由功能 ②提高安全性 ③流量管理 3.网络方案中交 ...
- BizTalk学习笔记系列之二:实例说明如何使用BizTalk
BizTalk学习笔记系列之二:实例说明如何使用BizTalk --.BizTalk学习笔记系列之二<?XML:NAMESPACE PREFIX = O /> Aaron.Gao,2006 ...
- CososJS学习笔记(1) 环境配置(填坑版,让你少走弯路!)
这段时间比较了国外的phaser.pixi.create等h5游戏框架以及国内的egret.cocosjs之后,最后还是决定使用cocosjs进行h5游戏的开发. 先简单地说一下个人的观点:首先pix ...
- 2020年高等数学方法与提高(上海理工大学)学习笔记汇总
写在前面: [1] 本系列文章涉及内容已与授课教师联系,已获得许可.如有不妥之处,请联系博主740925018@qq.com. [2] 对授课教师表示衷心感谢.贾老师的高等数学方法与提高.数学分析等课 ...
- 学习笔记(三)——CSS进阶
在网页的布局和页面元素的表现方面,要掌握的最重要的概念是css的盒子模型(BoxModel)以及盒子在浏览器中的排列(定位),这此概念用来控制元素在页面上的排列和显示方式,形成CSS的基本布局. 文章 ...
- 大型网站架构学习笔记
前言 最近一直在拜读两本书: 1.李智慧老师的<大型网站技术架构 核心原理与案例分析> 2.曾宪杰老师的<大型网站系统与Java中间件实践> 看了并结合自己目前的工作进行了思考 ...
- 【学习笔记】低代码平台(LCAP:Low-Code Application Platform)
学习笔记:低代码平台(LCAP:Low-Code Application Platform) [概念] 开发者写很少的代码,通过低代码平台提供的界面.逻辑.对象.流程等可视化编排工具来完成大量的开发工 ...
最新文章
- Javascript中最常用的61段经典代码
- 热敏电阻温度特性曲线_NTC热敏电阻如何选型
- 工控软件IFIX加入WEB显示图表
- mysql lost connection to server during query
- JWT(JSON Web Token)的基本原理
- c语言转化音乐格式转换器安卓版,MP3格式转换器APP
- Hexo设置背景图片轮播效果
- 如何备份光猫html文件夹,华为光猫分区备份,还原,制作固件教程
- 服务器网页内容修改了不变动,修改服务器网页
- php判断无理数,关于e是无理数的证明
- QT 软键盘实现
- Flutter时间转换工具类
- Cathy Zhang 箭头函数与普通函数的区别
- Web全栈开发学习笔记—Part2 与服务端通信—d.在服务端将数据Alert出来
- nth_element(C++)
- 千锋好程序员与京东云大数据共建班,开班典礼在京东总部圆满举行
- 基于ZKEACMS的.Net Core多租户CMS建站系统
- 这可能是最非主流的斯坦·李纪念方式。论编程语言与超级英雄的联系
- 拼图游戏 Vue 版本
- BUUCTF Reverse pyre
热门文章
- 基于强化学习SAC_LSTM算法的机器人导航
- C++中怎么表示根号下的数字(用cmath中的sqrt()可以开根号)
- 小说里的编程 【连载之十七】元宇宙里月亮弯弯
- Python保存TXT文件
- 计算机休眠风扇不停,Windows7系统睡眠风扇还在转怎么解决【图文教程】
- 如何编写高质量的Java代码
- 20155210 2016-2017-2 《Java程序设计》第7周学习总结
- 图片太大了怎么改小KB?教你2招无损图片压缩
- mysql的master slave_Mysql 数据库的同步(master slave) 详解
- 读书笔记--高效能人士的七个习惯+执行4原则