PPP点对点协议

概述

Point-to-Point Protocol,点到点协议,工作于数据链路层,在链路层上传输网络层协议前验证链路的对端,主要用于在全双工的同异步链路上进行点到点的数据传输。

PPP主要是用来通过拨号或专线方式在两个网络节点之间建立连接、发送数据。PPP是各类型主机、网桥和路由器之间简单连接的一种解决方案。在RFC1661中有详细的描述。PPP协议是目前广域网上应用最广泛的协议之一,它的优点在于简单、具备用户验证能力、可以解决IP分配等。

PPP协议是IETF在1992年制定的。经过1993年和1994年的修订,在1994年就已成为互联网的正式标准。

PPP

PPP包含如下三个部分:

  • 在串行链路上封装数据报的方法。PPP既支持异步链路(无奇偶检验的8比特数据),也支持面向比特的同步链路。IP数据报在PPP帧中就是其信息部分。这个信息部分的长度受最大传送单元MTU的限制;
  • 建立、配置和测试数据链路连接的链路控制协议(Link Control Protocol,LCP),用于对封装格式选项的自动协商、建立和终止连接,探测链路错误和配置错误;
  • 建立和配置不同网络层协议的一组网络控制协议(Network Control Protocol,NCP),PPP协议规定针对每一种网络层协议都有相应的网络控制协议,并用他们来管理各个协议不同的需求。

PPP协议定义三种认证协议:

  • PAP:Password Authentication Protocol,密码验证协议
  • CHAP:Challenge-Handshake Authentication Protocol,挑战—握手验证协议
  • EAP:Extensible Authentication Protocol,扩展认证协议

特点

  • PPP既支持同步传输又支持异步传输,而X.25、FR(Frame Relay)等数据链路层协议仅支持同步传输,SLIP仅支持异步传输
  • PPP 协议具有很好的扩展性。如,当需要在以太网链路上承载PPP协议时,PPP可扩展为PPPoE
  • PPP提供LCP协议,用于各种链路层参数的协商
  • PPP提供各种NCP协议(如IPCP、IPXCP),用于各网络层参数的协商,更好地支持网络层协议
  • PPP 提供认证协议CHAP、PAP,更好地保证网络安全性
  • 无重传机制,网络开销小,速度快

一个典型的PPP链路建立过程分为三个阶段:

  • 创建阶段:将对基本的通信方式进行选择。链路两端设备通过LCP向对方发送配置信息,建立链路。在链路创建阶段,只是对验证协议进行选择,具体的用户验证过程在认证阶段实现
  • 认证阶段:客户端会将自己的身份发送给远端的接入服务器。该阶段使用一种安全的验证方式避免第三方窃取数据或冒充远程客户接管与客户端的连接。认证成功,则转到网络层协商阶段。如果认证失败,则链路终止
  • 网络层协商阶段:认证阶段完成之后,PPP将调用在链路创建阶段选定的各种NCP协商高层协议问题,例如,在该阶段IP控制协议可以向拨入用户分配动态地址。

报文格式

在这里插入图片描述
包含字段:

  • Flag域:标识一个物理帧的起始和结束,该字节为二进制序列01111110(0x7E)
  • Address域:字节固定为11111111(0xFF),是一个广播地址
  • Control域:默认为00000011(0X03),表明为无序号帧
  • Protocol字段:用来说明PPP所封装的协议报文类型;典型字段值有:0xC021代表LCP,0xC023代表PAP报,0xC223代表CHAP报文。如果协议字段被设为0xC021,则说明通信双方正通过LCP报文进行PPP链路的协商和建立
  • Information字段:包含协议字段中指定协议的数据包
    • Code 字段:主要是用来标识LCP数据报文的类型。典型的报文类型有:配置信息报文(Configure Packets:0x01),配置成功信息报文(Configure-Ack:0x02),终止请求报文(Terminate-Request:0x05)
    • Identifier域:1个字节,用来匹配请求和响应
    • Data字段:默认最大长度(不包括协议字段)称为最大接收单元MRU(Maximum Receive Unit),MRU缺省值为1500字节
  • FCS:Drame Check Sequence,帧校验序列,是个16位的校验和,用于检查PPP帧的完整性

