|
|
PPP协议及PPPoE协议介绍
以下内容是在查看相关资料后的一些总结,如果大家需要查看关于这两个协议更为详细的介绍,可以在论坛搜索,会很多详细的资料。
PPP协议简介
PPP协议,其全称为(Point-To-Point Protocol)点到点协议,它作为一种提供在点到点链路上传输封装网络层数据包的数据链路层协议,处于TCP/IP协议栈的第二层,主要被设计用来在支持全双工的同异步链路上进行点到点之间的数据传输。
PPP主要由三类协议组成,链路控制协议族(LCP)网络层控制协议族(NCP)和PPP扩展协议族,其中链路控制协议主要用于建立拆除和监控PPP数据链路,网络层控制协议族主要用于协商在该数据链路上所传输的数据包的格式与类型,PPP扩展协议族主要用于提供对PPP功能的进一步支持,同时 PPP还提供了用于网络安全方面的验证协议族(PAP和CHAP)。
PPP协议的特点
 PPP协议与其他链路层协议不同 既支持同步链路又支持异步链路,而如X25 framerelay等数据链路层协议只对同步链路提供支持;
 具有各种NCP协议 如IPCP, IPXCP更好地支持了网络层协议;
 具有验证协议CHAP PAP 更好了保证了网络的安全性;
 易扩充;
PPP的协商过程
PPP在建立链路之前要进行一系列的协商过程,过程如下:PPP首先进行LCP协商,协商内容包括:MTU(最大传输单元)、魔术字(magic number)、验证方式、异步字符映射等选项(详见RFC1661) LCP协商成功后,进入Establish(链路建立)阶段,如配置了CHAP或PAP验证,便进入CHAP或PAP验证阶段,验证通过后才会进入网络阶段协商(NCP),如IPCPIPXCP、BCP的协商,任何阶段的协商失败都将导致链路的拆除,魔术字,主要用于检测链路自环,PPP靠发送Echo Request、Echo Reply报文来检测自环和维护链路状态,如连续发现有超过最大自环允许数目Echo Request报文中魔术字与上次发送魔术字相同,则判定网络发生自环现象,如链路发生自环,则就需采取相应措施对链路复位 另外,LCP发送config request时也可以检测自环,LCP发现自环后,在发送一定数目的报文后也会复位链路,如果PPP发送的Echo Request 报文产生丢失,则在连续丢失最大允许丢失的个数之后,将链路复位,以免过多的无效数据传输,异步字符映射用于同异步转换。
PAP的验证过程
PAP为两次握手协议,它通过用户名及口令来对用户进行验证。PAP验证过程如下:当两端链路可相互传输数据时,被验证方发送本端的用户名及口令到验证方,验证方根据本端的用户表或radius服务器,查看是否有此用户,口令是否正确,如正确则会给对端发送ACK报文,通告对端已被允许进入下一阶段协商,否则发送NAK报文,通告对端验证失败,此时并不会直接将链路关闭,只有当验证不过次数达到一定值时,才会关闭链路,来防止因误传、网络干扰等造成不必要的LCP重新协商过程。PAP的特点是在网络上以明文的方式传递用户名及口令,如在传输过程中被截获便有可能对网络安全造成极大的威胁。因此,它适用于对网络安全要求相对较低的环境。
CHAP的验证过程
CHAP为三次握手协议,它的特点是:只在网络上传输用户名,而并不传输用户口令,因此,它的安全性要比PAP高。CHAP的验证过程为:首先由验证方向被验证方发送一些随机产生的报文,并同时将本端的主机名附带上一起发送给被验证方,被验证方接到对端对本端的验证请求(Challenge)时,便根据此报文中验证方的主机名和本端的用户表查找用户口令字,如找到用户表中与验证方主机名相同的用户,便利用报文ID,此用户的密钥用Md5算法生成应答,Response 随后将应答和自己的主机名送回,验证方接到此应答后,用报文ID、本方保留的口令字(密钥)和随机报文用Md5算法得出结果,与被验证方应答比较,根据比较结果返回相应的结果。
比较
PAP是首先由被验证方将自己的用户名及密码送给验证方,而CHAP验证是首先由验证方发起验证过程的,主要区别为PAP为明文传送密码,而在CHAP验证过程中,密码是不在线传送的。
所以,这就是我们在用协议分析软件捕获数据包时看不到密码的原因所在,是由于验证方式采用了CHAP验证,密码不是在线明文传输。
PPPOE协议简介
PPPOE协议提供了在广播式的网络(如以太网)中多台主机连接到远端的访问集中器(我们对目前能完成上述功能的设备为宽带接入服务器)上的一种标准。在这种网络模型中,我们不难看出所有用户的主机都需要能独立的初始化自已的PPP协议栈,而且通过PPP协议本身所具有的一些特点,能实现在广播式网络上对用户进行计费和管理。为了能在广播式的网络上建立、维持各主机与访问集中器之间点对点的关系,那么就需要每个主机与访问集中器之间能建立唯一的点到点的会话。
PPPOE协议共包括两个阶段,即PPPOE的发现阶段(PPPOE Discovery Stage)和PPPOE的会话阶段(PPPOE Session Stage)。在这里更注重是PPPOE发现阶段的介绍,因为对于PPPOE的会话阶段,可以看成和PPP的会话过程是一样的,而两者的主要区别在于只是在PPP的数据报文前封装了PPPOE的报文头。无论是哪一个阶段的数据报文最终会被封装成以太网的帧进行传送。
PPPOE的发现阶段
PPPOE的初始化过程
PPPOE的初始化过程是至关重要的,它不仅要在广播式的网络上确定一对一的逻辑关系,而且还要为PPPOE的会话阶段准备一些必要条件,如访问集中器唯一分配的会话ID(Session ID)。在介绍PPPOE的发现阶段之前,首先让我们重温一下以太网帧的封装格式,前面也介绍过了,所有的PPPOE的数据报文均是被封装在以太网的数据域(净载荷区)中传送的。
以太网的帧格式
对于大多数人来说是并不陌生,而且目前大多数的网络中都在使用以太网2.0版,因此EthernetII就被作为一种事实上的工业标准而广泛使用,如果对以太网不太熟悉或想深入了解的读者,可参考相关局域网技术方面的书籍。下图为以太网的帧格式:
目的地址(DA) 源地址(SA) 类型(Type) 数据(Data) 帧校验(FCS)
 以太网目的地址(目的MAC地址)和以太网源地址(源MAC地址),是我们大家最为熟悉的数据链路层地址。它包括单播地址、多播地址和广播地址,而对于PPPOE协议中要使用到单播地址和广播地址。在PPP的培训教材中也提到了,对于PPP这样的数据链路层协议而言,二层地址通信双方之间已失去了原有的意义。
 以太网的类型域也是我们最关心的一个字段,它在1997年以前还一直由施乐公司维护,但后来就交由IEEE802小组维护了。通过这个字段的内容,数据包的接收方可以识别以太网的数据域中承载的是什么协议的数据报文。对于PPPOE的两大阶段,也正是通过以太网的类型域进行区分的。在PPPOE的发现阶段时,以太网的类型域填充0x8863;而在PPPOE的会话阶段时,以太网的类型域填充为0x8864。
 数据域(净载荷)主要是用来承载类型域中所指示的数据报文,在PPPOE协议中所有的PPPOE数据报文就是被封装在这个域中被传送。
 校验域,主要用来保证链路层数据帧传送的正确性。
