PPP协议原理介绍+报文分析+配置指导-RFC1661

个人认为,理解报文就理解了协议。通过报文中的字段可以理解协议在交互过程中相关传递的信息,更加便于理解协议。

因此本文将在PPP协议报文的基础上进行介绍。

在这里插入图片描述

  • 关于PPP协议基本原理,可参考RFC1661-The Point-to-Point Protocol (PPP)
  • 关于PPP协议的IPv4控制协议,可参考RFC1332-The PPP Internet Protocol Control Protocol (IPCP)
  • 关于PPP协议的压缩控制协议,可参考RFC1962-The PPP Compression Control Protocol (CCP)
  • 关于PPP协议的挑战握手认证协议,可参考RFC1994-PPP Challenge Handshake Authentication Protocol (CHAP)
  • 关于PPP协议的报头压缩协议,可参考RFC3095-Robust Header Compression (ROHC):Framework and four profiles: RTP, UDP, ESP, and uncompressed
  • 关于PPP协议的IPv6控制协议,可参考RFC5072-IP Version 6 over PPP
  • 关于PPP协议的相关参数,可参考IANA的Point-to-Point (PPP) Protocol Field Assignments
  • 关于PPP协议的其他资料,可参考博客【网络协议详解】——PPP协议(学习笔记)

PPP协议还存在大量相关RFC,感兴趣者可查阅相关资料。

PPP(The Point-to-Point Protocol,点到点协议)提供了一个在点对点链路上传输多种协议数据包方法的协议标准。
个人能力有限,这里仅涉及简易内容。敬请各位指导。

目录

PPP协议

  • 目录

  • 1.基础介绍
    • 1.1.PPP协议背景
    • 1.2.相关术语及概念
  • 2.PPP协议原理
    • 2.1.PPP协议帧格式
      • 2.1.1.LCP帧格式
      • 2.1.2.LCP Configuration Options
      • 2.1.3.IPCP帧格式及其Option-RFC1332
    • 2.2.PPP协议基本原理
      • 2.2.1.PPP相图/Phase Diagram
      • 2.2.2.PPP状态机
  • 3.PPP协议常用配置及报文交互实例
    • 3.1.PPP协议常用场景及配置
    • 3.2.PPP报文交互过程
  • 更新

1.基础介绍

1.1.PPP协议背景

PPP(The Point-to-Point Protocol,点到点协议)主要是为在点对点链路上传输多种协议数据包提供了一个标准方法的协议。

在上世纪 80/90 年代,Internet 上支持 TCP/IP 的主机数量呈爆炸式增长。这些主机中的绝大多数以 Ethernet 为代表连接到局域网(LAN),或以 X.25 协议等方式连接广域网(WAN)。 点对点链路作为最古老的数据通信方法之一,尽管当时几乎每台主机都支持点对点连接,却鲜有以简单的点对点链路连接。

点对点 IP 链路数量较少的一个原因是缺乏公认的标准封装协议。因此 Internet Engineering Task Force (IETF) 工作组于1989年 发布 RFC1134 定义了 PPP 协议,以便在 PPP 链路上支持传输多种协议类型。PPP 协议经多年的发展,目前广为接受的标准为 RFC1661-The Point-to-Point Protocol (PPP)

RFC1661 中标准化的 PPP 协议主要定义了三部分内容:

  1. 如何封装多种协议数据包,例如 IPv4/IPv6、OSI Network、Novell IPX 等;
  2. 如何通过 LCP 协议(Link Control Protocol,链路控制协议)建立、配置和测试数据链路层的连通性;
  3. 如何通过 NCP 协议(Network Control Protocols,网络控制协议)建立和配置不同网络层的协议。

PPP协议的基本工作过程为

  • 首先发送 LCP 包以便进行数据链路的配置和测试。
  • 在数据链路的 Establish 和可选参数协商完成后,发送 NCP 包进行网络层协议的配置和协商。
  • PPP 链路持续交互直到发送出 LCP/NCP 关闭链路,或者定时器超时等额外事件的发生。

如果启用了认证等相关功能,则会在 LCP 阶段协商完成后进行认证过程的协商。

1.2.相关术语及概念

Encapsulation:PPP Encapsulation 用于在同一个 PPP 链路上承载多种网络协议。当使用 HDLC-like 封装时,仅需添加 8 字节的 PPP Header。而在带宽比较宝贵的场景下,以 2 或 4 字节的 PPP Header 封装数据。

在这里插入图片描述//上图即为承载 IP 协议时的 PPP 报文,其 PPP Header 长 4 字节。

Link Control Protocol:LCP 链路控制协议,是 Link-layer Control Protocols 的一种。 PPP 协议为适应不同使用环境而设计。LCP 可用于协商封装格式选项和包尺寸大小,探测链路环回和参数错配,终止链路。

LCP 链路控制协议,是 Link-layer Control Protocols 协议最常用的一种。PPP 协议可承载的其他 Link-layer Control Protocols 协议有 PAP (Password Authentication Protocol,密码认证协议;Protocol Number = 0xc023) 和 CHAP (Challenge Handshake Authentication Protocol,挑战握手认证协议;Protocol Number = 0xc223) 等。

