拨号之 PPP NDIS RNDIS CDC ECM NCM QMI-WWAN GOBINET RMNET MBIM 区别

PPP

PPP 用于建立点对点链路。最初是用于慢速设备的,比如早期通过串行线上网。通过一套协议,维护硬件链路上的数据连接,并具备安全和认证特性,可建立计费模式。
我们在PPP拨号脚本中也常常可以看到波特率、用户名、密码、认证方式等参数。现在的猫或者家用路由拨号上网,多用PPPoE,也用到了PPP,因为PPPoE就是PPP over Ethernet。使用以太网链路,将PPP包封装到以太网帧中,从而可以继续利用PPP的认证和安全特性。
对于3、4、5G模块而言,多是通过USB总线连接,但是在内核中,将其识别为串口设备,设备名一般为ttyUSB*,这里的*指代数字,从0增长,一个模块可以转换出多个口,有的用于执行AT指令,有的用于拨号,既然是串口,那么使用PPP似乎就顺利成章了。

既然模块物理连接就是USB接口,那么可否直接利用USB转网口的方式呢?而且,PPP方式的封装和控制,普通认为效率不高,所以也有采用这种方式的必要。幸运的是,有多种直接基于USB口的方式可用,不幸的是,选择太多,缺乏统一标准。

NDIS

Network Driver Interface Specification,网络驱动接口规范。是一个类似接口标准的东西,屏蔽不通的硬件差异,在上层表现为统一的网络设备,从而简化应用层的使用。

RNDIS

指的是一种技术,如果是基于USB硬件,就是TCP/IP over USB,这样的话,对USB就是实现如何更好的将TCP/IP包封装到USB总线要求的格式中个,跟PPPOE有点类似。

CDC

是指USB规范下的通信设备类。基于USB接口的设备种类很多,比如声卡、键盘鼠标、打印机、存储设备等。CDC就跟这些类别属于一个层级,自然可知USB网卡、USB WIFI就应该是这类设备了。这里引申一下,不通设备有其特点,USB作为一种通用串行接口,作此分类,应该是为了更好的适应设备特性,做一些差异处理,从而更高效的利用自身的总线。

 CDC(Communication Device Class)类是USB2.0标准下的一个子类,定义了通信相关设备的抽象集合。它与USB2.0标准以及其下的子类的相互关系如下图所示:

如上图,USB2.0标准下定义了很多子类,有音频类,CDC类,HID,打印,大容量存储类,HUB,智能卡等等。CDC就跟这些类别属于一个层级,自然可知USB网卡、USB WIFI就应该是这类设备了。更深入了解可以看这个链接: link

USB CDC类的通信部分主要包含三部分:枚举过程、虚拟串口操作和数据通信。其中虚拟串口操作部分并不一定强制需要,因为若跳过这些虚拟串口的操作,实际上USB依然是可以通信的。这也就是为什么上图中,在操作虚拟串口之前会有两条数据通信的数据。

ECM/NCM

这两个是Linux下的NDIS标准。ECM是Ethernet Networking Control Model的简称,NCM是Network Control Model的简称,后者是包含前者的。

可以看出,ECM、NCM在USB上是要满足CDC要求的,如果出现CDC-ECM,按这种思路,就比较好理解了。进一步的,作为标准,如果内核支持这种方式,显然就不需要额外的驱动了。

根据这些信息,我们可以设想下主要流程:使用者可以利用CDC驱动,以标准的方式生成网络设备,建立网络连接,发送网络数据。所有通过USB总线跟模块交互的数据都被相关协议和标准做了约束,通过USB硬件到达模块。模块按协议和标准可以拿出其中的控制和数据信息,完成跟基站的交互。至于模块内部怎么实现,那是模块自己的事情了。

在操作系统看来,CDC-ECM设备就是一个虚拟以太网卡,包含标准网卡需要的MAC地址和IP地址。具体英文描述如下:

CDC-ECM(Ethernet Networking Control Model) offers device manufacturers to interface as a standard NIC (Network Interface Card) device. This interface is usually adopted by high speed LAN networking devices allowing high speed Ethernet data transfer over USB.

The  ECM (Ethernet Networking Control Model) protocol is used for exchanging Ethernet-framed data between the device and host. A CDC ECM compliant device exposes itself as a virtual NIC to the host operating system. The NIC is assigned with a MAC and an IP address.

A general use case of a CDC ECM device is a point-to-point Ethernet adapter to a LAN/WLAN.

The NCM (Network Control Model) protocol is used for exchanging High Speed Ethernet-framed data between the device and host. A CDC NCM compliant device exposes itself as a virtual NIC to the host operating system. The NIC is assigned with a MAC and an IP address.

A general use case of a CDC NCM device is a Wireless Network Adapter which supports 3.5G/4G networks such as: HSPA+ and LTE.

CDC-ACM(Abstract Control Model) allows any communication device to provide a serial communication interface (e.g modem devices that send and receive AT commands).

/lib/modules/$(uname -r)/kernel/drivers/usb/class目录下看到cdc-acm.ko文件。

QMI-WWAN

是高通在Linux下提供的类似ECM的框架,由于高通的行业地位和其产品的时长占有率,该框架使用相当广泛。

GOBINET

内核早期没有添加上述QMI-WWAN驱动,高通使用该驱动完成拨号,后来内核中支持QMI-WWAN,就不再需要单独提供驱动了。

RMNET

类似CDC-ECM的一种变种,用于高通设备的高效数据传输协议。具体请参考:Rmnet Driver — The Linux Kernel documentation

MBIM

可以理解为专为移动网络准备的NDIS。

总结

  1. 其实总结起来就两种,一种是PPP类,一种是NDIS族类,NDIS族类的方式是标准化+高效化,对上,尽量标准化为网络设备,对下,则尽可能适应物理通道,高效利用。
  2. PPP类获取IP地址是通过ppp协议内部来完成的,而NDIS族类的拨号是通过DHCP来获取的。
  3. 其实模组拨号的动作都是通过向模组发送AT指令来触发的,我们所谓不同的拨号方式只是对以太网口的设置不同而已。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值