转:https://blog.csdn.net/achejq/article/details/19478811

PPPoE技术白皮书

关键词:PPP,Ethernet,PPPoE

摘    要:PPPoE是一种通过一个远端接入设备为以太网上的主机提供接入服务,并可以对接入的每个主机实现控制和计费的技术。本文介绍了PPPoE的产生背景、技术优点、工作过程和典型组网应用。

缩略语:

缩略语

英文全名

中文解释

ADSL

Asymmetric Digital Subscriber Line

非对称数字用户线

DSLAM

Digital Subscriber Line Access Multiplexer

数字用户线接入复用器

PPP

Point to Point Protocol

点对点协议

PPPoE

PPP Over Ethernet

在以太网上承载PPP协议

PADI

PPPoE Active Discovery Initiation

PPPoE活动发现发起报文

PADO

PPPoE Active Discovery Offer

PPPoE活动发现提供报文

PADR

PPPoE Active Discovery Request

PPPoE活动发现请求报文

PADS

PPPoE Active Discovery Session-confirmation

PPPoE活动发现会话报文

PADT

PPPoE Active Discovery Terminate

PPPoE活动发现终结报文

1  概述

1.1  产品背景

人们想通过相同的接入设备来连接到远程站点上的多个主机,同时接入设备能够提供与拨号上网类似的访问控制和计费功能。在众多的接入技术中,把多个主机连接到接入设备的最经济的方法就是以太网,而PPP协议可以提供良好的访问控制和计费功能,于是产生了在以太网上传输PPP的方法,即PPPoE。

PPPoE协议的提出解决了用户上网收费等实际应用问题,得到了宽带接入运营商的认可并广为采用。

1.2  技术优点

对于用户来说,PPPoE的优点如下:

l              沿袭传统的拨号上网方式,依旧使用他们熟悉的硬件以及类似的软件进行Internet的接入。

l              兼容现有的所有xDSL Modem,不需要对客户端的xDSL Modem进行复杂的配置。

l              使用以太网网卡连接PC和xDSL Modem,允许多台PC同时共享xDSL线路,可以节约用户投资。

对于运营商来说,PPPoE的优点如下:

l              运营商可以通过数字用户线、电缆调制解调器或无线连接等方式提供支持多用户的宽带接入服务。

l              运营商可以利用可靠和熟悉的技术来加速部署高速互联网业务,对现有网络部署影响小。

l              运营商可以通过访问控制功能对用户的身份进行确认,通过计费功能对用户进行计费,同时对用户的网络行为进行监控,保证了网络安全。

l              终端用户可同时接入多个运营商,这种动态服务选择的功能可以使运营商容易创建和提供新的业务。

2  PPPoE技术实现方案

2.1  PPPoE组网结构

PPPoE使用Client/Server模型,PPPoE的客户端为PPPoE Client,PPPoE的服务器端为PPPoE Server。PPPoE Client向PPPoE Server发起连接请求,两者之间会话协商通过后,PPPoE Server向PPPoE Client提供接入控制、认证等功能。

根据PPP会话的起止点所在位置的不同,有两种组网结构:

l              第一种方式在设备之间建立PPP会话,所有主机通过同一个PPP会话传送数据,主机上不用安装PPPoE客户端拨号软件,一般是一个企业(公司)共用一个账号(图中PPPoE Client位于企业/公司内部,PPPoE Server是运营商的设备)。

图1 PPPoE组网结构图1

l              第二种部署方式,PPP会话建立在Host和运营商的路由器之间,为每一个Host建立一个PPP会话,每个Host都是PPPoE Client,每个Host一个帐号,方便运营商对用户进行计费和控制。Host上必须安装PPPoE客户端拨号软件。

图2 PPPoE组网结构图2

2.2  PPPoE报文格式

PPPoE报文的格式就是在以太网帧中携带PPP报文,如图3所示。

图3 报文格式

各个字段解释如下:

