PPP over Ethernet(PPPoE)协议,是在以太网络中转播PPP帧信息的技术,尤其适用于ADSL等方式。可以使以太网的主机通过一个简单的桥接设备连到一个远端的接入集中器上。通过pppoe协议,远端接入设备能够实现对每个接入用户的控制和计费。PPPoE协议的作用是:实现有效的用户管理,进行网络接入计费等

PPPoE帧

  PPPoE帧的内容作为以太帧的负载存在, 当一个以太帧为PPPoE帧时,其Len/Type字段应该为0x8863(表示PPPoE的发现阶段)或者0x8864(表示PPPoE的会话阶段)。


+ Ver: 版本号, 4bit, PPPoE规范的本版本为0x01
+ Type: 类型, 4bit, PPPoE规范的本版本应设置为0x01
+ Code:代码字段、8bit, 根据两阶段中各种数据包的不同功能而值不同。

Code Description
0x00 表示PPP会话阶段
0x09 PADI 报文
0x07 PADO报文
0x19 PADR报文
0x65 PADS报文

+ Session-ID:会话ID, 8bit, 是一个网络字节序的无符号值, 其值会在Discovery数据包中定义。 对一个给定的PPP会话来说,该值是一个固定值。 Session-ID 与 以太网Src_addr 和 Dst_addr一起实际定义了一个PPP会话。 Session-ID不允许使用0xFFFF(该值保留作将来使用)。
+ Length: PPPoE负载长度,不包括以太网头部和PPPoE头部。
+ Payload: PPPoE帧的净负载,在不同的阶段PPPoE的Payload字段的格式有很大区别。在PPPOE的发现阶段时,该域内会填充一些Tag(标记);而在PPPOE的会话阶段,该域则携带的是PPP的报文。

下图是一个PPPoE的PADO报文

PPPoE链接 建立过程

PPPoE链路的建立PPP会话阶段
发现阶段:

Created with Raphaël 2.1.0 Client Client Server Server PADI PADO PADR PADS

会话阶段:

Created with Raphaël 2.1.0 Client Client Server Server LCP PAP/CHAP认证 NCP 链路建立

断开连接:

Created with Raphaël 2.1.0 Client Client Server Server PADT(Terminate)

(一)发现阶段:

当主机开始PPPoE进程时,它必须先识别接入端的以太网MAC地址,建立PPPoE的Session_ID。这就是Discovery阶段的目的。
PPPoE发现阶段的主要目的是确定一对一的关系,包括以下两部分

  • 互相识别对方的Mac地址 (包括查找NAS服务器)
  • 建立PPPoE的Session_ID

Discovery阶段由四个步骤组成。完成之后通信双方都知道了PPPoE Session_ID以及对方以太网地址,它们共同确定了唯一的PPPoE会话。

Created with Raphaël 2.1.0 Client Client Server Server PADI(PPPoE Active Discovery Initial) Dst:广播 Src:Client PADO(PPPoE Active Discovery Offer) Dst:Client Src:Server PADR(PPPoE Active Discovery Request) Dst:Server Src:Client PADS(PPPoE Active Discovery Session-confirmation) Dst:Client Src:Server

1. PADI 报文

主机在本以太网内“广播“一个PADI(PPPoE Active Discovery Initial)报文,在此报文中包含主机想要得到的服务类型信息。
在PPPoE的初始阶段,接入主机并不知道访问集中器(NAS)的MAC地址,这时就采用类似于ARP的方式广播PADI报文。以太网上的访问集中器如果配置了PPPoE的业务,就会实时监测网络上的PPPoE报文。
PADI报文的目的地址为以太网的广播地址0×ffffffffffff,CODE(代码)字段值为0×09,SESSION-ID(会话ID)字段值为0×0000。
如果在PPPoE的服务器端配置service-name,client将发送Discovery阶段的PADI报文给服务器端请求建立连接。
如果该PADI报文中包含有不为空的service-name时,服务器端将用配置的service-name和该报文中的service-name进行完全匹配性检测。如果两者完全相同,服务器端提供后续服务,否则,服务器端不提供服务。
以上是两者的service-name都不为空时的情况。但如果两者中有一个service-name为空,就不进行此项检测,直接按照原来的程序执行。

