当前位置: 首页 > news >正文

【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中的列表和元组&#xff0c…...

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 作为服务端)

文章目录思路客户端权限清单&#xff08;AndroidManifest.xml&#xff09;权限列表(完整内容看 权限清单&#xff08;AndroidManifest.xml&#xff09;&#xff09;打开外部应用的权限(完整内容看 权限清单&#xff08;AndroidManifest.xml&#xff09;&#xff09;添加文件如下…...

分享111个HTML艺术时尚模板,总有一款适合您

分享111个HTML艺术时尚模板&#xff0c;总有一款适合您 111个HTML艺术时尚模板下载链接&#xff1a;https://pan.baidu.com/s/1sYo2IPma4rzeku3yCG7jGw?pwdk8dx 提取码&#xff1a;k8dx Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 时尚理发沙龙服务网站模…...

spring之Spring AOP基于注解

文章目录前言一、Spring AOP基于注解的所有通知类型1、前置通知2、后置通知3、环绕通知4、最终通知5、异常通知二、Spring AOP基于注解之切面顺序三、Spring AOP基于注解之通用切点三、Spring AOP基于注解之连接点四、Spring AOP基于注解之全注解开发前言 通知类型包括&#x…...

LeetCode题目笔记——6362. 合并两个二维数组 - 求和法

文章目录题目描述题目链接题目难度——简单方法一&#xff1a;常规双指针遍历代码/Python方法二&#xff1a;字典\哈希表代码/Python总结题目描述 给你两个 二维 整数数组 nums1 和 nums2. nums1[i] [idi, vali] 表示编号为 idi 的数字对应的值等于 vali 。nums2[i] [idi, …...

【C#基础】C# 常用语句讲解

序号系列文章3【C#基础】C# 数据类型总结4【C#基础】C# 变量和常量的使用5【C#基础】C# 运算符总结文章目录前言语句概念1&#xff0c;迭代语句1.1 for 语句1.2 foreach 语句1.3 while 语句1.4 do 语句2&#xff0c;选择语句2.1&#xff0c;if 语句2.2&#xff0c;else 语句2.3…...

腾讯云——负载均衡CLB

负载均衡 CLB 提供四层&#xff08;TCP 协议/UDP 协议/TCP SSL 协议&#xff09;和七层&#xff08;HTTP 协议/HTTPS 协议&#xff09;负载均衡。您可以通过 CLB 将业务流量分发到多个后端服务器上&#xff0c;消除单点故障并保障业务可用性。CLB 自身采用集群部署&#xff0c;…...

6.关于系统服务的思考—— native vs java

文章目录native服务 以sensor service为例Native 服务java 服务&#xff0c; 以vibrate为例java 服务 以一个demo为例native服务 以sensor service为例 service启动 SystemServer.startBootstrapServices---->>>mSystemServiceManager.startService—>>>Sen…...

SQL语句创建视图:

前言 &#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;推荐专栏: &#x1f354;&#x1f35f;&#x1f32f; c语言初阶 &#x1f511;个人信条: &#x1f335;知行合一 &#x1f349;本篇简介:>:介绍数据库中有关视图的知识,参考学校作业. 金句分享:…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动&#xff08;如演唱会、马拉松赛事、高考中考等&#xff09;期间&#xff0c;城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例&#xff0c;暖城商圈曾因观众集中离场导致周边…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中&#xff0c;其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下&#xff1a; 初始判断与哈希计算&#xff1a; 首先&#xff0c;putVal 方法会检查当前的 table&#xff08;也就…...

AI病理诊断七剑下天山,医疗未来触手可及

一、病理诊断困局&#xff1a;刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断"&#xff0c;医生需通过显微镜观察组织切片&#xff0c;在细胞迷宫中捕捉癌变信号。某省病理质控报告显示&#xff0c;基层医院误诊率达12%-15%&#xff0c;专家会诊…...