【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语言初阶 🔑个人信条: 🌵知行合一 🍉本篇简介:>:介绍数据库中有关视图的知识,参考学校作业. 金句分享:…...
使用BP神经网络和Elman Net预测航班价格(Matlab代码实现)
👨🎓个人主页:研学社的博客💥💥💞💞欢迎来到本博客❤️❤️💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密…...
JavaWeb9-volatile解决内存可见性和指令重排序问题
目录 1.解决内存可见性问题 2.解决指令重排序问题 3.volatile缺点 4.特使使用场景 volatile(易变的,易挥发的,不稳定的)可以解决内存可见性和指令重排序的问题。 1.解决内存可见性问题 代码在写入 volatile 修饰的变量时&am…...
Docker - 镜像操作命令
镜像名称一般分为两部分组成:[repository]:[tag]在没有指定tag时,默认是latest,代表最新版本的镜像1.下载docker镜像 docker pull repository:tag2.查看本地所有镜像 docker images3.创建镜像别名 docker tag repository:tag repository111:tag4.查看镜像…...
全栈之路-前端篇 | 第三讲.基础前置知识【前端标准与研发工具】学习笔记
欢迎关注「全栈工程师修炼指南」公众号 点击 👇 下方卡片 即可关注我哟! 设为「星标⭐」每天带你 基础入门 到 进阶实践 再到 放弃学习! 涉及 企业运维、网络安全、应用开发、物联网、人工智能、大数据 学习知识 “ 花开堪折直须折,莫待无花…...
Tomcat 线上调优记录
原始Tomcat配置 启动参数Plaintext-Xms256m -Xmx512m -XX:MaxPermSize128m Tomcat 参数配置XML<Executor name"tomcatThreadPool" namePrefix"catalina-exec-" maxThreads"1500" minSpareThreads"50" maxIdleTime"600000&q…...
学习 Python 之 Pygame 开发坦克大战(四)
学习 Python 之 Pygame 开发坦克大战(四)坦克大战添加音效1. 初始化音效2. 加入游戏开始音效和坦克移动音效3. 添加坦克开火音效4. 添加装甲削减音效5. 添加坦克爆炸音效6. 添加子弹击中边界音效坦克大战添加音效 我的素材放到了百度网盘里,…...
New和Malloc的使用及其差异
1,new的使用关于new的定义:new其实就是告诉计算机开辟一段新的空间,但是和一般的声明不同的是,new开辟的空间在堆上,而一般声明的变量存放在栈上。通常来说,当在局部函数中new出一段新的空间,该…...
2023年细胞生物学复习汇总
细胞分化 1.什么是细胞分化?细胞分化的特点是什么? 答:(1)细胞分化(cell differentiation)是指同一来源的细胞逐渐产生出形态结构、功能特征各不相同的细胞类群的过程,其结果是在空间…...
光伏VSG-基于虚拟同步发电机的光伏并网逆变器系统MATLAB仿真
采用MATLAB2021b仿真!!!仿真模型1光伏电池模块(采用MATLAB自带光伏模块)、MPPT控制模块、升压模块、VSG控制模块、电流滞环控制模块。2s时改变光照强度 !!!VSG输出有功功率、无功功率…...
高可用 - 02 Keepalived_VRRP工作原理
文章目录Keepalived VS HeartbeatKeepalived的用途VRRP与工作原理物理路由器和虚拟路由器Keepalived VS Heartbeat Keepalived是Linux下一个轻量级的高可用解决方案,它与Heartbeat、RoseHA实现的功能类似,都可以实现服务或者网络的高可用,但…...
做视频商用模板哪个网站靠谱/系列推广软文范例
一.反射定义放射是指程序可以访问。检测和修改它本身状态或行为的一种能力(自省)。二.四个自省的函数Python中提供了以下四种自省的函数,使用于类和对象。1.hasattr函数--用于判断obj中有没有name字符串对应的方法或属…...
网站设置安全/百度霸屏推广一般多少钱
一个小型的网站,比如个人网站,可以使用最简单的html静态页面就实现了,配 合一些图片达到美化效果,所有的页面均存放在一个目录下,这样的网站 对系统架构、性能的要求都很简单,随着互联网业务的不断丰富&…...
网站建设拟解决问题/seo免费诊断
目录 介绍 多核系统的好处 Nios II多核系统 硬件设计考虑 在多核系统中分享资源 软件设计考虑 设计范例 为多核系统创建软件工程 图1 目录 范例 Nios II Multiprocessor Design Example 下载 Creating Multiprocessor Nios II Systems Tutorial转载于:https://www.cnblogs.com/…...
网站首页插入视频/全国疫情高峰时间表最新
C学习 十二、内存模型,作用域,名称空间 (1)多文件编译前言多文件编译模块化文件结构头文件.h头文件结构源文件.cpp后记前言 本篇继续C学习总结。 本篇将探讨C中,变量与函数的内存模型,以及在多文件程序中…...
优秀网站psd/提高工作效率
安装jenkins网上有很多的示例,但是博主在安装的时候没有一次是没有问题的,后来我就将我遇到的问题总结了下,然后写一个从下载软件到安装的完成能使用的版本的博客。毕竟一帆风顺的情况真的还是很少的。 第一步:下载jenkins 地址&a…...
网站功能方案/网络营销策划书的范文
[闽南网]360系统急救箱修复失败的原因是什么?如果您不太了解,跟着小编一起来了解一下吧!电脑自动从启应该考虑的问题如下:一、软件方面1.病毒 “冲击波”病毒发作时还会提示系统将在60秒后自动启动。 木马程序从远程控制你计算机的一切活动,…...