PPPoE协议个人理解+报文示例+典型配置-RFC2516

个人认为,理解报文就理解了协议。通过报文中的字段可以理解协议在交互过程中相关传递的信息,更加便于理解协议。

因此本文将在PPPoE协议报文的基础上进行介绍。

PPPoE协议发展

  • 关于PPPoE基本原理,可参考1999年发布的《RFC2516-A Method for Transmitting PPP Over Ethernet》

相关资料

  • 关于PPPoE在巨帧场景下的使用,可参考2006年发布的《RFC4638-Accommodating a MTU/MRU Greater Than 1492 in the PPPoE》
  • 关于PPPoE的扩展使用,可参考2010年发布的《RFC5578-PPPoE Extensions for Credit Flow and Link Metrics》
  • 关于PPPoE协议不同字段的相关定义,可参考IANA发布的《Point-to-Point Over Ethernet (PPPoE) Parameters》
  • 关于PPP协议的相关参数,可参考IANA发布的《Point-to-Point (PPP) Protocol Field Assignments》
  • 关于常用Ethernet网类型,可参考IANA发布的IEEE 802 Numbers
  • 关于IPvX协议所使用的协议号,可参考IANA发布的Assigned Internet Protocol Numbers
  • 关于PPP协议的基本原理,可参考博客-PPP协议原理介绍+报文分析+配置指导-RFC1661

Note:个人能力有限,敬请各位指导。

目录

Point-to-Point Over Ethernet

  • 目录

  • 1.PPPoE协议
    • 1.1.PPPoE基本原理
    • 1.2.PPPoE帧格式
    • 1.3.PPPoE交互过程
  • 2.PPPoE典型配置
  • 更新

1.PPPoE协议

1.1.PPPoE基本原理

PPPoE (Point-to-Point Over Ethernet) 协议主要用于解决一个远程站点设备可以控制连接站点的多个设备主机,同时还可提供类似于使用 PPP 的拨号服务的方式的访问控制和计费功能。在许多接入技术中,Ethernet 网可以用最具成本效益的方法将多台主机连接到客户端接入设备。因此 PPPoE 协议应运而生。

通过 PPPoE 技术,每个用户主机可使用独立的 PPP 协议,实现基于用户的访问计费控制。同时又可具有良好的私密性。

PPPoE的两个阶段
Discovery stage:主机希望启动 PPPoE 会话时,它必须首先执行发现以识别对等体的 Ethernet MAC 地址并建立 PPPoE SESSION_ID。这一阶段称为 Discovery 阶段。

主机可以与之通信的 Access Concentrator 可能不止一个。因此协议允许其发现所有 Access Concentrator 后选择一个。随后主机和选定的 Access Concentrator 都将获得需要通过 Ethernet 建立点对点连接的信息。

PPP Session Stage:在 Discovery 阶段获取到 SESSION_ID 后,Session 阶段开始进行 PPP 协议交互。这一过程包括了 PPP 的 LCP 和 NCP 交互。上述交互都完成后,主机可正式开始访问网络资源。

PPP 协议的 LCP 阶段主要进行包括认证在内的链路协商,NCP 阶段主要进行包括 IP/DNS 地址在内网络资源协商。

由于以太网的最大负载大小为 1500 字节,PPPoE 报头为 6 个字节,PPP 协议 ID 为 2 个字节,因此 PPP MTU 不得大于 1492。

点击此处回到目录

1.2.PPPoE帧格式

PPPoE以太帧
在这里插入图片描述PPPoE 以太帧主要是将 PPP 帧作为 payload 封装于 Ethernet 帧中。同时以 0x8863 的 ETHER_TYPE 标识 Discovery Stage,以 0x8864 的 ETHER_TYPE 标识 PPP Session Stage。

Ethernet payload for PPPoE
在这里插入图片描述VER:4-bits,标识 PPPoE 协议版本。必须置 0x1。
TYPE:4-bits,必须置 0x1。
CODE:8-bits,取值取决于对应的阶段。

目前共约定义了10种左右的CODE值,此处仅介绍常用CODE
CODE=0x00:表示进入PPP Session Stage。
CODE=0x07:PADO,PPPoE Active Discovery Offer。
CODE=0x09:PADI,PPPoE Active Discovery Initiation。
CODE=0x19:PADR,PPPoE Active Discovery Request。
CODE=0x65:PADS,PPPoE Active Discovery Session-confirmation。
CODE=0xa7:PADT,PPPoE Active Discovery Terminate。

SESSION_ID:16-bits,在 Discovery 阶段的 PADS 报文中获取。并且对于给定的 PPP 会话为固定值。

实际上,它定义了 PPP 会话以及以太网 SOURCE_ADDR 和 DESTINATION_ADDR。值 0xffff 保留供将来使用,不得使用。

