微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 嵌入式PPPoE软件模块的设计与实现

嵌入式PPPoE软件模块的设计与实现

时间:06-07 来源:电子技术应用 点击:

基于以太网的点对点通信协议PPPoE(Point to Point Protocol over Ethenet)是为了满足越来越多的宽带上网设备(如ADSL、无线、有线电视等)和越来越快的网络之间的通信而指定开发的标准,它给出了两个广泛接受的标准:以太网和PPP拨号协议。不难看出,PPPoE就是将PPP数据承载到以太网上,实质是在共享介质的网络中提供一条逻辑上的点到点链路。对用户而言,在DSLAM(DSL汇聚设备)与ADSL Modem之间的ATM传输是透明的,如果将中间的DSLAM和ADSL Modem换成有线电视的接入设备,就是典型的HFC接入。BAS(宽带接入服务器)对PPPoE包的处理方式不变。而对于服务商,在现有局域网基础上不需要花费巨资做大面积改造。

目前,实现PPPoE协议的软件有多种,且多数都是应用于PC机。该类软件的作用主要是在操作系统的拨号(PPP)协议与以太网协议建立连接,通过PPPoE协议与ISP连接,获得Internet连接服务。而本文考虑到嵌入式系统的特点,直接在网络协议数据链路层实现PPPoE协议。这样做省去了链路层的PPP包到PPPoE包的转换,提高了效率,并且具有良好的可移植性。

1 PPPoE协议框架[1]

PPPoE协议共包括两个阶段[1],即PPPoE的发现阶段(PPPoE Discovery Stage)和PPPoE的会话阶段(PPPoE Session Stage)。本文着重介绍PPPoE发现阶段。对于PPPoE会话阶段,可以看成与PPP的会话过程基本一样,当然两者在数据的封装上还是有区别的。PPPoE并不需要PPP协议中的起始位标志、地址位、控制位和结束标志,也不需要PPP协议中规定的数据转译和CRC校验,但要在PPP的数据报文前封装PPPoE的报文头。无论是哪一个阶段的数据报文最终会被封装成以太网帧传送。

如果主机要开始一个PPPoE会话,它首先会在网络上发送一个广播,通过广播寻找一个访问集中器AC(Access Concentration)。当网络上存在多个访问集中器时,主机根据访问集中器所能提供的服务或用户预先配置的信息进行相应的选择。访问集中器选定后,主机开始与所选择的访问集中器建立一个PPPoE会话进程。在这一过程中,访问集中器会为每一个PPPoE会话分配一个惟一的进程ID,会话建立后就开始了PPPoE的会话阶段。在这个阶段,已建立好点对点(逻辑点对点)连接的双方采用PPP协议交换数据报文,从而完成一系列PPP的过程,最终将在这个点对点的逻辑通道上进行网络层数据包的传送。

PPPoE可以理解为在以太网上跑PPP数据,因此,其帧格式[1]与以太帧格式一致,如图1所示。通过类型域字段的内容,数据包的接收方可以识别以太网的数据域中承载的是什么协议的数据报文。PPPoE的两大阶段,也正是通过以太网的类型域进行区分的。这个域的值,在发现阶段为0x8863,而在会话阶段为0x8864。

PPPoE帧的载荷字段承载PPPoE数据报文[1],报文格式如图2所示,其中各字段的含义如下:

(1)版本字段(ver)标志着协议版本信息,为4bits,目前协议规定其值为0x1。

(2)类型字段(type),4bits,标志类型信息,值为0x1。

(3)编码字段(code),单个字节,在不同阶段具有不同取值,本文稍候详细分析。

  (4)会话ID字段(session id)由两个字节组成,在发现阶段,取值为0x0000,在后续的整个PPPoE会话过程中取值为发现阶段所获得的由AC分配的惟一值。

(5)长度字段(length)由两个字节组成,指示payload字段的长度,取值可以是0~1500。