PPPOE的数据报文格式
描述完了以太网的帧格式后,我们简要介绍一下PPPOE的数据报文格式。PPPOE的数据报文是被封装在以太网帧的数据域内的。简单来说我们可能把PPPOE报文分成两大块,(虽然这样比较笼统,但还是比较好助于理解),一大块是PPPOE的数据报头,另一块则是PPPOE的净载荷(数据域),对于PPPOE报文数据域中的内容会随着会话过程的进行而不断改变。下图为PPPOE的报文的格式:
版本 类型 代码 会话ID
长度域 净载荷
 PPPOE数据报文最开始的4位为版本域,协议中给出了明确的规定,这个域的内容填充0x01。
 紧接在版本域后的4位是类型域,协议中同样规定,这个域的内容填充为0x01。
 代码域占用1个字节,对于PPPOE 的不同阶段这个域内的内容也是不一样的,在这里没有用表格的形式将所有代码列出,但在后续章节会给出一些代码与数据报文的对照。
 会话ID点用2个字节,当访问集中器还未分配唯一的会话ID给用户主机的话,则该域内的内容必须填充为0x0000,一旦主机获取了会话ID后,那么在后续的所有报文中该域必须填充那个唯一的会话ID值。
 长度域为2个字节,用来指示PPPOE数据报文中净载荷的长度。
 数据域,有时也称之为净载荷域,在PPPOE的不同阶段该域内的数据内容会有很大的不同。在PPPOE的发现阶段时,该域内会填充一些Tag(标记);而在PPPOE的会话阶段,该域则携带的是PPP的报文。
总结
PPPOE的数据报文是被承载在以太网的数据域中进行传送的
PPPOE的发现阶段会遇到PADI、PADO、PADR和PADS这四种报文
PPPOE中的PADT报文是用来终止一条会话的
PPPOE在发现阶段时,以太网的类型字段的值为0x8863
PPPOE在会话阶段时,以太网的类型字段的值为0x8864 |
|