tag结构如图3所示。 2 pppoe协议分析 pppoe协议分为发现(discovery)阶段和会话(session)阶段。发现阶段是一个无状态的阶段,该阶段主要选择访问集中器,确定所要建立的ppp会话标识符session id,同时获得对方点到点的连接信息;ppp会话阶段执行标准的ppp过程。 (1)发现阶段 一个典型的发现阶段分为四个步骤,当整个发现阶段结束后,通信双方分别获取对方的mac地址,并且共用一个session id,这两个参数共同确定一个pppoe会话。 第一步,发送padi(pppoe active discovery initiation)帧。在pppoe的以太帧结构中,编码域的值为0x09,会话id域的值设为0x0000。在这个步骤中,以太网目的地址为广播并且在包中必须包含一个确切的服务名。 第二步,接收pado(pppoe active discovery offer)帧。这一过程就是当isp的pppoe访问集中器收到padi帧后,若能够满足padi提出的服务请求,可以发送pado帧回应。pado帧中的目的地址为发送padi帧的客户端的mac地址,源地址为
成ppp链路的协商(lcp),以及网络层的控制协商(ipcp)等。 传统的pppoe先会用raw socket读取数据,然后采用用户态程序对其封包解包,然后再发送给内核。但是这种方法会引起大量的内核空间与用户空间的上下文切换,从而带来不必要的开销。而对于实现于内核态的pppoe,它会把所有的封包以及解包实现于内核,这样就大大提高pppoe的效率。 1 pppoe协议概述 1. 1 pppoe discovery阶段 在pppoe discovery阶段,客户机首先广播一个padi(0x09)帧。收到padi帧的一个或多个服务器会发送pado(0x07)帧,这个包中包含了服务器的各种标识。然后,客户机会选择其中一个服务器发送padr(0x19),表明主机选择了这个服务器。最终,收到padr(0x65)帧的服务器会为新的会话分配资源并向客户机发送pads(0x65)。当此阶段完成,这两次的对话完成了session_id以及双方物理地址,为后续数据会话打好基础。 同时ppp协议还提供了一个padt请求,该请求用于结束这次pppoe会话。这个请求可以由任何一方发出,同时代