【协议森林】从抓包解析PPPoe协议
1. PPPOE简介
PPPOE协议提供了在广播式的网络中多台主机连接到远端的访问集中器上的一种标准。在这种网络模型中,所有用户的主机都需要能独立的初始化自已的PPP协议栈,而且通过PPP协议本身所具有的一些特点,能实现在广播式网络上对用户进行计费和管理。为了能在广播式的网络上建立、维持各主机与访问集中器之间点对点的关系,那么就需要每个主机与访问集中器之间能建立唯一的点到点的会话。
PPPOE协议共包括两个阶段,即PPPOE的发现阶段(PPPOE Discovery Stage)和PPPOE的会话阶段(PPPOE Session Stage)。
2. PPPOE的发现阶段
- 客户端广播一PADI(I = Initiation)请求,查找网络中的服务器;
- 服务器端响应一PADO(O = Offer),将自己的一些信息告知客户端;
- 客户端向此服务器发送一PADR(R = Request),请求会话号;
- 服务器端响应一PADS(S = Session-confirmation),将分配的会话号告知对方。
服务器分配了session ID之后,发现阶段的任务就已经完成了。
发现阶段的两大任务,第一,寻找可用的服务器;第二,得到session ID,开始PPP的建链过程。
3. PPPoE会话阶段
PPPoE会话阶段有三个过程:
- LCP协商阶段:LCP = Link Control Protocol,链路控制协议。此阶段主要是协商链路的一些参数,如最大接收单元MRU、Magic Number以及后续认证时使用的协议等;
- 认证阶段:此阶段服务器端将验证客户端的合法性。最常见的两种就是PAP和CHAP;PAP认证:发送的认证信息是明文,可以通过抓包工具看到用户名、密码;CHAP认证:发送的认证信息是密文,抓包工具无法解析出来真正的用户名、密码。
- IPCP阶段:此阶段进行IP、DNS、WINS等的协商。
- 数据传输:上述任一阶段失败都会导致协议终止。如果都成功,则可以开始进行IP层的通信了。