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

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”)**就可以了。

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

基业长投

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值