1、 Cambridge Industries GroupCambridge Industries Group (CIG)Partnership for the Next Generation Broadband AccessPPPOE 交互过程5/21/2019 Cambridge Industries Group 1 Revision HistoryDate Version Description Author5/21/2019 Cambridge Industries Group 2 PPPOE 交互过程1. 适用范围PPPoE = PPP Over EthernetPPPoE 主要协议标准
2、:RFC2516本文介绍了 PPPOE 建立链接以及协商的交互过程。2. 描述PPPOE 链接建立的过程包括 PPPOE 发现阶段以及 PPPOE 回话阶段,如下图所示:下面将对这两个阶段的交互分别描述。2.1PPPoE 发现阶段2.1.1PPPOE 发现阶段的交互过程主要有四个包,即 PADI,PADO,PADR,PADS,用 pppoed 过滤 PPPOE 发现阶段的包,如下图:5/21/2019 Cambridge Industries Group 3 1.用户主机发出 PPPOE 有效发现初始(PADI)包。以太网目的地址为广播地址 0xf*6,CODE 字段为 0x09, SESSI
3、ON_ID 为 0x0000。2. 接入设备收到在服务范围内的 PADI 包后,发送 PPPOE 有效发现提供(PADO)包以响应请求。其 CODE 字段为 0x07 ,SESSION_ID 仍为 0x0000。PADO 包必须包含一个接入设备名称类型(AC-Name)的标签(标签类型字段为 0x0102)以及一个或多个服务名称类型标签,表明可向用户主机提供的服务种类。3. 用户主机在可能收到的多个 PADO 包中选择一个合适的接入设备,选择的原则是根据PADO 中接入设备名称类型标签和服务名称类型标签的内容。然后向所选择的接入设备发送 PPPOE 有效发现请求(PADR)包。其 CODE 字
4、段为 0x19,SESSION_ID 仍为 0x0000。PADR 包必须包一个服务名称类型标签,确定向接入设备请求的服务种类。当一个用户主机在确定时间没有收到 PADO,他会重发一个 PADI,同时等待两倍的时间。这种过程可以根据需要重复多次。4. 接入设备收到 PADR 包后准备开始 PPP 会话,它发送一个 PPPOE 有效发现会话确认(PADS)包。其 CODE 字段为 0x65 , SESSION_ID 为接入设备所产生的一个唯一的PPPOE 会话标识号码。发现阶段的两大任务:1、寻找可用的服务器;2、得到 session ID,开始 PPP 的建链过程。具体抓包如下:2.2PPPo
5、E 会话阶段2.2.1PPPoE 会话阶段主要分 LCP 协商阶段, 认证阶段, IPCP 阶段等,在这些阶段顺利完成后,就可以进行数据传输了。LCP 协商阶段:LCP = Link Control Protocol,链路控制协议此阶段主要是协商链路的一些参数,如最大接收单元 MRU、Magic Number,以及后续认证时使用的协议等。LCP 协商分为 LCP Configuration Request 和 LCP Configuration Ack,如下图:截图 LCP Configuration Request 如下:5/21/2019 Cambridge Industries Grou
6、p 4 可以看到,Session ID 就是之前 PPPOE 发现阶段获得的那个,这边协商了 MRU,并且提出认证使用的 Magic number。一般而言,MRU 和 MTU 取值相同,PPPOE 的最大 MTU 不能超过 1492。计算方法如下:首先,以太网帧大小限制:Ethernet MinSize = 512bit = 64 ByteEthernet MaxSize = 1518 Byte去掉以太网帧头后的尽荷为:Ethernet IP MTU = 1518 18 ( 6 SRCMAC+ 6 DSTMAC+ 2 TYPE+ 4 CRC) = 1500 B所以,再去掉 PPPOE SES
7、SION 和 PPP 头的开销,所以 PPPOE 的 MRU 最大值为:PPPoE MTU/MRU = 1500 8 ( 6 PPPoE_SESSION + 2 PPP_HEADER ) = 1492 B其中 PPPOE SESSION 帧结构如下:抓包中也可以看到。Magic-number 选项用来协商双方的魔术字,两端魔术字不能重复,魔术字可用来检测链路的环回情况。该选项提供了一种探测短路连接和其它数据链路层异常的方法当一方接收到带有魔数选项的配置请求数据帧后,将接收到的魔数与上次发送的魔数进行比较,如果不相同就认为没有发生短路。如果两个魔数相同,则需要发送一个携带不同魔数的配置否认帧,然
8、后将接收到的魔数与发送的魔数进行比较。在广域链路上,最常用的一种检测链路的方法就是在远端将发送和接受短接成环路,在本端发送的信号如果能被自己成功的接受到,那么线路就有可能是 Ok 的,这就是 LoopBack 测试。如果环路在测试之后并未撤掉,PPP 又没有引如 Magic-Number 的话,就可能自己和自己建立 PPP 关系。服务器回复 ACK 以后,便开始下一步认证阶段。认证阶段:认证阶段务器端将验证客户端的合法性。最常见的两种就是 PAP 和 CHAP;PAP 认证:发送的认证信息是明文,可以通过抓包工具看到用户名、密码;CHAP 认证:发送的认证信息是密文,抓包工具无法解析出来真正的
9、用户名、密码。下面抓个 PAP 认证的包:5/21/2019 Cambridge Industries Group 5 这边可以看到 PPPOE 的账户和密码。如果用户名密码正确,则服务器回复 Ack,进入下一步 IPCP 阶段。IPCP 阶段:此阶段进行 IP、DNS、WINS 等的协商。这边抓了一段比较点下的 IPCP 阶段的包,可以体现 IPCP 阶段的交互行为:从抓包中可以看到,客户端一开始申请了一个全零的 IP 地址和 DNS 服务器,服务器回了个 Nak,并且提供了一个 IP 以及 DNS 服务器,然后客户端又发了个 Request,这次请求的 IP 地址和 DNS 和服务器之前提供的一致,服务器回了 ACK。至此,链接已经建立,可以进行数据传输。3. 个人总结主要是工作中经常碰到 PPPOE 方式,所以整理了下 PPPOE 的交互过程以及抓包怎么看,希望对大家有所帮助。