PPPoE 与PPP 协议分析
PPP的连接控制协议(LCP)、认证协议(CHAP、PAP)、IP控制协议I(PCP)
1.IP接入的功能包括动态IP地址分配、AAA和ISP动态选择
2.PPPoE主要分为两个阶段即Discovery(地址发现)阶段和PPP会话阶段,当某个主机希望发起一个PPPoE会话时,它必须首先执行Discovery来确定对方的以太网MAC地址并建立起一个PP-PoE会话标识符SSION_ID,虽然PPP定义的是端到端的对等关系,Discovery却是天生的一种客户端-服务器关系,在Discovery的过程中,主机(作为客户端)发现某个访问集中器(Access Concentrator,作为服务器),根据网络的拓扑结构,主机能够与不只一个的访问集中器通信.Discovery阶段允许主机发现所有的访问集中器并从中选择一个。当Discovery阶段成功完成后,主机和访问集中器二者都具备了用于在以太网上建立点到点连接所需的所有信息。
3.PPPoE的帧格式和种类
Discovery阶段:以太网帧的ETHER_TYPE域都设置为0x8863。
PPPoE Active Discovery Initiation (PADI)
PPPoE Active Discovery Offer(PADO)
PPPoE Active Discovery Request (PADR)
PPPoE Active Discovery Sessionconfirmation (PADS)
PPPoE Active Discovery Terminate(PADT)。
PPP会话阶段: 以太网帧的ETHER_TYPE域都设置为0x8864。
PPPoE的payload部分包含O个或多个TAG。一个TAG是一个TLV(type-length-value)结构,TAG_TYPE域为16位值(网络字节序),
4. PPPoE的工作流程
Discovery搜索阶段
●主机发送PADl分组,其目的地址为广播地址,会话IAD为0(未分配);
●任一接入服务器收到PADI并任提供所需的服务时,就回送PADO分组,会话IAD为O;
●主机可能收到多个PADO,根据服务及其提供的服务选定一个服务器,然后向该服务器发送PADR分组,其目的地址为该服务器的单播地址。会话ID为0(未分配);
●该服务器收到PADR后生成一个唯一的会话ID,向主机回送PADS分组,准备启动PPP。
Session会话阶段,PPPoE的Host主机从接入服务器AC获取一个Session ID。进入PPP会话阶段
分析二(PPP)
1. PPP协议组成
a) 链路控制协议(LCP-Link Control Protocol),完成线路的启动、测试、任选参数的协商和最终线路断开功能
b) 认证协议,最常用的包括口令验证协议PAP(Password Authentication Protocol)和挑战握手验证协议CHAP(Challenge-Handshake Authentication Protocol)
c) 用户认证,主要通过LCP协商采用何种认证协议,但认证协议本身不是PPP协议的范围
d) IP控制协议IPCP(网络控制协议(NCP)),最常用的NCP协议为。它的一个重要功能就是动态分配IP地址;
2. 认证方式
1. 口令验证协议(PAP)
PAP是一种简单的明文验证方式。NAS(网络接入服务器,Network Access Server)要求用户提供用户名和口令,PAP以明文方式返回用户信息。很明显,这种验证方式的安全性较差,第三方可以很容易的获取被传送的用户名和口令,并利用这些信息与NAS建立连接获取NAS提供的所有资源。所以,一旦用户密码被第三方窃取,PAP无法提供避免受到第三方攻击的保障措施。
2. 挑战-握手验证协议(CHAP)
CHAP是一种加密的验证方式,能够避免建立连接时传送用户的真实密码。NAS向远程用户发送一个挑战口令(challenge),其中包括会话ID和一个任意生成的挑战字串(arbitrary challengestring)。远程客户必须使用MD5单向哈希算法(one-way hashing algorithm)返回用户名和加密的挑战口令,会话ID以及用户口令,其中用户名以非哈希方式发送。
CHAP对PAP进行了改进,不再直接通过链路发送明文口令,而是使用挑战口令以哈希算法对口令进行加密。因为服务器端存有客户的明文口令,所以服务器可以重复客户端进行的操作,并将结果与用户返回的口令进行对照。CHAP为每一次验证任意生成一个挑战字串来防止受到再现攻击(replay attack)。在整个连接过程中,CHAP将不定时的向客户端重复发送挑战口令,从而避免第3方冒充远程客户(remote client impersonation)进行攻击。
3. PPP工作流程
a) LCP协商(之下物理层,之上网络接口层)创建链路
Open事件发送到PPP的LCP子层,当LCP启动后,即请求建立物理链路,开始以上的PPPoE协商,当PPPoE协商成功后,就向LCP层发送Up事件。
b) 认证
LCP向对端发送协商请求,双方确定链路的配置参数后,LCP向认证层发送Up事件。
c) NCP协商 调用链路层创建阶段选定的网络控制层协议
认证成功后,在向NCP层发Up事件。如不需要认证,则可直接向NCP层发送up事件,NCP协议收到Up事件后开始NCP处理。
d) PPP正常终结过程
NCP分别终结,然后LCP终结,最后物理层终结
说明:每层可向相邻的子层发送“Up”或“Down”事件。“Up”表示该层已激活,“Down”表示该层已终结.
4.PPP帧格式
a) 发送的顺序是从左到右Protocol
分析二(实现)
1. PPP和PPPoE数据包收发处理流程
PPPoE层主要实现PPPoE拨号过程和对上层PPP的数据包进行PPPoE封装及处理,主要处理帧类型为0x8863,则为PPPoE Dis-covery包,如为0x8864,则为PPPoE Session阶段的包经拆封处理后送到PPP层处理
PPP层软件主要实现LCP链路建立、PPP认证、IPCP协商IP地址和对IP数据包的PPP封装等功能。
2. 数据包流向
4. PPP和PPPoE软件模块设计
整个PPPoE、PPP软件可分为一下模块设计,
1)PPP模块主要实现LCP、IPCP和认让协议(chap、pap)等,PPP还实现一个虚拟的ifnet接口,实现对上层IP报的封装和分发处理。
2)PPP Adpater模块主要实现PPP和PPPoE模块之间的接口适配。
3)PPPoE Discoverv模块实现PPPoE的Discov-ely阶段的处理。
4)PPPoE Session模块实现PPPoE的Session阶段的处理,主要是PPPoE封装和解包处理。
5)PPPoE Timer模块主要实现PPPoE模块的定时处理功能,用于PPPoE Discovery阶段的状态机切换处理。
6)PPPoE Adapater模块主要实现PPPoE的包的收发处理。
7)PPPoE Config模块主要实现PPP和PPPoE的相关配置功能。如配置用户名密码等。