PPPoE工作原理以及PPPoE帧格式

2024-01-23 08:32
文章标签 工作 原理 格式 pppoe

本文主要是介绍PPPoE工作原理以及PPPoE帧格式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

PPPoE工作原理以及PPPoE帧格式
PPPoE协议的工作流程包含发现和会话两个阶段,发现阶段是无状态的,目的是获得 PPPoE终结端(在局端的ADSL设备上)的以太网MAC地址,并建立一个惟一的PPPoESESSION-ID。发现阶段结束后,就进入标准的PPP会话阶段。
当一个主机想开始一个 PPPoE会话,它必须首先进行发现阶段,以识别局端的以太网MAC地址,并建立一个PPPoE SESSION-ID。在发现阶段,基于网络的拓扑,主机可以发现多个接入集中器,然后允许用户选择一个。当发现阶段成功完成,主机和选择的接入集中器都有了他们在以太网上建立PPP连接的信息。直到PPP会话建立,发现阶段一直保持无状态的Client/Server(客户/服务器)模式。一旦PPP会话建立,主机和接入集中器都必须为PPP虚接口分配资源。
PPPoE协议会话的发现和会话两个阶段具体进程如下。
1.发现(Discovery)阶段
在发现( Discovery)阶段中用户主机以广播方式寻找所连接的所有接入集中器(或交换机),并获得其以太网MAC地址。然后选择需要连接的主机,并确定所要建立的PPP会话标识号码。发现阶段有4个步骤,当此阶段完成,通信的两端都知道PPPoE SESSION-ID和对端的以太网地址,他们一起唯一定义PPPoE会话。这4个步骤如下。
(1)     主机广播发起分组( PADI)( PPPOE Active Discovery Initiation),分组的目的地址为以太网的广播地址0×ffffffffffff,CODE(代码)字段值为0×09,SESSION-ID(会话ID)字段值为0×0000。PADI分组必须至少包含一个服务名称类型的标签(标签类型字段值为0×0101),向接入集中器提出所要求提供的服务。
(2)     接入集中器收到在服务范围内的 PADI分组,发送PPPoE有效发现提供包( PADO)( PPPOE Active Discovery Offer)分组,以响应请求。其中CODE字段值为0×07,SESSION-ID字段值仍为0×0000。PADO分组必须包含一个接入集中器名称类型的标签(标签类型字段值为0×0102,以及一个或多个服务名称类型标签,表明可向主机提供的服务种类。
(3)     主机在可能收到的多个 PADO分组中选择一个合适的PADO分组,然后向所选择的接入集中器发送PPPoE有效发现请求分组( PADR)( PPPOE Active Discovery Request)。其中CODE字段为0×19,SESSION_ID字段值仍为0×0000。PADR分组必须包含一个服务名称类型标签,确定向接入集线器(或交换机)请求的服务种类。当主机在指定的时间内没有接收到PADO,它应该重新发送它的PADI分组,并且加倍等待时间,这个过程会被重复期望的次数。
(4)     接入集中器收到 PADR分组后准备开始PPP会话,它发送一个PPPoE有效发现会话确认( PADS)( PPPOE Active Discovery Session-confirmation)分组。其中CODE字段值为0×65,SESSION-ID字段值为接入集中器所产生的一个惟一的PPPoE会话标识号码。PADS分组也必须包含一个接入集中器名称类型的标签以确认向主机提供的服务。当主机收到PADS分组确认后,双方就进入PPP会话阶段。
2.PPP会话阶段
用户主机与接入集中器根据在发现阶段所协商的 PPP会话连接参数进行PPP会话。一旦PPPoE会话开始,PPP数据就可以以任何其他的PPP封装形式发送。所有的以太网帧都是单播的。PPPoE会话的SESSION-ID一定不能改变,并且必须是发现阶段分配的值。
PPPoE还有一个 PADT分组,它可以在会话建立后的任何时候发送,来终止PPPoE会话,也就是会话释放。它可以由主机或者接入集中器发送。当对方接收到一个PADT分组,就不再允许使用这个会话来发送PPP业务。PADT分组不需要任何标签,其CODE字段值为0×a7,SESSION-ID字段值为需要终止的PPP会话的会话标识号码。在发送或接收PADT后,即使正常的PPP终止分组也不必发送。PPP对端应该使用PPP协议自身来终止PPPoE会话,但是当PPP不能使用时,可以使用(PADT)(PPPOE Active Discovery Terminate)结束。
PPPoE帧格式
对应于上面介绍的 PPPoE协议工作的两个阶段,PPPoE帧格式也包括两种类型:发现阶段的以太网帧中的类型字段值为0×8863;PPP会话阶段的以太网帧中的类型字段值为0×8864,均已得到IEEE的认可。PPPoE分组帧结构如图4-6所示。

VER
(4bit)    
TYPE
(4bit)
CODE ( 16bit)
SESSION-ID
8bit)
LENGTH
(16bit)
净载荷(或数据域)
PPPOE帧格式  一共为 48位 8字节
 4-6

