PPPoE(PPP over Ethernet,基于以太网的PPP)是指在以太网链路上运行PPP,在ADSL、小区组网建设等应用中广泛采用。PPPoE使用Client/Server模型,提供了在以太网网络中多台主机连接到远端的宽带接入PPPoE服务器上的一种标准。PPPoE客户端向PPPoE服务器发起连接请求,两者之间会话协商通过后,PPPoE服务器向PPPoE客户端提供接入控制、认证等功能。
一、PPPoE工作原理
PPPoE会话建立流程可分为3个阶段,即Discovery(发现)阶段、Session(会话)阶段和Terminate(结束)阶段。
1、Discovery阶段
Discovery阶段由以下4个过程组成:
1)PPPoE客户端广播发送一个PADI(PPPoE ActiveDiscovery Initial。PPPoE激活发现初始化)报文,在此报文中包含PPPoE客户端想要得到的服务类型信息。
2)所有的PPPoE服务器在收到PADI报文后,将其中请求的服务与自己能提供的服务进行比较,如果可以提供,则单播回复一个PADO(PPPoE Active Discovery Offer,PPPoE激活发现提供)报文。
3)根据网络的拓扑结构,PPPoE客户端可能会收到多个PPPoE服务器发送的PADO报文,此时选择最先收到的PADO报文对应的PPPoE服务器作为自己的PPPoE服务器,并向该服务器单播发送一个PADR(PPPoE Active Discovery Request,PPPoE激活请求)报文。
4)PPPoE服务器在收到PADR报文后,会产生一个唯一的会话ID(Session ID),用以标识和PPPoE客户端的这个会话,然后通过发送一个PADS(PPPoE Active Discovery Session-confirmation,PPPoE激活发现会话确认)报文把会话ID发送给PPPoE客户端,会话建立成功后便进入PPPoE Session阶段。
完成后,通信双方都会知道PPPoE的Session ID以及对方以太网地址,它们共同确定了唯一的PPPoE会话。
2、Session阶段
Discovery阶段为客户端和服务器之间建立了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阶段所有的以太网数据包都是单播发送的。
3、Terminate阶段
PPP通信双方应该使用PPP自身来结束PPPoE会话,但在无法使用PPP结束会话时可以使用PADT(PPPoE ActiveDiscovery Terminate,PPPoE激活发现终止)报文。
客户端和服务器都可以发送PADT报文结束PPPoE连接。PADT数据包可以在会话建立以后的任意时刻单播发送。在发送或接收到PADT后,就不允许在使用该会话发送PPP流量了。
二、PPPoE典型应用
根据PPP会话的起止点所在位置的不同,有两种组网结构。第一种是将企业中的路由器设备作为PPPoE客户端,与位于运营商中担当PPPoE服务器的路由器设备间建立PPPoE会话。(如企业ADSL互联网接入),此时所有内网主机的数据到达PPPoE客户端后,通过PPP会话传送出去,用户主机上不用安装PPPoE客户端拨号软件,一般是一个企业共用一个账号。
第二种是将路由器设备作为PPPoE服务器,在Host和运营商的路由器之间建立PPPoE会话,内网中每台主机与担当PPPoE服务器的路由器建立一个PPPoE会话,典型应用如小区互联网接入。每台主机都是一个PPPoE客户端,安装PPPoE客户端拨号软件,单独使用一个账号,方便计费和控制。
三、配置设备作为PPPoE客户端
PPPoE会话支持的接口有:以太网接口、PON接口和ATM接口。当路由器作为PPPoE客户端时,可使同一个局域网的所有主机共享一个ADSL账号进行拨号上网,主要包括以下四项配置:
1、(可选)配置ADSL接口
如果是内置ADSL Modem功能,则要使用路由器上的ADSL接口(是ATM接口)连接PPPoE链路,这时需要配置ADSL接口。主要是为ADSL接口选择ADSL标准以及选择打开或关闭比特交换开关、无缝速率自适应开关和格栅编码开关等特性。如果采用的是外置ADSL Modem连接方式,则不用进行本项配置。
2、配置Dialer接口
在AR G3路由器,无论采用哪种ADSL连接方式,ADSL PPPoE拨号都是通过DCC控制的,所以需要配置DCC参数。又因为ADSL接口仅可工作在共享DCC方式,所以仅可在逻辑的Dialer接口上配置DCC参数,包括Dialer接口的IP地址分配(可直接分配,也可配置采用协商方式从对端获取)、PPP协议封装。
3、在物理拨号接口上启用PPPoE客户端协议,建立PPPoE会话
PPPoE会话支持的接口有以太网接口、PON接口和ATM接口。
1)当设备通过以太网接口或PON接口连接ADSLModem后在连接入Internet时候,需要在以太网接口或PON接口配置PPPoE会话。
2)当设备通过ATM接口连接入Internet时,需要在虚拟以太网接口配置PPPoE会话。
PPPoE会话有两种工作方式:永久在线方式和报文触发方式。
①永久在线方式:当物理线路Up后,设备会立即发起PPPoE呼叫,建立PPPoE会话,除非用户删除PPPoE会话,否则会话一直存在
②报文触发方式:当物理线路Up后,设备不会立即发起PPPoE呼叫,只有当有数据传送时设备才会发起PPPoE呼叫,如果PPPoE链路的空闲时间超过用户的配置,设备会自动终止PPPoE会话。
4、(可选)配置NAT,使内网用户IP地址转换为公网IP地址
当设备作为PPPoE客户端下行接局域网内用户时,因为局域网内用户使用的IP地址为私有地址,需要在设备上配置NAT将私网地址转换为公网地址,以使局域网内用户正常接入Internet。
通过以太网接口或PON接口连接外置ADSL Modem再连入Internet的PPPoE配置
system-view
interface interface-type interface-number 键入ADSL接口(采用内置ADSL Modem连接时),或者以太网接口和PON接口(采用外置ADSL Modem连接时)。
pppoe-client dial-bundle-number number [on-demand] [no-hostuniq] [ppp-max-payload value] 建立一个PPPoE会话,并指定PPPoE会话对应的Dialer Bundle。一个以太网接口或PON接口可以配置多个PPPoE会话,即一个以太网接口或PON接口可以同时属于多个Dialer Bundle,但是一个Dialer Bundle中只能拥有一个以太网接口或PON接口。PPPoE会话是和Dialer Bundle一一对应的。如果某一Dialer接口的Dialer Bundle已经有一个以太网接口或PON接口被用于PPPoE,那么此Dialer Bundle中不能加入其他任何接口。同样,如果在Dialer Bundle中已经有除PPPoE以太网接口或PON接口以外的接口,那么此Dialer Bundle也同样不能加入被用于PPPoE客户端的以太网接口或PON接口。也就是说,用于PPPoE的dialer Bundle中只用有一个以太网接口或PON接口。
通过ATM接口连接直接连入Internet时的PPPoE配置
system-view
interface virtual-ethernet ve-number 创建并进入VE(虚拟以太网)接口视图。
pppoe-client dial-bundle-number number [on-demand] [no-hostquniq][ppp-max-payload value]
quit
interface atm interface-number [.subinterface] 进入ATM(子)接口视图。
pvc {pvc-name [vpi/vci] | vpi/vci} 创建一条或批量创建指定VPI/VCI的PVC,并进入PVC视图。
map bridge virtual-ethernet interface-number 创建PVC上的PPPoEoA映射,即将对应的ATM接口与前面创建的VE接口绑定。
对PPPoE报文格式及交互的再次深入理解
对PPPoE到底运行在哪里还是有不明白的地方,再次深入理解:
PPPoE报文的格式就是在以太网帧中携带PPP报文,如图所示:
各个字段解释如下:
Destination_address:一个以太网单播目的地址或者以太网广播地址(0xffffffff)。对于Discovery数据包来说,该域的值是单播或者广播地址,PPPoE Client寻找PPPoE Server的过程使用广播地址,确认PPPoE Server后使用单播地址。对于Session阶段来说,该域必须是Discovery阶段已确定的通信对方的单播地址。
Source_address:源设备的以太网MAC地址。
Ether_type:设置为0x8863(Discovery阶段或拆链阶段)或者0x8864(Session阶段)。
Ver:4bits,PPPoE版本号,值为0x1。
Type域:4bits,PPPoE类型,值为0x1。
Code:8bits,PPPoE报文类型。Code域为0x00,表示会话数据。Code域为0x09,表示PADI报文;Code域为0x07,表示PADO或PADT报文;Code域为0x19,表示PADR报文;Code域为0x65,表示PADS报文。
Session_ID:16bits,对于一个给定的PPP会话,该值是一个固定值,并且与以太网Source_address和Destination_address一起实际地定义了一个PPP会话。值0xffff为将来的使用保留,不允许使用。
Length:16bits,定义PPPoE的Payload域长度。不包括以太网头部和PPPoE头部的长度。
数据:有时也称之为净载荷域,在PPPOE的不同阶段该域内的数据内容会有很大的不同。
在PPPOE的发现阶段时,该域内会填充一些Tag(标记);而在PPPOE的会话阶段,该域则携带的是标准的点对点协议包。
通过上面的描述,PPPoE帧在两个不同的阶段,所包含的内容也不同,PPPoE工作流程包括发现(Discovery)和会话(Session)两个阶段,在Discovery阶段,code域有意义,有不同的值,同时对应的PPP packet域,即数据或静载荷域是TLV格式的值对,即Type、Length、Value值对,用于进行发现和协商链接。在Session阶段,Code域恒为0x00,数据是PPP帧,但是从上图可以看出,这里的数据PPP帧只是从protocol域开始,剥离了前面的标志位、地址位、控制位,如下图,即只保留了协议和信息两部分,有可能还有FCS。
PPPoE工作原理以及PPPoE帧格式
PPPoE协议的工作流程包含发现和会话两个阶段,发现阶段是无状态的,目的是获得PPPoE终结端(在局端的ADSL设备上)的以太网MAC地址,并建立一个惟一的PPPoE SESSION-ID。发现阶段结束后,就进入标准的PPP会话阶段。
当一个主机想开始一个PPPoE会话,它必须首先进行发现阶段,以识别局端的以太网MAC地址,并建立一个PPPoE SESSION-ID。在发现阶段,基于网络的拓扑,主机可以发现多个接入集中器(这里的接入集中器是个什么概念?是不是就是PPPoE服务器),然后允许用户选择一个。当发现阶段成功完成,主机和选择的接入集中器都有了他们在以太网上建立PPP连接的信息(这些信息是不是就是两端的MAC地址和SessionID?)。直到PPP会话建立,发现阶段一直保持无状态的Client/Server(客户/服务器)模式。一旦PPP会话建立,主机和接入集中器都必须为PPP虚接口分配资源。
[PPPOE]报文交互分析
PPPoE(PPP Over Ethernet)协议是在点到点链路上承载网络层数据包的一种链路层协议,由于它能够提供用户验证、易于扩充,并且支持同/异步通信,因而获得广泛应用。
交互
发现阶段(PPPoE Discovery)
PPPOE发现阶段的交互过程主要有四个包,即PADI,PADO,PADR,PADS。PPPoE Discovery的协议类型值为0x8863。
PADI(Active Discovery Initiation)
用户主机发出有效发现初始包(PADI)。以太网目的地址为广播地址(FF:FF:FF:FF:FF:FF),CODE字段为0x09, SESSION_ID为0x0000。
PADI详细报文:
PADO(Active Discovery Offer)
接入设备收到在服务范围内的PADI包后,发送有效发现提供包(PADO)以响应请求。其CODE字段为0x07,SESSION_ID为0x0000。PADO包必须包含一个接入设备名称类型(AC-Name)的标签(标签类型字段为0x0102)以及一个或多个服务名称类型标签,表明可向用户主机提供的服务种类。
PADO详细报文
PADR(Active Discovery Request)
用户主机在可能收到的多个PADO包中选择一个合适的接入设备,选择的原则是根据PADO中接入设备名称类型标签和服务名称类型标签的内容。然后向所选择的接入设备发送PPPOE有效发现请求(PADR)包。其CODE字段为0x19,SESSION_ID为0x0000。PADR包必须包一个服务名称类型标签,确定向接入设备请求的服务种类。当一个用户主机在确定时间没有收到PADO,他会重发一个PADI,同时等待两倍的时间。这种过程可以根据需要重复多次。
PADR详细报文:
PADS(Active Discovery Session-confirmation)
接入设备收到PADR包后准备开始PPP会话,它发送一个有效发现会话确认(PADS)包。其CODE字段为0x65,SESSION_ID为接入设备所产生的一个唯一的PPPOE会话标识号码。
PADS详细报文:
会话阶段
PPPoE会话阶段主要分LCP协商阶段,认证阶段,IPCP阶段等,在这些阶段顺利完成后,就可以进行数据传输了。
链路控制协议LCP(Link Control Protocol)
此阶段主要是协商链路的一些参数,如最大接收单元MRU、Magic Number,以及后续认证时使用的协议等。LCP协商分为Configure Request,Configure Ack,Terminate Request,Echo Request。
LCP交互示意图:
SessionID就是PADS获得的SessionID,主要协商了MRU(Maximun Receive Ubit),并且提出认证使用的Magic Number。一般而言,MRU和MTU取值相同,PPPOE的最大MTU不能超过1492。计算方法如下:
首先,以太网帧大小限制:
Ethernet MinSize = 64 Byte
Ethernet MaxSize = 1518 Byte
去掉以太网帧头(6字节SRCMAC+6字节DSTMAC+2字节TYPE+4字节CRC)后的净荷为:
EthernetIP MTU =1518–18= 1500 B
所以,再去掉(6字节PPPoE_SESSION+2字节PPP_HEADER)的开销,所以PPPOE的MRU最大值为:
PPPoE MTU/MRU=1500–8=1492B。
Magic-number选项用来协商双方的魔术字,两端魔术字不能重复,魔术字可用来检测链路的环回情况。
该选项提供了一种探测短路连接和其它数据链路层异常的方法,当一方接收到带有魔数选项的配置请求数据帧后,将接收到的魔数与上次发送的魔数进行比较,如果不相同就认为没有发生短路。如果两个魔数相同,则需要发送一个携带不同魔数的配置否认帧,然后将接收到的魔数与发送的魔数进行比较。
在广域链路上,最常用的一种检测链路的方法就是在远端将发送和接受短接成环路,在本端发送的信号如果能被自己成功的接受到,那么线路就有可能是Ok的,这就是LoopBack测试。如果环路在测试之后并未撤掉,PPP又没有引用Magic-Number的话,就可能自己和自己建立PPP关系。
Configure Request:
Configure Ack:
Configure Request:
Configure Ack:
echo request:
Echo Reply:
认证阶段(网络层控制协议NCP)
认证阶段服务器端将验证客户端的合法性。最常见的两种就是PAP和CHAP;
PAP(Password Authentication Protocol)验证为两次握手验证,密码为明文。
PAP验证的过程如下:
(1)被验证方发送用户名和密码到验证方;
(2)验证方根据本端用户表查看是否有此用户以及密码是否正确,然后返回不同的响应。
注意:PAP不是一种安全的验证协议。当验证时,口令以明文方式在链路上发送,并且由于完成PPP链路建立后,被验证方会不停地在链路上反复发送用户名和口令,直到身份验证过程结束,所以不能防止攻击。
CHAP(Challenge-Handshake Authentication Protocol)验证为三次握手验证,密码为密文(密钥)。
CHAP验证过程如下:
(1)Challenge:验证方主动发起验证请求,验证方向被验证方发送一些随机产生的报文,并同时将本端的用户名附带上一起发送给被验证方;
(2)Response:若被验证方接到验证方的验证请求后,检查本端接口上是否配置了缺省的CHAP密码,如果配置了则被验证方利用报文ID、该缺省密码和MD5算法对该随机报文进行加密,将生成的密文和自己的用户名发回验证方;若被验证方检查发现本端接口上没有配置缺省的CHAP密码,则被验证方根据此报文中验证方的用户名在本端的用户表查找该用户对应的密码,如果在用户表找到了与验证方用户名相同的用户,便利用报文ID、此用户的密钥(密码)和MD5算法对该随机报文进行加密,将生成的密文和被验证方自己的用户名发回验证方;
(3)result:验证方用自己保存的被验证方密码和MD5算法对原随机报文加密,比较二者的密文,根据比较结果返回不同的响应。
Challenge:
Response:
Result—>Sucess:
IPCP(IP Control Protocol)阶段
此阶段进行IP、DNS、WINS等的协商。
IPCP交互示意图:
Configure Request:
Configure Request:
Configure Ack:
Configure Nak:
Configure Request:
Configure Ack:
数据传输
PPPoE(Point-to-Point Protocol Over Ethernet)来历
为了节约成本,用户上网最后一公里一般使用以太网,但是以太帧中是没有任何字段可以携带"用户名"和"密码"信息的,运营商如果不能识别来自不同家庭用户的数据流量,当然也就无法进行收费等管理了。
而PPP协议本身就具备了通过用户名和密码的进行认证的功能,且PPP协议简单、成熟,所以开发了PPPoE协议,从本质上讲,PPPoE是一个允许在以太网广播域中的两个以太接口之间创建点对点隧道的协议,它描述了如何将PPP帧封装在以太帧中。PPPoE采用的是Server/Client模式,在PPPoE协议的标准术语中,运行PPPoE Client的设备称为Host,运行PPPoE Server的设备称为AC。
PPPoE报文格式
如果在以太网Ether_type字段等于0x8863(Discovery发现阶段)或0x8864(Session会话阶段),则表明以太网帧的载荷数据就是一个PPPoE报文。PPPoE报文分为PPPoE Header和PPPoE Payload两个部分,其中
Ver、Type恒等于0x1,合起来才是一个字节
Code用来区分不同的PPPoE Discovery阶段的报文类型,如果是Ether_type=0x8864,则为全零
Session-ID字段只在PADS、PPPoE Session阶段不为空,其它时候为全零,它是用来区分不同的PPPoE会话(PPPoE Session)
Length又称为Payload Length,用来表示PPPoE Payload长度
PPPoE Discovery阶段的五种报文类型
PADI (PPPoe Active Discovery Initiation)报文,其中PPPoE Header的Code值为0x09,Host主动广播,以下报文类型均为单播;
PADO(PPPoe Active Discovery Offer)报文,其中PPPoE Header的Code值为0x07;
PADR(PPPoe Active Discovery Request)报文,其中PPPoE Header的Code值为0x19;
PADS(PPPoe Active Discovery Session-Confirmation)报文,其中PPPoE Header的Code值为0x65;
PADT(PPPoe Active Discovery Terminate)报文,其中PPPoE Header的Code值为0xa7,它的Payload部分为NULL;
PPPoE工作过程分为两个阶段 ,即Discovery阶段(0x8863-发现阶段)和PPP Session阶段(0x8864-PPP会话阶段)。
一、第一阶段,PPPoE Discovery阶段
注意,PPPoE Discovery阶段中,PADI、PADO、PADR报文的Session-ID字段的值为全0。
1、首先Host广播PADI报文,目的是寻找网络中的AC,并告诉AC自己期望获得的服务类型信息,在PADI报文的PPPoE Payload字段中,包含的是若干个具有Type-Length-Value/TLV结构的Tags字段,这些Tags字段表达了Host想要期望获得的服务类型信息
一般情况下,Host的Tags字段中只有一个Host-Uniq标识、区分本地主机,同时也告诉本网段内所有路由器,本机的host-uniq标识防止其它路由器重复;AC接收到该Tags,它必须在对应的PADO、PADS中不加修改的包含该Tags
2、AC接收到PADI报文后,会将PADI报文中所请求的服务类型和自己能提供的服务类型相比较,如果AC能够提供Host所请求的服务,回复一个携带AC的标识的PADO报文,否则不响应
实际中,Host-Uniq和AC-Name是用来唯一标识彼此身份,回复的报文中必须不加修改的放在报文中
3、如果网络中有多个AC,则Host就可能同一时间收到多个不同的AC回复的PADO报文 ,通常,Host会选择最先收到的PADO报文所对应的AC-Name作为自己的AC,并向该AC对应的AC-Name发送一个单播的PADR报文。
实际中,PADR报文就是PADO的源、目MAC对换一下,修改下Code值
4、AC收到PADR报文后,会确定出一个PPPoE Session-ID,作为对一个给定的PPPoE会话来说该值是一个固定值,并且与以太网Source_address和Destination_address一起唯一地定义了一个PPPoE会话。作为Discovery阶段的收官之作,AC回复一个单播的PADS报文中携带上这个PPPoE Session-ID
实际中,PADS报文回复的Session-ID字段不为0
Host接收到PADS报文并获得了AC的PPPoE Session-ID后,便标志着Host与AC之间已经成功建立起了PPPoE Session。接下来,Host和AC进入PPP Session阶段。
二、第二阶段,PPP Session阶段
在PPP Session阶段,Host与AC之间交互的是以太帧,但是这些帧的上层是PPP帧,所以叫做PPP Session阶段。其中Ether_type为0x8864,表明以太帧的载荷数据仍然是一个PPPoE报文,只是在PPPoE报文中,Code字段的取值为0,Session-ID字段的取值是PADS所确定的值。需要注意的是,PPPoE报文中的Payload就是一个PPP帧,不过它只有PPP帧的Protocol、Information字段,因为在PPP帧中的其它字段在此虚拟的PPP链路上已经没有存在的必要了,在这里我们看到,PPPoE的Code字段和Session-ID字段交替使用,它们存在的意义,分别对应PPPoE Discovery阶段和PPPoE Session阶段
实际中,我们看到PPPoE协议只是起到一个中介作用,在PPP Session阶段Host与AC之间就可以交互PPP帧,再利用PPP的认证功能,实现AC对接入的Host认证、计费等管理功能
其它细节问题
1、数值的问题
Ver=Type=0x1,它们两个合起来才是一个字节哦!
Code字段仅仅是标识PPPoE Discovery阶段报文类型的,进入PPPoE Session 会话后,PPP的报文类型将由Protocol字段负责,所以Code字段在PPP Session中恒为0x0000;
2、PADT的Payload Length为0,它也是单播,且不用对方回复
3、注意,PPP Session里面,Ver+Type=1B,Code=1B,Session-ID=2B,Payload Length=2B,Protocol=2B,共8个字节,那么PPPoE的tcp adjust-mss=1500-8-20-20=1452,其中默认MTU=1500;
4、命令配置
4.1、配置PPPoE Client时,在"int dialer X"下面,有两个user,即dialer user xxx,只有本地意义,但必须要有,否则该配置不生效
ppp chap/pap user xxx和远端PPPoE-server服务器认证用的
4.2、pppoe-client dial-bundle-number x on-deamon,参数on-deamon表示按需拨号,一般不要加这个参数,否则eNSP端口起不来
4.3、在pppoe-client配置下:
dialer-group绑定的是dialer-rule数值,这个不配置也可以,dialer bundle绑定的是接口下的dial-bundle-number数值,前提是先配置dialer user xxx
5、PADT它就是一个PPPoE Payload为空的报文,也是单播,且不要求对方收到后应答的这么一种报文
PPPoE在宽带接入网中的应用
近年来,网络数据业务发展迅速,宽带用户呈爆炸式的增长,运营商在采用xDSL,LAN,HFC,无线等多种接入方式的同时,为了构建一个可运营、可管理、可盈利的宽带网络,十分关心如何有效地完成用户的管理,PPPoE就是随之出现的多种认证技术中的一种。
1 PPPoE协议概述
1.1PPPoE的工作原理
PPPoE(PPP over Ethernet)是在以太网上建立PPP连接,由于以太网技术十分成熟且使用广泛,而PPP协议在传统的拨号上网应用中显示出良好的可扩展性和优质的管理控制机制,二者结合而成的PPPoE协议得到了宽带接入运营商的认可并广为采用。
PPPoE建立过程可以分为Discovery阶段和PPP会话阶段。Discovery阶段是一个无状态的阶段,该阶段主要是选择接入服务器,确定所要建立的PPP会话标识符Session ID,同时获得对方点到点的连接信息;PPP会话阶段执行标准的PPP过程。
一个典型的Discovery阶段包括以下4个步骤:
(1)主机首先主动发送广播包PADI寻找接入服务器,PADI必须至少包含一个服务名称类型的TAG,以表明主机所要求提供的服务。
(2)接入服务器收到包后如果可以提供主机要求
(3)主机在回应PADO的接入服务器中选择一个合适的,并发送PADR告知接入服务器,PADR中必须声明向接入服务器请求的服务种类。
(4)接入服务器收到PADR包后开始为用户分配一个唯一的会话标识符Session ID,启动PPP状态机以准备开始PPP会话,并发送一个会话确认包PADS。
主机收到PADS后,双方进入PPP会话阶段。在会话阶段,PPPoE的以太网类域设置为0x8864,CODE为0x00,Session ID必须是Discovery阶段所分配的值。
PPP会话阶段主要是LCP、认证、NCP 3个协议的协商过程,LCP阶段主要完成建立、配置和检测数据链路连接,认证协议类型由LCP协商(CHAP或者PAP),NCP是一个协议族,用于配置不同的网络层协议,常用的是IP控制协议(IPCP),它负责配置用户的IP和DNS等工作。
PADT包是会话中止包,它可以由会话双方的任意一方发起,但必须是会话建立之后才有效。
2 PPPoE的特点
PPPoE不仅有以太网的快速简便的特点,同时还有PPP的强大功能,任何能被PPP封装的协议都可以通过PPPoE传输,此外还有如下
特点:
(1)PPPoE很容易检查到用户下线,可通过一个PPP会话的建立和释放对用户进行基于时长或流量的统计,计费方式灵活方便。
(2)PPPoE可以提供动态IP地址分配方式,用户无需任何配置,网管维护简单,无需添加设备就可解决IP地址短缺问题,同时根据分配的IP地址,可以很好地定位用户在本网内的活动。
(3)用户通过免费的PPPoE客户端软件(如EnterNet),输入用户名和密码就可以上网,跟传统的拨号上网差不多,最大程度地延续了用户的习惯,从运营商的角度来看,PPPoE对其现存的网络结构进行变更也很小。
DSLAM是ADSL汇聚设备,其内核采用ATM或IP但上联口为以太网口,BAS(宽带接入服务器)是局端实现PPPoE功能的接入服务器,它终结由用户侧发起的PPPoE进程。下行的以太帧从IP城域网经路由器送到BAS,被加上PPPoE的头后送到DSLAM封装成AAL5帧,经过交叉模块发送到ADSL Modem,由其完成AAL5帧重组并解出以太帧发送到客户端,客户端从PPPoE包中取出IP数据包。
上行的PPPoE包在ADSL Modem中封装成AAL5帧,由ATM信元传输到局端的DSLAM,DSLAM负责终结ATM,重新组合出PPPoE包,并通过设好的PVC(永久虚电路)传送到BAS处理。
从上面可以看出,PPPoE将PPP承载到以太网之上,实质是在共享介质的网络上提供一条逻辑上的点到点链路,对用户而言,在DSLAM和ADSL Modem之间的ATM传输是透明的,如果将中间的DSLAM和ADSL Modem换成有线电视的接入设备,就是典型的HFC接入,BAS对PPPoE包的处理方式不变。
3 PPPoE在BAS上的实现
PPPoE拨号软件在应用中已经很成熟(Windows XP中自带),下面重点讨论PPPoE在接入服务器BAS中的实现方式。
3.1PPPoE的效率
从PPPoE协议模型可以看出,BAS汇聚了用户的所有数据流,它必须将每一个PPPoE包都拆开检查处理,这在很大程度上是沿袭了传统的PPP处理的方式,虽然有很好的安全性,但一旦用户很多,数据包数量很大,解封装速度就需要很快,BAS很大的精力花在检测用户的数据包上,容易形成接入的“瓶颈”。
为此,在BAS的硬件结构上可以采用分布式网络处理器(NP)和ASIC芯片设计。网络处理器是专门针对电信网络设备而开发的专用处理器,它有一套专门的指令集,用于处理电信网络的各种协议和业务,可以大大提高设备的处理能力。同时,ASIC芯片转发数据包时接近硬件的转发性能,远非CPU软件方式可比,采用这种方式将PPPoE数据流的处理与转发分开,工作效率大大提高。此外在软件系统结构上还应该与其他技术相结合,更好地发挥PPPoE的性能。
3.2PPPoE与VLAN的结合
VLAN即虚拟局域网,是一种通过将局域网内的设备逻辑地划分成一个个不同的网段,从而实现虚拟工作组的技术。划分VLAN的目的,一是提高网络安全性,不同VLAN的数据不能自由交流,需要接受第三层的检验;二是隔离广播信息,划分VLAN后,广播域缩小,有利于改善网络性能,能够将广播风暴控制在一个VLAN内部。
PPPoE是一个客户端/服务器协议,客户端需要发送PADI包寻找BAS,因此它必须同BAS在同一个广播式的二层网络内,与VLAN的结合很好地解决了这方面的安全隐患。此外通过将不同业务类型的用户分配到不同的VLAN处理,可以灵活地开展业务,加快处理流程,当然VLAN的规划必须在二层设备和BAS之间统一协调。
BAS收到上行的PPPoE包后,首先判别VLAN ID的所属类别,如果是普通的拨号用户,则确定是Discovery阶段还是会话阶段的数据包,并严格按照PPPoE协议处理。在会话阶段,根据不同的用户类型从不同的地址池中向用户分配IP地址,地址池由上层网管配置。如果是已经通过认证的用户的数据包,则根据该用户的服务类型处理,比如,如果是本地认证的拨号用户,且对方也申请有同样的功能,则直接由本地转发。
如果是专线用户,则不用经过PPPoE复杂的认证过程,直接根据用户的VLAN ID便可进入专线用户处理流程,接入速度大大提高。此外为了统一网管,在BAS与其他设备之间需要通信,这些数据包是内部数据包,也可根据VLAN ID来辨别。
对于下行数据,由于BAS负责分配和解析用户的IP,兼有网关的功能,它收到数据包的目的IP是用户的,因此以IP为索引查找用户的信息比根据MAC要方便得多,这一点与普通的交换机有所不同,具体过程跟上行处理差不多。
3.3PPPoE对多业务选择的支持
多业务选择指的是用户通过一条终结到BAS的PPP连接来自主地选择后台网络运营商所提供的多种业务。之所以要支持多业务的选择,一方面是因为各种业务的具体实现在技术上的侧重点是不同的,对网络性能的要求也不尽相同,以前采取的固定分配的方式非常不便;另一方面,从网络应用的发展看,网络内容服务供应商ICP与网络接入商ISP的分离是必然趋势,在接入汇聚侧,ISP必须严格保证将用户选择的业务流转发到相应的ICP中去。
目前采用的方法是用户先在PPPoE拨号软件中选择相应的业务,然后对用户进行业务授权确认,最后激活BAS内部相应的处理模块。但是采用这种方式,用户只能知道业务的名字,无法直观地、全面地获知BAS提供的各种业务类型,特别是在新业务的开展上十分困难,有很大的局限性。
因此可以将BAS与后台业务选择网关及RADIUS服务器相配合,采取先认证后选择业务的方式,具体操作如下:
(1)主机发送PADI寻找BAS,PADI中包含一个服务名类型的TAG,它的值为空,表示该用户可以接受任何类型的服务。
(2)BAS收到包后回送PADO,PADO中包含所有可以提供的服务的TAG,同时,还包含一个服务名为General的TAG。
(3)主机发送PADR。用户选择已知的服务名,也可以选择General服务。
(4)BAS收到PADR包后为用户分配资源,并开始PPP协商过程。在PPP过程中,BAS将用户输入的账号和密码等信息送到RADIUS服务器上认证。
(5)通过认证的用户,享受BAS提供的该项服务,但如果选择的是General,则被强制访问与BAS直连的服务选择网关。后台的服务选择网关是一台具有Web Server功能的服务器,用户可以通过Web的交互式界面得到可选择业务的相关信息(包括费用、带宽等),同时显示该用户账号对应的信息。
(6)用户选择相应的业务,同时服务选择网关会定义各种用户的业务范围和操作权限。
(7)服务选择网关激活接入服务器内部相应的业务模型实现该业务。以上方式是严格按照PPPoE协议执行的,与当前流行的拨号软件完全兼容,如果用户对其他的业务根本不感兴趣而对已申请的业务非常熟悉,也不影响用户的习惯。
从BAS的角度考虑,PPPoE的操作流程也没有什么改变,只是多添了一种服务类型而已。如果运营商当前没有服务选择网关,可以通过网管配置,在对PADI包的回应时不包含General服务就可以了。
对于运营商来说,采用以上方式不仅大大提高了接入用户操作的透明度,还可以起到业务门户的作用,为下一步的服务扩展提供空间,而且从宽带接入网以后发展的趋势来看,按需分配与业务类型相应的带宽和QoS是必然的,PPPoE的这种业务选择运营模式是今后业务选择的发展方向。
3.4PPPoE对组播的支持
PPPoE本身是一个点到点的协议,每一个用户与BAS之间都有一条PPP的链接,用户与BAS之间是通过这条链路经二层设备以单播的形式传输数据。但是随着网上视频业务的不断发展,人们对带宽的需求越来越大,PPPoE对组播的支持显得非常重要。PPPoE所支持的组播协议通常指的是二层组播协议IGMP proxy或IGMP Snooping,采取的基本方法是对每个组播数据包分组传送,下面分析这两种协议的实现方式。
3.4.1IGMP Snooping
IGMP Snooping是靠侦听用户与路由器之间通信的IGMP报文维护组播地址和VLAN的对应表的对应关系,它将同一组播组的活动成员映射为一个VLAN,在收到组播数据包后,仅向该组播组所对应的VLAN成员转发。主要操作流程如下:
(1)主机与BAS进行PPPoE协商,通过PPPoE认证。
(2)主机向路由器发送IGMP成员报告包,BAS监听到该包,并从PPPoE数据包中得到组播组的地址,将该用户添加到对应的VLAN,如果该用户是组播组的第一个用户,则为这个组播组产生一个组播条目,并将该报文转发至上层路由器以更新组播路由表。
(3)BAS收到路由器的组播数据报文时,根据组播MAC地址和组播IP地址的对应关系,找到对应的VLAN,然后将数据包封装成PPPoE的会话包,向VLAN内的成员转发。
(4)当收到来自主机的申请离开组播组的包时,BAS把收到该包的端口从相应的VLAN中删除,若该用户是组播组最后一个用户(此时VLAN为空),则把该VLAN删除,并把该包内容通过上行端口转发出去。 IGMP Snooping的规则比较简单,下行方向透传查询包,上行方向根据需要转发加入或离开包,但要求BAS必须有3层提取功能,它对于主机和路由器是透明的。
3.4.2IGMP Proxy
IGMP Proxy是靠拦截用户和路由器之间的IGMP报文建立组播表,Proxy设备的上联端口执行主机的角色,下联端口执行路由器的角色。
下面是简要流程:
(1)主机与BAS进行PPPoE协商,通过PPPoE认证。
(2)上联端口执行主机的角色,响应来自路由器的查询,当新增用户组或者某组最后一个用户退出时,主动发送成员报告包或者离开包。
(3)下行方向的业务包按照组播表进行转发。
(4)下联端口执行路由器的角色,完全按照IGMP V2中规定的机制执行,包括查询者选举机制,定期发送通用查询信息,收到离开包时发送特定查询等。 IGMP Proxy在两个端口分别实现不同的功能,工作量相对较大,其优点是当网络中没有路由器时,IGMP Proxy设备可以起到查询者的作用,而且如果要扩展组播路由功能,Proxy比Snooping方便。考虑到BAS复制PPPoE多播数据对底层设备造成的巨大压力,而且当前的交换机和部分DSLAM(尤其是以IP为内核的DSLAM)已经开始支持二层组播,所以从发展的角度看采用IGMP Proxy更好一些。
4 结束语
采用NP的硬件结构以及PPPoE+VLAN的设计思想,大大提高了PPPoE的效率、安全性和可管理性,而增加PPPoE多业务选择和组播业务的支持,向用户提供优质灵活的服务,将为正在蓬勃发展的宽带建设注入新的活力。