查看: 18143|回复: 15

PPPOE协议简介

[复制链接]
发表于 2006-9-18 13:59:35 | 显示全部楼层 |阅读模式
PPPOE特点
  PPPOE在标准PPP报文的前面加上以太网的报头,使得PPPOE提供通过简单桥接接入设备连接远端接入设备,并可以利用以太网的共享性连接多个用户主机,在这个模型下,每个用户主机利用自身的ppp堆栈,用户使用熟悉的界面。接入控制,计费等都可以针对每个用户来进行。
PPPOE的优点:
.�安裝与操作方式类似于以往的拨号网络模式,方便用戶使用。
.�用户处的XDSL调制解调器无须任何配置。
.�允许多个用户共享一个高速数据接入链路。
.�适应小型企业和远程办公的要求。
.�终端用户可同时接入多个ISP,这种动态服务选择的功能可以使 ISP容易创建和提供新的业务。
.�兼容现有所有的XDSLModem和DSLAM。
.�可与ISP有接入结构相融合。

PPPOE的帧格式
如图1 1.jpg

参数取值ETHER_TYPE: 0x8863 Discovery Stage
0x8864 PPP Session Stage
CODE:
0x00 PPP Session Stage
0x09 PPPOE Active Discovery Initiation (PADI) packet
0x07 PPPOE Active Discovery Offer (PADO) packet
0x19 PPPOE Active Discovery Request (PADR) packet
0x65 PPPOE Active Discovery Session-confirmation
(PADS) packet
0xa7 PPPOE Active Discovery Terminate (PADT) packet
TAG_TYPES:
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
PPPOE的实现过程 
  建立一个以太网上点对点协议会话包括两个阶段:
1. 发现(Discovery)阶段

  在Discovery过程中用户主机以广播方式寻找可以连接的所有接入设备,获得其以太网MAC地址。然后选择需要连接的用户主机并最后获得所要建立的PPP会话的SESSION_ID。在Discovery过程中节点间是客户端-服务器关系, 一个用户主机(客户端)最终要发现一个接入设备(服务器)。在网络拓朴中,一般有不止一个的接入设备可以通信,Discovery阶段允许用户主机发现所有的接入设备,并从中选择一个。当Discovery阶段结束时, 用户主机和接入设备之间都获得了可供以太网上建立PPP连接的全部信息。Discovery阶段保持无连接状态直到一个PPP会话的建立。一旦PPP连接建立,则用户主机和接入设备都必须为PPP虚拟端口分配资源。

2、PPP 会话阶段
  用户主机与在发现阶段确定的接入设备进行PPP协商。这个协商过程与标准的PPP协商并没有任何区别。在PPP会话阶段节点间是对等关系。

发现(Discovery)阶段详述
典型的发现(Discovery)阶段共包括4个步骤:
  1. 用户主机发出PPPOE有效发现初始(PADI)包。以太网目的地址为广播地址0xffffffff, CODE 字段为0x09, SESSION_ID为0x0000。PADI包必须至少包含一个服务名称类型(Service-Name)的标签(标签类型字段为0x0101), 向接入设备提出所要求提供的服务。一个完整的PADI(包括PPPOE头)不能超过1484字节,以留下充足的预留给agent设备增加Relay-Session-Id标识。
  2. 接入设备收到在服务范围内的PADI包后,发送PPPOE有效发现提供(PADO) 包以响应请求。其CODE字段为0x07 ,SESSION_ID仍为0x0000。PADO包必须包含一个接入设备名称类型(AC-Name)的标签(标签类型字段为0x0102)以及一个或多个服务名称类型标签,表明可向用户主机提供的服务种类。
  3.用户主机在可能收到的多个PADO包中选择一个合适的接入设备,选择的原则是根据PADO中接入设备名称类型标签和服务名称类型标签的内容。然后向所选择的接入设备发送PPPOE有效发现请求(PADR)包。其CODE 字段为0x19,SESSION_ID仍为0x0000。PADR包必须包一个服务名称类型标签,确定向接入设备请求的服务种类。当一个用户主机在确定时间没有收到PADO,他会重发一个PADI,同时等待两倍的时间。这种过程可以根据需要重复多次。
  4.接入设备收到PADR包后准备开始PPP会话,它发送一个PPPOE 有效发现会话确认( PADS)包。其CODE 字段为0x65 , SESSION_ID为接入设备所产生的一个唯一的PPPOE会话标识号码。0xffff作为预留资源,目前不能被使用作SESSION_ID。PADS包也必须包含一个服务名称类型的标签确认向用户主机提供的服务。当用户主机收到PADS包确认后,双方就进入PPP会话阶段。如果接入设备不能识别PADR中的服务名称类型的标签,则会回一个包含服务名称错误( Service-Name-Error ) 标签的PADS ,其SESSION_ID仍然是0x0000。如果用户主机在确定时间没收到PADS包,与没收到PADO作同样处理。
  还有一种PPPOE有效发现终止(PADT)包,在一个PPP会话建立后它随时可由用户主机或接入设备中任何一方发送,指示PPP会话已终止。PADT包不需要任何标签,其CODE字段为0xa7 , SESSION_ID 为需要终止的PPP会话的会话标识号码。
