PPPOE

百科名片

目录
展开

编辑本段PPPOE协议简介

  与传统的接入方式相比, pppoe具有较高的性能价格比,它在包括小区组网建设等一系列应用中被广泛采用,目前流行的宽带接入方式ADSL 就使用了pppoe协议。
   modem接入技术面临一些相互矛盾的目标,既要通过同一个用户前置接入设备连接远程的多个用户主机,又要提供类似拨号一样的接入控制,计费等功能,而且要尽可能地减少用户的配置操作。
   PPPoE:以太网上的 PPP
  ( PPPoE:point to point protocol over Ethernet)
   PPPoE 的以太网有效载荷显示如下:
   4
   8
   16
   32 bit
   Ver
   Type
   Code
   Session-ID
   Length
   Payload
   VER ― PPPOE 版本。必须设置为 0x1。
   TYPE ― 必须设置为 0x1。
   CODE ― Discovery 和 PPP Session 阶段有定义。
   LENGTH ― 表示 PPPoE 有效载荷长。不包括以太网或 PPPoE 头的长度。
  随着低成本的宽带技术变得日益流行, DSL(Digital Subscriber Line)数字用户线技术更是使得许多计算机在互联网上能够酣畅淋漓的冲浪了。但是这也增加了DSL服务提供商们对于网络安全的担心。
  通过 DSL方式上网的计算机大都是通过以太网卡(Ethernet)与互联网相连的。同样使用的还是普通的TCP/IP方式,并没有附加新的协议。另外一方面,调制解调器的拨号上网,使用的是PPP协议,即Point to Point Protocol,点到点协议,该协议具有用户认证及通知IP地址的功能。PPP over Ethernet(PPPoE)协议,是在以太网络中转播PPP帧信息的技术,尤其适用于DSL等方式。
编辑本段PPPoE 协议工作原理
   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)
(2)接入集中器
  ( 2)接入集中器收到在服务范围内的PADI分组,发送PPPoE有效发现提供包(PADO)分组,以响应请求。其中CODE字段值为0×07,SESSION-ID字段值仍为0×0000。PADO分组必须包含一个接入集中器名称类型的标签(标签类型字段值为0×0102),以及一个或多个服务名称类型标签,表明可向主机提供的服务种类。
(3)主机选择一个合适的PADO分组
  ( 3)主机在可能收到的多个PADO分组中选择一个合适的PADO分组,然后向所选择的接入集中器发送PPPoE有效发现请求分组(PADR)。其中CODE字段为0×19,SESSION_ID字段值仍为0×0000。PADR分组必须包含一个服务名称类型标签,确定向接入集线器(或交换机)请求的服务种类。当主机在指定的时间内没有接收到PADO,它应该重新发送它的PADI分组,并且加倍等待时间,这个过程会被重复期望的次数。