Network Control Protocols:NCP 网络控制协议,是一系列网络层协议的总称。PPP 协议利用 NCP 协议完成所运行网络协议的协商。常用的 NCP 协议有 IPCP(IP Control Protocol)、IPv6CP(IPv6 Control Protocol)和 MPLSCP(MPLS Control Protocol)等。

在之前的 PPP 协议报文示例中,可以注意到 PPP Header 中存在一个 2 字节的 Protocol 字段用于表示 PPP 所承载的协议类型。IETF (Internet Engineering Task Force,国际工程任务组) 在 RFC1661 中大致将 LCP、NCP 以及 NLP (Network Layer Protocols) 等协议的 Protocol Numbers 进行了如下划分:
在这里插入图片描述以上几类协议可以大致这样理解:控制协议用于 PPP 建立交互的协商协议,网络层协议用于 PPP 实际承载业务报文。
例如,当 PPP 的 Protocol Number 为 0x8021 时表示 IPCP 可用于协商 IPv4 网络的相关参数;当为 0x0021 时表示 IPv4 可用于承载具体的 IP 协议报文,例如 ICMP 和 TCP 等。相似的有 0x8281 时表示 MPLSCP 用于协商 MPLS 网络的相关参数;0x0281 时表示承载具体 MPLS 单播业务报文。
自动换行在这里插入图片描述//也即有上述图示的逻辑结果。

PPPoE:Point-to-Point Protocol over Ethernet,PPP协议封装于以太网上的协议。PPPoE协议定义于 RFC2516-A Method for Transmitting PPP Over Ethernet (PPPoE)。其基本格式为在 PPP 协议基础上封装 PPPoE Header 后作为 Ethernet 帧 Payload 的形式存在。

在这里插入图片描述此处不在对 PPPoE协议做更多介绍,感兴趣者可查阅相关资料。

2.PPP协议原理

在这里插入图片描述//根据前文描述,PPP 协议的基本工作过程如上图所示。这里依次进行相应介绍。

点击此处回到目录

2.1.PPP协议帧格式

2.1.1.LCP帧格式

RFC1661 中定义的 LCP 包格式

通用的 LCP 包格式在这里插入图片描述Code:代码,1字节。用于标识 LCP 包类型。当收到未知类型的 LCP 包时,应当回应 Code = 7 的 Code-Reject 帧。

目前 RFC 标准化了14种 LCP 包:在这里插入图片描述//其中 8-13 是 LCP 协议独有的 code 类型。这里暗含的意思是 LCP 协议和 IPCP 协议具有相同的帧格式,共用部分 code 码。

Identifier:身份标识,1字节。主要用于匹配 Request 类型和 Reply 类型的消息。

由于 PPP 链路建链协商时不携带 MAC 或 Router-id 等用于标识的链路节点的信息,需要通过该字段进行相互识别。
每当设备启动发送 LCP 报文时从 0x00 开始计数,每发送一次 LCP 包 Identifier 序号加一直至 0xff。随后从 0x00 开始下一轮循环。通常仅允许 Request 类型包在重传时不改变 Identifier 序号。
通常仅允许 Request 类型包在重传时不改变 Identifier 序号。Reply 类型包应当与 Request 类型的 Identifier 序号一致。

Length:长度,2字节。标识整个 LCP 包的长度,并且标识长度不应超过链路的 MRU (Maximum-Receive-Unit,最大接受单元)。对于超过 Length 标识的部分应当在接受时忽略。如果接收到不可用的 Length 字段,应当静默丢弃。
Data:数据,长度取决于 Length 标识值。 Data 字段的内容还受到具体 LCP 包的影响。

在这里插入图片描述//上图为一个典型的 LCP 包图示,后文将针对交互过程对其进行介绍。

1@=Configure LCP 包格式:RFC1661
在这里插入图片描述Configure LCP 包的 Code:共有4种类型。主要用于链路节点协商连接请求。

  1. Code = 1 表示 Configure-Request LCP 包。每当期望建立某种连接时,携带相应的 LCP Option 发起 Code = 1 的Configure-Request LCP 包开启交互请求。
  2. Code = 2 表示 Configure-Ack LCP 包。当收到的 Configure-Request LCP 包每个 Option 可识别且接受时必须回应 Configure-Ack LCP 包,并且携带未经重新排序和修改的 Option。
  3. Code = 3 表示 Configure-Nak LCP 包。当收到的 Configure-Request LCP 包每个 Option 可识别但部分 Option 的值不可接受时必须回应 Configure-Nak LCP 包,并且携带未经重新排序的不可接受 Option。