安全性
  为防止DOS(Denial of Service)攻击,接入设备应该可以使用AC-Cookie属性,接入设备应可以根据PADR中的源地址唯一再生成一个值,这样就而已保证PADI的源地址是真正可达,同时限制与这个地址同时连接数量。这个算法细节并没有在RFC2516中具体描述。虽然AC-Cookie在反DOS攻击方面很有效,但它并不能防止所有DOS攻击,在接入设备上也可以采用其他方法来对抗DOS。
常用PPPOE软件
  PPPOE软件的作用就是连接操作系统的PPP协议和Ethernet协议,并通过PPPOE协议连接
ISPEnterNet:由NTS.COM 开发(现在已经并入Efficient Networks这个有名的设备开发制造公司),自己具备独立的PPP协议,可以不依赖操作系统的拨号网络来提供PPP协议, 具有直接通过网卡和ISP连接的能力,目前是最通用和流行的PPPOE 软件,并且支持多种操作系统,目前已经提供有Windows,Linux,MacOS的版本,并且根据功能的多少又分为100、300、500等多个系列。该软件的300系列最流行,已经被多家特大型的ISP采用,例如法国电信,中国电信,在其网站提供有30天试用版。

WinPoET:由iVasion.com 开发(现在已经改为WindRiver 公司), 它是PPPOE 协议起草者之一,它在PPPOE软件中也占有极大的份额,许多特大型ISP也采用它。它通过操作系统的拨号网络来提供PPP协议,所以在使用上和我们使用普通56K拨号上网非常相似,它只是在后台悄悄地进行着PPPOE服务。它的网站目前停止了该软件的下载评估,软件只批量卖给ISP

RASPPPOE:个人开发的PPPOE驱动软件,小巧精干,没有自己的界面面板完全只是一个驱动程序,也是依靠操作系统拨号网络来提供PPP协议,由于它是以网络协议组件的形式来工作,所以在使用上,完全和使用老式的Modem一样简单。
回复

使用道具 举报

 楼主| 发表于 2006-9-18 14:03:26 | 显示全部楼层

PPPOE流程

协议基本框架

  PPPOE协议参照RFC2516。PPPOE实现PPP帧在Ethernet上的适配,并提供Ethernet上的PPP连接。

图1和图2分别是以太网上的PPPOE协议栈和AAL5上的PPPOE协议栈。

如图 2.gif

PPPOE连接示意图

图3显示了典型的PPPOE的连接方式

如图3 3.gif

PPPOE通信流程

  PPPOE有两个不同的阶段:发现阶段和PPP会话阶段。当一个主机想开始一个PPPOE会话,它必须首先进行发现阶段以识别对端的以太网MAC地址,并建立一个PPPOESESSION_ID。在发现阶段,基于网络的拓扑,主机可以发现多个接入集中器。发现阶段允许主机发现所有的接入集中器,然后选择一个。当发现阶段成功完成,主机和选择的接入集中器都有了他们在以太网上建立PPP连接的信息。直到PPP会话建立,发现阶段一直保持无状态的状态。一旦PPP会话建立,主机和接入集中器都必须为PPP虚接口分配资源。