PPPoE分组中的版本(VER) 字段和类型(TYPE)字段长度均为 4比特,在当前版本PPPoE建议中这两个字段值都固定为0x1。
代码(CODE)字段长度为 8比特,根据两阶段中各种数据包的不同功能而值不同。在PPP会话阶段CODE字段值为0x00,发现阶段中的各步骤中的各种数据分组格式参见前面的介绍。
版本标识号码(SESSION_ID)字段长度为 16比特,在一个给定的PPP会话过程中它的值是固定不变的,其中值0×ffffff为保留值。
长度(LENGTH)字段为 16比特,指示PPPoE净荷长度。发现阶段PPPoE载荷可以为空或由多个标记(TAG)组成,每个标记都是TLV(类型–长度–值)的结构;PPP会话阶段PPPoE载荷为标准的点对点协议包。
数据域,有时也称之为净载荷域,在 PPPOE的不同阶段该域内的数据内容会有很大的不同。在PPPOE的发现阶段时,该域内会填充一些Tag(标记);而在PPPOE的会话阶段,该域则携带的是PPP的报文。
这里我们主要来介绍一下 PPPOE发现阶段的报文格式以及它的报文:
PPPOE数据报文中Tag(标记)的格式
对于发现阶段的 PPPOE数据报文而言,它的净载荷可能包含零个或多个Tag(标记),实际上这些标记的意义非常类似于PPP配置参数选项,它同样也是要经过协商的。对于PPPOE协议而言,没有像PPP的配置参数选项那样定义了很多细节,而只是一个初略的定义,因此在实际当中实现这个过程会依据不同厂商的设备有不同。首先还是让我们看一下承载在PPPOE报文数据域中的标记封装格式,如图2。

类型
长度
数据

(图 2 标记的封装格式)
从图 2中可以看出,标记的封装格式采用的是大家所熟知的TLV结构,也即是(类型+长度+数据)。标记的类型域为2个字节,下表列出了各种标记类型的含义:
标记类型
标记说明
0x0000
表示PPPOE报文数据域中一串标记的结束,为了保证版本的兼容性而保留,在有些报文中有应用。
0x0101
服务名,主要用来表明网络侧所能提供给用户的一些服务。
0x0102
访问集中器名,当用户侧接收到了AC的回应的PADO报文时,就可获从所携带的标记中获知访问集中器的名子,而且还可以据此来选择相应的访问集中器。
0x0103
主机唯一标识,类似于PPP数据报文中的标识域,主要是用来匹配发送和接收端的,因为对于广播式的网络中会同时存在很多个PPPOE的数据报文。
0x0104
AC-Cookies,主要被用来防止恶意性DOS功击。
0x0105
销售商的标识符。
0x0110
中继会话ID,对于PPPOE的数据报文也同样可以像DHCP报文一样被中断到另外的AC上终结,这个字段则是用来维护另一个连接的。
0x0201
服务名错误,当请求的服务名不被对端所接受时,会在响应的报文中携带这个标记。
0x0202
访问集中器名出错。
0x0203
一般性错误。

 