LENGTH:16-bits,排除了 Ethernet 和 PPPoE 头后的 PPPoE 载荷长。
payload:不定长

Discovery 阶段还可能额外携带TAG TLV:这些TAG可以用于额外标识用户信息。
在这里插入图片描述TAG_TYPE:16-bits,标识 TAG 类型。
TAG_LENGTH:16-bits,标识 TAG_LENGTH 的长度。
TAG_VALUE:不定长,取决于实际值。
自动换行
在此提供常用的PPPoE TAG Values
在这里插入图片描述关于 TAG 字段的详细含义可查看相关资料。

点击此处回到目录

1.3.PPPoE交互过程

在这里插入图片描述PPPoE交互过程如上图所示。

4步Discovery阶段
在这里插入图片描述PADI —> PADO —> PADR —> PADS。

1@PPPoE Active Discovery Initiation:CODE=0x09
首先,用户主机发送 PADI 数据包,并将 DMAC 设置为广播地址。CODE 字段设置为 0x09,SESSION_ID 必须设置为 0x0000。

PADI 数据包必须只包含一个 Service-Name TAG (TAG_TYPE = 0x0101),表示主机请求的服务,以及任意数量的其他 TAG 类型。整个 PADI 数据包包括 PPPoE 头不得超过 1484 位字节,以便为中继代理留出足够的空间来添加 Relay-Session-Id TAG (TAG_TYPE = 0x0110)。

在这里插入图片描述PADI 数据包示例。

2@PPPoE Active Discovery Offer:CODE=0x07
Access Concentrator 收到它可以服务的 PADI 时,它通过发送单播的 PADO 数据包进行回复。CODE 字段设置为 0x07,SESSION_ID 必须设置为 0x0000。

同时必须包含一个包含 Access Concentrator 名称的 AC-Name TAG (TAG_TYPE = 0x0101)、一个与 PADI 中 Service-Name TAG (TAG_TYPE = 0x0101) 相同的 Service-Name TAG,以及表示 Access Concentrator 可提供的其他服务的其他 TAG。

在这里插入图片描述PADO 数据包示例。

3@PPPoE Active Discovery Request:CODE=0x19
用户主机可能会收到多个 PADO,但仅查看它收到的 PADO 数据包并选择一个。用户主机可以根据 AC-Name 或提供的服务进行选择。随后,主机以一个 PADR 数据包进行单播回应。CODE 字段设置为 0x19,SESSION_ID 必须设置为 0x0000。

PADR 数据包必须只包含一个 Service-Name TAG (TAG_TYPE = 0x0101),表示主机请求的服务,以及任意数量的其他 TAG 类型。

在这里插入图片描述PADR 数据包示例。

4@PPPoE Active Discovery Session-confirmation:CODE=0x65
当 Access Concentrator 收到 PADR 数据包时,为 PPPoE 会话生成唯一的 SESSION_ID,并使用 PADS 数据包单播回复主机。CODE 字段设置为 0x65,并且 SESSION_ID 必须设置为为此 PPPoE 会话生成的唯一值

PADS 数据包只包含一个 Service-Name TAG (TAG_TYPE = 0x0101),指示可提供接受 PPPoE 会话的服务,以及任意数量的其他 TAG 类型。如果 Access Concentrator 不喜欢 PADR 中的 Service-Name,则它必须回复包含 Service-Name-Error (TAG_TYPE = 0x0201,以及任意数量的其他 TAG 类型) 的 PADS 数据包。同时在这种情况下,SESSION_ID 必须设置为 0x0000。

在这里插入图片描述PADS 数据包示例。

5@PPPoE的终止PPPoE Active Discovery Terminate:CODE=0xA7
PADT 数据包可以在建立会话后的任何时间发送,以指示 PPPoE 会话已终止。并且不限制发送方。CODE 字段设置为 0xa7,并且必须设置 SESSION_ID 以指示要终止的会话。

PADT 数据包不需要 TAG。 收到 PADT 后,不允许使用该会话发送进一步的 PPP 流量。即使是普通的 PPP termination 数据包,在发送或接收 PADT 后也不得发送。 PPP 对等体应该使用 PPP 协议来关闭 PPPoE 会话,但是当 PPP 不能使用时,可以使用 PADT。

在这里插入图片描述PADT 数据包示例。

PPPoE的PPP Session Stage阶段
在完成 PPPoE 的发现阶段后,将进入 PPP 会话阶段。在此阶段将先进行 PPP 的 LCP (Link Control Protocol,链路控制协议) 进行链路协商。随后进入 NCP (Network Control Protocols,网络控制协议),以便完成 IP/DNS 在内的网络层协议协商。最终在 NLP (Network Layer Protocols,网络层协议) 中进行真正的业务报文交互。

关于 PPP 协议的基本原理,可参考博客-PPP协议原理介绍+报文分析+配置指导-RFC1661