(4)准备开始PPP会话
  ( 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。
  以上各个阶段的会话流程可用图 4-5描述。[1]
编辑本段PPPoE 的验证过程
  当客户端在指定的时间内没有接收到 PADO,它应该重新发送它的PADI分组,并且加倍等待时间,这个过程会被重复期望的次数。如果客户端正等待接收PADS,应该使用具有客户端重新发送PADR的相似超时机制。在重试指定的次数后,主机应该重新发送PADI分组。PPPOE还有一个PADT分组,它可以在会话建立后的任何时候发送,来终止PPPOE会话。它可以由客户端或者PPPOE服务器发送。当接收到一个PADT,不再允许使用这个会话来发送PPP业务在发送或接收PADT后,即正常的PPP不能使用时,可以使用PADT,一旦PPPOE会话开始,PPP数据就可以以任何其它的PPP封装形式发送。所有的以太网帧都是单播的,身份验证是发生在会话阶段的,PPPoE会话的SESSION_ID一定不能改变,并且必须是发现阶段分配的值。
编辑本段PPPoE 的相关技术概要
1. 通信过程概述
  建立 PPPOE通道(ADSL拨号)分两个阶段:发现阶段和PPP会话阶段。
  在发现阶段,以太网上的客户机要找到一个访问集中器 (AC,Access Concentrator), 也就是局端的AC, 不是客户端的那个猫, 发现阶段完成后,客户机和AC都得到要在以太网上建立PPP通道的相关信息。
  发现阶段是无状态的,也就是两边都不用保存以前的状态信息;只有 PPP会话开始后,双方就要建立一个虚拟的PPP通信接口,具体在Linux下会有ppp0网卡,在windows下网络连接中增加ADSL的接口。
2. 协议头格式
   2.1 协议值
   PPPOE数据是直接在以太头数据之上的,其等级和ARP、IP等是相同的,在以太头的类型字段中,用0x8863 表示是PPPOE发现阶段数据,用0x8864表示PPP会话阶段数据,如下所示。(类比:0x0800表示IP数据,0x0806表示ARP数据)
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | DESTINATION_ADDR |
   | (6octets) |
   | |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | SOURCE_ADDR |
   | (6octets) |
   | |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | ETHER_TYPE (2octets) |
   | 0x8863 or0x8864 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | |
   | PPPOE Header |
   | (6octets) |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   ~ ~
   ~ payload ~
   ~ ~
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | CHECKSUM |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   2.2 PPPOE协议头
   1 2 3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 78 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | VER |TYPE | CODE | SESSION_ID |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | LENGTH | payload ~
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   PPPOE协议头有6个字节,正好和14字节的以太头实现了4字节对齐,包括以下字段:
   VER:版本号,4位,必须为0x01TYPE:类型,4位,必须是0x01CODE:8位,在发现阶段和PPP会话阶段有不同的定义,表示PPPOE数据类型SESSION_ID:16位,用来定义一个PPP会话,在发现过程中定义。LENGTH:16位,表示负载长度,不包括以太头和PPPOE头。
3. 发现阶段
   PPPOE发现阶段数据的以太类型是0x8863。
   3.1 TAG
  在发现阶段用于交换客户机和 AC的信息,建立PPPOE通道,负载信息都是PPPOE信息,并没有上层协议数据。
  发现阶段的负载称为 TAG,一个TAG信息格式如下,负载信息中可能会包含多个TAG:
   1 2 3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 78 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | TAG_TYPE | TAG_LENGTH |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | TAG_VALUE ... ~
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   TAG_TYPE:16位,TAG类型TAG_LENGTH:16位,表示TAG_VALUE部分的长度TAG_VALUE:TAG值
   TAG_TYPE可取以下值(注意第一字节为2表示是错误信息):
   0x0000 End-Of-List
   0x0101 Service-Name
   0x0102 AC-Name
   0x0103 Host-Uniq
   0x0104 AC-Cookie
   0x0105 Vendor-Specific
   0x0110 Relay-Session-Id
   0x0201 Service-Name-Error
   0x0202 AC-System-Error
   0x0203 Generic-Error
3.2 PPPOE 主动发现初始包
   PPPOE主动发现初始包(PPPoE Active Discovery Initiation, PADI)由客户机发出,以太头中的目的地址是以太广播地址FF:FF:FF:FF:FF:FF,PPPOE头中的CODE为0x09,SESSION_ID值必须为0,负载部分必须只包含一个Service-Name类型的TAG表示请求的服务类型,另外可以包含其他TAG,整个PPPOE包不能超过1484字节,这样省出的16字节可以由ADSL中继设备添加中继TAG。
  一个 PADI包的例子为:
   1 2 3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 45 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | 0xffffffff |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | 0xffff | Host_mac_addr |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Host_mac_addr (cont) |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | ETHER_TYPE = 0x8863 | v = 1 | t = 1 | CODE =0x09 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | SESSION_ID =0x0000 | LENGTH =0x0004 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | TAG_TYPE = 0x0101 | TAG_LENGTH = 0x0000 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3.3 PPPOE 主动发现提议包
   PPPOE主动发现提议包(PPPoE Active Discovery Offer, PADO)由AC发出,用来回应客户机的PADI包,以太头中的目的地址是客户机的MAC地址,PPPOE头中的CODE为0x07,SESSION_ID值必须为0,负载部分必须包含一个AC-Name类型的TAG,用来指示本AC的名称,一个在PADI包中指定的Service-Name的TAG,另外可以包含其他Service-Name的TAG。如果AC不对该客户机提供服务,AC就不回应PADO包。 一个PADO包的例子为:
   1 2 3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 45 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Host_mac_addr |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Host_mac_addr (cont) | Access_Concentrator_mac_addr |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Access_Concentrator_mac_addr (cont) |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | ETHER_TYPE = 0x8863 | v = 1 | t = 1 | CODE =0x07 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | SESSION_ID =0x0000 | LENGTH =0x0020 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | TAG_TYPE = 0x0101 | TAG_LENGTH = 0x0000 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | TAG_TYPE = 0x0102 | TAG_LENGTH = 0x0018 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | 0x47 | 0x6f | 0x20 | 0x52 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | 0x65 | 0x64 | 0x42 | 0x61 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | 0x63 | 0x6b | 0x20 | 0x2d |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | 0x20 | 0x65 | 0x73 | 0x68 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | 0x73 | 0x68 | 0x65 | 0x73 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | 0x68 | 0x6f | 0x6f | 0x74 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3.4 PPPOE 主动发现请求包
   PPPOE主动发现请求包(PPPoE Active Discovery Request, PADR)由客户机发出,因为可能会有多个AC对客户机发出的PADI包回应了PADO包,客户机从回应的PADO包中选择一个AC发送PADR包,以太头中的目的地址是该AC的MAC地址,PPPOE头中的CODE为0x19,SESSION_ID值必须为0,负载部分必须只包含一个Service-Name类型的TAG表示请求的服务类型,另外可以包含其他TAG。
3.5 PPPOE 主动发现会话确认包
   PPPOE主动发现会话确认包(PPPoE Active Discovery Session-confirmation, PADS)由AC发出,收到客户机的PADR包后,AC将产生一个SEESSION_ID值用来标志本次PPP会话,以PADR包方式发送给客户机。以太头中的目的地址是客户机的MAC地址,PPPOE头中的CODE为0x65,SESSION_ID值必须为所生成的那个SESSION_ID,负载部分必须只包含一个Service-Name类型的TAG,表示该服务类型被AC接受,另外可以包含其他TAG。如果AC不接受PADR中的Server-Name,PADS中则包含一个Service-Name-Error类型的TAG,这时SESSION_ID设置为0。
3.6 PPPOE 主动发现停止包
   PPPOE主动发现停止包(PPPoE Active Discovery Terminate, PADT)表示PPPOE会话过程的结束,AC和客户机都可以主动发出。以太头中的目的地址是对方的MAC地址,PPPOE头中的CODE为0xa7,SESSION_ID值必须为PPPOE会话过程的SESSION_ID,不需要TAG。
4. PPP 会话阶段
  在 PPP会话阶段,PPP包被封装在PPPOE以太帧中,以太包目的地址都是单一的,以太协议为0x8864,PPPOE头的CODE必须为0,SESSION_ID必须一直为发现阶段协商出的SEESION_ID值,PPPOE的负载是整个PPP包,PPP包前是两字节的PPP协议ID值。
  一个 PPPOE会话过程包的例子为:
   1 2 3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 45 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Access_Concentrator_mac_addr |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |Access_Concentrator_mac_addr(c)| Host_mac_addr |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Host_mac_addr (cont) |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | ETHER_TYPE = 0x8864 | v = 1 | t = 1 | CODE =0x00 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | SESSION_ID =0x1234 | LENGTH =0x???? |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | PPP PROTOCOL = 0xc021 | PPP payload ~
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  注意:由于 PPPOE头是6字节,PPP协议ID号两个字节,一共要占用8个字节,而以太网的MTU值为1500,所以上层PPP负载数据不能超过1492字节,所以PPP协商时协商的最大接收单元值不能超过1492字节,也就是相当于在PPPOE环境下的MTU是1492字节。
5. ADSL 拨号过程简述
  客户机启动拨号程序,发送 PADI包,ADSL MODEM回应PADO包,客户机再发送PADR包,ADSL MODEM回应PADS包后建立PPPOE通道,随后客户机进行普通的PPP协议拨号过程,不过PPP数据包都是包装进以太帧中的,拨号成功后客户机和服务器之间建立了PPP通道,ADSL MODEM起到将以太帧转换为PPP包的作用。ADSL虽然是用电话线,但所用频率不是通话用的频率,所以ADSL拨号不影响打电话。通信结束后,会发送PADT断开PPPOE通道。
编辑本段PPPoE 相关知识问答集
  我们用以下一问一答的方式提供 PPPoE的有关知识,希望能够对读者有一定的帮助。这些知识大都来源Vicomsoft公司对TCP/IP路由技术的一些解释及我们对互联网连接的理解。
   Vicomsoft公司开发和提供了Network Address Translation(网络地址翻译)和TCP/IP路由技术,其中包括了PPP和PPPoE的全部特性。我们的软件允许用户以一种或多种方式将整个LAN(局域网)与互联网相连,也称软路由。Vicomsoft在TCP/IP协议(包括PPP,PPPoE)的领域内取得很多宝贵经验,并且愿意将它的信息与有志于此的人分享。
1. 什么是PPP?
   TCP/IP信息包本身并不能够通过串行链路来传输,这使得它不适合于WAN广域网(Wide Area Networks)。截止到撰写此稿之时,还没有一个切实可行的方法来扩展以太网,虽然在不久的将来,随着光纤10G以太网的出现,这种情况将会得到改观。而这些年来,电信公司在全世界建设了无数的串行通信链接网,因此他们迫切需要一种协议,使得TCP/IP信息包可以在串行线路上传送。因此出现两个有用的协议。
   ·SLIP (Serial Line Internet Protocol) 串行线路互联网协议
   ·PPP
  其中 PPP是Point to Point Protocol(点到点协议)的字母缩写。它是TCP/IP网络协议集的成员之一。也可以认为PPP是对TCP/IP的一个扩展,它增加了两组有用的功能。
   ·它可以通过串行链路来传送TCP/IP信息包。
   ·用户登录认证
   PPP性能更加丰富,而且很大程度上取代了SLIP的地位。因为在公用电话系统中也采用了部分串行链路,所以必须确保通信的可靠性。为此,PPP将用户名与密码安全结合在一起,比如当接驳要求发起时,此要求通过PPP协议转发到路由器和服务器,这时候就可以进行安全验证了。因为PPP具有在串行链路上传递TCP/IP 信息包的能力,并且还可以进行安全验证,所以互联网服务提供商ISP(Internet Service Providers)一般都是利用PPP协议,允许拨号用户与互联网相连。
2. 什么是PPPoE?
   PPP是为串行通信设计的,现在它与以太网(Ethernet)相结合,成为在以太网络中转播PPP帧信息的技术。也称PPP over Ethernet,即PPPoE协议。PPP协议与以太网并不是兼容的东西,因此用户经常感到十分的迷惑,为什么要将以太网与PPP结合在一起呢?
  如果我们将 TCP/IP通信与公路交通相比的话,那么基本的TCP/IP协议就是这个城市的街道网。街道上有许多的路口(或者停车点),人们在马路上可以很容易地上车或者下车。但是人们不知道每条街上有多少辆车在跑,而且每新增加一个路口将带来新的管理任务,因为你将更不清楚有多少人,有多少车在街道上跑了。PPP就好比铁路,人们只能在固定的站点上上车或者下车,因此对乘客的管理和控制也相对容易(比如上车必须买票。)因此不妨再打个比喻,PPPoE就象是在街道上跑的火车,事实上这不是不可能的,比如电车轨道,地铁。它带来的好处是显而易见的,首先它不影响城市里其它的交通,其次还给你带来铁路的优点,比如流量的控制。
  有些 ISP并不是通过串行链路与用户相连的,这种情况下PPPoE也可以带来部分好处;使用串行链路的ISP早已经在调制解调器通信上使用PPP了,另一方面,DSL提供商通过以太网,而不是串行链路通信,因此PPPoE可以满足许多人的需要。并且,许多人对于PPPoE的付加能力感到特别满意。因为PPPoE允许ISP们对用户的登录安全进行控制和测量用户流量。
3. 谁将使用PPPoE?
  然而目前为止,只有 DSL提供商是在使用PPPoE协议,cable modem有线电视网络服务提供商将在近两年内也采用PPPoE。
   4. 谁将需要PPPoE软件?
  
  需要使用 PPPoE的DSL提供商通常会给他们的用户提供多种PPPoE软件。如果你只是通过DSL将一台电脑与互联网相连,那么这就足够了。然而如果是企业用户,需要将整个局域网通过DSL与互联网相连,DSL提供商所提供的软件就不够用了。在局域网(LAN)与DSL的连接使用中,路由器和互联网共享软件的使用将存在一些兼容的问题。你需要与DSL服务提供商共同讨论解决这个问题。
   5. Vicomsoft公司的建议
  如果你是通过 DSL和PPPoE将一台电脑与互联网相连,那么DSL提供商为你提供的软件是已经足够的,但是仍然有可以替换的产品。Vicomsoft公司推出的SurfDoubler软件为PPPoE提供全方位的支持,随着带宽的增加,对各种类型的互联网连接都可提供升级版。
  如果你是使用 DSL和PPPoE将一个局域网与互联网相连,最经济的方法就是使用由你的DSL ISP为你分配的唯一的公用IP地址。通过互联网共享软件和硬件,局域网内的用户都可以享受到宽带上网的乐趣了。但是要考虑的是互联网共享软件和硬件是否与你的PPPoE软件兼容呢?我们的建议是你登录到互联网共享软件和硬件的网站,在搜索引擎内键入"PPPoE",你将很快地找出他们是否支持"PPPoE"。
   PPPoE是一个标准,你可以假定所有的解决方案都是"平等"的。然而事实上,还是有些小小的差别,该标准要求PPPoE软件在每一个TCP/IP信息包前加上一个附加的头信息。这样信息包的尺寸就比允许的尺寸要大,某些软件提出这样的解决方案,在局域网的客户机上重新设置TCP/IP协议。
编辑本段PPPoE 常见故障及分析
   [3](1)645故障描述:拨号适配器未装
  这种情况主要针对 Windows ME和Windows98而言,解决办法是在Windows98下添加拨号适配器组件即可。对Windows ME而言,因为它没有直接添加拨号适配器的选项,所以必须在控制面板中先删除拨号网络组件,再添加拨号网络组件完成适配器的添加。
   (2)691/629故障描述:不能通过验证
  可能的原因是用户的账户或者密码输入错误,或用户的账户余额不足,用户在使用时未正常退出而造成用户账号驻留,可等待几分钟或重新启动后再拨号。
   (3)630故障描述:无法拨号,没有合适的网卡和驱动
  可能的原因是网卡未安装好、网卡驱动不正常或网卡损坏。检查网卡是否工作正常或更新网卡驱动。
   (4)633故障描述:调制解调器(或其它连接设备)已在使用,或没有正确配置。
  如果这是宽带连接,则无法打开网络连接尝试使用的宽带设备。确保要求硬件(电缆调制解调器)运行正常。有关所需硬件的详细信息需要您的宽带服务提供商来解答。
   (5)720故障描述:不支持PPPoE连接
  它是 Windows 2000特有的故障,建议重新启动后再进行连接,如仍不能排除故障,建议重装系统。
   (6)697故障描述:网卡禁用
  只要在设备管理中重新启用网卡即可。
   (7)769故障描述:拨号时报769错误
  在 Windows XP系统中网卡被禁用、系统检测不到网卡或者拨号软件故障,有时会报769错误。重新启用网卡、检查网卡工作是否正常或重装拨号软件即可解决。
   (8)678(651)故障描述:无法建立连接
  远程计算机没有响应, windows xp 错误代码为67,windows 7错误代码为651,造成此故障的原因是基础线路问题,或者您的互联网服务提供商设备问题。
PPPOE

百科名片

目录
展开

编辑本段PPPOE协议简介

  与传统的接入方式相比, pppoe具有较高的性能价格比,它在包括小区组网建设等一系列应用中被广泛采用,目前流行的宽带接入方式ADSL 就使用了pppoe协议。
   modem接入技术面临一些相互矛盾的目标,既要通过同一个用户前置接入设备连接远程的多个用户主机,又要提供类似拨号一样的接入控制,计费等功能,而且要尽可能地减少用户的配置操作。
   PPPoE:以太网上的 PPP
  ( PPPoE:point to point protocol over Ethernet)
   PPPoE 的以太网有效载荷显示如下:
   4
   8
   16
   32 bit
   Ver
   Type
   Code
   Session-ID
   Length
   Payload
   VER ― PPPOE 版本。必须设置为 0x1。
   TYPE ― 必须设置为 0x1。
   CODE ― Discovery 和 PPP Session 阶段有定义。
   LENGTH ― 表示 PPPoE 有效载荷长。不包括以太网或 PPPoE 头的长度。
  随着低成本的宽带技术变得日益流行, DSL(Digital Subscriber Line)数字用户线技术更是使得许多计算机在互联网上能够酣畅淋漓的冲浪了。但是这也增加了DSL服务提供商们对于网络安全的担心。
  通过 DSL方式上网的计算机大都是通过以太网卡(Ethernet)与互联网相连的。同样使用的还是普通的TCP/IP方式,并没有附加新的协议。另外一方面,调制解调器的拨号上网,使用的是PPP协议,即Point to Point Protocol,点到点协议,该协议具有用户认证及通知IP地址的功能。PPP over Ethernet(PPPoE)协议,是在以太网络中转播PPP帧信息的技术,尤其适用于DSL等方式。
编辑本段PPPoE 协议工作原理
   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)