图4显示了PPPOE通信流程。

如图4 4.gif


发现阶段

  发现阶段有四个步骤,当此阶段完成,通信的两端都知道PPPOESESSION_ID和对端的以太网地址,他们一起唯一定义PPPOE会话。这些步骤包括:主机广播一个发起分组(PADI),一个或多个接入集中器发送给予分组(PADO),主机发送单播会话请求分组(PADR),选择的接入集中器发送一个确认分组(PADS)。当主机接收到确认分组,它可以开始进行PPP会话阶段。当接入集中器发送出确认分组,它可以开始进行PPP会话阶段。
  当主机在指定的时间内没有接收到PADO,它应该重新发送它的PADI分组,并且加倍等待时间,这个过程会被重复期望的次数。如果主机正在等待接收PADS,应该使用具有主机重新发送PADR的相似超时机制。在重试指定的次数后,主机应该重新发送PADI分组。
  PPPOE还有一个PADT分组,它可以在会话建立后的任何时候发送,来终止PPPOE会话。它可以由主机或者接入集中器发送。当接收到一个PADT,不再允许使用这个会话来发送PPP业务。在发送或接收PADT后,即使正常的PPP终止分组也不必发送。PPP对端应该使用PPP协议自身来终止PPPOE会话,但是当PPP不能使用时,可以使用PADT。

PPP会话阶段
  一旦PPPOE会话开始,PPP数据就可以以任何其它的PPP封装形式发送。所有的以太网帧都是单播的。PPPOE会话的SESSION_ID一定不能改变,并且必须是发现阶段分配的值。

PPPOE的LCP配置选项
PPPoverEthernet(RFC2516)建议进行魔数选项协商,不建议进行协议域压缩选项(PFC)协商。实现中必须不请求进行任何下面的选项协商,并且必须拒绝这样选项协商的请求:FieldCheckSequence(FCS)Alternatives,Address-and-Control-Field-Compression(ACFC),Asynchronous-Control-Character-Map(ACCM)
MRU必须不能大于1492。

  建议接入集中器偶尔向主机发送Echo_Request报文,来决定会话的状态。否则,如果主机没有发送Terminate_Request报文就终止了会话,接入集中器将会不能决定会话已经终止了。
  当LCP终止,主机和接入集中器必须停止使用这个PPPOE会话。如果主机希望开始另一个PPP会话,它必须返回到PPPOE的发现阶段。
回复

使用道具 举报

发表于 2006-10-29 20:11:05 | 显示全部楼层
怎样捕获adsl账号?
回复

使用道具 举报

发表于 2006-10-30 18:14:28 | 显示全部楼层

有没有玩BRAS的朋友,交流交流心得哦

说到PPPoE,BRAS是很难避开的话题,这里有没有维护过BRAS的朋友。
回复

使用道具 举报

发表于 2006-11-17 15:11:01 | 显示全部楼层

看看Ethereal的Graph Analysis

看看Ethereal对PPPoE的Graph Analysis:
pppoe.GIF
回复

使用道具 举报

发表于 2007-4-16 03:04:55 | 显示全部楼层
很好的东西。。看了以后很有感觉
回复

使用道具 举报

发表于 2010-11-13 13:34:41 | 显示全部楼层
很好的东西,真需要,对学习理解链路很有帮助!顶一个!
回复

使用道具 举报

发表于 2011-1-2 17:28:00 | 显示全部楼层
吧爸爸爸爸爸爸爸爸爸爸爸爸爸爸爸爸爸爸爸爸爸爸
回复

使用道具 举报

发表于 2011-3-22 10:11:01 | 显示全部楼层
Adversity leads to prosperity.
回复

使用道具 举报

发表于 2011-8-29 10:54:15 | 显示全部楼层
这就是rfc的内容,加上了lz的图,看看还是不错的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | CSNA会员注册

本版积分规则

快速回复 返回顶部 返回列表