【PPPoE】PPPoE拨号流程
简介
PPPoE(Point-to-Point Protocol over Ethernet)是一种在以太网上封装PPP协议的方式,常用于在宽带接入中进行拨号。
PPPoE的拨号原理如下:
- 客户端发起PPPoE Active Discovery Initiation (PADI)报文,广播到网络中的所有PPPoE服务器,表示客户端想要建立连接。
- PPPoE服务器收到PADI报文后,回复PPPoE Active Discovery Offer (PADO)报文,告知客户端当前服务器的信息,包括服务名、会话ID等。
- 客户端从PADO报文中选择一个服务器,并发送PPPoE Active Discovery Request (PADR)报文,请求连接到该服务器。
- PPPoE服务器收到PADR报文后,向客户端发送PPPoE Active Discovery Session-confirmation (PADS)报文,告知客户端连接成功。
- 客户端和服务器建立PPPoE会话,并进行身份认证、配置等工作。
- PPPoE会话建立后,客户端和服务器开始进行数据传输。
在PPPoE会话建立之前,客户端必须先完成物理层和数据链路层的连接,也就是完成以太网的连接。此时,客户端和服务器之间还没有IP地址和路由信息,只能通过PPP协议进行数据传输。在建立了PPPoE会话之后,客户端和服务器可以互相分配IP地址,并通过路由协议交换路由信息,完成最终的数据传输。
需要注意的是,不同的ISP可能会有不同的PPPoE参数设置,例如MTU大小、认证方式等,因此在进行PPPoE拨号时,需要按照ISP的要求进行设置。
PPPOE拨号流程
PADI
在PPPoE中,PPPoE客户端需要发送PADI(PPPoE Active Discovery Initiation)消息以寻找PPPoE服务器。PADI消息包含以下字段:
- Version:一个1字节的字段,用于指示PADI消息使用的PPPoE版本。目前的版本号为1。
- Type:一个1字节的字段,用于指示PADI消息的类型。在PADI消息中,该字段的值为1。
- Code:一个1字节的字段,用于指示PADI消息的代码。在PADI消息中,该字段的值为0。
- Session ID:一个2字节的字段,用于标识PPPoE会话。在PADI消息中,该字段的值为0。
- Payload:一个可变长度的字段,用于包含PADI消息的有效载荷。在PADI消息中,有效载荷为空。
PADI消息的详细解释如下:
- Version字段:该字段用于指示PADI消息所使用的PPPoE版本。目前,PPPoE版本号为1,因此在PADI消息中,Version字段的值为1。
- Type字段:该字段用于指示PADI消息的类型。在PADI消息中,Type字段的值为1,表示该消息是一个发现消息。
- Code字段:该字段用于指示PADI消息的代码。在PADI消息中,Code字段的值为0,表示该消息是一个发现请求消息。
- Session ID字段:该字段用于标识PPPoE会话。在PADI消息中,Session ID字段的值为0,因为在这个阶段还没有建立PPPoE会话。
- Payload字段:该字段用于包含PADI消息的有效载荷。在PADI消息中,Payload字段为空,因为在发现阶段不需要任何数据。
PADO
当PPPoE服务器收到PPPoE Active Discovery Initiation (PADI) 消息后,会返回一个PPPoE Active Discovery Offer (PADO) 消息。PADO消息用于向PPPoE客户端提供PPPoE服务器的相关信息,以便客户端选择一个服务器与之建立PPPoE会话。
PADO消息包含以下字段:
- Version:一个1字节的字段,用于指示PADO消息使用的PPPoE版本。目前的版本号为1。
- Type:一个1字节的字段,用于指示PADO消息的类型。在PADO消息中,该字段的值为2。
- Code:一个1字节的字段,用于指示PADO消息的代码。在PADO消息中,该字段的值为0。
- Session ID:一个2字节的字段,用于标识PPPoE会话。在PADO消息中,该字段的值与客户端在PADI消息中发送的Session ID字段的值相同。
- Payload:一个可变长度的字段,用于包含PADO消息的有效载荷。在PADO消息中,有效载荷包含服务器提供的信息,例如服务器的MAC地址、服务名称、最大传输单元(MTU)等。
PADO消息的详细解释如下:
- Version字段:该字段用于指示PADO消息所使用的PPPoE版本。目前,PPPoE版本号为1,因此在PADO消息中,Version字段的值为1。
- Type字段:该字段用于指示PADO消息的类型。在PADO消息中,Type字段的值为2,表示该消息是一个提供消息。
- Code字段:该字段用于指示PADO消息的代码。在PADO消息中,Code字段的值为0,表示该消息是一个提供成功消息。
- Session ID字段:该字段用于标识PPPoE会话。在PADO消息中,Session ID字段的值与客户端在PADI消息中发送的Session ID字段的值相同。
- Payload字段:该字段用于包含PADO消息的有效载荷。在PADO消息中,有效载荷包含服务器提供的信息,例如服务器的MAC地址、服务名称、最大传输单元(MTU)等。PPPoE客户端可以使用这些信息来选择一个合适的PPPoE服务器并建立PPPoE会话。
PADR
当PPPoE客户端收到PPPoE Active Discovery Offer (PADO) 消息后,会发送PPPoE Active Discovery Request (PADR) 消息来选择一个PPPoE服务器并建立PPPoE会话。PADR消息包含以下字段:
- Version:一个1字节的字段,用于指示PADR消息使用的PPPoE版本。目前的版本号为1。
- Type:一个1字节的字段,用于指示PADR消息的类型。在PADR消息中,该字段的值为1。
- Code:一个1字节的字段,用于指示PADR消息的代码。在PADR消息中,该字段的值为0。
- Session ID:一个2字节的字段,用于标识PPPoE会话。在PADR消息中,该字段的值与客户端在PADI消息中发送的Session ID字段的值相同。
- Payload:一个可变长度的字段,用于包含PADR消息的有效载荷。在PADR消息中,有效载荷包含客户端选择的PPPoE服务器的相关信息,例如服务器的MAC地址、服务名称等。
PADR消息的详细解释如下:
- Version字段:该字段用于指示PADR消息所使用的PPPoE版本。目前,PPPoE版本号为1,因此在PADR消息中,Version字段的值为1。
- Type字段:该字段用于指示PADR消息的类型。在PADR消息中,Type字段的值为1,表示该消息是一个请求消息。
- Code字段:该字段用于指示PADR消息的代码。在PADR消息中,Code字段的值为0,表示该消息是一个请求成功消息。
- Session ID字段:该字段用于标识PPPoE会话。在PADR消息中,Session ID字段的值与客户端在PADI消息中发送的Session ID字段的值相同。
- Payload字段:该字段用于包含PADR消息的有效载荷。在PADR消息中,有效载荷包含客户端选择的PPPoE服务器的相关信息,例如服务器的MAC地址、服务名称等。客户端发送这些信息以请求与服务器建立PPPoE会话。
PADS
当PPPoE服务器收到PPPoE Active Discovery Request (PADR) 消息后,如果服务器可以接受该请求并准备好与客户端建立PPPoE会话,则服务器会返回一个PPPoE Active Discovery Session-confirmation (PADS) 消息。PADS消息用于确认PPPoE会话的建立,并向客户端提供会话的相关信息。
PADS消息包含以下字段:
- Version:一个1字节的字段,用于指示PADS消息使用的PPPoE版本。目前的版本号为1。
- Type:一个1字节的字段,用于指示PADS消息的类型。在PADS消息中,该字段的值为3。
- Code:一个1字节的字段,用于指示PADS消息的代码。在PADS消息中,该字段的值为0。
- Session ID:一个2字节的字段,用于标识PPPoE会话。在PADS消息中,该字段的值与客户端在PADR消息中发送的Session ID字段的值相同。
- Payload:一个可变长度的字段,用于包含PADS消息的有效载荷。在PADS消息中,有效载荷包含服务器提供的信息,例如客户端的IP地址、服务器的IP地址、最大传输单元(MTU)等。
PADS消息的详细解释如下:
- Version字段:该字段用于指示PADS消息所使用的PPPoE版本。目前,PPPoE版本号为1,因此在PADS消息中,Version字段的值为1。
- Type字段:该字段用于指示PADS消息的类型。在PADS消息中,Type字段的值为3,表示该消息是一个会话确认消息。
- Code字段:该字段用于指示PADS消息的代码。在PADS消息中,Code字段的值为0,表示该消息是一个会话确认成功消息。
- Session ID字段:该字段用于标识PPPoE会话。在PADS消息中,Session ID字段的值与客户端在PADR消息中发送的Session ID字段的值相同。
- Payload字段:该字段用于包含PADS消息的有效载荷。在PADS消息中,有效载荷包含服务器提供的信息,例如客户端的IP地址、服务器的IP地址、最大传输单元(MTU)等。客户端接收这些信息以确认会话的建立,并使用它们来配置PPPoE接口以实现数据传输。
PPP身份验证
PPPoE建立连接后,后续的验证流程包括PPP身份验证和PPPoE会话阶段。
PPP身份验证是在PPP协议层进行的。PPP身份验证是为了验证客户端是否有访问服务器资源的权限。PPP身份验证分为PAP和CHAP两种方式。
PAP
PAP(Password Authentication Protocol)是一种简单的密码认证协议。PAP验证流程如下:
- 客户端将用户名和密码以明文形式发送给服务器。
- 服务器接收到用户名和密码后,将其与存储在服务器上的用户名和密码进行比较。
- 如果用户名和密码匹配,则服务器发送一个认证成功消息给客户端。否则,服务器发送一个认证失败消息给客户端。
CHAP
CHAP(Challenge-Handshake Authentication Protocol)是一种更加安全的密码认证协议。CHAP验证流程如下:
- 客户端向服务器端发送身份认证请求,请求认证自己的身份。
- 服务器端接收到请求后,生成一个随机数作为挑战,发送给客户端。
- 客户端收到挑战后,将挑战和密码通过某种加密算法(如MD5)进行加密,得到一个响应值,并将响应值发送给服务器端。
- 服务器端收到响应值后,使用相同的加密算法对挑战和密码进行加密,如果加密结果与客户端发送的响应值相同,则认证通过。
在这个过程中,客户端和服务器端需要协商使用哪种加密算法。CHAP协议定义了三种加密算法:MD5、SHA-1和Windows NT Hash。这些算法是在协议中被硬编码的,客户端和服务器端在协商加密算法时,会根据协议规定的算法列表进行选择。
具体来说,在CHAP协议中,挑战和响应值都是通过加密算法进行处理的。客户端和服务器端在进行加密时,会使用预共享的密码或密钥作为加密密钥。在这个过程中,客户端和服务器端都知道密码,但密码并不会在通信中明文传输,而是在加密过程中进行处理,以保证通信的安全性。
总的来说,CHAP协议的加密算法是在客户端和服务器端的挑战-响应过程中进行协商的,客户端和服务器端会根据协议定义的加密算法列表选择一种算法,并使用预共享的密码进行加密,以实现身份认证和通信的安全性。
PPP LCP Configure
在PPP链路层会话建立的过程中,客户端和服务器端之间需要进行链路参数的协商。协商的内容包括数据压缩、最大传输单元(MTU)、错误检测和校验、协议类型等等。协商的过程需要双方相互发送LCP Configure-Request和LCP Configure-Ack或LCP Configure-Nak或LCP Configure-Reject消息,直到双方都同意使用相同的链路参数为止。
当PPP客户端想要和PPP服务器端建立PPP链路层会话时,它会向服务器端发送LCP Configure-Request消息。这个消息包含了客户端希望协商的链路参数,例如MTU大小、最大协商值等等。PPP服务器收到Configure-Request消息后,会向客户端回复Configure-Ack、Configure-Nak或Configure-Reject消息,告知客户端是否接受这些链路参数或提供可选的链路参数值。如果接收到的是Configure-Ack消息,则说明链路参数已经协商完成,PPP链路层会话建立成功;如果接收到的是Configure-Nak或Configure-Reject消息,则说明链路参数协商失败,需要重新协商。
- 客户端接收到PADS消息后,向服务器发送一个PPP LCP Configure-Request消息,以协商PPP连接的配置参数。
- 服务器接收到客户端发送的Configure-Request消息后,向客户端发送一个PPP LCP Configure-Ack消息,以确认协商结果。
- 客户端和服务器通过发送PPP NCP Configure-Request和Configure-Ack消息来协商网络控制协议(NCP)的配置参数,以完成PPPoE会话的建立。
相关文章:
【PPPoE】PPPoE拨号流程
简介 PPPoE(Point-to-Point Protocol over Ethernet)是一种在以太网上封装PPP协议的方式,常用于在宽带接入中进行拨号。 PPPoE的拨号原理如下: 客户端发起PPPoE Active Discovery Initiation (PADI)报文,广播到网络…...
django项目实战(django+bootstrap实现增删改查)
目录 一、创建django项目 二、修改默认配置 三、配置数据库连接 四、创建表结构 五、在app当中创建静态文件 六、页面实战-部门管理 1、实现一个部门列表页面 2、实现新增部门页面 3、实现删除部门 4、实现部门编辑功能 七、模版的继承 1、创建模板layout.html 1&…...
Lesson4---Python语言基础(2)
4.1 内置数据结构 4.1.1 序列数据结构(sequence) 成员是有序排列的每个元素的位置称为下标或索引通过索引访问序列中的成员Python中的序列数据类型有字符串、列表、元组 “abc” ≠ “bac” 4.1.1.1 创建列表和元组 Python中的列表和元组,…...
NCHW - NHWC - CHWN 排列
TensorFlow有两种数据格式NHWC和NCHW,默认的数据格式是NHWC,可以通过参数data_format指定数据格式。这个参数规定了 input Tensor 和 output Tensor 的排列方式。 1、data_format 设置为 “NHWC” 时,排列顺序为 [batch, height, width, channels] 设置为 “NCHW” 时,排…...
2019蓝桥杯真题矩阵切割(填空题) C语言/C++
题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 小明有一些矩形的材料,他要从这些矩形材料中切割出一些正方形。 当他面对一块矩形材料时,他总是从中间切割一刀,切出一块最大的正…...
Java线程池的创建以及原理
一、为什么要使用线程池 在外面的日常开发中,也使用了不少池化技术,比如线程池、数据库连接池、HTTP连接池等等都是对这个思想的应用。 池化技术的思想主要是为了减少每次获取资源的消耗,提高对资源的利用率。 线程池提供了一种限制和管理资…...
Java集合学习之Map
1.什么是Map Java里的Map接口是一个集合根接口,表示一个 键值对(Key-Value) 的映射。 简单来说就是键和值是一对的,每一个 Key都有唯一确定的 Value对应。 其中要求 键(Key) 唯一,因为是按照…...
java 基于maven多模块合并打包部署
项目环境 jdk 1.8spring 2.7.xmaven 3.6 项目结构 模块功能 client – 对外service common – 共用工具切面等 main – 启动类 goods – 子模块具体实现 模块间依赖关系 client – 无依赖 common – 无依赖 main – client、common、goods goods – client、common 具体P…...
Kubernetes是个什么东东?
Kubernetes 是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。 Kubernetes 拥有一个庞大且快速增长的生态,其服务、支持和工具的使用范围相当广泛。 Kubernetes 这个名字源于希腊语,意…...
【go语言grpc之client端源码分析三】
go语言grpc之server端源码分析三newClientStreamnewAttemptLocked上一篇在介绍了grpc.Dial之后,然后再介绍一下后面的 //创建RPC客户端client : pb.NewGreetsClient(conn)//设置超时时间_, cancel : context.WithTimeout(context.Background(), time.Second)defer c…...
Android 基础知识4-2.6LinearLayout(线性布局)
一、LinearLayout的概述 线性布局(LinearLayout)主要以水平或垂直方式来排列界面中的控件。并将控件排列到一条直线上。在线性布局中,如果水平排列,垂直方向上只能放一个控件,如果垂直排列,水平方向上也只能…...
补充前端面试题(三)
图片懒加载<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width, in…...
.net开发安卓入门-自动升级(配合.net6 webapi 作为服务端)
文章目录思路客户端权限清单(AndroidManifest.xml)权限列表(完整内容看 权限清单(AndroidManifest.xml))打开外部应用的权限(完整内容看 权限清单(AndroidManifest.xml))添加文件如下…...
分享111个HTML艺术时尚模板,总有一款适合您
分享111个HTML艺术时尚模板,总有一款适合您 111个HTML艺术时尚模板下载链接:https://pan.baidu.com/s/1sYo2IPma4rzeku3yCG7jGw?pwdk8dx 提取码:k8dx Python采集代码下载链接:采集代码.zip - 蓝奏云 时尚理发沙龙服务网站模…...
spring之Spring AOP基于注解
文章目录前言一、Spring AOP基于注解的所有通知类型1、前置通知2、后置通知3、环绕通知4、最终通知5、异常通知二、Spring AOP基于注解之切面顺序三、Spring AOP基于注解之通用切点三、Spring AOP基于注解之连接点四、Spring AOP基于注解之全注解开发前言 通知类型包括&#x…...
LeetCode题目笔记——6362. 合并两个二维数组 - 求和法
文章目录题目描述题目链接题目难度——简单方法一:常规双指针遍历代码/Python方法二:字典\哈希表代码/Python总结题目描述 给你两个 二维 整数数组 nums1 和 nums2. nums1[i] [idi, vali] 表示编号为 idi 的数字对应的值等于 vali 。nums2[i] [idi, …...
【C#基础】C# 常用语句讲解
序号系列文章3【C#基础】C# 数据类型总结4【C#基础】C# 变量和常量的使用5【C#基础】C# 运算符总结文章目录前言语句概念1,迭代语句1.1 for 语句1.2 foreach 语句1.3 while 语句1.4 do 语句2,选择语句2.1,if 语句2.2,else 语句2.3…...
腾讯云——负载均衡CLB
负载均衡 CLB 提供四层(TCP 协议/UDP 协议/TCP SSL 协议)和七层(HTTP 协议/HTTPS 协议)负载均衡。您可以通过 CLB 将业务流量分发到多个后端服务器上,消除单点故障并保障业务可用性。CLB 自身采用集群部署,…...
6.关于系统服务的思考—— native vs java
文章目录native服务 以sensor service为例Native 服务java 服务, 以vibrate为例java 服务 以一个demo为例native服务 以sensor service为例 service启动 SystemServer.startBootstrapServices---->>>mSystemServiceManager.startService—>>>Sen…...
SQL语句创建视图:
前言 🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻推荐专栏: 🍔🍟🌯 c语言初阶 🔑个人信条: 🌵知行合一 🍉本篇简介:>:介绍数据库中有关视图的知识,参考学校作业. 金句分享:…...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...
UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...
C++ 设计模式 《小明的奶茶加料风波》
👨🎓 模式名称:装饰器模式(Decorator Pattern) 👦 小明最近上线了校园奶茶配送功能,业务火爆,大家都在加料: 有的同学要加波霸 🟤,有的要加椰果…...
mac:大模型系列测试
0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何,是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试,是可以跑通文章里面的代码。训练速度也是很快的。 注意…...
Axure 下拉框联动
实现选省、选完省之后选对应省份下的市区...
Linux操作系统共享Windows操作系统的文件
目录 一、共享文件 二、挂载 一、共享文件 点击虚拟机选项-设置 点击选项,设置文件夹共享为总是启用,点击添加,可添加需要共享的文件夹 查询是否共享成功 ls /mnt/hgfs 如果显示Download(这是我共享的文件夹)&…...
2025 后端自学UNIAPP【项目实战:旅游项目】7、景点详情页面【完结】
1、获取景点详情的请求【my_api.js】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http(/login/getWXSessionKey, {code,avatar}); };//…...