(2)接入集中器
  ( 2)接入集中器收到在服务范围内的PADI分组,发送PPPoE有效发现提供包(PADO)分组,以响应请求。其中CODE字段值为0×07,SESSION-ID字段值仍为0×0000。PADO分组必须包含一个接入集中器名称类型的标签(标签类型字段值为0×0102),以及一个或多个服务名称类型标签,表明可向主机提供的服务种类。
(3)主机选择一个合适的PADO分组
  ( 3)主机在可能收到的多个PADO分组中选择一个合适的PADO分组,然后向所选择的接入集中器发送PPPoE有效发现请求分组(PADR)。其中CODE字段为0×19,SESSION_ID字段值仍为0×0000。PADR分组必须包含一个服务名称类型标签,确定向接入集线器(或交换机)请求的服务种类。当主机在指定的时间内没有接收到PADO,它应该重新发送它的PADI分组,并且加倍等待时间,这个过程会被重复期望的次数。
(4)准备开始PPP会话
  ( 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。
  以上各个阶段的会话流程可用图 4-5描述。[1]
编辑本段PPPoE 的验证过程
  当客户端在指定的时间内没有接收到 PADO,它应该重新发送它的PADI分组,并且加倍等待时间,这个过程会被重复期望的次数。如果客户端正等待接收PADS,应该使用具有客户端重新发送PADR的相似超时机制。在重试指定的次数后,主机应该重新发送PADI分组。PPPOE还有一个PADT分组,它可以在会话建立后的任何时候发送,来终止PPPOE会话。它可以由客户端或者PPPOE服务器发送。当接收到一个PADT,不再允许使用这个会话来发送PPP业务在发送或接收PADT后,即正常的PPP不能使用时,可以使用PADT,一旦PPPOE会话开始,PPP数据就可以以任何其它的PPP封装形式发送。所有的以太网帧都是单播的,身份验证是发生在会话阶段的,PPPoE会话的SESSION_ID一定不能改变,并且必须是发现阶段分配的值。
编辑本段PPPoE 的相关技术概要
1. 通信过程概述
  建立 PPPOE通道(ADSL拨号)分两个阶段:发现阶段和PPP会话阶段。
  在发现阶段,以太网上的客户机要找到一个访问集中器 (AC,Access Concentrator), 也就是局端的AC, 不是客户端的那个猫, 发现阶段完成后,客户机和AC都得到要在以太网上建立PPP通道的相关信息。
  发现阶段是无状态的,也就是两边都不用保存以前的状态信息;只有 PPP会话开始后,双方就要建立一个虚拟的PPP通信接口,具体在Linux下会有ppp0网卡,在windows下网络连接中增加ADSL的接口。
2. 协议头格式
   2.1 协议值
   PPPOE数据是直接在以太头数据之上的,其等级和ARP、IP等是相同的,在以太头的类型字段中,用0x8863 表示是PPPOE发现阶段数据,用0x8864表示PPP会话阶段数据,如下所示。(类比:0x0800表示IP数据,0x0806表示ARP数据)
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | DESTINATION_ADDR |
   | (6octets) |
   | |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | SOURCE_ADDR |
   | (6octets) |
   | |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | ETHER_TYPE (2octets) |
   | 0x8863 or0x8864 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | |
   | PPPOE Header |
   | (6octets) |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   ~ ~
   ~ payload ~
   ~ ~
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | CHECKSUM |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   2.2 PPPOE协议头
   1 2 3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 78 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | VER |TYPE | CODE | SESSION_ID |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | LENGTH | payload ~
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   PPPOE协议头有6个字节,正好和14字节的以太头实现了4字节对齐,包括以下字段:
   VER:版本号,4位,必须为0x01TYPE:类型,4位,必须是0x01CODE:8位,在发现阶段和PPP会话阶段有不同的定义,表示PPPOE数据类型SESSION_ID:16位,用来定义一个PPP会话,在发现过程中定义。LENGTH:16位,表示负载长度,不包括以太头和PPPOE头。
3. 发现阶段
   PPPOE发现阶段数据的以太类型是0x8863。
   3.1 TAG
  在发现阶段用于交换客户机和 AC的信息,建立PPPOE通道,负载信息都是PPPOE信息,并没有上层协议数据。
  发现阶段的负载称为 TAG,一个TAG信息格式如下,负载信息中可能会包含多个TAG:
   1 2 3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 78 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | TAG_TYPE | TAG_LENGTH |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | TAG_VALUE ... ~
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   TAG_TYPE:16位,TAG类型TAG_LENGTH:16位,表示TAG_VALUE部分的长度TAG_VALUE:TAG值
   TAG_TYPE可取以下值(注意第一字节为2表示是错误信息):
   0x0000 End-Of-List
   0x0101 Service-Name
   0x0102 AC-Name
   0x0103 Host-Uniq
   0x0104 AC-Cookie
   0x0105 Vendor-Specific
   0x0110 Relay-Session-Id
   0x0201 Service-Name-Error
   0x0202 AC-System-Error
   0x0203 Generic-Error
3.2 PPPOE 主动发现初始包
   PPPOE主动发现初始包(PPPoE Active Discovery Initiation, PADI)由客户机发出,以太头中的目的地址是以太广播地址FF:FF:FF:FF:FF:FF,PPPOE头中的CODE为0x09,SESSION_ID值必须为0,负载部分必须只包含一个Service-Name类型的TAG表示请求的服务类型,另外可以包含其他TAG,整个PPPOE包不能超过1484字节,这样省出的16字节可以由ADSL中继设备添加中继TAG。
  一个 PADI包的例子为:
   1 2 3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 45 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | 0xffffffff |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | 0xffff | Host_mac_addr |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Host_mac_addr (cont) |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | ETHER_TYPE = 0x8863 | v = 1 | t = 1 | CODE =0x09 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | SESSION_ID =0x0000 | LENGTH =0x0004 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | TAG_TYPE = 0x0101 | TAG_LENGTH = 0x0000 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3.3 PPPOE 主动发现提议包
   PPPOE主动发现提议包(PPPoE Active Discovery Offer, PADO)由AC发出,用来回应客户机的PADI包,以太头中的目的地址是客户机的MAC地址,PPPOE头中的CODE为0x07,SESSION_ID值必须为0,负载部分必须包含一个AC-Name类型的TAG,用来指示本AC的名称,一个在PADI包中指定的Service-Name的TAG,另外可以包含其他Service-Name的TAG。如果AC不对该客户机提供服务,AC就不回应PADO包。 一个PADO包的例子为:
   1 2 3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 45 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Host_mac_addr |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Host_mac_addr (cont) | Access_Concentrator_mac_addr |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Access_Concentrator_mac_addr (cont) |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | ETHER_TYPE = 0x8863 | v = 1 | t = 1 | CODE =0x07 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | SESSION_ID =0x0000 | LENGTH =0x0020 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | TAG_TYPE = 0x0101 | TAG_LENGTH = 0x0000 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | TAG_TYPE = 0x0102 | TAG_LENGTH = 0x0018 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | 0x47 | 0x6f | 0x20 | 0x52 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | 0x65 | 0x64 | 0x42 | 0x61 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | 0x63 | 0x6b | 0x20 | 0x2d |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | 0x20 | 0x65 | 0x73 | 0x68 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | 0x73 | 0x68 | 0x65 | 0x73 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | 0x68 | 0x6f | 0x6f | 0x74 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3.4 PPPOE 主动发现请求包
   PPPOE主动发现请求包(PPPoE Active Discovery Request, PADR)由客户机发出,因为可能会有多个AC对客户机发出的PADI包回应了PADO包,客户机从回应的PADO包中选择一个AC发送PADR包,以太头中的目的地址是该AC的MAC地址,PPPOE头中的CODE为0x19,SESSION_ID值必须为0,负载部分必须只包含一个Service-Name类型的TAG表示请求的服务类型,另外可以包含其他TAG。
3.5 PPPOE 主动发现会话确认包
   PPPOE主动发现会话确认包(PPPoE Active Discovery Session-confirmation, PADS)由AC发出,收到客户机的PADR包后,AC将产生一个SEESSION_ID值用来标志本次PPP会话,以PADR包方式发送给客户机。以太头中的目的地址是客户机的MAC地址,PPPOE头中的CODE为0x65,SESSION_ID值必须为所生成的那个SESSION_ID,负载部分必须只包含一个Service-Name类型的TAG,表示该服务类型被AC接受,另外可以包含其他TAG。如果AC不接受PADR中的Server-Name,PADS中则包含一个Service-Name-Error类型的TAG,这时SESSION_ID设置为0。
3.6 PPPOE 主动发现停止包
   PPPOE主动发现停止包(PPPoE Active Discovery Terminate, PADT)表示PPPOE会话过程的结束,AC和客户机都可以主动发出。以太头中的目的地址是对方的MAC地址,PPPOE头中的CODE为0xa7,SESSION_ID值必须为PPPOE会话过程的SESSION_ID,不需要TAG。
4. PPP 会话阶段
  在 PPP会话阶段,PPP包被封装在PPPOE以太帧中,以太包目的地址都是单一的,以太协议为0x8864,PPPOE头的CODE必须为0,SESSION_ID必须一直为发现阶段协商出的SEESION_ID值,PPPOE的负载是整个PPP包,PPP包前是两字节的PPP协议ID值。
  一个 PPPOE会话过程包的例子为:
   1 2 3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 45 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Access_Concentrator_mac_addr |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |Access_Concentrator_mac_addr(c)| Host_mac_addr |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Host_mac_addr (cont) |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | ETHER_TYPE = 0x8864 | v = 1 | t = 1 | CODE =0x00 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | SESSION_ID =0x1234 | LENGTH =0x???? |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | PPP PROTOCOL = 0xc021 | PPP payload ~
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  注意:由于 PPPOE头是6字节,PPP协议ID号两个字节,一共要占用8个字节,而以太网的MTU值为1500,所以上层PPP负载数据不能超过1492字节,所以PPP协商时协商的最大接收单元值不能超过1492字节,也就是相当于在PPPOE环境下的MTU是1492字节。
5. ADSL 拨号过程简述
  客户机启动拨号程序,发送 PADI包,ADSL MODEM回应PADO包,客户机再发送PADR包,ADSL MODEM回应PADS包后建立PPPOE通道,随后客户机进行普通的PPP协议拨号过程,不过PPP数据包都是包装进以太帧中的,拨号成功后客户机和服务器之间建立了PPP通道,ADSL MODEM起到将以太帧转换为PPP包的作用。ADSL虽然是用电话线,但所用频率不是通话用的频率,所以ADSL拨号不影响打电话。通信结束后,会发送PADT断开PPPOE通道。
编辑本段PPPoE 相关知识问答集
  我们用以下一问一答的方式提供 PPPoE的有关知识,希望能够对读者有一定的帮助。这些知识大都来源Vicomsoft公司对TCP/IP路由技术的一些解释及我们对互联网连接的理解。
   Vicomsoft公司开发和提供了Network Address Translation(网络地址翻译)和TCP/IP路由技术,其中包括了PPP和PPPoE的全部特性。我们的软件允许用户以一种或多种方式将整个LAN(局域网)与互联网相连,也称软路由。Vicomsoft在TCP/IP协议(包括PPP,PPPoE)的领域内取得很多宝贵经验,并且愿意将它的信息与有志于此的人分享。
1. 什么是PPP?
   TCP/IP信息包本身并不能够通过串行链路来传输,这使得它不适合于WAN广域网(Wide Area Networks)。截止到撰写此稿之时,还没有一个切实可行的方法来扩展以太网,虽然在不久的将来,随着光纤10G以太网的出现,这种情况将会得到改观。而这些年来,电信公司在全世界建设了无数的串行通信链接网,因此他们迫切需要一种协议,使得TCP/IP信息包可以在串行线路上传送。因此出现两个有用的协议。
   ·SLIP (Serial Line Internet Protocol) 串行线路互联网协议
   ·PPP
  其中 PPP是Point to Point Protocol(点到点协议)的字母缩写。它是TCP/IP网络协议集的成员之一。也可以认为PPP是对TCP/IP的一个扩展,它增加了两组有用的功能。
   ·它可以通过串行链路来传送TCP/IP信息包。
   ·用户登录认证
   PPP性能更加丰富,而且很大程度上取代了SLIP的地位。因为在公用电话系统中也采用了部分串行链路,所以必须确保通信的可靠性。为此,PPP将用户名与密码安全结合在一起,比如当接驳要求发起时,此要求通过PPP协议转发到路由器和服务器,这时候就可以进行安全验证了。因为PPP具有在串行链路上传递TCP/IP 信息包的能力,并且还可以进行安全验证,所以互联网服务提供商ISP(Internet Service Providers)一般都是利用PPP协议,允许拨号用户与互联网相连。
2. 什么是PPPoE?
   PPP是为串行通信设计的,现在它与以太网(Ethernet)相结合,成为在以太网络中转播PPP帧信息的技术。也称PPP over Ethernet,即PPPoE协议。PPP协议与以太网并不是兼容的东西,因此用户经常感到十分的迷惑,为什么要将以太网与PPP结合在一起呢?
  如果我们将 TCP/IP通信与公路交通相比的话,那么基本的TCP/IP协议就是这个城市的街道网。街道上有许多的路口(或者停车点),人们在马路上可以很容易地上车或者下车。但是人们不知道每条街上有多少辆车在跑,而且每新增加一个路口将带来新的管理任务,因为你将更不清楚有多少人,有多少车在街道上跑了。PPP就好比铁路,人们只能在固定的站点上上车或者下车,因此对乘客的管理和控制也相对容易(比如上车必须买票。)因此不妨再打个比喻,PPPoE就象是在街道上跑的火车,事实上这不是不可能的,比如电车轨道,地铁。它带来的好处是显而易见的,首先它不影响城市里其它的交通,其次还给你带来铁路的优点,比如流量的控制。
  有些 ISP并不是通过串行链路与用户相连的,这种情况下PPPoE也可以带来部分好处;使用串行链路的ISP早已经在调制解调器通信上使用PPP了,另一方面,DSL提供商通过以太网,而不是串行链路通信,因此PPPoE可以满足许多人的需要。并且,许多人对于PPPoE的付加能力感到特别满意。因为PPPoE允许ISP们对用户的登录安全进行控制和测量用户流量。
3. 谁将使用PPPoE?
  然而目前为止,只有 DSL提供商是在使用PPPoE协议,cable modem有线电视网络服务提供商将在近两年内也采用PPPoE。
   4. 谁将需要PPPoE软件?
  
  需要使用 PPPoE的DSL提供商通常会给他们的用户提供多种PPPoE软件。如果你只是通过DSL将一台电脑与互联网相连,那么这就足够了。然而如果是企业用户,需要将整个局域网通过DSL与互联网相连,DSL提供商所提供的软件就不够用了。在局域网(LAN)与DSL的连接使用中,路由器和互联网共享软件的使用将存在一些兼容的问题。你需要与DSL服务提供商共同讨论解决这个问题。
   5. Vicomsoft公司的建议
  如果你是通过 DSL和PPPoE将一台电脑与互联网相连,那么DSL提供商为你提供的软件是已经足够的,但是仍然有可以替换的产品。Vicomsoft公司推出的SurfDoubler软件为PPPoE提供全方位的支持,随着带宽的增加,对各种类型的互联网连接都可提供升级版。
  如果你是使用 DSL和PPPoE将一个局域网与互联网相连,最经济的方法就是使用由你的DSL ISP为你分配的唯一的公用IP地址。通过互联网共享软件和硬件,局域网内的用户都可以享受到宽带上网的乐趣了。但是要考虑的是互联网共享软件和硬件是否与你的PPPoE软件兼容呢?我们的建议是你登录到互联网共享软件和硬件的网站,在搜索引擎内键入"PPPoE",你将很快地找出他们是否支持"PPPoE"。
   PPPoE是一个标准,你可以假定所有的解决方案都是"平等"的。然而事实上,还是有些小小的差别,该标准要求PPPoE软件在每一个TCP/IP信息包前加上一个附加的头信息。这样信息包的尺寸就比允许的尺寸要大,某些软件提出这样的解决方案,在局域网的客户机上重新设置TCP/IP协议。
编辑本段PPPoE 常见故障及分析
   [3](1)645故障描述:拨号适配器未装
  这种情况主要针对 Windows ME和Windows98而言,解决办法是在Windows98下添加拨号适配器组件即可。对Windows ME而言,因为它没有直接添加拨号适配器的选项,所以必须在控制面板中先删除拨号网络组件,再添加拨号网络组件完成适配器的添加。
   (2)691/629故障描述:不能通过验证
  可能的原因是用户的账户或者密码输入错误,或用户的账户余额不足,用户在使用时未正常退出而造成用户账号驻留,可等待几分钟或重新启动后再拨号。
   (3)630故障描述:无法拨号,没有合适的网卡和驱动
  可能的原因是网卡未安装好、网卡驱动不正常或网卡损坏。检查网卡是否工作正常或更新网卡驱动。
   (4)633故障描述:调制解调器(或其它连接设备)已在使用,或没有正确配置。
  如果这是宽带连接,则无法打开网络连接尝试使用的宽带设备。确保要求硬件(电缆调制解调器)运行正常。有关所需硬件的详细信息需要您的宽带服务提供商来解答。
   (5)720故障描述:不支持PPPoE连接
  它是 Windows 2000特有的故障,建议重新启动后再进行连接,如仍不能排除故障,建议重装系统。
   (6)697故障描述:网卡禁用
  只要在设备管理中重新启用网卡即可。
   (7)769故障描述:拨号时报769错误
  在 Windows XP系统中网卡被禁用、系统检测不到网卡或者拨号软件故障,有时会报769错误。重新启用网卡、检查网卡工作是否正常或重装拨号软件即可解决。
   (8)678(651)故障描述:无法建立连接
  远程计算机没有响应, windows xp 错误代码为678,windows 7错误代码为651,造成此故障的原因是基础线路问题,或者您的互联网服务提供商设备问题。
 
8