PPPOE的学习笔记

引子:由于学校的网络是使用PPPoE进行拨号上网,但是有非常多的限制,所以就产生了学习PPPoE的想法。
PPPoE全称 Point to Point Protocol over Ethernet,解释起来就是,点对点协议在以太网上的实现。下面具体讨论的是PPPoE中CHAP。
完成一个PPPoE拨号流程可以具体的分为三大部分:
1.发现阶段 2.LCP协商阶段 3.CHAP认证阶段
发现阶段(Discovery)
Discovry的工作流程
第一步客户端发送一个PADI(PPPoE Active Discovery Initiation)数据包,目标地址设置为广播地址即(ff:ff:ff:ff:ff:ff),以太网络层的Type设置为0X6388表明是PPPoE的Discovery阶段的数据包,CODE域设置为0X09,Session ID必须被设置为0X0000。 当访问集中器接收到它可以提供服务的PADI包,它通过发送一个PADO(PPPoE Active Discovery Offer)包来响应。目标地址是发送PADI的主机的单播地址。CODE域被设置为0x07,同时,Session ID必须被设置为0x0000。 PADO包必须包含一个AC名称(AC-Name)标签,其中有访问集中器的名称;还有一个标记此次会话的AC-Cookie。 主机发送PADR(PPPoE Active Discovery Request)包给被选中的访问集中器。目标地址被设置为这个发送PADO的访问集中器的单播以太网地址。CODE域被设置为0x19,同时,Session ID必须被设置为0x0000。PADR包包含一个AC-Cookie标签,这个标签的值为主机收到的PADI包中的AC-Cookie的值。 当访问集中器接收到PADR包时,它开始准备开始一个PPP会话。它为PPPoE会话创建一个唯一的会话ID(Session ID),并用PADS(PPPoE Active Discovery Session-confirmation)包回复给主机。目标地址域设置为发送PADR的主机的单播以太网地址。CODE域设置为0x65,同时,SESSION_ID必须设置为刚为本次PPPoE会话创建的唯一值。 发现阶段完成后,双方通信的Sesiion ID已经建立,那就开始进入协议协商阶段(LCP)
LCP阶段
主机发送Request包,PPP协议的Protocol设置为0XC021表明为Link Control Protocol,在Link Control Protocol下,主机一般设置最大接收单元,魔术字,Protocol Field Compression,Address and Control Field Compression,回调参数。Identifier设置为0X00表明是第一次的request包。 对于CHAP认证,这里只需要魔术字和最大接收单元,其他的都得拒绝。所以AC服务器就发送拒绝包,PPP Link Control Protocol域的CODE设置为0X04,Options项列出拒绝的内容。 被拒绝后,主机会按照AC服务器发的拒绝包重新发过Request包PPP Identifier设置为0X01表明是第二次发的Request包。此时AC服务器也好发一个Request包,PPP Options选项包含最大接收单元,认证协议(CHAP则为0XC223),魔术字。 一般没什么问题,双放都会各发一个ACK包来确认刚刚的配置请求。 确认完后,主机就会开始发若干个(一般是三个)Identification包,PPP Link Control Protocol的CODE设置为0X12,Options包含AC服务器发的确认包中的魔术字,和一些Message。 主机发完这些包后,就进入CHAP认证阶段。
CHAP阶段
AC服务器就会开始Challenge包。PPP协议的Protocol协议段设置为0XC223表明为挑战握手认证协议(Challenge Handshake Authentication Protocol)。PPP Challenge Handshake Authentication Protocol的CODE设置为0X01,data域带上一个value值,和其长度,加上AC服务器的名字。 主机收到AC服务器发的Chanlenge包后,就会发回应包,PPP Challenge Handshake Authentication Protocol的CODE设置为0X02,data域带上一个value值,和其长度,加上拨号的用户名。 这时AC服务器就会发认证是否成功的回应包,如果失败那PPP Challenge Handshake Authentication Protocol的CODE设置为0X04,Message里包含失败的原因。如果成功那Code设置为0X03。 好了,大体就是这样了!!! 我就是这么懒,你来咬我啊,哈哈哈哈。拜了个拜勒。