2. PADO报文

以太网内的所有服务器收到这个PADI报文后,将其中请求的服务与自己能提供的服务进行比较,可以提供此服务的服务器发回PADO(PPPoE Active Discovery Offer)报文。
PADO报文的CODE字段值为0×07,SESSION-ID字段值仍为0×0000。

3. PADR报文

主机可能收到多个服务器的PADO报文,主机将依据PADO的内容,从多个服务器中选择一个,并向它发回一个会话请求报文PADR(PPPoE Active Discovery Request)。
由于用户主机在收到PADO报文后,就获知了访问集中器的MAC地址,因此PADR的报文以单播的形式存在。
PADR报文的CODE字段为0x19,SESSION_ID字段值仍为0×0000。

4. PADS报文

服务器产生唯一的会话标识,标识和主机的这段PPPoE会话。并把此会话标识通过会话确认报文PADS(PPPoE Active Discovery Session-confirmation)发回给主机,若没有错误,双方进入PPP Session阶段。
PADS报文,CODE字段值为0×65,SESSION-ID字段值为接入集中器所产生的一个惟一的PPPoE会话标识号码。
接入服务器发送确认数据包后,它就可以进入到PPP会话阶段。当主机接收到该确认数据包后,它就可以进入PPP会话阶段。

(二)PPP会话阶段

PPP会话的建立,需要两端的设备都发送LCP数据包来配置和测试数据通信链路。
用户主机与接入集中器根据在发现阶段所协商的PPP会话连接参数进行PPP会话。一旦PPPoE会话开始,PPP数据就可以以任何其他的PPP封装形式发送。所有的以太网帧都是单播的。PPPoE会话的SESSION-ID一定不能改变,并且必须是发现阶段分配的值。

PPP工作流程

a) LCP协商阶段:创建链路完成链路的启动、测试、任选参数的协商和最终链路的断开
b)认证阶段: LCP向对端发送协商请求, 双方确定链路的配置参数后,LCP向认证层发送Up事件。常用的认证协议有PAP(口令验证协议)和CHAP(挑战握手验证协议)。
c) NCP协商阶段(IPCP协议):调用链路层创建阶段选定的网络控制层协议。主要包括动态分配IP地址功能等。常用的NCP协议有IPCP协议。
d)会话维持阶段:进行PPPoE心跳保活
e)PPP正常终结: NCP分别终结,然后LCP终结,最后物理层终结

1. LCP协商阶段

  LCP的Client和Server进行报文的交互,协商一些通信参数,LCP协商阶段完成最大传输单元(MTU),是否进行认证和采用何种认证方式(Authentication Type)的协商。
  LCP协议数据报文可以分为以下几种:
+ 链路配置报文:用来建立和配置一条链路,主要包括Configure-Request、Configure-Ack、Configure-Nak和Configure-Reject报文
+ 链路维护报文:用来管理和调试链路,主要包括Code-Reject、Protocol-Reject、Echo-Request、Echo-Reply和Discard-Request报文
+ 链路终止报文:用来终止一条链路,主要包括Terminate-Request和Terminate-Reply报文

LCP协商过程

Created with Raphaël 2.1.0 Client Client Server Server Config-Request Config-Ack Config-Request Config-Ack

LCP 两端通过发送LCP Config-Request和Config-Ack交互协商选项。 LCP一方通过发送LCP Config-Request来向另一方请求自己需要的LCP协商选项。如果Config-Request报文的接收方支持并接受这些选项则回复LCP Config-Ack报文。如果Config-Request部分(或者全部)不支持所有的LCP选项则回复其他报文。
(1)Config-ACK:若完全支持对端的LCP选项,则回应Config-ACK报文,报文中必须完全协带对端Request报文中的选项。
(2)Config-NAK:若支持对端的协商选项,但不认可该项协商的内容,则回应Config-NAK报文,在Config-NAK的选项中填上自己期望的内容,如:对端MRU值为1500,而自己期望MRU值为1492,则在Config-NAK报文中埴上自己的期望值1492。
(3)Config-Reject:若不能支持对端的协商选项,则回应Config-Reject报文,报文中带上不能支持的选项,如Windows拨号器会协商CBCP(被叫回呼),而ME60不支持CBCP功能,则回将此选项拒绝掉。

