【协议学习】PPPoE学习文档
作者:gnuhpc
出处:http://www.cnblogs.com/gnuhpc/
ADSL 数据链路层协议介绍
1.引言
ADSL的虚拟拨号方式就是上网的操作和普通拨号一样,使用简单,用户熟悉,有账号验证、IP地址分配等过程。但ADSL连接的并不是具体的ISP接入号码如163或169,而是ADSL虚拟专网接入的服务器。根据网卡类型的不同又分为ATM和Ethernet局域网虚拟拨号方式,由于局域网虚拟拨号方式具有安装维护简单等特点,目前成为ADSL虚拟拨号的主流并有自己的一套网络协议来实现账号验证、IP分配等工作,这就是PPPoE协议。
概括的来讲,它的全称是Point to Point Protocol over Ethernet(基于局域网的点对点通讯协议),这个协议是为了满足越来越多的宽带上网设备( 即 ADSL , 无线等 )和越来越快的网络之间的通讯而最新制定开发的标准,它基于两个广泛接受的标准即:局域网Ethernet和PPP点对点拨号协议。对于最终用户来说不需要用户了解比较深的局域网技术只需要当作普通拨号上网就可以了,对于服务商来说在现有局域网基础上不需要花费巨资来做大面积改造,设置IP地址绑定用户等来支持专线方式。这就使得PPPoE 在宽带接入服务中比其他协议更具有优势。因此逐渐成为宽带上网的最佳选择。 PPPoE的实质是以太网和拨号网络之间的一个中继协议,他继承了以太网的快速和PPP拨号的简单,用户验证,IP分配等优势。在实际应用上,PPPoE利用以太网络的工作机理,将ADSL Modem的10BASE-T接口与内部以太网络互联,在ADSL Modem中采用RFC1483的桥接封装方式对终端发出的PPP包进行LLC/SNAP封装后,通过连结两端的PVC在ADSL Modem与网络侧的宽带接入服务器之间建立连接,实现PPP的动态接入。PPPoE接入利用在网络侧和ADSL Modem之间的一条PVC就可以完成以太网络上多用户的共同接入,实用方便,实际组网方式也很简单,大大降低了网络的复杂程度。 PPPOE具备了以上这些特点,所以成为了当前ADSL宽带接入的主流接入协议。
详细说来,modem接入技术面临一些相互矛盾的目标,既要通过同一个用户前置接入设备连接远程的多个用户主机,又要提供类似拨号一样的接入控制,计费等功能,而且要尽可能地减少用户的配置操作。 PPPOE 的目标就是解决上述问题, 1998年后期问世的以太网上点对点协议(PPP over Ethernet )技术是由Redback 网络公司、客户端软件开发商RouterWare公司以及Worldcom子公司UUNET Technologies公司在IETF RFC的基础上联合开发的。通过把最经济的局域网技术-以太网和点对点协议的可扩展性及管理控制功能结合在一起,网络服务提供商和电信运营商便可利用可靠 和熟悉的技术来加速部署高速互联网业务。它使服务提供商在通过数字用户线、电缆调制解调器或 无线连接等方式,提供支持多用户的宽带接入服务时更加简便易行。同时该技术亦简化了最终用户在选择这些服务时的配置操作。
2.特点
PPPOE的特点是在标准PPP报文的前面加上以太网的报头,使得PPPOE提供通过简单桥接接入设备连接远端接入设备,并可以利用以太网的共享性连接多个用户主机,在这个模型下,每个用户主机利用自身的ppp堆栈,用户使用熟悉的界面。接入控制,计费等都可以针对每个用户来进行。
3.优点
PPPOE的优点是安裝与操作方式类似于以往的拨号网络模式,方便用戶使用,用户处的XDSL调制解调器无须任何配置。允许多个用户共享一个高速数据接入链路。适应小型企业和远程办公的要求。并且终端用户可同时接入多个ISP,这种动态服务选择的功能可以使ISP容易创建和提供新的业务。还有,它兼容现有所有的XDSL Modem 和DSLAM。 可与ISP现有接入结构相融合。
4.帧格式
下图为PPPOE的帧格式
参数取值
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
5.建立过程
建立一个以太网上点对点协议PPPOE会话包括两个阶段:
1. 发现(Discovery)阶段
在Discovery过程中用户主机以广播方式寻找可以连接的所有接入设备,获得其以太网MAC地址。然后选择需要连接的用户主机并最后获得所要建立的PPP会话的SESSION_ID。在Discovery过程中节点间是客户端-服务器关系,一个用户主机(客户端)最终要发现一个接入设备(服务器)。在网络拓朴中,一般有不止一个的接入设备可以通信,Discovery阶段允许用户主机发现所有的接入设备,并从中选择一个。当Discovery阶段结束时,用户主机和接入设备之间都获得了可供以太网上建立PPP连接的全部信息。Discovery阶段保持无连接状态直到一个PPP会话的建立。一旦PPP连接建立,则用户主机和接入设备都必须为PPP虚拟端口分配资源。
详细的,典型的发现(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。
2. PPP会话阶段
用户主机与在发现阶段确定的接入设备进行PPP协商。这个协商过程与标准的PPP协商并没有任何区别。 在PPP会话阶段节点间是对等关系。
6.常用软件
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一样简单。
Access Manager/IHS:
实质就是EnterNet 300,只是打上了BELL的ISP接入服务部门Sympatico的商标。
7.参考文献
1. PPPOE协议技术与标准培训教材,周一帆,深圳市华为技术有限公司