PPPoE协议调研
by 00848223 刘盾
PPPoE是一种在以太网上进行PPP点对点拨号连接的协议。因为以太网属于专网,网络是直接连接的,不用拨号,所以物理层上的连接是没有问题的。但为了确保连接安全,并且只允许合法用户连接,所以采取了类似电话拨号方式的身份验证,此时所拨的不是电话号码,而是用户的账户,属于数据链路层的协议。
PPPoE虽然是目前应用最广的一种ADSL网络协议,但它不是随着ADSL技术的出现而出现的,它是在1998年才开发出来的,主要目的是为了解决公网IP地址不足的问题。所谓虚拟拨号是指用ADSL接入Internet时同样需要输入用户名与密码才能进行连接,与传统的模拟电话线路+MODEM、数字电话线路+ISDN Ta的接入方式不同,ADSL不是对具体的电话号码进行拨号,而是直接在局端以太网上进行身份验证。因为事实上在没有拨号前物理网络是连通的,只是通过相应账户的身份验证登录网络系统,所以称之为“虚拟拨号”。
PPPoE技术最早是由Redback 网络公司、客户端软件开发商RouterWare公司以及Worldcom子公司“UUNET Technologies”公司,于1998年后期在IETF RFC基础上联合开发的。通过把最经济的以太局域网和点对点协议的可扩展性和管理控制功能结合在一起,网络服务提供商和电信运营商便可利用可靠、熟悉的技术来加速部署高速互联网业务。它使服务提供商在通过DSL、Cable MODEM或WLAN(无线局域网)等方式,提供支持多用户的宽带接入服务时更加简便易行。而在以前,在传统的以太网模型中,我们是不存在所谓的用户计费的概念,要么用户能获取IP 地址上网,要么用户就无法上网。IETF 的工程师们在秉承窄带拨号上网的运营思路的基础上,制定出了在以太网上传送PPP 数据包的协议——PPPoE。这个协议出台后,各网络设备制造商也相继推出自己品牌的宽带接入服务器(BAS),使得PPPoE这种灵活的ADSL接入方式迅速得到了广泛应用。
PPPoE利用以太网络的工作机制,将ADSL MODEM的10Base-T接口(因为目前ADSL的最高接入速率在10Mbps以内,无须更高速率端口)与内部以太网互联。ADSL的这种接入方式在 RFC1483文档中规定。在ADSL MODEM中采用的桥接封装方式对终端发出的PPP数据包进行封装后,通过连接两端的PVC(永久虚电路)在ADSL MODEM与中继传输网和数据交换
网(这些网之间通常是采用虚电路连接的)的宽带接入服务器之间建立连接,实现PPP的动态接入。组网方式很简单,大大降低了网络的复杂程度。
通过PPPoE协议,在一个共享的以太网上的多个主机可以通过一个或多个简单的桥接接入设备,与远程接入集中器进行多个PPP会话,这就是ADSL 应用最广的桥接接入模式,使用这种模型,每个主机使用它自己的PPP协议栈,并且为每个用户分配一个熟悉的用户接口。接入控制、计费和服务类型能够基于每用户,而不是每站点来处理。
PPPoE协议的工作流程包含发现和会话两个阶段,发现阶段是无状态的,目的是获得PPPoE终结端(在局端的ADSL设备上)的以太网MAC地址,并建立一个惟一的PPPoESESSION-ID。发现阶段结束后,就进入标准的PPP会话阶段。
当一个主机想开始一个PPPoE会话,它必须首先进行发现阶段,以识别局端的以太网MAC地址,并建立一个PPPoESESSION-ID。在发现阶段,基于网络的拓扑,主机可以发现多个接入集中器,然后允许用户选择一个。当发现阶段成功完成,主机和选择的接入集中器都有了他们在以太网上建立PPP连接的信息。直到PPP会话建立,发现阶段一直保持无状态的Client/Server(客户/服务器)模式。一旦PPP会话建立,主机和接入集中器都必须为PPP虚接口分配资源。
PPPoE协议会话的发现和会话两个阶段具体进程如下。
1.发现(Discovery)阶段
在发现(Discovery)阶段中用户主机以广播方式寻找所连接的所有接入集中器(或交换机),并获得其以太网MAC地址。然后选择需要连接的主机,并确定所要建立的PPP会话标识号码。发现阶段有4个步骤,当此阶段完成,通信的两端都知道PPPoESESSION-ID和对端的以太网地址,他们一起惟一定义 PPPoE会话。这4个步骤如下。
(1)主机广播发起分组(PADI),分组的目的地址为以太网的广播地址
0×ffffffffffff,CODE(代码)字段值为0×09,SESSION-ID(会话ID)字段值为
0×0000。PADI分组必须至少包含一个服务名称类型的标签(标签类型字段值为
0×0101),向接入集中器提出所要求提供的服务。
(2)接入集中器收到在服务范围内的PADI分组,发送PPPoE有效发现提供包(PADO)分组,以响应请求。其中CODE字段值为0×07,SESSION-ID字段值仍为
0×0000。PADO分组必须包含一个接入集中器名称类型的标签(标签类型字段值为
0×0102),以及一个或多个服务名称类型标签,表明可向主机提供的服务种类。
(3)主机在可能收到的多个PADO分组中选择一个合适的PADO分组,然后向所选择的接入集中器发送PPPoE有效发现请求分组(PADR)。其中CODE字段为0×19,SESSION_ID 字段值仍为0×0000。PADR分组必须包含一个服务名称类型标签,确定向接入集线器(或交换机)请求的服务种类。当主机在指定的时间内没有接收到PADO,它应该重新发送它的PADI分组,并且加倍等待时间,这个过程会被重复期望的次数。
(4)接入集中器收到PADR分组后准备开始PPP会话,它发送一个PPPoE有效发现会话确认PADS分组。其中CODE字段值为0×65,SESSION-ID字段值为接入集中器所产生的一个惟一的PPPoE会话标识号码。PADS分组也必须包含一个接入集中器名称类型的标签以确认向主机提供的服务。当主机收到PADS 分组确认后,双方就进入PPP会话阶段。
2.PPP会话阶段
用户主机与接入集中器根据在发现阶段所协商的PPP会话连接参数进行PPP会话。一旦PPPoE会话开始,PPP数据就可以以任何其他的PPP封装形式发送。所有的以太网帧都是单播的。PPPoE会话的SESSION-ID一定不能改变,并且必须是发现阶段分配的值。
PPPoE 还有一个PADT分组,它可以在会话建立后的任何时候发送,来终止PPPoE会话,也就是会话释放。它可以由主机或者接入集中器发送。当对方接收到一个 PADT分组,就不再允许使用这个会话来发送PPP业务。PADT分组不需要任何标签,其CODE字段值为0×a7,SESSION-ID字段值为需要终止的PPP会话的会话标识号码。在发送或接收PADT后,即使正常的PPP终止分组也不必发送。PPP对端应该使用PPP协议自身来终止PPPoE会话,但是当PPP不能使用时,可以使用PADT。
对应于上面介绍的PPPoE协议工作的两个阶段,PPPoE帧格式也包括两种类型:发现阶段的以太网帧中的类型字段值为0×8863;PPP会话阶段的以太网帧中的类型字段值为
PPPoE建议中这两个字段值都固定为0x1。代码(CODE)字段长度为8比特,根据两阶段中各种数据包的不同功能而值不同。在PPP会话阶段CODE字段值为0x00,发现阶段中的各步骤中的各种数据分组格式参见前面的介绍。版本标识号码(SESSION_ID)字段长度为16比特,在一个给定的PPP会话过程中它的值是固定不变的,其中值0×ffffff为保留值。长度(LENGTH)字段为16比特,指示PPPoE净荷长度。发现阶段PPPoE载荷可以为空或由多个标记(TAG)组成,每个标记都是TLV(类型–长度–值)的结构;PPP会话阶段PPPoE载荷为标准的点对点协议包。