—-Config-request报文———

—-Config-Ack报文———

2. 认证阶段

  PPP认证,常用认证协议有PAP(口令验证协议)和CHAP(挑战握手验证协议)
  会话双方通过LCP协商好的认证方法进行认证,如果认证通过了,才可以进行下面的网络层的协商。认证过程在链路协商结束后就进行。
+ PAP验证: 两次握手,明文传输口令,安全性低
+ CHAP验证: 三次握手, 密文传输口令。
PAP验证过程

Created with Raphaël 2.1.0 Client Client Server Server Radius Radius Auth-Req Auth-Req Auth-Ack Auth-ACK

CHAP验证过程:

Created with Raphaël 2.1.0 Client Client Server Server Radius Radius Wait Challenge(CHAP) Response Response Success Success

3. NCP协商协议

  NCP有很多种,如IPCP、BCP、IPv6CP,最为常用的是IPCP(Internet Protocol Control Protocol)协议。NCP的主要功能是协商PPP报文的网络层参数,如IP地址,DNS Server IP地址,WINS Server IP地址等。PPPoE用户主要通过IPCP来获取访问网络的IP地址或IP地址段。
  NCP流程与LCP流程类似,用户与ME设备之间互相发送NCP Config-Request报文并且互相回应NCP Config-Ack报文后,标志NCP己协商完,用户上线成功,可以正常访问网络了。
  NCP协商协议的基本流程如下:

Created with Raphaël 2.1.0 Client Client Server Server Configuration-Request Configuration-ACK Configuration-Request Configuration-ACK

用户和接入设备对IP服务阶段的一些要求进行多次协商,以决定双方都能够接收的约定。
  通LCP类似,当Request中的一些选项不被接收方接受时, 接收方不会回复Configuration-ACK报文,而是回复其他如Configuration-NACK报文。

NCP Configuration-Request报文

NCP Configuration-NAK报文

4. 会话维持(Session Keep-alive)

设备主动发送Echo Request进行PPPoE心跳保活,若3次未得到服务器的响应,则设备主动释放地址。发LCP Echo Request 的时候,魔术字字段要和之前通信的Configure_Request使用的魔术字字段保持一致。
有些设备或终端不支持主动发送 Echo-Request 报文, 只能支持回应Echo-Reply报文。

5. 会话结束(Session Termination)

PPPoE 还有一个PADT(PPPOE Active Discovery Terminate)分组,它可以在会话建立后的任何时候发送,来终止PPPoE会话,也就是会话释放。它可以由主机或者接入集中器发送,目的地址填充为对端的以太网的MAC地址。
当对方接收到一个 PADT(PPPOE Active Discovery Terminate)分组,就不再允许使用这个会话来发送PPP业务。PADT分组不需要任何标签,其CODE字段值为0xa7(PADT Code),SESSION-ID字段值为需要终止的PPP会话的会话标识号码。在发送或接收PADT后,即使正常的PPP终止分组也不必发送。PPP对端应该使用PPP协议自身来终止PPPoE会话,但是当PPP不能使用时,可以使用PADT。

本文出处:https://blog.csdn.net/Windeal/article/details/51066430