(6)净载荷字段(payload),该字段存放PPPoE协议帧所承载的数据,在发现阶段承载零个或多个TAG结构[1],在会话阶段承载PPP协议数据。但不是简单的PPP封装,因为并不需要PPP协议中的起始位标志、地址位、控制位和结束标志,也不需要PPP协议中规定的数据转译和CRC校验。TAG结构如图3所示。


2 PPPoE协议分析

PPPoE协议分为发现(Discovery)阶段和会话(Session)阶段。发现阶段是一个无状态的阶段,该阶段主要选择访问集中器,确定所要建立的PPP会话标识符Session ID,同时获得对方点到点的连接信息;PPP会话阶段执行标准的PPP过程。

(1) 发现阶段

一个典型的发现阶段分为四个步骤,当整个发现阶段结束后,通信双方分别获得对方的MAC地址,并且共用一个Session ID,这两个参数共同确定一个PPPoE会话。

第一步,发送PADI(PPPoE Active Discovery Initiation)帧。在PPPoE的以太帧结构中,编码域的值为0x09,会话ID域的值设为0x0000。在这个步骤中,以太帧目的地址为广播并且在包中必须包含一个确切的服务名。

第二步,接收PADO(PPPoE Active Discovery Offer) 帧。这一过程就是当ISP的PPPoE访问集中器收到PADI帧后,若能够满足PADI提出的服务请求,可以发送PADO帧回应。PADO帧中的目的地址为发送PADI帧的客户端的MAC地址,源地址为响应PADO帧的服务器地址。编码域的值为0x07,会话ID域的值也设为0x0000。PADO帧还要包括PADI帧所提出的服务项。

第三步,发送PADR(PPPoE Active Discovery Request) 帧。由于PADI包是广播式的,故主机可能收到多个PADO响应帧。主机在可能收到的多个PADO帧中根据访问集中器的名称标签或能提供的服务标签选择一个合适的访问集中器,然后向所选择的访问集中器发送PPPoE有效发现请求(PADR) 帧。其编码域为0x19,Session ID域仍为0x0000,PADR帧必须包含一个服务名称类型标签,确定向接入服务器请求的服务种类。

第四步,接收PADS(PPPoE Active Discovery Session-confirmation ) 帧。访问集中器收到PADR帧后开始PPP会话,它发送一个PPPoE有效发现会话确认(PADS) 帧。其编码域为0x65,会话 ID域此时为接入服务器所产生的惟一PPPoE会话标识号码。PADS帧也必须包含一个访问集中器名称类型的标签,确认向主机提供的服务。当主机收到PADS帧确认后,双方进入PPP会话阶段。若访问集中器不能提供PADR中的服务名称标签所定义的服务,它必须回复PADS帧,此帧必须包含标签类型Sevice-Name-Error的标签,此时SESSION_ID必须为0x0000。

在完成上述步骤后,双方进入会话阶段。会话建立后,会话双方任何一方都可以通过发送PADT(PPPoE active discover terminate)帧终止会话。PADT帧中的编码字段值为0xA7,SESSION_ID字段为在发现阶段结束之后得到的会话ID值,以太帧类型字段还是0x8863。发送PADT后则该次PPPoE过程结束。

(2)会话阶段

当PPPoE会话开始后,PPP数据就像普通的PPP数据被传送,这时以太帧的目的地址是单播地址,类型为0x8864,编码域必须是0x00,SESSION_ID必须是发现阶段建立的SESSION_ID,且在会话过程中不能改变。PPPoE净载荷是PPP帧,会话过程实际上也就是实现PPP协议的过程,PPP分为三个阶段。首先通过LCP完成相关链路控制协商过程,主要是建立、配置、测试数据链路,根据双方的需求,进行链路的协商和配置。PAP密码认证后,通过NCP,针对不同的网络层协议的网络控制阶段。最后就是IP数据的传输阶段。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top