ecm、ppp、ndis 拨号

Modem拨号,PPP属于数据链路层协议,它使用HDLC协议格式来封装数据帧,而在数据流中如果遇到
0x7D,则表示后面的数据是控制信息,当它出现的时候,设备需从数据模式切换成控制模式,病处理
这些信息,设备需要对每一个字节的数据进行解析,并作出相应的处理,占用较多的资源。

NDIS拨号,Ethernet协议是通过使用不同的以太网帧的包头来区分控制信息和数据信息,一个以太网帧
的包头大小是固定的14字节,所以对于每一个帧,设备只需要处理其包头即可。

ppp通过pppd进行拨号,NDIS通过gobinet进行拨号。分别采用各自不同的原理,进行网络通信拨号。

 


转载:RmNet,CDC-ECM ,NDIS,RNDIS区别
https://www.cnblogs.com/ricks/p/9448712.html

RmNetCDC-ECM区别:更像是两种拨号方式的区别,RmNet获取公网IPECD-ECM获取局域网IP

在高通平台上,rmnet driver 和标准的CDC-ECM是有区别的,rmnet 也是属于CDC-ECM
他们具体的区别在于对于USB命令的封装以及使用的USB接口,端点定义方式不同

 如果是使用rmnet,那么发起data call是通过QMI工具发的QMI命令,QMI工具为QMICMQMICM集成了QMI命令
 而通过标准的CDC-ECM发起data call,则是发送标准的ECM命令。

 如果是QMICM建立的data call不走router的,所以它的IP地址获得的是公网IP
 而通过标准的CDC-ECM建立的data call是走router,获得的IP地址是私有的IP192.168开头

NDISRndis区别:NDIS是一种规范,定义了网络驱动接口的apiRNDIS是一种技术,是将TCP/IP封装在USB报文里,实现网络通信。

1RNDIS是指Remote NDIS,基于USB实现RNDIS实际上就是TCP/IP over USB,就是在USB设备上跑TCP/IP,让USB设备看上去像一块网卡。

2NDIS(Network Driver Interface Specification)是网络驱动程序接口规范的简称。它横跨传输层、网络层和数据链路层,定义了网卡或网卡驱动程序与上层协议驱动程序之间的通信接口规范,屏蔽了底层物理硬件的不同,使上层的协议驱动程序可以和底层任何型号的网卡通信。 NDIS为网络驱动程序创建了一个完整的开发环境,只需调用NDIS函数,而不用考虑操作系统的内核以及与其他驱动程序的接口问题,从而使得网络驱动程序可以从与操作系统的复杂通讯中分离,极大地方便了网络驱动程序的编写。另外,利用NDIS的封装特性,可以专注于一层驱动的设计,减少了设计的复杂性,同时易于扩展驱动程序栈。

NDIS支持三种类型的网络驱动程序: NDIS网卡驱动程序(NICdrivers) 网卡驱动程序是网卡与上层驱动程序通信的接口,它负责接收来自上层的数据包,或将数据包发送到上层相应的驱动程序,同时它还完成处理中断等工作。 NDIS中间驱动程序 (InterMediateProtocolDrivers):中间驱动程序位于网卡驱动程序和协议驱动程序之间,它向上提供小端口(Minport)函数集,向下提供协议(protocol)函数集,因此对于上层驱动程序而言,它是小端口驱动程序。对于底层的驱动程序,它是协议驱动程序。 NDIS协议驱动程序 (Upper Level Protocol Drivers):协议驱动程序执行具体的网络协议,IPX/SPXTCP/IP等。协议驱动程序为应用层客户程序提供服务,接收来自网卡或中间驱动程序的信息。

3RAS是典型的拨号实现,需要利用Windows mobilePPP协议栈实现连接配置和建立 rndisRemote Network Driver Interface Specification,既是RemoteNDIS,既是远程网络驱动接口规范。基于USB实现RNDIS实际上就是TCP/IP over USB,就是在USB设备上跑TCP/IP,让USB设备看上去像一块网卡。

 

 

NDIS可以划分成应用层(DHCP client/server)、传输层(UDP)、网络层(ARP/IP)、链路层(Ethernet II)、物理层(USB)。
ndis物理层
ECM是标准的NIC设备接口,与Ethernet协议相对应。

以太网帧格式
Modem拨号,PPP属于数据链路层协议,它使用HDLC协议格式来封装数据帧,而在数据流中如果遇到
0x7D,则表示后面的数据是控制信息,当它出现的时候,设备需从数据模式切换成控制模式,病处理
这些信息,设备需要对每一个字节的数据进行解析,并作出相应的处理,占用较多的资源。

NDIS拨号,Ethernet协议是通过使用不同的以太网帧的包头来区分控制信息和数据信息,一个以太网帧
的包头大小是固定的14字节,所以对于每一个帧,设备只需要处理其包头即可。

 

转载:Linux PPP详细介绍
http://blog.sina.com.cn/s/blog_893e7cc101014ipq.html

什么是PPP

PPP是一种网络中最为基础的协议。PPP协议(Point-to-Point Protocol)是一种数据链路层协议,它是为在同等单元之间传输数据包这样的简单链路而设计的。这种链路提供全双工操作,并按照顺序传递数据包。PPP为基于各种主机、网桥和路由器的简单连接提供一种共通的解决方案。

 