字节填充
当信息字段中出现和标志字段一样的比特(0x7E)组合时,就必须采取一些措施使这种形式上和标志字段一样的比特组合不出现在信息字段中。

当PPP使用异步传输时,它把转义符定义为0x7D(即01111101),并使用字节填充,RFC 1662规定如下填充方法:

  • 把信息字段中出现的每一个0x7E字节转变成为2字节序列(0x7D, 0x5E)
  • 若信息字段中出现一个0x7D的字节(即出现了和转义字符一样的比特组合),则把0x7D转变成为2字节序列(0x7D, 0x5D)
  • 若信息字段中出现ASCII码的控制字符(即数值小于0x20的字符),则在该字符前面要加入一个0x7D字节,同时将该字符的编码加以改变。例如,出现0x03(在控制字符中是传输结束,ETX)就要把它转变为2字节序列(0x7D, 0x23)

由于在发送端进行字节填充,因此在链路上传送的信息字节数就超过了原来的信息字节数。但接收端在收到数据后再进行与发送端字节填充相反的变换,就可以正确地恢复出原来的信息。

零比特填充
PPP协议用在SONET/SDH链路时,使用同步传输(一连串的比特连续传送)而不是异步传输(逐个字符地传送)。在这种情况下,PPP协议采用零比特填充方法来实现透明传输。

具体做法是:在发送端,先扫描整个信息字段(通常用硬件实现,也可用软件实现,只是会慢些)。只要发现有5个连续1,则立即填入一个0。经过这种零比特填充后的数据,可保证在信息字段中不会出现6个连续1。接收端在收到一个帧时,先找到标志字段F以确定一个帧的边界,接着再用硬件对其中的比特流进行扫描。每当发现5个连续1时,就把这5个连续1后的一个0删除,以还原成原来的信息比特流。这样就保证透明传输:在所传送的数据比特流中可以传送任意组合的比特流,而不会引起对帧边界的错误判断。

建立状态机

在这里插入图片描述
包含如下几个阶段:

  • Dead阶段:也称为物理层不可用阶段。当通信双方的两端检测到物理线路激活时,就会从Dead阶段迁移至Established阶段,即链路建立阶段
  • Established阶段:PPP链路进行LCP参数协商。协商内容包括最大接收单元MRU、认证方式、魔术字(Magic Number)等选项。LCP参数协商成功后会进入Opened状态,表示底层链路已经建立
  • Authenticate阶段:多数情况下,链路两端的设备是需要经过认证阶段(Authenticate)后才能够进入到网络层协议阶段。PPP链路在缺省情况下是不要求进行认证的。如果要求认证,则在链路建立阶段必须指定认证协议。认证方式是在链路建立阶段双方进行协商的。如果在这个阶段再次收到Configure-Request报文,则又会返回到链路建立阶段
  • Network阶段:PPP链路进行NCP协商。通过NCP协商来选择和配置一个网络层协议并进行网络层参数协商。只有相应的网络层协议协商成功后,该网络层协议才可以通过这条PPP链路发送报文。如果在这个阶段收到Configure-Request报文,也会返回到链路建立阶段。NCP协商成功后,PPP链路将保持通信状态
  • Terminate:PPP运行过程中,可以随时中断连接,例如物理链路断开、认证失败、超时定时器时间、管理员通过配置关闭连接等动作都可能导致链路进入Terminate阶段。在Terminate阶段,如果所有的资源都被释放,通信双方将回到Dead阶段,直到通信双方重新建立PPP连接。

工作原理

