PPP协议

news2024/9/20 18:34:13

PPP协议

  • PPP协议概述
  • PPP链路建立过程
  • PPP链路接口状态机
  • LCP报文格式
    • LCP协商过程—正常协商(链路层协商过程)
    • LCP协商过程—参数不匹配(链路层协商过程)
    • LCP协商过程—参数不识别(链路层协商过程)
  • PPP认证模式
    • PAP
    • CHAP
  • NCP协商—静态IP地址协商
  • NCP协商—动态IP地址协商

PPP协议概述

  • PPP(Point-to-Point Protocol,点到点协议),是一种常见的广域网数据链路层协议,主要用于全双工的链路上用于点到点的数据传输封装。
  • PPP提供安全认证协议族PAP(Password Authentication Protocol,密码验证协议)和CHAP(Challenge Handshake Authentication Protocol,挑战握手认证协议)。
  • PPP具有良好的扩展性,例如,当需要在以太网链路上承载PPP协议时,PPP可以扩展成为PPPoE。
  • PPP协议提供LCP(Link Control Protocol,链路控制协议),用于各种链路层的协商,例如最大传输单元, 最大接受单元,认证模式等等。
  • PPP协议提供各种NCP(Network Control Protocol,网络控制协议),如IPCP(IP Control Protocol,IP控制协议),用于网络层参数的协商,更好的支持了网络层协议。

PPP链路建立过程

  • PPP链路的建立有三个阶段的协商过程:链路层协商,认证协商(可选)和网络层协商。
    • 链路层协商:通过LCP报文进行链路参数协商,建立链路层连接。(MRU,认证模式,聚合等)
    • 认证协商(可选):通过链路建立阶段的认证方式进行链路认证。
    • 网络层协商:通过NCP协商来选择和配置一个网络层协议并进行网络层参数协商。
      在这里插入图片描述

PPP链路接口状态机

  • PPP协商由链路两端的接口完成。接口的状态表示了协议的协商字段。
    在这里插入图片描述
    基本顺序就是首先进行链路协商,接着进行认证协商,最后进行网络层协商。其中任何一层协商没有成功都会回到最初的Dead(Down)状态。

LCP报文格式

  • PPP报文可以由Protocol字段标识不同类型的PPP报文。例如:当Protocol字段为0XC021时,代表是LCP报文。此时又由于Code字段标识不同类型的LCP报文,如下表所示:
    在这里插入图片描述

LCP协商过程—正常协商(链路层协商过程)

  • LCP协商由不同的LCP报文交互完成。协商由任意一方发送Configura-Request报文发起。如果对端接收此报文且参数匹配,则通过回复Configure-Ack相应成功。
    在这里插入图片描述
  • 首先R1向R2发起协商,接口中包含了MRU(MAX Receive Unit最大接收单元),认证类型,以及魔术字(用于防止环路,当收到与自身相同的魔术字的时候,就认为产生了环路,将报文丢弃)
  • R2收到报文之后,进行回复Ack进行确认。(这就是一个正常且没有问题的协商过程)

LCP协商过程—参数不匹配(链路层协商过程)

  • 在LCP报文交互中出现LCP参数不匹配时,接收方回复Configure-Nak相应告知对端修改参数,然后重新协商。
    在这里插入图片描述
  1. R1首先发起配置请求,并且携带本段的参数。(可以看到现在R1接口和R2接口的参数不一致)
  2. 然后发送给了R2之后,R2发现跟本端接口参数不一致,于是回复Configure-Nak给R1。
  3. R1收到之后会修改本端的参数,然后重新发送Configure-Request报文给R2。
  4. 最后R2发现参数合适,于是回复Configure-Ack报文,协商成功。