在这里插入图片描述PPPoE的PPP Session Stage阶段报文示例。

在此阶段,需要将 ETHER_TYPE 字段设置为 0x8864,PPPoE CODE 设置为 0x00。并且该 PPPoE 会话的 SESSION_ID 不得更改,并且必须是在 Discovery 阶段分配的值。PPPoE 的 PPP 帧以 PPP 协议 ID 开头。

在这里插入图片描述PPP 协议 ID 为 0xc021 时表示 LCP 协议。
在这里插入图片描述PPP 协议 ID 为 0x0021 时表示 NLP 交互的 IPv4 协议。

其他需要注意的内容

  1. 由于以太网的最大负载大小为 1500 字节,PPPoE 报头为 6 个字节,PPP 协议 ID 为 2 个字节,因此 PPP MTU 不得大于 1492。
  2. 当主机在指定时间内没有收到 PADO 数据包时,它应该重新发送 PADI 数据包并将等待时间加倍。根据需要重复多次此操作。
  3. 如果主机正在等待接收 PADS 数据包,则应使用类似的超时机制,以便在未收到 PADS 数据包时重新发送 PADR。在指定的重试次数后,主机应该重新发送 PADI 数据包。

点击此处回到目录

2.PPPoE典型配置

在这里插入图片描述这里以上图为例,进行 PPPoE 的相关介绍。

AR1:
interface Dialer0link-protocol pppppp ipcp default-routeppp chap user pppoe-1ppp chap password cipher pppoe-1ppp timer negotiate 5ppp ipcp dns requesttimer hold 20ip address ppp-negotiatedialer user pppoe-1dialer bundle 1dialer number 1111dialer timer enable 6dialer-group 1
#
interface GigabitEthernet0/0/0pppoe-client dial-bundle-number 1 
#AR2:
aaa local-user pppoe-1 password cipher pppoe-1local-user pppoe-1 service-type ppp
#
interface Virtual-Template1ppp authentication-mode chap remote address pool pool-pppoeppp ipcp remote-address forcedppp ipcp default-routeppp timer negotiate 5ppp ipcp dns 8.8.8.8 114.114.114.114timer hold 20ip address 192.168.1.1 255.255.255.0 
#
interface GigabitEthernet0/0/0pppoe-server bind Virtual-Template 1
#

在这里插入图片描述display pppoe-server session all 用于查看相应的 PPPoE 信息。

点击此处回到目录

更新

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1556236.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

大模型客服的未来发展趋势

在当今数字化时代,大模型客服正以惊人的速度改变着客户服务的格局。随着技术的不断进步,大模型客服的未来发展趋势充满了无限可能。随着人工智能技术的快速发展,智能客服领域正迎来一场前所未有的变革。大模型客服作为其中的重要分支&#xf…

32位机器上指针大小为什么是4字节?