l              Destination_address域:一个以太网单播目的地址或者以太网广播地址(0xffffffff)。对于Discovery数据包来说,该域的值是单播或者广播地址,PPPoE Client寻找PPPoE Server的过程使用广播地址,确认PPPoE Server后使用单播地址。对于Session阶段来说,该域必须是Discovery阶段已确定的通信对方的单播地址。

l              Source_address域:源设备的以太网MAC地址。

l              Ether_type:设置为0x8863(Discovery阶段或拆链阶段)或者0x8864(Session阶段)。

l              Ver域:4bits,PPPoE版本号,值为0x1。

l              Type域:4bits,PPPoE类型,值为0x1。

l              Code域:8bits,PPPoE报文类型。Code域为0x00,表示会话数据。Code域为0x09,表示PADI报文;Code域为0x07,表示PADO或PADT报文;Code域为0x19,表示PADR报文;Code域为0x65,表示PADS报文。报文的具体情况请参见附录部分。

l              Session_ID域:16bits,对于一个给定的PPP会话,该值是一个固定值,并且与以太网Source_address和Destination_address一起实际地定义了一个PPP会话。值0xffff为将来的使用保留,不允许使用。

l              Length域:16bits,定义PPPoE的Payload域长度。不包括以太网头部和PPPoE头部的长度。

2.3  PPPoE工作过程

PPPoE的协商过程如图4所示:

图4 PPPoE协商过程

PPPoE可分为三个阶段,即Discovery阶段、Session阶段和Terminate阶段。

2.3.1  Discovery阶段

Discovery阶段由四个过程组成。完成之后通信双方都会知道PPPoE的Session_ID 以及对方以太网地址,它们共同确定了唯一的PPPoE Session。

(1)        PPPoE Client广播发送一个PADI报文,在此报文中包含PPPoE Client想要得到的服务类型信息。

(2)        所有的PPPoE Server收到PADI报文之后,将其中请求的服务与自己能够提供的服务进行比较,如果可以提供,则单播回复一个PADO报文。

(3)        根据网络的拓扑结构,PPPoE Client可能收到多个PPPoE Server发送的PADO报文,PPPoE Client选择最先收到的PADO报文对应的PPPoE Server做为自己的PPPoE Server,并单播发送一个PADR报文。

(4)        PPPoE Server产生一个唯一的会话ID(SESSION ID),标识和PPPoE Client的这个会话,通过发送一个PADS报文把会话ID发送给PPPoE Client,如果没有错误,会话建立后便进入PPPoE Session阶段。

2.3.2  Session阶段

PPPoE Discovery阶段的工作为PPPoE Client和PPPoE之间建立了Session,之后PPPoE便进入了Session阶段,Session阶段可划分为两部分,一是PPP协商阶段,二是PPP报文传输阶段。

PPPoE Session上的PPP协商和普通的PPP协商方式一致,分为LCP、认证、NCP三个阶段。

(1)        LCP阶段主要完成建立、配置和检测数据链路连接。

(2)        LCP协商成功后,开始进行认证工作,认证协议类型由LCP协商结果(CHAP或者PAP)决定。

(3)        认证成功后,PPP进入NCP阶段,NCP是一个协议族,用于配置不同的网络层协议,常用的是IP控制协议(IPCP),它负责配置用户的IP和DNS等工作。

PPPoE Session的PPP协商成功后,其上就可以承载PPP数据报文。

在PPPoE Session阶段所有的以太网数据包都是单播发送的。

2.3.3  Terminate阶段

PPP通信双方应该使用PPP协议自身(比如PPP终结报文)来结束PPPoE会话,但在无法使用PPP协议结束会话时可以使用PADT报文。

进入PPPoE Session阶段后,PPPoE Client和PPPoE Server都可以通过发送PADT报文的方式来结束PPPoE连接。PADT数据包可以在会话建立以后的任意时刻单播发送。在发送或接收到PADT后,就不允许再使用该会话发送PPP流量了,即使是常规的PPP结束数据包也不允许发送。