当用户拨号接入ISP后,就建立一条从用户个人电脑到ISP的物理连接。这时,用户个人电脑向ISP发送一系列的链路控制协议LCP分组(封装多个PPP帧),以便建立LCP连接。这些分组及其响应选择了将要使用的一些PPP参数。接着进行网络层配置,网络控制协议NCP给新接入的用户个人电脑分配了一个临时的IP地址,这样,用户个人电脑就成为互联网上的一个有IP地址的主机了。当用户通信完毕时,NCP释放网络层连接,收回原来分配出去的IP地址,接着,LCP释放数据链路层连接,最后释放物理层连接。
在这里插入图片描述
步骤:

  • 当用户个人电脑通过调制解调器呼叫路由器时(比如点屏幕上点击宽带连接),路由器就能够检测到调制解调器发出的载波信号。在双方建立了物理层连接后,PPP进入链路建立状态(Link Establish),其目的是建立链路层的LCP连接。
  • 接下来,LCP开始协商一些配置选项,即发送LCP的配置请求帧,这是一个PPP帧,其协议字段为LCP对应的代码(0xC021),信息字段包含特定的配置请求。LCP配置选项包括:链路上的最大帧长、所使用的鉴别协议的规约(如果有)、不使用PPP帧中的地址和控制字段(因为这两个字段的值是固定的,没有任何信息量,可以在PPP帧的首部忽略这两个字节)。链路的另一端可以发送以下几种响应中的一种:
    • 配置确认帧(Configure-Ack):所有选项都接受
    • 配置否认帧(Configure-Nak):所有选项都理解但不能接受
    • 配置拒绝帧(Configure-Reject):有的选项无法识别或不能接受,需要协商
  • 协商结束后,双方就建立LCP链路,接着就进入鉴别状态(Authenticate)。在这一状态,只允许传送LCP协议的分组、鉴别协议的分组、监测链路质量的分组。若使用口令鉴别协议PAP(Password Authentication Protocol),则需要发起通信的一方发送身份标识符和口令。系统可允许用户重试若干次。如果需要有更好的安全性,则可使用更加复杂的口令握手鉴别协议CHAP(Challenge-Handshake Authentication Protocol)。若鉴别身份失败,则转到链路终止状态(Link Terminate),若鉴别成功,则进入网络层协议状态(Network Layer Protocol)
  • 在网络层协议状态,PPP链路的两端的网络控制协议NCP根据网络层的不同协议互相交换网络层特定的网络控制分组,现在的路由器都能够同时支持多种网络层协议,PPP协议的两端的网络层可以运行不同的网络层协议,但仍然使用同一个PPP协议。如果PPP链路上运行的是IP协议,则对PPP链路的每一端配置IP协议模块时(如分配IP地址)就要使用NCP中支持的协议—IP控制协议IPCP(IP Control Protocol)。IPCP分组也封账成PPP帧(协议字段为OX8021)在PPP链路上传送。在低速链路上运行时,双方还可以协商使用压缩的TCP和IP首部,以减少在链路上发送的比特数
  • 当网络层配置完毕后,链路就进入可进行数据通信的链路打开状态(Link Open)。链路的两端可以向彼此发送分组。两端还可发送回送请求LCP分组(Echo-Request)和回送回答LCP分组(Echo-Reply),以检查链路的状态。数据传输结束后,可以由链路的一端发出终止请求LCP分组(Terminate-Request),请求终止链路连接。在收到对方发来的终止确认LCP分组后(Terminate-Ack),转到链路终止状态。如果链路出现故障,也会从链路打开状态转到链路终止状态。当调制解调器的载波停止后,则回到链路静止状态。

从设备无链路开始,先建立物理链路,再建立链路控制协议LCP链路。经过鉴别后,再建立网络控制协议NCP链路,然后才能交换数据。可见,PPP协议已不是纯粹的数据链路层的协议,它包含物理层和网络层的内容。

PAP

PAP是一种简单的明文验证方式。网络接入服务器要求用户提供用户名和口令,PAP以明文方式返回用户信息,并且对回送或者重复验证和错误攻击没有保护措施。