PPP协议包括以下三个部分:

1 数据帧封装方法。

2 链路控制协议LCPLink Control Protocol:它用于对封装格式选项的自动协商,建立和终止连接,探测链路错误和配置错误。

3 针对不同网络层协议的一族网络控制协议NCP(Network Control Protocol): PPP协议规定了针对每一种网络层协议都有相应的网络控制协议,并用它们来管理各个协议不同的需求。

 

PPP认证方式
  1. 口令验证协议(PAP)
  PAP 是一种简单的明文验证方式。NAS(网络接入服务器,Network Access Server)要求用户提供用户名和口令,PAP以明文方式返回用户信息。

  2. 挑战-握手验证协议(CHAP) 
   CHAP是一种加密的验证方式,能够避免建立连接时传送用户的真实密码。NAS向远程用户发送一个挑战口令(challenge),其中包括会话ID 一个任意生成的挑战字串(arbitrary challenge string)。远程客户必须使用MD5单向哈希算法(one-way hashing algorithm)返回用户名和加密的挑战口令,会话ID以及用户口令,称为Secret Password,其中用户名以非哈希方式发送。


 

linuxPPP怎样实现的

 

PPP 协议之下是以太网和串口等物理层,之上是IP协议等网络层。这里,对于下层,我们只讨论串口的情况,对于上层,我们只讨论TCP/IP的情况。发送 时,TCP/IP数据包经过PPP打包之后经过串口发送。接收时,从串口上来的数据经PPP解包之后上报给TCP/IP协议层。linuxppp框架结构如下图:

 

ecm、ppp、ndis 拨号_第1张图片

PPP协议栈

主要负责PPP层数据的封装、压缩与解压缩.另外,它还对普通数据包和Ppp过程的数据包进行了分流,将普通数据包提交到TCP/IP协议栈,而将Ppp过程的数据包放到/dev/ppp设备队列中,等待Pppd去收取并处理.



 

PPP 是一个分层结构。在底层,它能使用同步媒介(如 ISDN 或同步 DDN 专线),也能适用异步媒介(如基于 Modem 拨号的

PSTN 网络)。在数据链路层,PPP 在链路建立方面提供了丰富的服务,这些服务以 LCP 协商选项的形式提供。在上层,PPP 通过

NCPs 提供对多种网络层协议的支持。PPP

对于每一种网络层协议都有一种封装格式来区别它们的报文。
 

什么是pppd

pppd是一个用户空间的后台服务进程(daemonpppd实现了所有鉴权、压缩/解压和加密/解密等扩展功能的控制协议。pppd只是一个普通的用户进程,pppd与内核中的PPP协议处理模块之间通过设备文件(/dev/ppp)进行通信。pppd有一个辅助工具chat,用来与GSM模组建立会话。它向串口发送AT命令,建立与GSM模组的会话,以便让PPP协议可以在串口上传输数据包。


 

/dev/ppp
 

设备文件/dev/ppp。通过read系统调用,pppd可以读取PPP协议处理模块的数据包,当然,PPP协议处理模块只会把应该由pppd处理的数据包发给pppd。通过write系统调用,pppd可以把要发送的数据包传递给PPP协议处理模块。通过ioctrl系统调用,pppd可以设置PPP协议的参数,可以建立/关闭连接。在pppd里,每种协议实现都在独立的C文件中,它们通常要实现protent接口,该接口主要用于处理数据包,和fsm_callbacks接口,该接口主要用于状态机的状态切换。数据包的接收是由main.c: get_input

USB CDC ECM


以太网控制模型(Ethernet Networking Control Model) 用于在设备和主机之间传输以太网数据包。
在操作系统看来,CDC ECM设备就是一个虚拟以太网卡,包含标准网卡需要的MAC地址和IP地址。
CDC ECM设备通常是一个以太网卡,用于连接LAN或者是WLAN
ECM的驱动源码文件是drivers/net/usb/cdc_ether.c

 

转载:USB中CDC-ECM的了解和配置

https://blog.csdn.net/kangear/article/details/37605811

USB中典型类及子类:

ecm、ppp、ndis 拨号_第2张图片

 

CDC-ECMUVC原理上是一样的,定义一套标准协议主从机都遵守了就不需要额外的驱动程序。

 

以太网控制模型是用在主从设备间的以太网帧数据的交换。

数据接口则用于在USB总线上交换USB数据包,这些USB数以的包封装了完整的以太网包。

 

Linux内核配置支持CDC-ECM

Device Drivers  --->

    [*] Network device support  --->

        USB Network Adapters  --->

            <*> Multi-purpose USB Networking Framework

            -*-   CDC Ethernet support (smart devices such as cable modems)

 

 

总结:ECM的驱动源码文件是drivers/net/usb/cdc_ether.c。不需要添加Vid Pid等等任何操作就可以使用。cdc_ether.c与传统的以太网芯片的驱动程序并不一样,并不是实现xxx_open(),xxx_stop(),xxx_tx(), xxx_hard_header(), xxx_get_stats, xxx_tx_timeout()而是实现了:usbnet_generic_cdc_bind(), usbnet_cdc_unbind(), usbnet_cdc_bind(), usbnet_cdc_status()等4个API。

 

你可能感兴趣的:(ATmodem)