点对点通信协议PPPoE模块的设计

发布者:数据探险家最新更新时间:2010-09-18 来源: 电子发烧友关键字:PPPoE协议  点对点  以太网 手机看文章 扫描二维码
随时随地手机看文章

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

1 PPPoE协议框架

    PPPoE协议共包括两个阶段,即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所示。通过类型域字段的内容,数据包的接收方可以识别以太网的数据域中承载的是什么协议的数据报文。PPPoE的两大阶段,也正是通过以太网的类型域进行区分的。这个域的值,在发现阶段为0x8863,而在会话阶段为0x8864。

    PPPoE帧的载荷字承载PPPoE数据报文,报文格式如图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结构,在会话阶段承载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 Sessionconfirmation)帧。访问集中器收到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,SEEION_ID字帧为在发现阶段结束之后得到的会话ID值,以太帧类型字段还是0x8863。发送PADT后则该次PPPoE过程结束。

2)会话阶段

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

3 PPPoE模块软件设计

    应用于嵌入式系统的PPPoE软件模块主要通过系统中的以太网络驱动在链路层与访问集中器建立一个逻辑上点对点的通信链路,为上层TCP/IP协议栈服务。发送数据时,将上层IP分组封装成PPPoE协议帧发送出去。在接收数据时,将接收到的PPPoE协议帧解析后,交由上层模块处理,如图4所示。与访问集中器建立通信链路的过程是软件设计的核心部分。

    PPPoE发现阶段流程如图5所示。发现阶段分为四个过程完成:发送PADI、接收PADO、发送PADR和接收PADS。在发送PADI和PADR时要分别定时和计数,在有限的时间内没有收到响应,就应重新发送;如果在重复发送若干次之后还没有相应,说明此时网络故障或者网络上没有能够响应请示的服务器。

    PPPoE会话阶段是一个标准的PPP协商过程。整个协商过程为三部分:LCP Negotiation、PAP Negotiation、IPCP Negotiation。 LCP阶段主要通过交换数据包与访问集中器建立和配置链路,LCP流程如图6所示。由于ISP提供商可能会不同,所接收到的LCP_REQ中包含的选项也可能不同,但其中必然包括OPTION3,表示链路所用的认证协议(Authentication Protocol)。实践中根据与ISP的PPPoE过程的数据包分析,多数ISP采用PAP(Password Authentication Protocol)认证协议。也有的ISP采用CHAP(Challenge Handshake Authentication Protocol)认证协议,双方可以通过协商采用合适的认证协议,本文采用PAP。

    PAP协商过程比较简单,发送PAP请求数据包,其中包括帧号和密码,ISP返回确认数据包,PAP协商过程结束。

    IPCP阶段的目的是获取ISP方提供的IP地址,流程如图7所示。所以在IPCP阶段的协商主要针对OPTION3进行。PPPoE模块首先接收服务器端一个IPCP_REQ,这个IPCP_REQ包括OPTION3(其IP地址值通常无效);接着PPPoE模块发送一个IPCP_ACK,ISP方会响应一个带有有效地址的IPCP_NAK;然后PPPoE模块就以这个地址再发一个IPCP_REQ,ISP服务器回应IPCP_ACK,IPCP结束。此时PPPoE模块得到限服务器分配的有效I守址,随后就可以在PPPoE协议之上传送IP数据包。需要注意的是,在PPP协商过程结束后,服务器为了检验接入方链路的活动状态,会定期发出LCP EchoRequest请求,此时PPPoE模块需要发送LCP Echo-ACK作为应答。

    嵌入式系统程序设计的特点是面向特定应用,由于资源有限,软件必须去除冗余。本PPPoE模块应用在以太电话中,在程序模块设计中针对性地实现PPPoE协议的主要功能,尽量使代码短小精悍,如省略掉了PPPoE发现阶段网络上有多个AC的情况,还省略了在会话阶段对于LCP OPTION3(认证协议)以外选项的协商和IPCP PTION3(IP地址)以外的选项的协商等情况。它些情况,PPPoE模块需要更多的代码来处理,而对于以太话机这种特定的应用,有些选项是不必要的。另外,在软件结构设计中,采用“超循环”结构来解决无操作系统问题,可以很好地实现以太话机中的任务调度功能。在代码编写上,采用C和汇编相结合的方法提高程序效率,同时采用流水操作、Inline、全局变量和共享内存等技术实现代码长度和数据空间的优化。测试表明,实现PPPoE软件所需的代码空间和数据空间都比PC机环境下PPPoE软件代码要小得多。

    PPPoE协议是当今ADSL宽带接入Internet的主要技术之一,而嵌入式技术是如今IT技术发展的热点,广泛应用于信息家电和各种媒体通信终端设备。本文在对PPPoE协议深入分析的基础上,结合嵌入式系统的特点,提出了PPPoE在嵌入式系统上的具体实现方法,通过运用这些优化方法,使软件代码空间和数据空间大大减少。目前该软件模块已成功应用在笔者自己开发的以太话机中。实际运行表明,软件运行稳定、互通性好,所实现的PPPoE协议软件具有良好的应用价值。

