PPPoE 协议基础知识分享~
PPPoE
PPPoE 协议的基本概念
我们先来看一下家庭用户上网的一种典型组网场景,如图12-21所示。图12-21中,PC 1-1、PC 1-2、PC 1-3 以及家庭网关HG-1 (注: HG是Home Gateway的简称)组成了一个家庭网络,在这个家庭网络中,终端PC通常是通过常见的标准以太链路或FE链路与HG-1相连。HG-1是家庭网络1的出口网关路由器。为了利用已经铺设好的电话线路,HG-1会利用ADSL(Asymmetric Digital Subscriber Line)技术将自己准备向外发送的以太帧信号调制成一种适合在电话线路上传输的物理信号后再进行发送。网络运营商的IP-DSLAM (IP Digital Subscriber Line Multiplexer)设备会接收来自不同HG的ADSL信号,并将其中的以太帧信息解调出来,然后通过一”条GE链路将这些以太帧送往一个被称为AC (Access Concentrator)的设备。从数据链路层的角度来看,IP-DSLAM 设备就是一台普通的二层以太网汇聚交换机。
我们知道,网络运营商是要对家庭用户上网进行收费及其他一些接入控制行为的。然而我们也知道,IP-DSLAM 转发给AC的帧都是一些以太帧;显然,这些以太帧是无法标示自己是发自HG-1 的呢,还是发自HG-2的呢。从帧的结构上来看,一个以太帧中是没有任何字段可以携带“用户名”和“密码”这些信息的。运营商如果不能区分来自不同的家庭用户的数据流量,当然也就无法进行收费等行为了。
因此,在图12-21中,AC设备必须根据所接收到的以太帧来识别这些帧所对应的家庭用户,并采用用户名和密码的形式来对不同的家庭用户进行认证。在此基础之上,运营商才有可能对家庭用户的上网活动进行计费等管理控制行为。
我们知道,PPP协议本身就具备了通过用户名和密码的形式进行认证的功能。然而,PPP协议只适用于点到点的网络类型。图12-21中,不同的HG和AC构成的以太网是一个多点接入网络(Multi-Access Network),因此PPP协议无法直接应用在这样的网络上。为了将PPP协议应用在以太网上,一种被称为PPPoE的协议便应运而生。
从本质上讲,PPPoE (PPP over Ethermet)是一个允许在以太广播域中的两个以太接口之间创建点对点隧道的协议,它描述了如何将PPP帧封装在以太帧中。从PPPoE的角度来看,图12-21中的接入网部分可以简化为图12-22所示的网络。
图12-22中,利用PPPoE协议,每个家庭用户的HG都可以与AC之间建立起一条虚拟的PPP链路(逻辑意义上的PPP链路)。也就是说,HG与AC是可以交互PPP帧的。然而,这些PPP帧并非是在真实的物理PPP链路上传递的,而是被包裹在HG与AC之间交互的以太帧中,并随这些以太帧在以太链路上的传递而传递的。
图12-23显示了PPPoE协议的基本架构。PPPoE协议采用了Client/Server 模式。在PPPoE协议的标准术语中,运行PPPoE Client程序的设备称为Host,运行PPPoE Server程序的设备称为AC。例如,图12-22中,家庭网关路由器HG就是Host,而运营商路由器就是AC。
PPPoE 报文的格式
图12-24显示了PPPoE报文的格式。如果以太帧的类型字段的值为0x8863或0x8864,则表明以太帧的载荷数据就是一个PPPoE报文。
PPPoE报文分为PPPoE Header和PPPoE Payload 两个部分。在PPPoE Header中,VER字段(版本字段)的值总是取0x1, Type字段的值也总是取0xl, Code 字段是用来表示不同类型的PPPoE报文的,Length字段用来表示整个PPPoE报文的长度,Session-ID字段用来区分不同的PPPoE会话(PPPoE Session)。
到此为止,我们仍不知道PPP帧是如何封装在以太帧中的。不用着急,很快我们就会知道,原来PPP帧是出现在PPPoE Payload中的。
PPPoE的工作过程
PPPoE的工作过程分为两个不同的阶段,即Discovery阶段(发现阶段)和PPP Session阶段(PPP 会话阶段)。
1. Discovery 阶段
如图12-25所示,在PPPoE发现阶段,Host与AC之间会交互4种不同类型的PPPoE报文,分别是PADI (PPPoE Active Discovery Initiation) 报文(PPPoE Header中Code字段的值为0x09)、PADO (PPPoE Active Discovery Offer)报文(PPPoE Header中Code字段的值为0x07)、PADR ( PPPoE Active Discovery Request) 报文( PPPoE Header中Code字段的值为0x19)、PADS (PPPoE Active Discovery Session-confirmation)报文(PPPoE Header中Code字段的值为0x65)。
首先,Host会以广播方式发送一个PADI报文(见图12-26),目的是寻找网络中的AC,并告诉AC自己希望获得的服务类型信息。如图12-26所示,在PADI报文的Payload中,包含的是若干个具有Type-Length-Value结构的Tag字段,这些Tag字段表达了Host 想要获得的各种服务类型信息。注意,PADI报文中的Session-ID字段的值为0。
AC接收到PADI报文之后,会将PADI报文中所请求的服务与自己能够提供的服务进行比较。AC如果能够提供Host所请求的服务,则单播回复一个 PADO报文;如果不
能提供,则不做任何回应。图12-27显示了PADO报文的格式。注意,PADO报文中的Session-ID字段的值为0.
如果网络中有多个AC,则Host就可能接收到来自不同的AC所回应的PADO报文。通常,Host会选择最先收到的PADO报文所对应的AC来作为自己的PPPoE Server,并向这个AC单播发送一个 PADR报文。图12-28显示了PADR报文的格式。注意,PADR报文中的Session-ID字段的值仍然为0。
AC接收到PADR报文之后,会确定出一个PPPoE Session ID,并在发送给Host的单播PADS报文中携带上这个PPPoE Session ID.图12-29显示了PADS报文的格式。注意,图12-29中,PADS报文中的Session-ID字段的值为0xXXXX,这个值便是PPPoESession ID。Host接收到PADS报文并获知了PPPoE Session ID之后,便标志着Host与AC之间已经成功建立起了PPPoE Session。接下来,Host 和AC便可进入到PPP Session阶段。
2.PPP Session阶段
在PPP Session阶段,Host 与AC之间交互的仍然是以太帧,但是这些以太帧中携带了PPP帧。图12-30显示了在PPP Session 阶段Host与AC之间交互的以太帧所包含的内容。从图12-30中我们可以看到,以太帧的类型字段的值为0x8864 (注:在Discovery阶段,以太帧的类型字段的值总是为0x8863),表明以太帧的载荷数据仍然是一个PPPoE报文。PPPoE报文中,Code 字段的值取0x00,Session-ID 字段的值保持为在Discovery阶段所确定的值。现在我们终于可以看到,此时的PPPoE报文的Payload就是一个PPP帧!然而,需要注意的是,PPPoE 报文的Payload并非是我们之前所熟悉的一个完整的PPP帧,而只是PPP帧的Protocol字段和Information字段。之所以如此,是因为PPP帧的其他字段在此虚拟的PPP链路上已无存在的必要。
我们看到,通过PPPoE协议的中介作用,在PPP Session阶段Host与AC之间就可以交互PPP帧了。通过PPP帧的交互,Host 和AC便可经历PPP的Link Establishment阶段,Authentication 阶段以及Network Layer Protocol阶段,最终实现IP报文的交互。
小小测试题
1. (多选)关于PPP协议,以下说法中正确的是? ( )
A. LCP协议是PPP协议的一个成员协议
B. PAP协议是PPP协议的一个成员协议
C. IPCP 协议是PPP协议的一个成员协议
D. IPCP 协议是一种NCP协议
2. (多选)关于PPP协议,以下说法中正确的是? ( )
A. PPP协议的工作包含了Link Dead阶段,Link Establishment阶段,Authentication阶段(可选),Network Layer Protocol阶段,Link Termination阶段
B.在PPP的Link Establishment阶段,PPP接口之间是通过交互NCP报文来协商PPP链路的有关参数的
C.在PPP的Link Establishment 阶段,PPP 链路上是允许传递IP报文的
D.如果PPP链路上需要传递IP报文,则必须先经历IPCP协商过程
3. (单选) PPPoE协议的工作分为以下哪两个阶段? ( )
A. PPPoE Discovery阶段,PPP Link Establishment阶段
B. PPPoE Discovery阶段,PPP Session阶段
C. PPPoE Discovery阶段,PPPoE Authentication阶段
4. (单选) PPPoE Discovery阶段会使用到以下哪4种PPPoE报文? ( )
A. PADI报文、PADO报文、PADR报文、PADT报文
B. PADI报文、PADO报文、PADR报文、PADS报文
C. PADI报文、PADO报文、PADS报文、PADT报文
5. (单选)关于PPPoE协议,以下说法中正确的是? ( )
A.在PPPoE的PPP Session阶段,IP报文是封装在PPP帧中的,PPP帧是封装在以太帧中的,以太帧是封装在PPPoE报文中的
B.在PPPoE的Discovery阶段,IP报文是封装在PPP帧中的,PPP帧是封装在PPPoE报文中的,PPPoE报文是封装在以太帧中的
C.在PPPoE的Discovery阶段,IP 报文是封装在PPP帧中的,PPP 帧是封装在以太帧中的,以太帧是封装在PPPoE报文中的
D.在PPPoE的PPP Session阶段,IP报文是封装在PPP帧中的,PPP帧是封装在PPPoE报文中的,PPPoE报文是封装在以太帧中的