PPP协议基本介绍

本文深入介绍了PPP协议,从PPPoE的发现阶段到会话阶段,详细解析了LCP、PAP、CHAP、IPCP和IPV6CP协议的工作流程,包括报文交互和配置选项,为理解PPP链路的建立和管理提供了全面的知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 协议介绍

在这里插入图片描述

1.1 pppoe发现阶段

类型域填充为0x8863,报文格式如下
在这里插入图片描述

报文描述代码会话ID说明
PADIPPPoE发现初始报文0x090x0000目的mac是广播地址
PADOPPPoE发现提供报文0x070x0000
PADRPPPoE发现请求报文0x190x0000
PADSPPPoE发现会话确认报文0x65服务器分配的会话ID会话阶段使用该ID
PADTPPPoE发现终止报文0xa7要结束的会话ID

TLV中包含的配置信息如下:

标记类型标记说明
0x0000表示PPPOE报文数据域中一串标记的结束,为了保证版本的兼容性而保留,在有些报文中有应用
0x0101服务器名,主要用来表明网络侧所能提供给用户的一些服务
0x0102访问集中器名,当用户侧接收到了AC的回应的PADO报文时,就可从所携带的标记中获知访问集中器的名字,而且还可根据此来选择相应的访问集中器
0x0103主机唯一标识,类似于PPP数据报文中的标识域,主要是用来匹配发送和接收端的,因为对于广播式的网络中会同时存在很多个PPPOE的数据报文
0x0104AC-Cookies,主要被用来防止恶意DOS攻击
0x0105销售商的标识符
0x0110中继会话ID,对于PPPOE的数据报文也同样可以像DHCP一样被中继到另外的AC上终结,这个字段则是用来维护另一个连接的。
0x0201服务器错误,当请求的服务名不被对端所接收时,会在响应报文中携带这个标记
0x0202访问集中器名出错
0x0203一般性错误

报文交互如下:
在这里插入图片描述

  1. 主机发起一个初始化的广播报文PADI请求建立链路,其中必须包含且仅包含一个TAG_TYPE为Host-Uniq的TAG,以表明标识主机,以及任意数目的其他类型的TAG,这里TAG是一个TLV结构;
    在这里插入图片描述
  2. 访问集中器如果配置了PPPOE的业务时,它会实时检测网络上的数据包,当收到初始化报文后,访问集中器会向该用户回应一个报文。此时PPPoE的会话标识,即Session ID尚未生成。
    在这里插入图片描述
  3. 主机发送单板会话请求数据包以及选中的访问集中器发送确认数据包,由于PADI是广播的,主机可能收到不止一个PADO,它将审查接收到的所有PADO并从中选择一个。可以根据其中的AC-Name或PADO所提供的服务来做出选择,然后主机向选中的访问集中器发送一个PADR数据包。
    在这里插入图片描述
  4. 当访问集中器收到一个PADR数据包,它就准备开始一个PPP会话,它为PPPOE会话创建一个唯一的Session ID并用一个PADS数据包来给主机作出响应
    在这里插入图片描述
  5. 进入PPPOE会话阶段
  6. PPP用户下线的时候,要发送PADT数据包,这种数据包可以在会还建立以后的任意时刻发送,表明PPPOE会话已经终止。它可以由主机或访问集中器发送,并且不含任何类型的TAG

1.2 PPPOE会话阶段

类型域填充为0x8864,报文格式如下
在这里插入图片描述
会话节点工作流程如下:
在这里插入图片描述

1.2.1 LCP协议

LCP链路控制协议,用于协商适合于数据链路的选项,如指出链路的一边同意接收的最大数据报大小即最大接收单元(MRU)。探测链路回路和其他普通的配置错误,以及终止链路。LCP对应的PPP协议为0xC021.
在这里插入图片描述
(1) 代码域:确定LCP包的种类