关键字:PPPoE协议  点对点  以太网 引用地址:点对点通信协议PPPoE模块的设计

上一篇:基于DSP56F826芯片的二维条码扫描器系统
下一篇:可重配置光分插复用器(ROADM)的嵌入式控制

推荐阅读最新更新时间:2024-05-02 21:09

嵌入式TCP/IP协议栈在单片机上的实现
    随着嵌入式设备与网络的日益结合,在单片机系统中引入TCP/IP协议栈,以支持单片机接入网络,成为嵌入式领域的一个重要方向。在此对基于SST89E516RD单片机的TCP/IP协议栈的实现方法给予讨论。选用SST89E516RD单片机实现了在线仿真和编程的功能,大大节约了开发成本。采用VB 6.0语言与Window 98/2000/XP等为软件开发平台,对系统进行了测试。经过几个月的软硬件测试表明:系统设计合理、稳定可靠,已基本实现了最初的设计目标。对其他类似系统移植该项技术奠定了基础,有很好的参考价值。 1 系统硬件实现     整个系统以SST89E516RD单片机为核心,通过RTL8019AS以太网控制芯片实现远
[嵌入式]
Marvell成立符合CISPR 25标准的汽车EMC实验室
新实验室将进一步推动业界领先的汽车连接解决方案的开发与创新 Marvell 公司 (NASDAQ:MRVL)今天宣布汽车电磁兼容(EMC)实验室正式投入运行,这一先进的EMC测试设施满足CISPR 25标准,使Marvell能够在公司内部即可完成各种抗干扰和静电(ESD)测试。通过这一新设施,Marvell的汽车以太网产品可以设计成满足汽车制造商严苛EMC要求的系统解决方案,并缩短产品上市时间。凭借该先进的EMC实验室,Marvell进一步加强了下一代汽车级产品的开发,体现了Marvell对汽车行业的长期承诺。 为了提供更高水平的用户体验和安全性,汽车制造商正在采用很多工作在更高频率的电子控制单元(ECU),因而带来了许多新的
[汽车电子]
智能汽车使用以太网架构是否能解决数据带宽和传输问题?
随着智能汽车中大量传感器的使用,数据量迅速增加,而这些数据给传输环节带来巨大挑战。 Maxim Integrated汽车事业部执行总监Balagopal Mayampurath在接受采访时表示,这一挑战主要体现在三个方向。 挑战一是信号传输系统必须大幅度提升带宽,这一需求在未来三年至少提高25倍。挑战二是智能汽车内部大量设备的采用,使得信号互联的复杂度大大增加。挑战三是必须保证来自摄像头等传感器数据的完整性和安全性,传感器数据要安全地传输到处理单元,处理单元要把信息转输到显示屏上,这些环节都需要正确的信号传输,这样才能确保智能汽车运行的安全。 据Strategy Analytics预测,从今年到2020年,带宽需求预计
[嵌入式]
智能汽车使用<font color='red'>以太网</font>架构是否能解决数据带宽和传输问题?
基于BF537的双冗余以太网的设计与实现
   0 引言   随着信息技术的高速发展,网络通信也显得越发重要,以太网也成为了各种控制系统接口互联的主要媒介。在金融机构、政府部门、军事应用等特殊应用场合对网络系统的稳定性要求非常高,为了提高系统的可靠性和抗毁性,常常采用双冗余的设计方式。双冗余网络的实现是以故障检测为基础,通过软件检查、交换机及网络节点的网卡协同处理共同完成的。冗余网络的构建方式通常是在每个网络节点采用双网卡,中间用两个HUB或交换机相连。这样当某个节点的一块网卡、网线或者HUB出现故障时,系统会马上启用另一块冗余网卡使得系统仍能够正常运行。本文基于BF537提出了两种冗余网络的构建方案和实现方法。    1 BF537结构特点   BF537是Bla