3  典型组网应用

3.1  利用ADSL Modem将局域网接入Internet

3.1.1  组网需求

企业希望使用一个公共帐号访问Internet:

l              Router A作为PPPoE Client,通过一个帐号访问Internet(相当于整个企业的员工公用这个帐号)。

l              Router B作为PPPoE Server连接至DSLAM,提供RADIUS认证、计费等功能,同时连接到Internet。

3.1.2  组网图

图5 利用ADSL Modem将局域网接入Internet组网图

3.2  无线PPPoE接入

3.2.1  组网需求

AP设备作为PPPoE Client,BRAS设备作为PPPoE Server,终端用户可以直接通过无线网络访问Internet。

3.2.2  组网图

图6 无线PPPoE接入组网图

4  参考文献

l              RFC1661:The Point-to-Point Protocol (PPP)

l              RFC2516:A Method for Transmitting PPP Over Ethernet (PPPoE)

5  附录

5.1  报文结构

1. PADI(PPPoE Active Discovery Initiation)

l              Code域为0x09。

l              Session_ID域为0x0000。

l              TAG_TYPE域为0x0101(Service-Name),表明后面紧跟的是服务的名称。有且只有一个TAG_TYPE为Service-Name的TAG,其他类型的TAG可选。

图7 PADI数据包举例

2. PADO(PPPoE Active Discovery Offer)

l              Code域为0x07。

l              SESSION_ID域为0x0000。

l              TAG_TYPE域为0x0101(Service-Name),表明后面紧跟的是服务的名称;为0x0102(AC-Name)表明后面紧跟的字符串唯一地表示了某个特定的访问集中器。有且只有一个TAG_TYPE为AC-Name的TAG,至少一个TAG_TYPE为Service-Name的TAG。

图8 PADO数据包举例

3. PADR(PPPoE Active Discovery Request)

l              Code域为0x19。

l              SESSION_ID为0x0000。

l              TAG_TYPE域为0x0101(Service-Name),表明后面紧跟的是服务的名称。有且只有一个TAG_TYPE为Service-Name的TAG,其他类型的TAG可选。

图9 PADR数据包举例

4. PADS(PPPoE Active Discovery Session-confirmation)

l              Code域为0x65。

l              SESSION_ID为Discovery阶段分配的数值。

l              TAG为可选。

图10 PADS数据包举例

5. PADT(PPPoE Active Discovery Terminate)

l              Code域为0xa7。

l              SESSION_ID域为Discovery阶段分配的数值。

l              无TAG。

图11 PADT数据包举例