LCP协商过程—参数不识别(链路层协商过程)

  • 在LCP报文进行交互中出现LCP参数不识别时,接收方回复Configure-Reject相应告知对端删除不识别的参数,然后重新协商。
    在这里插入图片描述
  1. 首先R1发送端口的配置请求,并且携带端口的参数。
  2. R2收到R1发送的端口配置,然后发现里面有自己不认识的字段,于是回复Configure-Reject报文给R1.
  3. 然后R1收到Reject报文之后重新进行参数配置,然后将调整过后的参数再次发送给R2.
  4. R2收到与自身匹配的接口参数,然后认为参数合法,于是发送Ack报文给R1,协商完成。

PPP认证模式

链路协商成功之后,进行认证协商(可选)。认证协商有两种模式,PAP和CHAP。

PAP

  • PAP认证双方有两次握手。协商的报文以明文的方式在链路上传输。
    在这里插入图片描述
    目前双方已经LCP链路协商成功,底层链路建立完成,并确立认证方式为PAP。在认证方有数据库,其中记录了可以认证成功的用户名和密码。
  • 首先被认证方首先发起认证,向认证方发送用于建立链路的PPP帧,其中包括了用户名和密码。
  • 然后认证方收到之后,与数据库进行对比,然后发现数据库匹配成功,发送Ack给被认证方。认证结束。
    但是PAP认证有一个很大的缺陷,就是用户名和密码在明文中进行传输,不安全。

CHAP

  • CHAP认证有三次握手。协商报文被加密之后在链路上进行传输。
    在这里插入图片描述
    现在LCP链路已经协商成功了,底层链路的建立,也确定认证方式为CHAP。认证方这里有数据库,内含可以成功建立的用户名和密码。
  • 认证方主动发起验证请求,验证方向被验证方发送一些随机产生的报文(Challenge)。(包括ID和随机数)
  • 被认证放收到报文之后,将报文ID,认证密码和随机数进行MD5运算,将生成的密文和自己的用户名一起发送给认证方。
  • 认证方收到之后,通过用户名找出相应的密码,然后使用报文ID,随机数和相应的密码进行MD5计算,然后与收到的MD5值进行比对,如果一致,则回复success,如果不一致则回复failed。
    (图中是认证方没有配置用户名的过程,就是在发送认证过程中的PPP报文没有配置用户名,但是还有一种配置用户名的CHAP认证过程
  • 验证方主动发起验证请求,验证方向被验证方发送一些随机产生的报文(Challenge),并同时将本端的用户名附带上一起发送给被验证方。
  • 被验证方接到验证方的验证请求后,先检查本端接口上是否配置了ppp chap password命令,如果配置了该命令,则被验证方用报文ID、命令中配置的用户密码和MD5算法对该随机报文进行加密,将生成的密文和自己的用户名发回验证方(Response)。如果接口上未配置ppp chap password命令,则根据此报文中验证方的用户名在本端的用户表查找该用户对应的密码,用报文ID、此用户的密钥(密码)和MD5算法对该随机报文进行加密,将生成的密文和被验证方自己的用户名发回验证方(Response)。
  • 验证方用报文ID和自己保存的被验证方密码和MD5算法对原随机报文加密,比较二者的密文,若比较结果一致,认证通过,若比较结果不一致,认证失败。

NCP协商—静态IP地址协商

  • PPP认证协商过后,双方进入NCP阶段,协商在数据链路上所传输的数据包格式与类型。以常见的IPCP协议为例,它分为静态IP地址协商和动态IP地址协商。
  • 静态IP地址需要手动在链路两端进行配置IP地址。(要求地址都是使用手工进行配置
    在这里插入图片描述
  • 首先R1发送配置请求,携带本端配置的IP地址,使用Configure-Request报文。
  • 然后R2接收到报文之后,对地址进行检查,只要地址合法不是广播地址或者网络号等都可以,不是一个网段也可以通过,因为PPP链路是一个点到点的链路,通过直连进行通信,然后回复Ack报文。

NCP协商—动态IP地址协商

  • 动态IP地址协商支持PPP链路一端为对端配置IP地址。(可以想作R1时客户端,R2时服务器端)
    在这里插入图片描述
  1. 现在R1没有配置地址,向R2发送一个Request报文,包含地址0.0.0.0,就是一个空地址。
  2. R2收到之后发现对端地址不合法,回复一个Nak报文,Nak报文中含有一个IP地址
  3. R1收到Nak报文之后重新发送新的配置请求,并且携带Nak报文中的IP地址。
  4. R2收到新的Request报文之后,确认是合法地址,发送Ack报文。(即使R1的地址跟R2不在一个网段也可以进行通信,因为此时在R2上会产生一条默认路由,指向R1的接口地址,并且下一跳为自身的出口S1/0/0)
  5. R2再发送自身的配置请求,携带本端IP地址。
  6. R1收到报文之后确定是合法的,随后回复Ack报文。

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

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

相关文章

vTESTstudio - VT System CAPL Functions - General/Trigger Function

前面文章中我们已经介绍了常用的几种板卡的基本信息,那这些板卡该如何去通过软件调用呢?带着这个问题我们开始新的一块内容 - VT系统相关的自动化控制函数介绍,我会按照不同的板卡来分类,对其可控制的函数进行介绍,方便…

快速理解 JVM 原理 - 【基础概念篇】

快速理解 JVM 原理 - 【基础概念篇】 Java虚拟机 是什么? Java 虚拟机 本质就是一台”虚拟的“计算机 ,大家通俗的理解是一款 “软件”安装在电脑上 虚拟机通常分为两类: 系统虚拟机【可运行完整操 作系统的软件平台】程序虚拟机 【为执行…

AA-PEG-AA,Acetic Acid-PEG-Acetic Acid,羧酸-聚乙二醇-羧酸供应

英文名称:Acetic Acid-PEG-Acetic Acid,AA-PEG-AA 中文名称:羧酸-聚乙二醇-羧酸 AA-PEG-AA是一种线性双功能PEG羧酸试剂。PEG和COOH基团之间存在亚甲基(CH2)键。AA-PEG-AA也称为CM-PEG-CM,CM:…

【GD32F427开发板试用】使用TinyMaix进行手写数字识别

本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动,更多开发板试用活动请关注极术社区网站。作者:xusiwei1236 一、TinyMaix简介 TinyMaix是国内sipeed团队开发一个轻量级AI推理框架,官方介绍如下: TinyMaix 是面向单…

django+mysql实现一个简单的web登录页面

目录 一、使用pyacharm创建一个django项目 二、启动django项目验证 三、配置mysql数据库 1、本地安装mysql数据库 1)安装mysql数据库 2)自己创建一个数据库 2、安装 pymysql 3、配置mysql数据库 1)在项目同名包下的_init_.py里面添加…

