嵌入式系统嵌入式系统/ARM技术中的基于技术中的基于Linux内核模式的内核模式的PPPoE优化与优化与
实现实现
PPPOE(Point.to.Point Protoeol over Ethernet)是将PPP协议封装在以太网帧上进行传输,它的通信过程分为
探测(Discovery)和PPP会话(Session)2个阶段。PPPoE Discovery阶段主要是客户机确定AC(Access
Concentrator)以及客户机与AC协商Session ID。而PPPoE Sess-ion用于完成数据包的接收与发送,同时它也用
于完成PPP链路的协商(LCP),以及网络层的控制协商(IPCP)等。 传统的PPPoE先会用Raw socket读取数
据,然后采用用户态程序对其封包解包,然后再发送给内核。但是
PPPOE(Point.to.Point Protoeol over Ethernet)是将PPP协议封装在以太网帧上进行传输,它的通信过程分为探测
(Discovery)和PPP会话(Session)2个阶段。PPPoE Discovery阶段主要是客户机确定AC(Access Concentrator)以及客户机与
AC协商Session ID。而PPPoE Sess-ion用于完成数据包的接收与发送,同时它也用于完成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会话。这个请求可以由任何一方发出,同时代表这次
回话的结束,图1描述整个discovery过程。
1..2 PPPoE Session阶段阶段
PPPoE Discovery阶段是为整个PPPoE会话获取双方物理地址以及Session_ID,这个Session_ID就成为了双方的通信凭
证,在整个会话过程中保持不变。PPP帧数据被封在以太帧中,它在以太帧的标识为0x8864,当碰到0x8864时,就认为是一
个PPPoE包。
在PPPoE Session阶段,PPPoE除数据传输以外,还提供了链路的协商(LCP),以及网络层的控制协商(IPCP)等其他服
务。对于LCP,它主要用于配置和测试数据通信链路,用来协商PPP协议的一些配置参数选项;处理不同大小的数据帧:检测
链路环路和一些链路的错误;终止一条链路,其作用类似于IP层的ICMP协议。而对于IPCP,它主要用于动态地协商客户机与
服务器双方IP,实际的数据报文交换过程中主要涉及Config-Request、Config-Ack、Config-Nak和Config-Re-ject。图2描述
IPCP协商IP的过程。
2 PPPOE设计实现设计实现