很明显,这种验证方式的安全性较差,第三方可以很容易地获取被传送的用户名和口令,并利用这些信息与网络接入服务器建立连接获取网络接入服务器提供的资源。所以,一旦用户密码被第三方窃取,PAP无法提供避免受到第三方攻击的保障措施。

CHAP

CHAP是一种加密的验证方式,能够避免建立连接时传送用户的明文密码。网络接入服务器向远程用户发送一个挑战口令,其中包括会话ID和一个任意生成的挑战字串。远程客户端使用MD5散列算法返回用户名和加密的挑战口令、会话ID及用户口令。

CHAP对PAP进行了改进,不再直接通过链路发送明文口令,而是使用挑战口令以散列算法对口令进行加密。因为服务器端存有客户的明文口令,所以服务器可以重复客户端进行的散列操作,并将结果与用户返回的口令进行对照。

CHAP为每一次验证任意生成一个挑战字串来防止受到攻击。在整个连接过程中,CHAP将不定时地随机向客户端重复发送挑战口令,从而避免非法入侵者冒充远程客户进行攻击。

CHAP优点:

  • 通过可变的挑战口令和随机地、重复地发挑战口令,CHAP防止重放攻击
  • 该认证方法依赖于认证者和对端共享的密钥,密钥不是通过链路发送的
  • 虽然该认证是单向的,但是在两个方向都进行CHAP协商,同一密钥可以很容易地实现交互认证
  • 由于CHAP可以用在许多不同的系统认证中,因此可以用用户名作为索引,以便在一张大型密钥表中查找正确的密钥。这样也可以在一个系统中支持多个用户名—密钥对,在会话中随时改变密钥。

CHAP在设计上的要求:

  • CHAP算法要求密钥长度必须至少是1字节,至少应该不易让人猜出,密钥最好至少是散列算法所选用的散列码的长度,如此可以保证密钥不易受到穷举搜索攻击。所选用的散列算法,必须保证从已知挑战口令和响应值来确定密钥在计算上是不可行的。
  • 每一个挑战口令应该是唯一的,否则在同一密钥下,重复挑战口令将使攻击者能够用以前截获的响应值应答挑战口令。由于希望同一密钥可以用于地理上分散的不同服务器的认证,因此挑战口令应该做到全局临时唯一。
  • 每一个挑战口令也应该是不可预计的,否则攻击者可以欺骗对方,让对方响应一个预计的挑战口令,然后用该响应冒充对端欺骗认证者。虽然CHAP不能防止实时地主动搭线窃听攻击,但是只要能产生不可预计的挑战口令就可以防范大多数的主动攻击。

EAP

EAP是一个用于PPP认证的通用协议,可以支持多种认证方法。EAP并不在链路控制阶段而是在认证阶段指定认证方法,这样认证方就可以在得到更多的信息以后再决定使用什么认证方法。这种机制还允许PPP认证方简单地把收到的认证信息传给后方的认证服务器,由后方的认证服务器来真正实现各种认证方法。

EAP的认证过程:在链路阶段完成以后,认证方向对端发送一个或多个请求报文。在请求报文中有一个类型字用来指明认证方所请求的信息类型,例如,可以是对端的ID、MD5的挑战口令、一次性密码及通用密码卡等。MD5的挑战口令对应于CHAP认证协议的挑战口令。典型情况下,认证方首先发送一个ID请求报文随后再发送其他的请求报文。对端对每一个请求报文响应一个应答报文。和请求报文一样,应答报文中也包含一个类型字段,对应于所回应的请求报文中的类型字段。认证方再通过发送一个成功或者失败的报文来结束认证过程。

优点:它可以支持多种认证机制,而不需要在建立连接阶段指定;某些设备,例如,网络接入服务器,不需要关心每一个请求信息的真正含义,而是作为一个代理把认证报文直接传给后端的认证服务器,设备只需关心认证结果是成功还是失败,然后结束认证阶段。