OpenGL渲染管线介绍

一、概述 OpenGL是跨平台计算机图形应用程序的应用规范,广泛应用于仿真、游戏、GIS系统等领域,实现二三维图形的渲染。OpenGL渲染过程需要经历CPU、GPU两个阶段,CPU中进行图形计算,完成之后调用OpenGL开发接口在GPU中创建缓存区缓…

前后端一些下载与配置(第二篇 第10天过后)nuxt banner redis

NUXT 应该是不用怎么装? 有现成的 axios 还需要在npm吗 好像已经有现成的了 banner banner 笔记汇总P396 Redis Linux安装redis tar -xzvf redis-6.2.6.tar.gz cd redis-6.2.6 照着他做 然后 cd /usr/local/redis/bin ./redis-server /usr/local/redis…

图数据建模基础

Neo4j 图的组件 节点(Nodes)标签(Labels)关系(Relationships)属性(Properties)建模过程 了解领域并为应用程序定义特定用例(问题)。开发初始图形数据模型。 对…

ansible的剧本(playbook)

一、playbooks 概述以及实例操作 1、playbooks 的组成 playbooks 本身由以下各部分组成 (1)Tasks:任务,即通过 task 调用 ansible 的模板将多个操作组织在一个 playbook 中运行 (2)Variables&#xff1…