除此之外还要求
1@:没有 Value 字段的选项 Option 必须改用 Code = 4 的 Configure-Reject LCP 包回复。
2@:每个只允许出现一次的 Option 必须修改为 Configure-Nak 发送方可接受的值。当默认值与请求的值不同时,可以使用默认值。
3@:当特定类型的 Option 出现多次并具有不同的值时,Configure-Nak 必须同样出现多次并包含该 Option 的所有值,这些值是 Configure-Nak 发送方可接受的。 这包括 Configure-Request 中存在的可接受值。
4@:当需要某种协商需求而 Configure-Request LCP 包未列出该 Option ,则可以将该 Option 附加到 Configure-Nak 的 Option 中,以提示对等方将该 Option 包含在其下一个 Configure-Request LCP 包中。 Option 的 Value 应当是 Configure-Nak 发送方可接受的值。在接收 Configure-Nak 包时,Identifier 字段必须与上次传输的 Configure-Request LCP 包匹配。 无效数据包将被静默丢弃。
对端收到有效的 Configure-Nak LCP 包而在发送新的 Configure-Request LCP 包时,可以按照 Configure-Nak 包中的指示修改 Option。当存在 Option 的多个实例时,对等方应选择一个值以包含在其下一个 Configure-Request 包数据包中。某些 Option 具有可变长度。由于 Nak’d Option 已被 Configure-Nak 包发送方修改,因此重新发送 Configure-Request LCP 包的一方必须具有能够处理与原始 Configure-Request 不同的 Option 长度的能力。

  1. Code = 4 表示 Configure-Reject LCP 包。当收到的 Configure-Request LCP 包中某些 Option 无法识别或无法协商(由网络管理员配置),则实现必须回应Configure-Reject LCP 包。 Option 字段仅填充 Configure-Request LCP 包中不可接受的 Option,并且不得以任何方式重新排序或修改配置选项。收到 Configure-Reject LCP 包的一方在发送新的 Configure-Request LCP 包时,它不得包含 Configure-Reject 包中列出的任何 Option。

Configure-Nak LCP 包和 Configure-Reject LCP 包区别在于:Configure-Nak LCP 包表示双方可以重新协商需求值,而 Configure-Reject LCP 包表示双方明确不可针对某一需求进行交互。

这一过程往往发生在 LCP 已经完成了链路发现,需要进一步进行 NCP 交互时事先确认的某些信息或者管理者更改了网络层信息。

在这里插入图片描述//例如此处携带的即为认证 Option,LCP Option 携带 CHAP 协议进行认证。

2@=Terminate LCP 包格式:RFC1661
在这里插入图片描述Terminate LCP 包的 Code:共有2种类型。Terminate LCP 包主要用于关闭连接。

  1. Code = 5 表示 Terminate-Request LCP 包。当链路节点希望关闭连接时,应当持续发送 Terminate-Request LCP 包直到收到 Terminate-Ack LCP 包。而未经 Request 而收到 Terminate-Ack LCP 包时,通常也意味着对等体处于 Closed/Stopped 状态,或者需要重新协商。
  2. Code = 6 表示 Terminate-Ack LCP 包。当收到 Terminate-Request LCP 包时,必须发送 Terminate-Ack LCP 包。

3@=Code-Reject LCP 包格式:RFC1661
在这里插入图片描述Code-Reject LCP 包的 Code:共有1种类型。Code-Reject LCP 包主要用于响应未知 Code 的 LCP 包。

  1. Code = 7 表示 Code-Reject LCP 包。当链路节点处于 Open 状态收到对等体发送来的未知类型的 LCP 包时,应当发送 Code-Reject LCP 包。Code-Reject 数据包只能在 LCP Opened 状态下发送。Reject-Packet 字段应当不包含数据链路层头部或 FCS,并可因 MRU 限制而截断。
    在 LCP 打开状态以外的任何状态下接收的协议拒绝数据包都应以静默方式丢弃。在收到 Code-Reject 后,对等体必须尽早停止发送该未知类型的 LCP 包。

4@=Protocol-Reject LCP 包格式:RFC1661

在这里插入图片描述Protocol-Reject LCP 包的 Code:共有1种类型。Protocol-Reject LCP 包主要用于响应未知或未使能的 Protocol 的 LCP 包。

  1. Code = 8 表示 Protocol-Reject LCP 包。当链路节点处于 Open 状态收到对等体发送来的未知类型的 LCP 包时,应当发送 Protocol-Reject LCP 包。Protocol-Reject 数据包只能在 LCP Opened 状态下发送。在 LCP 打开状态以外的任何状态下接收的协议拒绝数据包都应以静默方式丢弃。Reject-Information 字段应当不包含数据链路层头部或 FCS,并可因 MRU 限制而截断。
    在 LCP 打开状态以外的任何状态下接收的协议拒绝数据包都应以静默方式丢弃。在收到 Protocol-Reject 后,对等体必须尽早停止发送该未知类型的 LCP 包。

在这里插入图片描述//这是由于未使能 MPLS 而导致对 MPLSCP 协议回应的 LCP Protocol Reject 包。

5@=Echo LCP 包格式:RFC1661
在这里插入图片描述Echo LCP 包的 Code:共有2种类型。Echo LCP 包主要用于调试、链路质量确定、性能测试等其他方面。

  1. Code = 9 表示 Echo-Request LCP 包。
  2. Code = 10 表示 Echo-Reply LCP 包。

1@:Echo-Request 和 Echo-Reply LCP 包只能在 LCP Opened 状态下发送。
2@:在收到 Echo-Request 时,必须发送 Echo-Reply。在 LCP Opened 状态以外的任何状态下收到的 Echo-Request 和 Echo-Reply 数据包都应以静默方式丢弃。
3@:Magic-Number 的使用与 Magic-Number Option相关。在成功协商 Magic-Number Option 之前,必须以零形式传输。
3@:Data 字段是可为0的任意值,并受 Length 字段的控制。
在这里插入图片描述//这里的 Data 为 0 的 Echo LCP 包示例。