(1)32位机器可寻址内存空间位4GB。为什么? 32位机器的总线宽度是32位,每一位可以是0或者1,那么32位可以表示个不同的值,也就是能寻址到个内存地址,每个内存地址对应一个内存单元(1个…

RFID学习

24.10.5学习目录 一.简介1.组成2.RFID协议3.RFID卡 一.简介 RFID被称为无线射频识别,其是一种通信技术,通过无线电讯号耦合识别特定目标并读写相关数据; RFID主要位于典型物联网架构中的感知层,其因为具有非接触式特性&#xff…

hiricacp 连接池校验机制

一、背景 项目发生告警,但是并没有影响业务,看了下日志,红框里面有循环调用了3次 ,一直以为是外部的重试在重试,但是外部确没有重试记录,就深扒了代码 二、想法 我知道hikaricp获取连接之后会校验连接的有…

k8s 之安装metrics-server

作者:程序那点事儿 日期:2024/01/29 18:25 metrics-server可帮助我们查看pod的cpu和内存占用情况 kubectl top po nginx-deploy-56696fbb5-mzsgg # 报错,需要Metrics API 下载 Metrics 解决 wget https://github.com/kubernetes-sigs/metri…

系统架构设计师⑦:企业信息化战略与实施

系统架构设计师⑦:企业信息化战略与实施 信息的概念及特点 信息的定义: ①香农:信息就是不确定性的减少。 ②维纳:信息就是信息,既不是物质,也不是能量。 信息的特点: ①客观性(真伪性):也叫事实性,不符…

【最新华为OD机试E卷-支持在线评测】简单的自动曝光(100分)多语言题解-(Python/C/JavaScript/Java/Cpp)

🍭 大家好这里是春秋招笔试突围 ,一枚热爱算法的程序员 💻 ACM金牌🏅️团队 | 大厂实习经历 | 多年算法竞赛经历 ✨ 本系列打算持续跟新华为OD-E/D卷的多语言AC题解 🧩 大部分包含 Python / C / Javascript / Java / Cpp 多语言代码 👏 感谢大家的订阅➕ 和 喜欢�…

神经网络激活函数列表大全及keras中的激活函数定义

一、概述 在机器学习中,激活函数是神经网络中的一种函数,用于在神经网络的每个神经元中引入非线性。没有激活函数,神经网络就无法学习复杂的模式,因为线性变换的组合仍然是线性的。 在神经网络的每层中,将该层所有输…

设计模式之装饰器模式(Decorator)

一、装饰器模式介绍 装饰模式(decorator pattern) 的原始定义是:动态的给一个对象添加一些额外的职责。 就扩展功能而言,装饰器模式提供了一种比使用子类更加灵活的替代方案。 在软件设计中,装饰器模式是一种用于替代继承的技术,它…

【颜色平衡树 / E】

题目 思路 DFS暴力 60分 代码 #include <bits/stdc.h> using namespace std; const int N 5010; const int M 5010; int h[N], e[M], ne[M], idx; int c[N], f; int ans; void add(int a, int b) // 添加一条边a->b {e[idx] b, ne[idx] h[a], h[a] idx ; } …

Linux防火墙-常用命令

作者介绍&#xff1a;简历上没有一个精通的运维工程师。希望大家多多关注作者&#xff0c;下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 我们经过上小章节讲了Linux的部分进阶命令&#xff0c;我们接下来一章节来讲讲Linux防火墙。由于目前以云服务器为主&#x…

C语言—单链表

目录 一、链表的概念及结构 二、单链表实现 &#xff08;2.1&#xff09;基本结构定义 &#xff08;2.2&#xff09;申请节点 &#xff08;2.3&#xff09;打印函数 &#xff08;2.4&#xff09;头部插入删除\尾部插入删除 &#xff08;2.4.1&#xff09;尾部插入 &…

计算机毕业设计 基于Python的人事管理系统的设计与实现 Python+Django+Vue 前后端分离 附源码 讲解 文档

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

spring揭秘26-springmvc06-springmvc注解驱动的web应用

文章目录 【README】【1】springmvc注解驱动web应用【1.1】springmvc注解驱动web应用的3个组件【1.2】springmvc注解驱动web应用代码实践 【2】springmvc常用注解【2.1】Controller注解&#xff08;标注处理器类&#xff09;【2.2】RequestMapping注解&#xff08;标注处理器类…

OpenAI董事会主席Bret Taylor的Agent公司Sierra:专注于赋能下一代企业用户体验

本文由readlecture.cn转录总结。ReadLecture专注于音、视频转录与总结&#xff0c;2小时视频&#xff0c;5分钟阅读&#xff0c;加速内容学习与传播。 视频来源 youtube: https://www.youtube.com/watch?vriWB5nPNZEM&t47s 大纲 介绍 欢迎与介绍 介绍Bret Taylor&#x…

如 有 任 何 问 题 ,请 及 时 联 系 我 们 反 馈 !

如有任何问题&#xff0c; 请及时联系我们反馈 !https://support.qq.com/products/671606 如有任何问题&#xff0c; 请及时联系我们反馈 !

基金好书入门阅读笔记《基金作战笔记:从投基新手到配置高手的进阶之路》2

买基金&#xff0c;说到底是买基金所持有的一揽子资产。那么&#xff0c;常见的可投资产都有哪些类型呢&#xff1f; 图2.9进行了系统性的梳理&#xff0c;我们把资产分为四大类&#xff0c;分别是权益类、固收类、现金和另 类&#xff0c;下面就一一解读。 年化收益率是把一段…

Bluetooth Channel Sounding中关于CS Procedure的详细介绍

目录 BLE CS 过程定义&#xff1a; BLE CS 过程的组成部分 开始一个BLE CS 过程 与BLE CS过程相关的参数设置 BLE CS 过程定义&#xff1a; BLE 的CS特性包含一组LL层和空口协议的组合过程&#xff0c;该过程可以使得两个BLE 设备以紧密互锁的方式&#xff0c;在多个信道上…

人工智能专业就业方向与前景

随着产业结构升级的持续推进&#xff0c;未来行业领域对于人工智能专业人才的需求量会逐渐增加&#xff0c;一部分高校也开始陆续在本科阶段开设人工智能专业&#xff0c;以缓解人工智能领域人才缺口较大的问题。下面是小编整理的人工智能专业就业方向与前景&#xff0c;欢迎阅…

第五节——转移表(让你不再害怕指针)

文章目录 制作简易计算器什么是转移表&#xff1f;switch函数实现函数指针数组实现 制作简易计算器 要求&#xff1a;制作一个简易计算器&#xff0c;可以进行* / - 等功能运算。 什么是转移表&#xff1f; 指的就是通过函数指针数组的方式通过数组去调用里面的函数&#x…