类型代码描述格式
链路配置:用于建立和配置链路0x01Configure-Request(匹配请求)TLV
0x02Configure-Ack(匹配正确应答)TLV
0x03Configure-Nak(匹配不应答)TLV
0x04Configure-Reject(匹配拒绝)TLV
链路结束:用于结束一个链路0x05Terminate-Request(终止请求)数据
0x06Terminate-Ack(终止应答)数据
链路维修:用于管理和调试一个链路0x07Code-Reject(代码拒绝)被拒绝的LCP包
0x08Protocol-Reject(协议拒绝)拒绝协议-拒绝信息
0x09Echo-Request(回波请求)魔数+数据
0x0AEcho-Reply(回波应答)魔数+数据
0x0BDiscard-Request(抛弃请求)魔数+数据
(2)标识符:标识符域在匹配请求和回复中使用。当带有无效标识符域的包被接收时,该包不影响LCP自动机制,将被静静的丢弃。

(3)长度

(4)数据

各种LCP包说明

  1. Configure-Request : 用于链路参数的配置请求,数据格式为TLV,描述如下:

    类型描述
    0x00RESERVED(保留)
    0x01Maximum-Receive-Unit(最大接收单元)
    0x02Async-Control-Character-Map(异步-控制-字符-映射)
    0x03Authentication-Protocol(鉴定-协议)
    0x04Quality-Protocol(质量-协议)
    0x05Magic-Number(魔数)
    0x06RESERVED(保留)
    0x07Protocol-Field-Compression(协议-域-压缩)
    0x08Address-and-Control-Field-Compression(地址和控制域压缩)
  2. Configure-Ack : 如果在收到Configure-Request包中每一个配置选项及其所有的值都是能接受的,那么必须传送一个Configure-Ack包。Configure-Ack包中的配置选项必须是接受的Configure-Request包中的配置选项的拷贝,切标识符域必须与Configure-Request包相同以保证匹配。

  3. Configure-Nak : 如果收到的Configure-Request包中的配置项目是可接受的,也是自己愿意协商的,但是配置项目当中的一些值不能被接受,那么就必须传送一个Configure-Nak包。其中选项域仅由收到的Configure-Request包中不可接受的配置选项所填充。如果对端列出的配置项目之外还有新的项目要求配置,则Configure-Nak也可以发送新的配置项目和值,以提醒对端将其列入Configure-Request包中,作为下一次发送的请求项目。Configure-Nak包中的标识符域必须匹配应答的Configure-Request包。

  4. Configure-Reject : 如果收到的Configure-Request包中一些配置项目是不可辨认的或者不被协商所接收(由网络管理员配置的),则必须传送一个Configure-Reject包。选项域仅由接收到的Configure-Request包中不可接收的配置项目填充,且必须不被重定义或修改,所有可识别的和通过协商的配置项目被过滤出Configure-Reject包。标识符必须匹配应答的Configure-Request。

  5. Code-Reject : 在接收到一个带有未知代码的LCP包时,必须传送一个Code-Reject包报告回未知代码的发送方。

  6. Protocol-Reject : 当接收到一个带有未知协议域的PPP包时,表示对端试图使用一个不支持的协议。这通常发生在对端试图配置一个新的协议时。此时如果LCP处于打开状态,就必须传送一个Protocol-Reject包回应对端。对端在接收到Protocol-Reject包后,必须尽早停止发送被指出的协议包。

  7. Echo-Request和Echo-Reply : 用于检测数据链路层链路双方是否正常运转。

  8. Discard-Request : 用于测试远端链路接收器。

1.2.2 PAP协议

密码验证协议(PAP)提供了一种简单的方法,可以使链路双发使用2次握手建立身份验证。在链路建立完成后,链路一端不停地发送用户名/密码对给验证者,一直到验证被响应或者连接被终止为止。

PAP不是一个健壮的身份验证方法,密码在电路上是明文发送的,并且对回送或者重复验证和错误攻击没有保护措施。

PAP协议字段是0xC023,报文格式和LCP一样
在这里插入图片描述