6@=Discard-Request LCP 包格式:RFC1661
在这里插入图片描述Discard-Request LCP 包的 Code:共有1种类型。Discard-Request LCP 包主要用于提供数据链路层接收器机制,用于执行链路的本地到远程方向。

  1. Code = 11 表示 Echo-Request LCP 包。Discard-Request 数据包只能在 LCP Opened 状态下发送。在接收时,接收方必须静默地丢弃它收到的任何丢弃请求。

7@=Identification LCP 包格式:RFC1570
在这里插入图片描述Identification LCP 包的 Code:共有1种类型。Discard-Request LCP 包提供了一种用于向对等体标识自己的方法。可用于链接故障排除、执行许可证等。

  1. Code = 12 表示 Identification LCP 包。Identification LCP 包可以随时发送,包括在 LCP 达到 Open 状态之前。收到标识数据包会导致 RXR 或 RUC 事件。Identification LCP 包生成情况既罕见又单向,建议在发送或接收 Configure-Reject 时发送。或者,在协商无法收敛时以及 LCP 达到 Opened 状态时作为最终消息发送。
    Message 字段往往包含:硬件类型、PPP 软件修订版本、PPP 产品序列号、链路速率MIB、接口名MIB、等在 debugging 交互时的有用信息。

8@=Time-Remaining LCP 包格式:RFC1570
在这里插入图片描述Time-Remaining LCP 包的 Code:共有1种类型。Discard-Request LCP 包用于通知对等体此会话的剩余时间。

  1. Code = 13 表示 Time-Remaining LCP 包。Time-Remaining LCP 包是一个链路维护数据包。 剩余时间数据包只能在 LCP Open 状态下发送。收到剩余时间数据包会导致 RXR 或 RUC 事件,并无需对 Time-Remaining LCP 包进行响应。

点击此处回到目录

2.1.2.LCP Configuration Options

IANA目前定义了约30种 LCP Configuration Options,这里仅介绍常用的几种 Options。其他 Options 感兴趣者可查阅相关资料。

1@:LCP Configuration Options 主要用于提供链路节点双方一种协商默认参数的方法。
2@:某些 Options 可能出现不仅一次。
3@:Option 通常出现在 Code = 1 的 Configure-Request LCP 包中。

通用的 LCP Configuration Options 格式
在这里插入图片描述Type 字段用于标识 Option 类型,Length 字段用于描述整个 Option 的长度,Data 字段则为 0 至 Length-2 的值。

Type 1 = Maximum-Receive-Unit Options:RFC1661
在这里插入图片描述Maximum-Receive-Unit Option 用于标识自己所能接受的最大字节数,默认取值 1500。但是链路节点应当至少支持接受 1500 字节的能力。

在这里插入图片描述//配置 PPP 链路的MRU协商功能。默认使能,取值取决于链路上 MTU 的设置。

Type 3 = Authentication-Protocol Options:RFC1661/RFC1994
在这里插入图片描述Authentication-Protocol Option 用于指示在进行 NCP 交互前的认证信息确认。但是一个 Configure-Request LCP 包中不能出现多个 Authentication-Protocol Option ,只能在接受 Configure NAK 之后发起下次 Configure-Request。

在这里插入图片描述//这里展示的即为协商 CHAP 的 Authentication-Protocol Options。其中定义的 Algorithm认证算法 = 5 表示 CHAP with MD5。其他认证算法可查阅相关资料。
自动换行
还有一个需要注意的是:RFC1661 认为 PPP 的认证并非一个全双工过程。也即,允许单方向发起认证请求而认证方仅进行认证确认即可。
被认证方需配置
在这里插入图片描述//ppp pap local-user 用于携带认证的用户名和密码向对端请求进行认证。当然也可选择 CHAP 认证的方式。
认证确认方需配置
在这里插入图片描述//ppp authentication-mode 用于设置认证模式。
在这里插入图片描述//local-user 用于设置进行 PPP 认证所需的用户名和密码。

Type 4 = Quality-Protocol Options:RFC1661
在这里插入图片描述Quality-Protocol Option 用于使用特定协议进行链路质量监控。默认情况下,链路质量监控处于禁用状态。

Type 5 = Magic-Number Options:RFC1661
在这里插入图片描述Magic-Number 用于检测环回链路和其他数据链路层异常。默认情况下,不会协商 Magic-Number,而是在可能使用幻数的地方插入零。Magic-Number 的产生通常是使用随机的方式生成。当收到带有 Magic-Number Option 的 Configure-Request LCP 包时,收到的 Magic-Number 将与最后一个发送给对等体的 Configure-Request LCP 包中 Magic-Number 进行比较:
如果两个 Magic-Number 不同,则链接不会环回,并且应确认幻数。
如果两个 Magic-Number 相等,则链路可能(但不确定)是环回的。要确定这一点,必须发送指定不同 Magic-Number 的 Configure-Nak LCP 包,直到收到 Configure-Nak 或重新启动计时器用完之前,不应将新的 Configure-Request LCP 包发送到对等体。当然后续收到的 LCP 包中的 Magic-Number 仍然有可能相等,尽管这种概率非常小。因此RFC1661建议应当尽可能的设置多的 Magic-Number 来源,或者不启用这一功能。