多模式支持无线监控技术:主动式定位、被动式定位

物联网空间信息与数字技术发展至今,已经催生了一大批优秀的践行者。在日常与商业应用中,室内外定位领域依托于这一技术的发展,更是在近几年风光无限。但是并不是说室内定位与室外定位都已经相当成熟,相对来说,室内定位…

简单实用的内网穿透实现教程

内网穿透,字面理解就是网络地址穿透,是一种比较常用的将内网地址转换成公网地址的方式。通过内网穿透,可以将本地内网局域网提供给外网公网上访问,在外网也能连接访问内网主机和应用,当用户有日常远程和异地外网访问的…

Zabbix的自定义监控

Zabbix的自定义监控 zabbix自动可以提供很多监控项;但是往往不能满足需求;尝尝需要我们自己创建一系列的监控项,这就是自定义监控; 监控项:zabbix进行监控的一个指标,zabbix成为item; 它的值…

C++7:STL-模拟实现vector

目录 vector的成员变量 构造函数 reserve size() capacity() push_back 一些小BUG 赋值操作符重载 析构函数 【】操作符重载 resize pop_back Insert 迭代器失效 erase 二维数组问题 总结一下 vector,翻译软件会告诉你它的意思是向量,但其…

面试腾讯测开岗,结束后被面试官吐槽“什么阿猫阿狗都敢来面试大厂了吗?”.....

前一阵子有个小徒弟向我诉苦,说自己在参加某大厂测试面试的时候被面试官怼得哑口无言,场面让他一度十分尴尬 印象最深的就是下面几个问题: 根据你以前的工作经验和学习到的测试技术,说说你对质量保证的理解? 非关系型…

不连接显示器或者HDMI欺骗器来 使用Moonlight串流游戏

环境:WIN11NVIDIA显卡Moonlight串流 问题:当主机不连接显示器时,Moonlight客户端黑屏 解决办法:使用虚拟显示器来使显卡工资 背景:当SteamDeck 大卖的时候,我开始思考是否也需要购买一台Steam Deck来躺在床…

G1垃圾回收器详解

文章目录前言一、思考问题二、官方文档三、基本介绍四、G1的内存模型五、G1的标记过程六、G1的垃圾回收1、G1过程梳理2、Young GC3、Mixed GC4、Full GC七、参数介绍八、典型问题1、疏散失败(Evacuation Failure)2、大对象分配(Humongous All…

【Linux】动静态库以及动静态链接

环境:centos7.6,腾讯云服务器Linux文章都放在了专栏:【Linux】欢迎支持订阅🌹链接扩展我们在使用Linux的时候,不禁会有这么一个疑问:为什么我们能够在Linux下进行c/c代码的编写以及编译呢?这是因…

_Linux(网络基础)

文章目录1. 相关基础概念2. 认识 "协议"3. 网络协议初识协议分层OSI七层模型TCP/IP五层(或四层)模型4. 网络传输基本流程网络传输流程图数据包封装和分用小结5. 网络中的地址管理认识IP地址认识MAC地址认识端口号1. 相关基础概念 独立模式: 计算机之间相互独立网络互…

MySQL数据库13——插入数据(INSERT)

下面的语句用于向student表插入数据。 插入语句: INSERT INTO student(ID,name,sex,birthday,origin,contact1,contact2,institute) VALUES (0013,塔赛努,男,1997/9/15,内蒙古自治区,NULL,NULL,计算机学院);INSERT INTO student VALUES (0014,呼和嘎拉,男,1995-02…

字节青训营——秒杀系统设计学习笔记(一)

如何做系统设计 1. 场景分析(Scenario) 什么系统,需要哪些功能,多大的并发量 2. 存储设计(Storage) 数据如何组织,Sq|存储, NoSq|存储 3. 服务设计(Service) 业务功能实现和逻辑整合 4. 可扩展性(Scale) 解决设计缺陷&…