pppoe白皮书的更多相关文章

  1. PPPoE技术白皮书(H3C)

    PPPoE技术白皮书 关键词:PPP,Ethernet,PPPoE 摘要:PPPoE是一种通过一个远端接入设备为以太网上的主机提供接入服务,并可以对接入的每个主机实现控制和计费的技术.本文介绍了PPP ...

  2. 树莓派pppoe

    连接的网络是移动(铁通)的宽带,不同的宽带的dns需要修改. 1.首先安装pppoe包 apt-get install pppoe 2.然后,复制conf文件/etc/ppp/pppoe.conf: ...

  3. dd-wrt 定时重连 pppoe 更换ip地址

    因为做代理,IP时常被封的原因,所以,需要每天定时重启路由器,重启路由器影响太大,所以重新拨号是一个更好的选择. 在dd-wrt里面,杀掉pppoe服务进程就可以了,这个进程会自动重新启动,然后就相当 ...

  4. PPPoE(以太网上的点对点协议)

    协议概述 PPPoE分为两个阶段,即Discovery(地址发现)阶段和PPP会话阶段.当某个主机希望发起一个PPPoE会话时,它必须首先执行Discovery来确定对方的以太网MAC地址并建立起一个 ...

  5. Configure PPPoE on CentOS7

    Why? I prefer using ethernet to Wifi to access internet. But, I'm afraid, sometimes I have to use Wi ...

  6. Java白皮书的关键术语

    “白皮书”可以在http://www.oracle.com/technetwork/java/langenv-140151.html上找到. 1.简单性. 2.面向对象. 3.网络技能(Network ...

  7. WPF路线图白皮书: 2015及未来

    介绍 当2006年微软首次推出Windows Presentation Foundation(WPF)时,它代表了应用程序的设计和开发又向前跨出了巨大的一步.它简化了GUI应用程序的开发,有助于UI和 ...

  8. openwrt刷机后配置PPPOE上网方法

    参考下帖13#的方式: 如何编辑配置openwrt,来实现pppoe拨号上网? 但其中有一句代码有错误: option 'peerdns' '0',其中需将‘0’改为‘1’

  9. PPPoE名词解释

    PPPoE拔号的发现阶段(Discovery): PPPoE的发现阶段一共分为4步. 分别是: PADI(PPPoE Active Discovery Initiation) PADO(PPPoE A ...

随机推荐

  1. 挑战:万能的slash! 判断js中“/”是正则、除号、注释?

    很久以前在其它地方就探讨和关注过这个问题,但都没有满意的解答. 看了zjfeihu 的帖子: <前端代码加亮插件(html,jss,css),支持即时加亮,运行代码>,再次提出这个比较经典 ...

  2. 【转】 详细介绍windows下使用python pylot进行网站压力测试

    windows下使用python进行网站压力测试,有两个必不可少的程序需要安装,一个是python,另一个是pylot.python是一个安装软件,用来运行python程序,而pylot则是pytho ...

  3. PHP : ActiveRecord实现示例

    先简单介绍一下Active Record: Active Record(中文名:活动记录)是一种领域模型模式,特点是一个模型类对应关系型数据库中的一个表,而模型类的一个实例对应表中的一行记录.Acti ...

  4. 【翻译自mos文章】当点击完 finishbutton后,dbca 或者dbua hang住

    当点击完 finishbutton后,dbca 或者dbua hang住 来源于: DBCA/DBUA APPEARS TO HANG AFTER CLICKING FINISH BUTTON (文档 ...

  5. laravel Lumen邮箱发送配置

    Lumen 中配置邮件 https://blog.csdn.net/glovenone/article/details/54344013 Lareval 比 Lumen 多了一个步骤 https:// ...

  6. 【spring boot logback】spring boot中logback日志乱码问题

    在初次使用logback的自定义配置文件完整的控制spring boot日志后,发现了一个无法忍受的问题,就是日志乱码. 控制台看到打印日志乱码如下: 而日志文件打开: 记事本打开 sublime打开 ...

  7. pycharn设置git提交代码

    1.设置pycharm的git地址 2.设置git地址及本地路径 3.提交代码

  8. linux 服务器所支持的最大句柄数调高数倍(与服务器的内存数量相关)

    https://github.com/alibaba/p3c/blob/master/阿里巴巴Java开发手册(详尽版).pdf 2. [推荐]调大服务器所支持的最大文件句柄数(File Descri ...

  9. 解决IE,z-index失效

    在影响显示顺序的模块加上: style="position:relative;z-index:-1;" 解决IE,z-index失效

  10. setlocale同mbstowcs函数的关系(VS2008下setlocale(LC_ALL, "chs")可以执行成功,BCB使用setlocale(LC_ALL, "Chinese (Simplified)_People's Republic of China"),linux上locale别名表大概在 /usr/lib/X11/locale/locale.alias)

    序中,如果要将ASCII码字符串转换为宽字符(Unicode),可以利用标准C的mbstowcs函数. 微软在MSDN中有示例,如下: 然而,这段代码在处理含有汉字的字符串时就会出现问题.比如将: w ...