在这里插入图片描述//此处携带一个随机产生的 Magic-Number Option 用于检测链路是否环路。
在这里插入图片描述//一旦协商完成后,在周期性发送的 Echo Request 和 Echo Reply LCP 包中一直携带该字段直到重新协商。同时某种程度上可用于链路节点的标识。

Type 6 = Protocol-Field-Compression Options:RFC1661
在这里插入图片描述Protocol-Field-Compression 用于协商对2字节 PPP Protocol 字段的压缩。

Type 7 = Address-and-Control-Field-Compression:RFC1661
在这里插入图片描述Address-and-Control-Field-Compression 用于协商对 Data Link Layer Address and Control 字段的压缩。

2.1.3.IPCP帧格式及其Option-RFC1332

IPCP协议,也即 IP Control Protocol 协议作为 NCP 协议的一部分,主要用于在 PPP 链路上配置、使能和去使能 IPv4 协议模块。关于 IPv6 网络下的 IPv6CP 协议可参考RFC5072-IP Version 6 over PPP

IPCP协议有如下几个特点
1@:IPCP 协议交互基本原理与 LCP 协议基本相同。并在 PPP 链路协议状态达到 Network-Layer Protocol 阶段开始交互,在此之前接受到的 IPCP 包应当静默丢弃。
2@:IPCP 协议与 LCP 协议不同之处在于 Data Link Layer 的 Protocol 字段取值为 0x8021。
3@:IPCP 协议与 LCP 协议不同之处在于 Code 字段只能使用 LCP 协议的 1-7 种类型。其他类型的 Code 字段应当被视为未知 Code,并且应当回应 Code-Rejects 包。
4@:IPCP 协议与 LCP 协议不同之处在于 IPCP 协议仅在 PPP 链路协议状态达到 Network-Layer Protocol 阶段开始交互。在等待 Configure-Ack 或其他响应超时之前,应准备好等待身份验证和链路质量确定完成。
5@:IPCP 协议与 LCP 协议不同之处在于 IPCP 协议具有不同的 Configuration Option Types。

IPCP协议帧格式示例
在这里插入图片描述这里展示了初始状态下携带的三种 IPCP Configuration Option Types:
1@:Type3 = IP address,定义于RFC1332。用于协商 PPP 链路节点的 IP address。这一描述主要包含了两种行为:首先可用于链路节点间 IP 地址的冲突检测,此外还可用于向节点对等体请求为自己分配一个地址。

这里 IP address 填充 0.0.0.0 即表示用于向对端请求为自己分配一个地址。此时链路对等体返回 Configure-Nak IPCP 包并填充分配的地址,随后链路节点以该值继续发起 IPCP 包再次进行请求。通过这种拒绝再次请求的方式完成 IP 地址的分配工作。详细的交互过程将在第三章进行相应介绍。

2@:Type129 = Primary DNS Server Address,定义于RFC1877。用于协商 PPP 链路节点的 Primary DNS Server Address。
3@:Type131 = Secondary DNS Server Address,定义于RFC1877。用于协商 PPP 链路节点的 Secondary DNS Server Address。

与 Type3 = IP address Option 类似,Type129 = Primary DNS Server Address 和 Type131 = Secondary DNS Server Address 具有类型的两种行为。也即协商 DNS,或向对端请求 DNS。并在请求 DNS 时将相应字段置位 0.0.0.0。

除此之外,IANA 还定义了其他几种 IPCP Configuration Option:
Type129 = Primary NBNS Server Address 和 Type131 = Secondary NBNS Server Address 定义于 RFC1877 中,主要用于协商 NetBIOS Name Server 地址。NetBIOS 协议主要为程序提供了请求低级服务的统一的命令集 (或者提供应用程序编程接口(API)),作用是为了给局域网提供网络以及其他特殊功能
Type2 = IP-Compression-Protocol 定义于 RFC1332 中,主要用于协商如何压缩 TCP/IP 头部以便在低带宽条件下提升载荷效率。在这里插入图片描述//其通用格式如上图所示。目前所常用的 IP-Compression-Protocol 有:
Van Jacobson Compressed TCP/IP (Value = 0x002d,RFC1332)
在这里插入图片描述//ip tcp vjcompress 命令用来配置PPP链路接口的VJHC压缩功能。通过VJHC压缩后,TCP/IP头长度可以从40字节降至3~5字节,在PPP链路上可以明显提高报文的传输速度。
Robust Header Compression (ROHC) (Value = 0x0003,RFC3241)
IP Header Compression (Value = 0x0061,RFC2507和RFC3544)在这里插入图片描述//ppp compression iphc 用来配置PPP链路接口上IPHC功能。
VJHC和IPHC的区别是:VJHC仅仅对TCP/IP报文头进行压缩;IPHC可以对TCP/IP报文头或RTP/UDP/IP报文头进行压缩。其他 IP-Compression-Protocol 及 IPv6-Compression-Protocol 不在进行相关介绍,感兴趣者可查阅相关资料。

点击此处回到目录

2.2.PPP协议基本原理

2.2.1.PPP相图/Phase Diagram

在这里插入图片描述在RFC1661 中定义了 PPP 链路的配置、维护和终止阶段,主要可分为上图所示的几个相。

Link Dead:PPP 链路的开始和结束阶段。在此阶段 LCP 状态机处于 Initial/Starting 初始/启动中状态。

当有额外的 Event 事件发生时 (例如,载波监听或网络管理配置),预示着物理层可用并准备进入 Establishment 阶段。

Link Establishment:在此阶段,LCP 通过交互配置消息来建立连接。一旦发送和接收了 LCP Configure-Ack 包,交互即宣告完成并进入 LCP 的 Open 状态。

在此阶段接收的任何非 LCP 数据包都必须以静默方式丢弃。收到 LCP 配置请求会导致从 Network 阶段或 Authentication 阶段返回到 Link Establishment 阶段。

Authentication:默认情况下,身份验证不是强制性的。如果需要认证,则建立链接后,应尽快进行身份验证。

在身份验证完成之前,不得从身份验证阶段推进到 Network-Layer 协议阶段。 如果身份验证失败,身份验证器应改为进入 Link Termination 阶段。在此阶段,只允许使用 LCP、认证协议和链路质量监控。收到的所有其他数据包必须静默丢弃。

Network-Layer:PPP 完成上述阶段后,必须由相应的 NCP 单独配置每个网络层协议。

当相应的 NCP 未处于 Open 状态时,必须以静默方式丢弃任何受支持的网络层协议数据包。当 LCP 处于 Opened 状态时,实现不支持的任何协议数据包都必须返回 Protocol- Reject 包。只有受支持的协议才会被静默丢弃。

Link Termination:LCP 用于通过交换 Terminate 数据包来关闭链路。

Terminate-Request 的发送方应在收到 Terminate-Ack 后或 Restart 定时器过期后断开连接。Terminate-Request 的接收方应在发送 Terminate-Ack 后至少经过一个重启时间之前不得断开连接。

2.2.2.PPP状态机

PPP 协议有限状态机由 Event事件、Action动作 和 state transitions状态切换 共三部分组成。

Event事件 通常是指发生了某一现象或某一行为;Action动作 是指针对 Event事件 所作出的响应;state transitions状态切换 是指将PPP链路状态发生某种转变。
这里仅针对部分内容进行说明,详细内容可查看相关资料。

在这里插入图片描述RFC1661 定义了如上图所示的 Event事件 和对应的 Action动作

Event = TO+:Timeout with counter > 0。
Event = TO-:Timeout with counter expired。

RFC1661 定义了一个名为 Restart Timer 的定时器,默认取值 3s。当链路节点发出 LCP Configure-Request/Terminate-Request 等请求类型的 LCP 包,启动该定时器。如果定时器结束而未收到响应,则触发 Restart TimerTime Out Event。同时该值的设置也应当考虑链路延时及设备处理所耗费时间的额外设置。
在这里插入图片描述//ppp timer negotiate 用来配置PPP协商超时时间间隔,默认取值 3s。
自动换行
RFC1661 定义了一个名为 Max-Configure 的计数器,默认取值 10。该计数器用于指示在发出 LCP Configure-Request 包后未收到对方响应的最大次数。
也即,发出 10 次 LCP Configure-Request 包而未收到响应将触发 Event = TO-。1 - 9 次则触发 Event = TO+。

RCR+:Receive-Configure-Request (Good)。
RCR-:Receive-Configure-Request (Bad)。

RCR Event 用于分别表示链路节点收到 Configure-Request LCP 包动作。随后针对该事件回应 Configure-Ack/Configure-Nak/Configure-Reject LCP 包。

RTR:Receive-Terminate-Request。
RTA:Receive-Terminate-Ack。

RTR/RTA Event 通常发生于因某些状况导致需要中断 PPP 连接的情况。在该情况下,RFC1661 还定义了名为 Max-Terminate 的计数器,默认取值 2。用于表示发出 Terminate-Request 而未收到 Terminate-Ack 的最大次数。

RXR:Receive-Echo-Request, Receive-Echo-Reply, Receive-Discard-Request。

当收到 Echo-Request, Echo-Reply, Discard-Request LCP 包时触发该事件。对 Echo-Request 回应 Echo-Reply。其他情况无回应。
在这里插入图片描述//ppp keepalive retry-times 用来配置PPP心跳报文的重传次数。当链路质量差,发送的心跳报文达到重传次数时,设备会断开PPP连接。

在这里插入图片描述同时,RFC1661 还定义了如上图所示的 10 种 state 状态
水平指示 State,垂直指示 EventState Transitions 以 action/new-state 形式表示。
多个操作用逗号分隔,并可根据空间需要在后续行上继续执行。可以以任何方便的顺序实现多个操作。
状态后面的字母,表示一个解释性脚注。
短划线 (‘-’) 表示非法转换。

[P] 表示 Passive option,[r] 表示 Restart option,[x] 表示 Crossed connection。

State = Closed:链接可用,但 Open 未发生。 执行 irc = Initialize-Restart-Count 和 scr = Send-Configure-Request 可过渡到 State = Req-Sent。
State = Stopped:当自动机在 This-Layer-Finished 操作之后或发送 Terminate-Ack 后等待 Down 事件时进入。
State = Request-Sent:此状态,链路节点试图配置联系。
State = Opened:Configure-Ack LCP 包已经完成收发。Restart 定时器不在运行。处于此阶段需要向上层协议通告 UP。