缺点:需要在LCP中增加一个新的认证协议,这样现有的PPP要想使用EAP就必须进行修改。同时,使用EAP也和现有的在LCP协商阶段指定认证方法的模型不一致。

参考

  • 数据链路层-点对点协议PPP

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

牛客 二叉树 NB1 牛群的最大高度

原题链接 就不采用, 递归的方式来做了, 自己弄个栈来做 用栈来保存路径, curr 表示当前的节点, pre 保留往回走时的上一步 如果是 用递归来做 它的栈链路是这样的, 可以做下参考 黄色表示返回 用栈模拟的话, 不可能模拟得一摸一样, 递归的话一个栈会经过3次, 第三次后就不…

MATLAB实现遗传算法优化第三类生产线平衡问题

第三类生产线平衡问题的数学模型 假设: 工作站数量(m)和生产线节拍(CT)是预设并固定的。每个任务(或作业元素)只能分配到一个工作站中。任务的执行顺序是预先确定的,且不可更改。每…

ICode国际青少年编程竞赛- Python-2级训练场-列表入门

ICode国际青少年编程竞赛- Python-2级训练场-列表入门 1、 Dev.step(3)2、 Flyer.step(1) Dev.step(-2)3、 Flyer.step(1) Spaceship.step(7)4、 Flyer.step(5) Dev.turnRight() Dev.step(5) Dev.turnLeft() Dev.step(3) Dev.turnLeft() Dev.step(7) Dev.turnLeft() Dev.…

二叉树习题汇总

片头 嗨!大家好,今天我们来练习几道二叉树的题目来巩固知识点,准备好了吗?Ready Go ! ! ! 第一题:二叉树的最大深度 解答这道题,我们采用分治思想 1. 递归子问题:左子树的高度和右子树的高度 …

Tkinter组件:Checkbutton

Tkinter组件:Checkbutton Checkbutton(多选按钮)组件用于实现确定是否选择的按钮。Checkbutton 组件可以包含文本或图像,你可以将一个 Python 的函数或方法与之相关联,当按钮被按下时,对应的函数或方法将被…

【汇编语言小练习输入两个数字然后输出它们的和】

这个程序是用汇编语言编写一个简单的程序,它将从键盘输入两个数字,然后输出它们的和。 .MODEL SMALL .STACK 100H.DATAINPUT_MSG1 DB Enter the first number: $INPUT_MSG2 DB 13, 10, Enter the second number: $RESULT_MSG DB 13, 10, The sum is: $N…

【抽样调查】分层抽样上

碎碎念:在大一大二时听课有的时候会发现听不太懂,那时候只觉得是我自己的基础不好的原因,但现在我发现“听不懂”是能够针对性解决的。比如抽样调查这门课,分析过后我发现我听不懂的原因之一是“没有框架”,一大堆知识…

2024年第六届世界软件工程研讨会(WSSE 2024)即将召开!

2024年第六届世界软件工程研讨会(WSSE 2024)将于2024年9月13-15日在日本京都举行。软件工程领域的发展离不开各位专家学者和业界精英的共同努力和贡献。WSSE 2024将就软件工程领域的最新研究成果、实践经验和发展趋势进行深入交流和探讨,汇聚…

Ubuntu将软件图标添加到应用列表

一.简介snap snap和yum,apt一样都是安装包工具,但是snap里的软件源是自动更新到最新版本,最好用 比如Ubuntu的软件商城就是使用的snap软件包 二. Ubuntu软件商城更新 1.ps -ef | grep snap-store 查询并kill snap-store的所有进程 2.sudo …

【Linux进程间通信(六)】深入理解 System V IPC

(一)引入 (二)IPC 命名空间 (三)ipc_ips结构体 (四)ipc_id_ary结构体 (五)kern_ipc_perm结构体 (六)操作系统对IPC资源是如何管理…

县供电公司员工向媒体投稿发文章用亲身经历告诉你并不难