PPP over Ethernet(PPPoE)协议相关推荐

  1. PPP协议和PPPoE协议

    以前没有关注过这两个协议,因为我一直认为PPP协议和PPPoE协议属于底层协议.但是在一次抓包时候发现在校园网内的数据包都带有PPP协议层,因此去研究了一下. 1 PPP协议介绍 PPP 点对点协议( ...

  2. 计算机网络中的PPPoE协议是做什么用的?

    PPPOE协议: 与传统的接入方式相比,PPPoE具有较高的性能价格比,它在包括小区组网建设等一系列应用中被广泛采用,目前流行的宽带接入方式ADSL 就使用了PPPoE协议. 随着低成本的宽带技术变得 ...

  3. ipsec协议_网工知识角轻松学网络|三分钟了解PPPOE协议

    学网络,就在IE-LAB 国内高端网络工程师培养基地 PPPOE( Point-to-PointProtocol Over Ethernet)以太网上的点对点协议,是将点对点协议(PPP)封装在以太网 ...

  4. 【计算机网络】PPP和PPPoE协议

    实验目的 应用所学知识,熟悉 PPP 的封装格式,了解 PPPoE 的封装格式,理解 PPP 的两种认证方式. 实验步骤与结果 ①观察PPP和PPPoE的数据封装格式 安装好Cisco Packet ...

  5. PPPoE协议交互过程

    PPPoE协议交互过程 1.发现阶段(PPPoED:PPPoE Discovery) 1.1 PADI(PPPoE Active Discovery Initiation) 1.2 PADO(PPPo ...

  6. PPPOE协议测试-网络测试仪实操

    前言: 与传统的接入方式相比,PPPoE具有较高的性能价格比,它在包括小区组网建设等一系列应用中被广泛采用,目前流行的宽带接入方式 ADSL 就使用了PPPoE协议. 随着低成本的宽带技术变得日益流行 ...

  7. pppoe协议交互流程以及报文结构

    文章目录 pppoe出现的原因: pppoe的交互流程 Discovery阶段: session阶段: Terminate阶段: pppoe报文结构: pppoe出现的原因: PPP (Point-t ...

  8. DHCP和PPPoE协议以及抓包分析

    目录 一.DHCP协议学习 1.1 定义 1.1.1 使用DHCP的优点 1.2 DHCP客户端 1.3 DHCP服务器 1.4 端口 1.5 DHCP中继 1.6 报文格式及其类型 1.7 DHCP ...

  9. PPPoE协议讲解以及拨号过程Wireshark抓包解析

    文章目录 前言 一.PPPoE的简单介绍 1.PPPoE客户端 2.PPPoE服务器 3.一些典型用例 4.PPPoE帧格式 二.PPPoE会话建立过程 三.PPPoE抓包详解 1.PADI 2.PA ...

最新文章

  1. AndroidSDK结合SpringBoot实现支付宝支付功能
  2. Codeforces 903E Swapping Characters
  3. 磁盘管理及文件系统管理
  4. 题目1023:EXCEL排序
  5. JMM和底层实现原理
  6. window使用技巧记录
  7. mysql 主键索引如何创建_SQL创建索引、主键
  8. eclipse 编辑 python 中文乱码的解决方案
  9. 【java学习之路】(java SE篇)002.java SE基础语法
  10. Android Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x10 in tid 5287 (HeapTaskDaemo
  11. CentOS 6.5 升级内核 kernel
  12. 局域网体系结构与IEEE标准
  13. dc持久内存与mysql_英特尔傲腾数据中心级持久内存的五大用例
  14. mybatis日期查询
  15. Eclipse的各种查找,类的查找,方法查找快捷键
  16. Dubbo 使用 kryo 序列化
  17. 公司估值越低越好吗?买市盈率低的股票究竟是赚是赔?python量化给你答案【附代码】| 邢不行
  18. 仿钉钉考勤统计页面的日历组件,通过日历展示每日考勤打卡情况,支持在日历上打两种不同类型的点,大致适配各种分辨率效果图
  19. 《问题笔记》【Visual Studio】 webView.LoadUrl(“file:///android_asset/mypage.html“)本地页面出现Invalid file path情况
  20. (Python)卫星RPC有理多项式模型读取与正反投影坐标计算原理与实现

热门文章

  1. Unity Rigidbody.AddForce 的 ForceMode
  2. [JavaSE基础笔记]Day10 石头迷阵实现
  3. 人脸识别相关的数据集汇总
  4. 使用Vagrant部署虚拟分布式开发和测试环境
  5. Ubuntu安装以太坊开发环境
  6. 【LSTM新闻数据集分类代码】
  7. Web网站HTML打开QQ聊天窗口示例
  8. 代码质量保证体系(下)
  9. Stream流的常用方法以及代码练习
  10. 机器学习张志华讲的太太太好了