点击此处回到目录

3.PPP协议常用配置及报文交互实例

在这里插入图片描述//根据前文描述,PPP 协议的基本工作过程如上图所示。这里依次进行相应介绍。

3.1.PPP协议常用场景及配置

这里以下图为例进行PPP协议交互场景的配置介绍及其对应的报文分析。
在这里插入图片描述在上图场景中:AR1 做 AR2 的PPP认证方,并为 AR2 分配 IP 和 DNS 地址。

AR1:
aaa local-user test password cipher testlocal-user test service-type ppp
#
interface Pos4/0/0link-protocol pppppp authentication-mode pap remote address 10.1.1.2 ppp ipcp dns 20.1.1.1 20.1.1.2ip address 10.1.1.1 255.255.255.0 
#AR2:
interface Pos4/0/0link-protocol pppppp pap local-user test password simple testppp ipcp dns requestip address ppp-negotiate
#

3.2.PPP报文交互过程

报文交互以 LCP – PAP – NCP 的顺序先后进行。
在这里插入图片描述其报文总体交互过程如上图所示,此处以上图报文顺序先后进行介绍。
No.1为废弃报文此处不做介绍。

No.2 和 No.3
这是第一次 PPP 链路节点双方进行的第一次配置确认。在该阶段相互确认链路层所需信息。

在这里插入图片描述//由于 AR2 配置了认证,所以可观察到其发出的 Authentication Option。

No.6 和 No.7
在节点双方都进行了一次 Configure 确认后进入认证阶段。

在这里插入图片描述//PAP 认证以明文方式进行信息交互。相关 Option 可查看前文介绍。

No.8 至 No.13
该阶段也即 NCP 阶段进行 IP 协议的协商。

在这里插入图片描述//由于一方请求了IP及DNS,所以相应字段至0。并会被 AR1 拒绝并携带正确的值。AR2 收到后,再次携带正确 Option 向 AR1 发起请求。至此双方都完成 IP 层协商。
这里还需要注意的一个点是:PPP 链路不进行类似 Ethernet 协议的子网验证,因此实际上可以出现对端 IP 跨网段的现象。并默认将 PPP 链路对等体的 32 位主机路由加入本地路由表。

No.14 至 No.17
此后完成 LCP 和 NCP 阶段的协商,周期性每 10s 进行一次PPP交互确认。

在这里插入图片描述//这里开始交互 Echo 消息,并携带相应的 Magic Number。
相关内容可查看前文介绍。

Terminate LCP 报文交互类型与上述交互过程类似,此处不在进行相关介绍。
MPLSCP 协议作为 NCP 协议的一种与上述交互过程类似,此处不在进行相关介绍。

更新

点击此处回到目录

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

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

相关文章

【JavaEE】文件操作 —— IO

文件操作 —— IO 1. 文件的属性 文件内容文件大小文件路径文件名称 2. 文件的管理 采用树形结构进行管理。 3. 文件路径 分为两种:相对、绝对路径。 相对路径:相对于当前位置的路径,以“./xxx.xxx”为标志绝对路径:以从盘符…

手动导入jar包到Maven的解决方案(简单有效!)

想要导入一个jar包到项目中,这个jar包在Maven中没有可以尝试以下方式。 第一步 先找到你maven的本地仓库,我的仓库就在这里,你可以根据你安装的maven找到你的目录 第二步 根据坐标创建文件夹。 这个依赖modbus4j.jar,Maven远…

PyQt ------ QTextEditor

PyQt ------ QTextEditor 引言正文示例1------进阶示例 引言 这里给大家介绍一下 PyQt6 中的 QTextEditor 组件用法。 正文 QTextEditor 可以进行多行字符串输出的组件。 想要获取 QTextEditor 组件中当前存放的字符串,需要使用: QTextEditor.toPla…

《GreenPlum系列》GreenPlum初级教程-GreenPlum详细入门教程

文章目录 GreenPlum详细入门教程第一章 GreenPlum介绍1.MPP架构介绍2.GreenPlum介绍3.GreenPlum数据库架构4.GreenPlum数据库优缺点 第二章 GreenPlum单节点安装1.Docker创建centos容器1.1 拉取centos7镜像1.2 创建容器1.3 进入容器1.4 容器和服务器免密操作1.4.1 生成密钥1.4.…

idea创建公用依赖包项目

创建parent项目 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/…

服务器管理平台(6)- Utils

Utils 本篇为服务器管理平台的结篇&#xff0c;讲述一些必要的Util&#xff0c;如钉钉告警、安全加密、远程登录等功能的实现 1、钉钉告警 1.1、SQL配置告警规则 逻辑磁盘容量已使用比例超过90% 超过30天未登录 字段名称字段类型解释Idint自增IDTablestring监测表名Metri…

matlab appdesigner系列-常用18-表格