[嵌入式]
适用于压缩空气、储能和以太网的全新Han®模块
容量更大,重量更轻 埃斯佩尔坎普/汉诺威,2021年4月14日——浩亭通过Han-Modular®系列推出可持续提高机器和系统能效的各种连接器。Han®300 A模块成为该系列的最新样板。通过以更轻的重量实现更大的容量,符合储能系统的传统研发目标。如今的储能系统通常需要达到200 A/800 V DC的输出。而未来更高能量密度的应用则需要300 A/1200 V DC或更高的传输电压。Han®300 A模块成为相应的适配接口。 Han®300 A模块适用于连接新的储能单元,并可用于升级现有系统(与Han®200 A模块插接兼容)。配备防手指触碰的插针的Han®300 A模块可以直接连接到母线或集成到储能抽屉中。 M12
[工业控制]
适用于压缩空气、储能和<font color='red'>以太网</font>的全新Han®模块
联发科将斥资约1.5亿元新台币收购九旸100%股权
据报道,联发科发布公告称,旗下络达将以每股 22 元新台币,斥资约 1.5 亿元新台币,收购九旸 100%股权,而这是联发科今年以来第三起并购案;业界人士认为,联发科近期动作频频,是以强化网通芯片领域为主,以及拓展多元产品线。 九旸董事会决议,与络达签署股份转换契约,络达将以每股 22 元新台币,收购九旸全数股权,依据九旸周五收盘价 19 元新台币计算,溢价幅度约 15.79%,双方股份转换基准日暂定为明年 4 月 30 日,待九旸股东会通过,并完成相关法定程序后,九旸将终止上柜,成为络达百分百持股之子公司;依据九旸现今股本 6.85 亿元新台币推算,联发科此次并购共斥资 1.5 亿元新台币。 据悉,九旸主力产品为乙太网路
[嵌入式]
通过CHNet-S7300MD实现以太网通信及ModbusTCP配置方法
西门子300mpi/dp转以太网通过CHNet-S7300MD实现以太网通信及ModbusTCP配置方法 产品简介 CHNetS7-S7300MD用于西门子S7-200/SMART S7-200/S7-300/S7-400/西门子数控840D、840DSL等PLC的以太网数据采集,非常方便构建生产管理系统。 CHNetS7-S7300MD不占用PLC编程口,即编程软件/上位机软件通过以太网对PLC数据监控和采集的同时,触摸屏可以通过扩展RS485口与PLC进行通讯。 CHNetS7-S7300MD支持工控领域内绝大多数SCADA软件,支持西门子S7TCP以太网协议和ModbusTCP协议 CHNetS7-S7300MD
[嵌入式]
通过CHNet-S7300MD实现<font color='red'>以太网</font>通信及ModbusTCP配置方法
汽车以太网技术演进,为自动驾驶铺平道路
随着科技的不断发展,自动驾驶汽车正逐渐成为现实。而要让自动驾驶成为普遍可行的选择,一个关键的原因在于汽车所需的大量数据和信息的传输。汽车以太网作为一种重要的车联网技术,正逐渐成为汽车行业关注的焦点。通过技术的不断演进更新,汽车以太网将越来越符合自动驾驶的需求。 车载以太网技术的演进 AUTOSAR(汽车开放系统体系结构) AUTOSAR 是开放和标准化的汽车软件体系结构。它由汽车制造商、供应商和工具开发商联合开发完成。AUTOSAR 包括在汽车中使用的 TCP/ IP 协议模型。汽车行业已经达成一致,同意将 AUTOSAR 确立为标准,各家汽车制造商将在实施标准层面展开竞争,而不必再对标准本身提出争议。
[汽车电子]
汽车<font color='red'>以太网</font>技术演进,为自动驾驶铺平道路
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved