PPP协议
PPP是一种常见的广域网数据链路层协议,主要用于在全双工的链路上进行点到点的数据传输封装,支持同步传输和异步传输,通常用于VPN和拨号上网
PPP
概述
PPP一般运行在serial串口上,是一种广域网协议,PPP建立分为LCP(链路控制协议)和NCP(网络控制协)两大步骤
LCP(链路控制协议)用于建立、配置、维护和终止PPP链路,负责PPP的链路管理,和上层(网络层)协议无关
NCP(网络控制协)用于建立、配置网络层协议,进行参数协商
状态机
Dead:PPP物理层不可用,当链路被激活转为Establish,进入链路建设阶段
Establish:链路进行LCP相关参数协商,比如MTU,MRU,认证模式,魔术字等
Authenticate:进入认证阶段,成功后进入Network,反之进入Terminate然后重新尝试建立
Network:进行NCP协商,协商完成后链路可用,可随时中断会话,进入Terminate状态
Terminate:连接结束,释放所以相应资源后链路回到Dead状态
报文
格式
Flag域:标识帧的起始和终止,二进制序列
Address:通常为广播,全1
Control:缺省0x03表无序帧
Protocol:标识不同协议,0XC021代表LCP报文,0XC023代表PAP报文,0XC223代表CHAP报文
Code:主要用于标识LCP相关报文
Indentifer:1个字节,用来匹配请求和响应,值为非法时,该报文将被丢弃。通常一个配置请求报文的ID是从0x01开始逐步加1的。当对端接收到该配置请求报文后,无论使用何种报文回应对方,但必须要求回应报文中的ID要与接收报文中的ID一致
类型
Configure:与配置相关的报文
Configure- Packet | 配置信息 | 1 |
Configure-Ack | 接受配置内容 | 2 |
Configure-Nak | 打回不可接受的参数 | 3 |
Configure- Reject | 打回不可识别的参数 | 4 |
Authenticate:用于认证的一些报文
Authenticate-Resquest | 由被认证方发送请求,内容包含密码用户名 |
Authenticate-Ack | 认证方的回应,认证成功发送 |
Authenticate-Nak | 认证方的回应,认证失败发送 |
Terminate:用于终止回话的报文
Terminate-Resquest | 请求断开连接 | 5 |
Terminate- Ack | 相应请求 | 6 |
维护报文
Code-Reject | 报文表示无法识别报文的Code字段 | 7 |
Protocol-Reject | 报文表示无法识别报文的Protocol字段 | 8 |
Echo-Request | 通常用于检测链路通信质量 | 9 |
Echo-Reply | 10 | |
Discard-Request | 收到立即丢弃,无实际意义 | 11 |
LCP协商
链路搭建
连接发送configure-request向对端进行确认,对端根据内携带参数进行回复,参数不可识别回复configure-reject,参数不可接收发送configure-nak,收到nak和reject的发起方重新修改相应参数,直到都能够识别且参数可接收回复ACK完成协商
在本协商中需要协商的参数有
MTU(最大传输单元)
Asynchronous Control Character Map(异步控制字符映射)
Authentication Protocol(认证协议,双方可不同,但一定要支持)
Quality Protocol(质量协议)
Magic Number(魔术字,用于防环)
Protocol Field Compression(协议域压缩)
Address and Control Field Compression(地址及控制域压缩)
其中比较重要的是MTU(最大传输单元),Authentication Protocol(认证协议),Magic Number(魔术字)
链路维护
通过echo-request和echo-reply两个报文进行检测,以此确定双方链路的联通
链路终止
发起方发送请求,接收方收到或回复Ack同意释放
认证模式
完成LCP协商之后,进入认证阶段,分为PAP和CHAP认证两种
PAP
报文以明文方式进行传输
被认证方发送自己的密码和用户名交给认证方,由认证方进行确认,如果成功回复Ack,失败回复Nak
CHAP
经过MD5加密(随机数+数据+挑战报文)后传输
认证端发送一个Challenge报文给被认证端,被认证端
需用到报文:Challenge,Response,Success,Failure
认证通过后进入NCP协商
NCP协商
与LCP报文基本一样,本文整合至报文小标题中
对于IP协议来说NCP使用IPCP,用于获取IP地址以进行三层通信
根据两端设备的配置不同,IPCP协商过程可分为静态协商和动态协商
静态协商
静态即不协商,双方IP均为人为手动配置,进入此阶段双方告知彼此地址即可
动态协商
1.本端向由对端申请发送configure-request报文
2.对方发现0.0.0.0的IP不合法,将分配的IP携带在configure-Nak发回
3.本端收到回复带分配地址的configure-request进行确认
4.对端收到后回复configure-Ack
5.对端发送带自己IP的configure-request
6.本端响应Ack
至此,PPP建立完成
实验
拓扑
要求
PPP认证模式chap,用户名ensp密码huawei123明文显示,R1为认证方
配置
认证端
[R1-aaa]dis th
[V200R003C00]
#
aaa
authentication-scheme default
authentication-scheme ensp//创建一个认证计划ensp
authorization-scheme default
accounting-scheme default
domain default
domain default_admin
domain ensp //创建域
authentication-scheme ensp
local-user admin password cipher %$%$K8m.Nt84DZ}e#<0`8bmE3Uw}%$%$//创建密码
local-user admin service-type http
local-user user@ensp password cipher %$%$xD|Q.tVEQ"`7|*23`Gq!=u6z%$%$//创建用户
local-user user@ensp service-type ppp//服务类型指定PPP
#
return
[R1-Serial4/0/0]dis th
[V200R003C00]
#
interface Serial4/0/0
link-protocol ppp
ppp authentication-mode chap domain ensp
ip address 12.0.0.1 255.255.255.0
#
return
被认证端
[R2-Serial4/0/0]dis th
[V200R003C00]
#
interface Serial4/0/0
link-protocol ppp
ppp chap user user@ensp//绑定用户至域下
ppp chap password cipher %$%$hU|sVb*OB'~\byUd:rg(,.=|%$%$//绑定用户和密码
ip address 12.0.0.2 255.255.255.0
#
return
效果
相关文章:
PPP协议
PPP是一种常见的广域网数据链路层协议,主要用于在全双工的链路上进行点到点的数据传输封装,支持同步传输和异步传输,通常用于VPN和拨号上网 PPP 概述 PPP一般运行在serial串口上,是一种广域网协议,PPP建立分为LCP&a…...
JAVA基础:数据类型
JAVA基础:数据类型 强类型语言 强类型语言(Strongly Typed Language)是指在编程语言中,每个变量都必须有一个明确的类型,并且在编译时会进行类型检查。 JAVA是强类型语言,所有变量必须先定义后使用。 弱类型语言 弱类型语言(Weakly Typed Language)是指在编程中类…...
ElasticSearch 数据聚合与运算
1、数据聚合 聚合(aggregations)可以让我们极其方便的实现数据的统计、分析和运算。实现这些统计功能的比数据库的 SQL 要方便的多,而且查询速度非常快,可以实现近实时搜索效果。 注意: 参加聚合的字段必须是 keywor…...
Nacos 3.0 Alpha 发布,在安全、泛用、云原生更进一步
自 2021 年发布以来,Nacos 2.0 在社区的支持下已走过近三年,期间取得了诸多成就。在高性能与易扩展性方面,Nacos 2.0 取得了显著进展,同时在易用性和安全性上也不断提升。想了解更多详细信息,欢迎阅读我们之前发布的回…...
GeoIP介绍
文章目录 GeoIP1. GeoIP的详细介绍2. 在Go语言中使用GeoIP GeoIP GeoIP是一种技术,它允许通过IP地址来查询地理位置信息,如国家、地区、城市等。这种技术在网络安全、内容分发、市场分析等领域有着广泛的应用。 1. GeoIP的详细介绍 原理: …...
详述 BigDecimal 的错误计算
摘要 详细阐述在使用 Java 的 BigDecimal 类时,可能产生的错误计算。 据 java中BigDecimal的介绍及使用,BigDecimal格式化,BigDecimal常见问题-CSDN博客 介绍:“BigDecimal 的执行顺序不能调换(乘法交换律失效&am…...
3D Gaussian Splatting for Real-Time Radiance Field Rendering-简洁版
1. 研究背景与问题 传统的3D场景表示方法,如网格和点云,适合GPU加速的光栅化操作,但缺乏灵活性。而基于神经辐射场(NeRF)的表示方式,尽管质量高,但需要高成本的训练和渲染时间。此外࿰…...
(三)PyQT5+QGIS+python使用经验——解决各版本不兼容问题
一、问题描述 基础环境:Windows10(64) PyCharm2024 QGIS 3.22。 目的:解决之前python版本多,pyqt5以及QT Designer交互使用存在环境变量冲突矛盾,以及QGIS安装时自带python、pyqt5等问题。 尤其是在QT …...
uniapp navigateTo、redirectTo、reLaunch等页面路由跳转方法的区别
uni.switchTab 跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面 // app.json {"tabBar": {"list": [{"pagePath": "index","text": "首页"},{"pagePath": "other","text&…...
[创业之路-198]:华为的成立发展与新中国的建立与发展路径的相似性比较
目录 一、公司比较 1、创业初期的艰难与挑战 2、坚持自主创新与研发 3、市场拓展与国际化战略 4、企业文化与社会责任 5、面临的挑战与应对策略 二、任正非管理企业的思想大量借鉴了毛泽东建国的思想 1、矛盾论与企业管理 2、群众路线与企业文化 3、战略思维与长远发…...
[Unity Shader]【图形渲染】【游戏开发】 Unity Shader与原始Shader的区别
在Unity中,Shader是用于控制如何渲染图形的程序,通常涉及到对图形管线的自定义操作。尽管所有的着色器都遵循基本的图形渲染流程,但Unity Shader和原始Shader(通常指OpenGL/DirectX等底层API的Shader)之间存在显著差异。理解这些区别能帮助开发者更好地在Unity环境下进行图…...
JAVA学习日记(二十七)反射
一、反射的概述 二、获取Class对象的三种方式 import testpackage.Student;public class Main {public static void main(String[] args) throws ClassNotFoundException {//获取.class对象的三种方式//1. Class.forName("全类名")//2. 类名.class//3. 对象.getClas…...
PyTorch中apex的安装方式
apex是NVIDIA开发的基于PyTorch的混合精度训练加速神器,能够增加运算速度,并且减少显存的占用。 Github地址:https://github.com/NVIDIA/apex官方教程:https://nvidia.github.io/apex/ 安装方式 需要注意的是apex的安装不能通过…...
JavaScript网络请求( XMLHttpRequest 对象,进度事件, 跨源资源共享)
一、 XMLHttpRequest 对象 IE5 是第一个引入 XHR 对象的浏览器。这个对象是通过 ActiveX 对象实现并包含在 MSXML 库中 的。为此, XHR 对象的 3 个版本在浏览器中分别被暴露为 MSXML2.XMLHttp 、 MSXML2.XMLHttp.3.0 和 MXSML2.XMLHttp.6.0 。 所有现代…...
Android Studio、JDK、AGP、Gradle、kotlin-gradle-plugin 兼容性问题
文章目录 问题:解决办法:gradle与 java的版本兼容AGP与Gradle的版本兼容kotlin 与 jvm 的版本兼容KGP、Gradle、AGP兼容关系kotlin 与 java 的编译版本配置 问题: 你从githb上clone了一个项目,本地跑的时候,各种报错。…...
滑动窗口(定长窗口)
题目一:找到字符串中所有字母异位词 438. 找到字符串中所有字母异位词 - 力扣(LeetCode) 分析 异位次,就是通过排序之后可以跟哪个单词一样,例如 hello 跟 lleho 这是定长窗口, 窗口维护在p的…...
Vue Web开发(九)
1. 用户管理 1.1. user页面下的diolog表单 本节课完成user页面下的diolog表单,表单里的元素都是动态渲染,以一个CommonForm组件的形式放入user页面。 运用Element ui Form表单。 1.1.1. CommonForm组件 在src/components下新建CommonForm.vue组件&am…...
go语言zero框架下的日志记录的sdk实战案例
在 Go 语言中,构建一个日志 SDK 是常见的开发任务,尤其是当你希望将日志记录集中管理时。一个好的日志 SDK 可以帮助你规范化日志记录的方式,并将日志存储到不同的地方(例如:控制台、文件、数据库、远程日志服务等&…...
【Unity基础】Unity中拖拽3D物体的过程分析和实现方法
我们先来分析一下Unity中拖拽物体的过程: 第一步:先检测拖拽的输入方式,可以鼠标,触摸,可以用InputManager输入,也可以 使用InputSystem输入 第二步:获取触碰点的位置,并计算offse…...
深入了解Spring
目录 Spring基础 什么是Spring框架? Spring 包含的模块有哪些? Core Container AOP Data Access/Integration Spring Web Messaging Spring Test Spring,Spring MVC,Spring Boot 之间什么关系? Spring基础 什么是Spring框架? Sp…...
vue3修改elementui-plus的默认样式的几种方法
#创作灵感 今天写vue的前端项目,因为需要去修改elementui-plus中drawer的默认样式,所以刚好将修改步骤记录下来。 一共提供了三种方法,但亲测第二种最好用。 使用第二种是可以无视自己的代码中是否定义了该盒子,因为有时候盒子的…...
免费开源!推荐一款网页版数据库管理工具!
免费开源!推荐一款网页版数据库管理工具! DBGate 是一个开源的数据库管理工具,DBGate 的最大特点是可以 Web 访问!,轻松实现一台机器部署,所有人使用! 无论是 MySQL、PostgreSQL、SQLite 还是…...
Ubuntu22.04切换gcc版本教程
在编译安装程序的时候,由于gcc版本过高,导致编译无法通过,需要降低gcc版本。 一、安装gcc版本 根据自己的需求安装gcc版本。 sudo apt update sudo apt install gcc-10 g++-10二、切换gcc版本 sudo update-alternatives --install /usr/bin/gcc gcc...
OpenCV相机标定与3D重建(24)计算两个二维点集之间的最佳仿射变换矩阵(2x3)函数estimateAffine2D()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 计算两个二维点集之间的最优仿射变换,它计算 [ x y ] [ a 11 a 12 a 21 a 22 ] [ X Y ] [ b 1 b 2 ] \begin{bmatrix} x\\ y\\ \en…...
并发修改导致MVCC脏写问题
并发修改导致MVCC脏写问题 一、概要 1.1 业务场景 数据库表结构设计: 一个主档数据,通过一个字段,逗号分隔的方式去关联其他明细信息的id。 如主档数据A,有3条明细数据与A关联,其id分别是1,2,3,那么其存…...
webSokect安卓和web适配的Bug 适用实时语音场景
❌BUG: Failed to construct WebSocket: The URLs scheme must be either ws or wss. https is not allowed.WebSocket 协议在创建连接时,规定其 URL 的协议头(scheme)必须是 ws(用于非加密的普通 WebSocket 连接&…...
Linux系列之如何更换Centos yum源?
环境 Centos7Xshell7 问题描述 最近安装了一个虚拟机,准备用来学习,不过使用yum命令安装一些软件,不过使用这个命令时候,提示 Cannot find a valid baseurl for repo: base/7/x86_64,Could not retrieve mirrorlis…...
微知-C语言如何指定弱符号?(#define WEAK __attribute__((weak)); WEAK int foo(void))
背景 在C语言中,弱符号是一种特殊的符号,它可以被重定义,但在链接时,只会使用被重定义的符号。 在某些情况下,我们需要在多个文件中定义相同的函数,但只使用其中一个函数。本文将介绍如何在C语言中实现弱符…...
三极管功能
1 三极管的结构 2 三极管开关电路设计注意事项 1 三极管进入饱和状态 电机:500毫安 2 判断三级什么状态:电压法 3 判断三级什么状态:电流法 4 求IB的电阻 5 当三极管用作开关时,通常N型三极管控制负载的gnd端,P型…...
Python的3D可视化库【vedo】2-5 (plotter模块) 坐标转换、场景导出、添加控件
文章目录 4 Plotter类的方法4.7 屏幕和场景中的坐标点转换4.7.1 屏幕坐标转为世界坐标4.7.2 世界坐标转为屏幕坐标4.7.3 屏幕坐标取颜色 4.8 导出4.8.1 导出2D图片4.8.2 导出3D文件 4.9 添加控件4.9.1 添加内嵌子窗口4.9.2 添加选择区4.9.3 添加比例尺4.9.4 为对象添加弹出提示…...
定时/延时任务-万字解析Spring定时任务原理
文章目录 1. 概要2. EnableScheduling 注解3. Scheduled 注解4. postProcessAfterInitialization 解析4.1 createRunnable 5. 任务 Task 和子类6. ScheduledTaskRegistrar6.1 添加任务的逻辑6.2 调度器初始化6.3 调用时机 7. taskScheduler 类型7.1 ConcurrentTaskScheduler7.2…...
Android上传到Minio本地存储
Minio简介 MinIO是一个对象存储解决方案,它提供了与Amazon Web Services S3兼容的API,并支持所有核心S3功能。 MinIO有能力在任何地方部署 - 公有云或私有云,裸金属基础设施,编排环境,以及边缘基础设施。author: https…...
海量数据-Vastbase G100数据库安装
海量数据-Vastbase G100数据库安装 文章目录 海量数据-Vastbase G100数据库安装前期准备防火墙配置方案一:关闭防火墙方案二:开放数据库端口 SELINUX配置时间同步IPC参数配置 单机安装设置主机名创建数据库安装用户和目录(可选)修改资源限制 字符安装&am…...
Python | 对于DataFrame中所有行数据比较的几种方法
在数据分析中,比较DataFrame数据框中的行是一项基本操作,可应用于多种场景,包括: 查找重复项:标识所有相似或包含相同数据的行。相似性检查:确定某些选定因子的不相似行的相似程度。成对分析:非…...
React:闭包陷阱产生和解决
在 React 中,闭包陷阱是一个常见的问题,尤其是在处理异步操作、事件处理器、或是定时器时。理解闭包的工作原理以及它在 React 中如何与状态和渲染交互,可以帮助你避免陷入一些常见的错误。 一、闭包陷阱的产生 1、什么是闭包陷阱࿱…...
图的遍历|深度优先搜索|广度优先搜索(C)
图的基本操作 图的基本操作是独立于图的存储结构的。而对于不同的存储方式,操作算法的具体实现会有着不同的性能。在设计具体算法的实现时,应考虑采用何种存储方式的算法效率会更高。 图的基本操作主要包括(仅抽象地考虑,所以忽略…...
Pytest-Bdd vs Behave:选择最适合的 Python BDD 框架
Pytest-Bdd vs Behave:选择最适合的 Python BDD 框架 Pytest BDD vs Behave:选择最适合的 Python BDD 框架BDD 介绍Python BDD 框架列表Python BehavePytest BDDPytest BDD vs Behave:关键区别Pytest BDD vs Behave:最佳应用场景结…...
python文字转语音
一、安装对应的包 pip install pyttsx3 二、代码实现 import pyttsx3# 初始化tts引擎 engine pyttsx3.init()# 设置要转换的文本 text "你好"# 设置语速,范围从-1到1,1是正常速度,-1是最慢速度 rate engine.getProperty(rate…...
【安全研究】某黑产网站后台滲透与逆向分析
文章目录 x01. 前言x02. 分析 【🏠作者主页】:吴秋霖 【💼作者介绍】:擅长爬虫与JS加密逆向分析!Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Python与爬虫领域研究与…...
XSLT 编辑 XML
XSLT 编辑 XML 介绍 XSLT(可扩展样式表语言转换)是一种用于转换XML文档的语言。它允许开发人员将XML数据转换为其他格式,如HTML、PDF或纯文本。XSLT通过使用XPath查询来定位XML文档中的元素,并对这些元素应用转换规则。在本教程…...
计算机网络信息系统安全问题及解决策略
目 录 摘 要 前 言 一、计算机网络信息系统研究现状及安全技术 (一)计算机网络信息系统研究现状 (二)计算机网络信息系统全技术概述 二、计算机网络信息系统安全问题 (一)环境危害引发的安全问…...
112.【C语言】数据结构之排序(详解插入排序)
目录 1.排序定义 2.插入排序 "插入"的含义 代码 函数框架 函数设计思路 以升序为例,分析插入的三种可能 单趟排序代码 优化后 将单趟排序代码嵌入到循环中 错误代码 两种改法 运行结果 时间复杂度 1.排序定义 使一串记录,按照其中的某个或某些关键字的…...
洞察:OpenAI 全球宕机,企业应该如何应对 LLM 的不稳定性?
北京时间12月12日上午,OpenAI证实其聊天机器人ChatGPT正经历全球范围的宕机,ChatGPT、Sora及API受到影响。 OpenAI 更新事故报告称,已查明宕机原因,正努力以最快速度恢复正常服务,并对宕机表示歉意。 此次 OpenAI 故障…...
Git Bash Here 中文显示乱码的处理方法
在使用"open Git Bash Here"时,遇到中文显示乱码问题。 原因:通常是由于编码设置不正确导致的。 open Git Bash Here —>鼠标右击空白处,点击「选项」|或「Options」 在「文本」或 「Text」选项卡中,找到"local…...
【python因果库实战6】LaLonde 数据集
目录 LaLonde 数据集 数据 收入指示变量 教育年限的因子化 变量选择 模型 估计因果效应 未经调整的估计 LaLonde 数据集 经济学家长期以来假设培训项目可以改善参与者的劳动力市场前景。为了测试(或证明)这一点,国家支持性工作示范项…...
和Ente交流
今日去清华大学深圳国际研究生院能源环境大楼与研三师弟交流。 交流内容: 今年年初3月份的时候去实习,刚刚开始字节远程实习(海投),然后远程了一个月,让去线下,然后就去线下待了一个月&#x…...
imx6ull qt多页面控制系统(正点原子imx系列驱动开发)
开题答辩完了也考完了四六级,赶紧来更新一下一个月前留下的坑吧 QAQ首先,因为毕业设计需要用到这些知识所以就从网络上找了一个智能车机系统,借鉴了一下大佬的项目思路,缝缝补补一个月终于完成了这一内容。 在这里先感谢从两位大佬…...
[C++]运算符重载
一、 什么是运算符重载? 运算符重载是 C 中的一种功能,它允许用户定义的类或数据类型重新定义或扩展运算符的行为,使运算符能够作用于用户定义的对象。 二、 通俗解释 在 C 中,运算符(如 , -, *, 等)默认…...
C++基础
01引用的本质 int a 10;/**引用本质是指针常量,指针指向不可更改,因此引用一旦初始化就不可以更改*自动转换为int* const ref&a;*/int &ref a;/*内部发现是引用,自动转换为*ref20;*/ref20; 02函数高级 2.1默认参数 #include <iostream&g…...
鸿蒙项目云捐助第七讲鸿蒙App应用的首页推荐模块布局的实现
鸿蒙项目云捐助第七讲鸿蒙App应用的首页推荐模块布局的实现 最后设置首页的推荐模块,参考模板如下图所示。 一、首页热门推荐模块的实现 对于热门推荐模块,先有上面的小标题栏,这里的标题栏也有一个小图标,首先从“百度图库”中…...