代码描述数据格式
0x01Authencate-Request(认证请求)用户名长度+用户名+密码长度+密码
0x02Authenticate-Ack(认证应答)信息长度+信息
0x03Authenticate-Nak(认证无应答)信息长度+信息
  1. Authencate-Request : 用来启动PAP,在验证阶段链路被验证端必须传输代码域为1的Authencate-Request 包。

  2. Authenticate-Ack和Authenticate-Nak : 如果在接收的Authencate-Request 包中的用户名、密码对是可识别的和可接受的,则验证者必须发送一个Authenticate-Ack包。如果在接收到的Authenticate-Request包中的用户名和密码对是不可识别的或不可接收的,则验证者必须发送一个Authenticate-Nak包,并且应该终止链路。

1.2.3 CHAP协议

CHAP使用3次握手周期性的验证对端。在链路建立初始化时这样做,也可以在链路建立后任何时间重复验证。在链路建立完成后,验证者向对端发送一个“challenge”信息。对端使用“one-way-hash”(单向哈希MD5)函数配合密匙(secret)计算出的值响应这个挑战信息。验证者使用自己计算的hash值校验响应值。如果两个值匹配,则验证是成功的,否则连接应该终止。

CHAP协议字段是0xC223,格式如下:
在这里插入图片描述

代码描述数据格式
0x01挑战 Challenge值长度+值+名字
0x02应答 Response值长度+值+名字
0x03成功 Success信息
0x04失败 Failure信息
  1. 挑战和应答:挑战包是CHAP的开始。在发送挑战包后,其它的挑战包必须在有效的应答包成功接收之后或者在可配置的重试计数器计满后发送。
  2. 成功和失败包:如果接收到的应答值等于预期值,那么认证者必须传送成功包,如果不等,那么认证者必须传送失败包,并且应该终止链路。

1.2.4 IPCP协议

IP控制协议(IPCP)负责配置PPP链路的两端上IP协议传输,属于IP的网络控制协议(NCP)。它的协议字段为0x8021,格式如下:
在这里插入图片描述

代码描述格式
0x01Configure-Request(匹配请求)TLV
0x02Configure-Ack(匹配正确应答)TLV
0x03Configure-Nak(匹配不应答)TLV
0x04Configure-Reject(匹配拒绝)TLV
0x05Terminate-Request(终止请求)
0x06Terminate-Ack(终止应答)
0x07Code-Reject(代码拒绝)

配置的选项类型:

类型描述备注
0x01IP-地址该选项的使用已经被反对了
0x02IP-压缩协议
0x03IP-地址地址推荐使用该选项配置
0x04Mobile-IPv4
0x81Primary DNS Server Address(主dns服务器)
0x82Primary DNS Server Address(主NBNS服务器)
0x83Second DNS Server Address(备dns)
0x84Second DNS Server Address(备NBNS)

IPCP交互流程:
在这里插入图片描述

1.2.5 IPV6CP协议

IPV6CP与IPCP类似,区别在于IPV6CP配置选项为:

类型描述
1接口-标识符

此Configuration Option提供协商唯一的、64位接口标识符的方法,该接口标识符用于链路本断的地址自动配置。
在这里插入图片描述
接口ID首先按照EUI-64格式生成,然后IPV6CP协商最终确定,EUI-64格式生成方式如下:

  1. 对于一个MAC地址,由两部分组成,24位的公司的ID(由IEEE唯一分配),24位公司的扩展ID(公司自己编制),联合产生全球唯一的48位MAC地址(也称IEEE 802地址)
    在这里插入图片描述

第一字节的第7位称为U/L位,表示此地址是全球管理还是本地管理。如果为0就为全球管理,为1就为本地管理。

第一字节第8位称为I/G为,表示此地址是单播地址还是组播地址。如果为0就为单播地址,为1就为组播地址。

  1. 先将此48位MAC地址公司ID和公司扩展ID之间插入特定16位值0xFFFE,形成64位的EUI-64地址,如下:
    在这里插入图片描述

  2. 再将EUI-64地址的第一字节第7为反转,形成IPV6地址的接口ID,加之IPV6前缀形成完整的IPV6地址。

  3. 实例:

a.MAC地址为 00-AA-00-3F-2A-1C
b.转换EUI-64为 00-AA-00-FF-FE-3F-2A-1C
c.第一个字节为0000 0000,第7为反转为0000 0010转换16进制为0x02。
d.得到结果为02-AA-00-FF-FE-3F-2A-1C,转换为ip6表示格式为2AA:FF:FE3F:2A1C

此接口ID用来生成本地链路地址(LLA)

1.3 PPP链路的各个阶段

在这里插入图片描述

  1. 链路死亡阶段(物理层不可用阶段):PPP链路都需从这个阶段开始和结束。当通信双方的两端检测到物理线路激活(通常是检测到链路上有载波信号)时,就会从当前这个阶段跃迁至下一个阶段(即链路建立节点)。先简单提一下链路建立阶段,在这个阶段主要是通过LCP协议进行链路参数的配置,LCP在此阶段的状态机也会根据不同的事件发送变化。当处于在链路不可用阶段时,LCP的状态机是处于initial(初始化状态)或starting(准备启动状态),一旦检测到物理线路可用,则LCP的状态机就要发送改变。当然链路被断开后也同样会返回到这个阶段,往往在实际过程中这个阶段所停留的时间是很短的,仅仅是检测到对方设备的存在。
  2. 链路建立阶段:是PPP协议最关键和最复杂的阶段。该阶段主要是发送一些配置报文来配置数据链路,这些配置的参数不包括网络层协议所需的参数。当完成数据报文的交换后,则会继续向下一个阶段跃迁,该下一个阶段既可是验证阶段,也可是网络层协议阶段,下一阶段的选择是依据链路两端的设备配置的(通常是由用户来配置,但对NAS或BAS设备的PPP模块缺省就需要支持PAP或CHAP中的一种认证方式)。在此阶段LCP的状态机会发生两次改变,当链路处于不可用阶段时,此时LCP的状态机处于initial或starting,当检测到链路可用时,则物理层会项链路层发送一个UP事件,链路层收到该事件后,会将LCP的状态机从当前状态改变为Request-Sent(请求发送状态),根据此时的状态机LCP会进行相应的动作,也即是开始发送Config-Request报文来配置数据链路,无论哪一端接收到了Config-Ack报文时,LCP的状态机又要发生改变,从当前状态改变为opened状态,进入open状态后收到Config-Ack报文的一方则完成了当前阶段,应该向下一个进入Opened状态后收到Config-Ack报文的一方则完成了当前阶段,应该向下一个阶段跃迁。同理可知,另一端也是一样的,但必须注意的一点是在链路配置阶段双方是链路配置操作过程是相互独立的。如果在该阶段收到了非LCP数据报文,则会将这些报文丢弃。
  3. 认证阶段:多数情况下的链路两端设备是需要经过认证后才进入到网络层协议阶段,缺省情况下链路两端的设备是不进行认证的。在该阶段支持PAP和CHAP两种认证方式,验证方式的选择是依据在链路建立阶段双方进行协商的记过。然而,链路质量的检测也会在这个阶段同时发生,但协议规定不会让链路质量的检测无限制的延迟验证过程。在这个极端仅支持链路控制协议、验证协议和质量检测数据报文,其他的数据报文都会被丢弃。如果这个阶段再次收到了Config-Request报文,则又会返回到链路建立阶段。
  4. 网络层协议阶段:一旦PPP完成了前面几个阶段,每种网络层协议(IP、IPX和AppleTalk)会通过各自相应的网络控制协议进行配置,每个NCP协议可在任何时间打开和关闭。当一个NCP的状态机变成Opened状态时,则PPP就可以开始在链路上承载网络层的数据包报文了。如果在这个阶段收到了Config-Request报文,则又会回到链路建立阶段。
  5. 链路终止阶段:PPP能在任何时候终止链路。当载波丢失、授权失败、链路质量检测失败和管理人员人为关闭链路等情况均会导致链路终止。链路建立阶段可能通过交换LCP的链路终止报文来关闭链路,当链路关闭时,链路层会通知网络层做相应的操作,而且也会通过物理层强制关断链路。对于NCP协议,它是没有也没有必要去关闭PPP链路的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值