表格&#xff0c;常用来导入外部表格数据 示例&#xff1a; 导入外界excel数据&#xff1a;data.xlsx 姓名年龄城市王一18长沙王二21上海王三56武汉王四47北京王五88成都王六23长春 操作步骤如下&#xff1a; 1&#xff09;将表格拖拽到画布上 2&#xff09;对app1右键进行…

GPSR路由算法的MATLAB实现

GPSR基于节点地理位置路由信息&#xff0c;采用贪婪策略和右手准则的结合在邻居节点中选择下一跳节点进行数据转发。节点在进行路由选择时&#xff0c;只需知道自己、邻居和目标节点的地理位置信息&#xff0c;无需维护全局网络的链路状态&#xff0c;这在很大程度上降低了网络…

高质量简历模板网站,免费、免费、免费

你们在制作简历时&#xff0c;是不是基本只关注两件事&#xff1a;简历模板&#xff0c;还有基本信息的填写。 当你再次坐下来更新你的简历时&#xff0c;可能会发现自己不自觉地选择了那个“看起来最好看的模板”&#xff0c;填写基本信息&#xff0c;却没有深入思考如何使简历…

基于 Docker 部署 Pingvin Share 文件共享平台

一、Pingvin Share 介绍 Pingvin Share 简介 Pingvin Share 是自托管文件共享平台&#xff0c;是 WeTransfer 的替代方案。 Pingvin Share 特点 在 2 分钟内启动您的实例使用可通过链接访问的文件创建共享没有文件大小限制&#xff0c;只有你的磁盘是你的限制设置共享到期时间…

C++11新特性:final/override控制

override关键字 用于显式标识一个成员函数&#xff08;通常是虚函数&#xff09;是在派生类中重写&#xff08;覆盖&#xff09;了基类中的虚函数。这有助于提高代码的可读性&#xff0c;同时在编译时提供了检查&#xff0c;确保派生类中的函数确实是在基类中有对应的虚函数。…

GZ036 区块链技术应用赛项赛题第3套

2023年全国职业院校技能大赛 高职组 “区块链技术应用” 赛项赛卷&#xff08;3卷&#xff09; 任 务 书 参赛队编号&#xff1a; 背景描述 新能源作为新兴领域&#xff0c;产业呈现碎片化与复杂化的特性&#xff0c;逐渐出现管理困难、供应链金融、可信监管与数…

论文阅读_训练大模型用于角色扮演

英文名称: Character-LLM: A Trainable Agent for Role-Playing 中文名称: 角色-LLM&#xff1a;训练Agent用于角色扮演 文章: [https://arxiv.org/abs/2310.10158](https://arxiv.org/abs/2310.10158) 作者: Yunfan Shao, Linyang Li, Junqi Dai, Xipeng Qiu 机构: 复旦大学…

军事智能中的深度强化学习不同于传统的深度强化学习

在军事智能中&#xff0c;“诡”和“诈”是两个最重要的概念。 “诡”变指的是智能体通过采取一些不可预测或复杂的变化策略来获得优势。诡变可能包括逃避对手的观察或引诱对手采取不利的行动。智能体可以使用诡变来欺骗对手&#xff0c;使其做出错误的决策或暴露其策略。 “诈…

【第七在线】智能商品计划:重塑服装行业的供应链管理

在当今快速变化的市场环境中&#xff0c;供应链管理已成为企业成功的关键因素之一。尤其在服装行业&#xff0c;供应链的效率、灵活性和透明度直接影响着企业的竞争力和盈利能力。随着技术的发展&#xff0c;智能商品计划正逐渐成为重塑供应链管理的强大工具。 一、智能商品计划…

什么是JMeter?我们为什么要用JMeter做性能测试

什么是JMeter&#xff1f;我们为什么要用JMeter做性能测试 什么是JMeter&#xff1f;为什么选择JMeterJMeter的优点JMeter是如何工作的 什么是JMeter&#xff1f; Apache JMeter TM是纯Java开源软件&#xff0c;最初由Apache软件基金会的Stefano Mazzocchi开发&#xff0c;旨在…

如何在Linux上部署Docker容器

一、什么是docker&#xff1f; Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中&#xff0c;然后发布到任何流行的 Linux或Windows 机器上&#xff0c;也可以实现虚拟化。容器是完全使用沙箱机制&#xff0c;相互之间不…

方法调用(java)

方法调用的基本内存原理&#xff1a;先进后出 基本数据类型&#xff1a;整数类型、浮点数类型、布尔类型、字符类型&#xff1b;数据类型存储在自己的空间 引用数据类型&#xff1a;除了以上数据类型都是&#xff1b;数据值是存储在其他空间中&#xff0c;变量中存储的是地址…

sprignboot电商书城源码

运行环境: jdk1.8,maven,mysql 项目技术: 后台主要是springbootmybatisshirojsp&#xff0c;前端界面主要使用bootstrap框架搭建&#xff0c;并使用了ueditor富文本编辑器、highcharts图表库。 有需要的可以联系我。 功能介绍&#xff1a; 该系统分为前台展示和后台管理两…

[docker] Docker 网络

一、Docker 网络 1.1 Docker 网络实现原理 Docker使用Linux桥接&#xff0c;在宿主机虚拟一个Docker容器网桥(docker0)&#xff0c;Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址&#xff0c;称为Container-IP&#xff0c;同时Docker网桥是每个容器的默认…