在县供电公司的日子里,我肩负着一项至关重要的使命——信息宣传工作。这不仅仅是一份职责,更是连接公司与外界的桥梁,通过新闻稿件传递我们的声音,展示我们的成果。然而,回忆起刚刚踏入这个领域的时光,那段经历至今让我感慨万千。 初涉投稿,步履维艰 刚接手这项工作时,我的投稿…

探索DeepSeek平台:新一代MoE模型的深度体验

简介 DeepSeek是一个创新的人工智能平台,它最近推出了其最新版本的模型——DeepSeek-V2 MoE(Mixture of Experts)。这个平台不仅提供了一个交互式的聊天界面,还提供了API接口,让用户可以更深入地体验和利用这一先进的…

全体模型师请做好日入过万的准备!3D模型库海量资源,老子云平台免费用

在数字化的大背景下,3D转型已然成为了多行业关注的重点战略版块。无论是科技、金融、互联网、化工、建筑等等各个行业都在加速布局,3D手段会成为下一个重要的技术风口。也正因如此,3D市场潜能巨大,并且3D需求每年都在暴涨&#xf…

3d中如何对模型粉碎处理?---模大狮模型网

在3D建模和动画设计中,模型粉碎处理是一种引人注目的效果,可以为场景增添动态和震撼的视觉效果。无论是用于电影特效、游戏设计还是虚拟现实项目,都可以通过模型粉碎处理来创造出引人入胜的场景。本文将介绍如何在3D中轻松实现模型粉碎处理&a…

本地连接服务器Jupyter【简略版】

首先需要在你的服务器激活conda虚拟环境: 进入虚拟环境后使用conda install jupyter命令安装jupyter: 安装成功后先不要着急打开,因为需要设置密码,使用jupyter notebook password命令输入自己进入jupyter的密码: …

Windows端之Python3.9及以上高版本工程打包得到的exe逆向工程解包得到pyc文件进而得到py文件的流程实现

参考来自 【python逆向 pyc反编译】python逆向全版本通杀_python反编译pyc-CSDN博客https://blog.csdn.net/zjjcxy_long/article/details/127346296Pyinstaller打包的exe之一键反编译py脚本与防反编译_pyinstaller防止反编译-CSDN博客https://blog.csdn.net/as604049322/artic…

「网络流 24 题」魔术球 【最小路径覆盖】

「网络流 24 题」魔术球 注意这里的球是依次放置&#xff0c;也就是说如果当前放到第 i i i 号球&#xff0c;那么 1 → i − 1 1 \rarr i - 1 1→i−1 号球都已经放好了&#xff0c;否则可以放无数个球 思路 首先我们对于 i < j 且 i j 完全平方数 i < j 且 i j…

在思科和华为上实现两个主机A,B A能ping通B,B不能ping通A

1.华为实验的topo如下 常规状态下任意两台主机都是可以ping通的 此时的需求是PC4能ping通PC2和PC3但是PC2和PC3不能ping通PC4 这里需要用到ACL策略 在接口上调用 验证&#xff1a; PC4能ping通PC2和PC3 PC2和PC3不能ping通PC4 2.思科类似 正常情况下是都能互相ping通 加上ac…

嵌入式Linux的QT项目CMake工程模板分享及使用指南

在嵌入式linux开发板上跑QT应用&#xff0c;不同于PC上的开发过程。最大的区别就是需要交叉编译&#xff0c;才能在板子上运行。 这里总结下嵌入式linux环境下使用CMake&#xff0c;嵌入式QT的CMake工程模板配置及如何使用&#xff0c;分享给有需要的小伙伴&#xff0c;有用到的…

Github的使用教程(下载和上传项目)

根据『教程』一看就懂&#xff01;Github基础教程_哔哩哔哩_bilibili 整理。 1.项目下载 1&#xff09;直接登录到源码链接页或者通过如下图的搜索 通过编程语言对搜索结果进一步筛选。 2&#xff09;红框区为项目的源代码&#xff0c;README.md &#xff08;markdown格式&…
最新文章