PPPOE发现阶段的数据报文
说明:在这个阶段,所有数据报文是被承载在以太网的数据域中的,而且以太网数据帧的协议域始终为0x8863。
PPPOE发现阶段的四步的过程中,PPPOE会遇到PADI、PADO、PADR和PADS这四种报文。PPPOE中的PADT报文是用来终止一条会话的。
PADI报文
PPPOE发现阶段的第一步,也即是由用户首先发送这样一个报文。用户主机是以广播的方式发送这个报文,所以该报文所对应的以太网帧的目的地址域应填充为全 1,而源地址域填充用户主机的MAC地址。广播包可能会被多个访问集中器接收到。
PADO报文
PPPOE发现阶段的第二步,也即是由访问集中器回应各用户主机发送的 PADI报文,此时该报文所对应的以太网帧的源地址填充访问集中器的MAC地址,而目的地址则填充从PADI中所获取的用户主机的MAC地址。
PADR报文
PPPOE发现阶段的第三步,也即是由用户主机向访问服务器发送单播的请求报文。当用户主机收到 PADO报文后,会从这些报文中挑选一个访问集中器作为后续会话的对象。由于用户主机在收到PADO报文后,就获知了访问集中器的MAC地址,因此PADR报文所以应的以太网帧的源地址填充用户主机的MAC地址,而以太网的目的地址填充为访问集中器的MAC地址。
PADS报文
PPPOE发现阶段的第四步,也即是最后一步,此时访问集中器当收到 PADR报文时,就准备进入开始一个PPP的会话了,而此时访问集中器会为在这个会话分配一个唯一的会话进程ID,并在发送给主机的PADS报文中携带上这个会话ID。当然如果访问集中器不满足用户所申请的服务的话,则会向用户发送一个PADS报文,而其中携带一个服务名错误的标记,而且此时该PADS报文中的会话ID填充0x0000。
PADT报文
PADT报文可能在会话进行开始之后的任意时间内被发送,主要是用来终止一个 PPPOE会话的止。它可以由主机或访问集中器发送,目的地址填充为对端的以太网的MAC地址。

这篇关于PPPoE工作原理以及PPPoE帧格式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/635814

相关文章

Spring Security 单点登录与自动登录机制的实现原理

《SpringSecurity单点登录与自动登录机制的实现原理》本文探讨SpringSecurity实现单点登录(SSO)与自动登录机制,涵盖JWT跨系统认证、RememberMe持久化Token... 目录一、核心概念解析1.1 单点登录(SSO)1.2 自动登录(Remember Me)二、代码分析三、

SpringBoot 异常处理/自定义格式校验的问题实例详解

《SpringBoot异常处理/自定义格式校验的问题实例详解》文章探讨SpringBoot中自定义注解校验问题,区分参数级与类级约束触发的异常类型,建议通过@RestControllerAdvice... 目录1. 问题简要描述2. 异常触发1) 参数级别约束2) 类级别约束3. 异常处理1) 字段级别约束

在MySQL中实现冷热数据分离的方法及使用场景底层原理解析

《在MySQL中实现冷热数据分离的方法及使用场景底层原理解析》MySQL冷热数据分离通过分表/分区策略、数据归档和索引优化,将频繁访问的热数据与冷数据分开存储,提升查询效率并降低存储成本,适用于高并发... 目录实现冷热数据分离1. 分表策略2. 使用分区表3. 数据归档与迁移在mysql中实现冷热数据分

Java中的xxl-job调度器线程池工作机制

《Java中的xxl-job调度器线程池工作机制》xxl-job通过快慢线程池分离短时与长时任务,动态降级超时任务至慢池,结合异步触发和资源隔离机制,提升高频调度的性能与稳定性,支撑高并发场景下的可靠... 目录⚙️ 一、调度器线程池的核心设计 二、线程池的工作流程 三、线程池配置参数与优化 四、总结:线程

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语

MySQL中的表连接原理分析

《MySQL中的表连接原理分析》:本文主要介绍MySQL中的表连接原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、环境3、表连接原理【1】驱动表和被驱动表【2】内连接【3】外连接【4编程】嵌套循环连接【5】join buffer4、总结1、背景

Mysql常见的SQL语句格式及实用技巧

《Mysql常见的SQL语句格式及实用技巧》本文系统梳理MySQL常见SQL语句格式,涵盖数据库与表的创建、删除、修改、查询操作,以及记录增删改查和多表关联等高级查询,同时提供索引优化、事务处理、临时... 目录一、常用语法汇总二、示例1.数据库操作2.表操作3.记录操作 4.高级查询三、实用技巧一、常用语

深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实

Java Stream的distinct去重原理分析

《JavaStream的distinct去重原理分析》Javastream中的distinct方法用于去除流中的重复元素,它返回一个包含过滤后唯一元素的新流,该方法会根据元素的hashcode和eq... 目录一、distinct 的基础用法与核心特性二、distinct 的底层实现原理1. 顺序流中的去重

利用Python脚本实现批量将图片转换为WebP格式

《利用Python脚本实现批量将图片转换为WebP格式》Python语言的简洁语法和库支持使其成为图像处理的理想选择,本文将介绍如何利用Python实现批量将图片转换为WebP格式的脚本,WebP作为... 目录简介1. python在图像处理中的应用2. WebP格式的原理和优势2.1 WebP格式与传统