【网络协议详解】——PPP协议(学习笔记)

时间:2024-10-20 22:27:11

目录

  • ???? 1. PPP协议
    • ???? 1.1 概述
    • ???? 1.2 组成
      • ???? 1.2.1 帧格式
      • ???? 1.2.2 透明传输
      • ???? 1.2.3 差错检测
    • ???? 1.3 工作流程
  • ???? 2. LCP协议
    • ???? 2.1 概述
    • ???? 2.2 报文格式
    • ???? 2.3 报文种类
      • ???? 2.3.1 链路配置报文
      • ???? 2.3.2 链路终止报文
      • ???? 2.3.3 链路维护报文
    • ???? 2.4 工作过程
      • ???? 2.4.1 链路建立和配置流程
      • ???? 2.4.2 链路终止流程
      • ???? 2.4.3 链路维护流程
  • ???? 3. NCP协议
    • ???? 3.1 概述
    • ???? 3.2 IPCP协议
      • ???? 3.2.1 概述
      • ???? 3.2.2 报文的格式
      • ???? 3.2.3 配置选项
  • ???? 4. 认证
    • ???? 4.1 PAP协议
      • ???? 4.1.1 概述
      • ???? 4.1.2 认证流程
      • ???? 4.1.3 报文格式
    • ???? 4.2 CHAP协议
      • ???? 4.2.1 概述
      • ???? 4.2.2 认证流程
      • ???? 4.2.3 报文格式
  • ???? 5. 实验

???? 1. PPP协议

???? 1.1 概述

用户计算机与ISP进行通信时,所使用的数据链路层协议通常就是点对点协议PPP(Point-to-Point Protocol)。PPP协议是目前使用最广泛的点对点数据链路层协议,也广泛应用于广域网路由器之间的专用线路。

在1999年公布的在以太网上运行的PPPoE协议,它使得lSP可以通过ADSL、电路调制解调器、以太网等宽带接入技术以太网接口的形式为用户提供接入服务。

在这里插入图片描述

PPP(Point-to-Point Protocol)和PPPoE(Point-to-Point Protocol over Ethernet)是两种不同的协议。
PPP 是一种用于在两个点之间进行通信的协议,常用于 dial-up 网络和 VPN 连接。PPP 协议提供了多种功能,包括身份验证、数据压缩和加密等,但是它不提供路由功能。
PPPoE 则是一种在以太网上运行 PPP 的协议。它使用了以太网帧来封装 PPP 数据包,并使用一种特殊的服务器/客户端模型来管理 PPP 连接。PPPoE 常用于 ADSL、光纤宽带等拨号上网方式,也可以用于小区宽带网络中。
因此,PPPoE 可以看作是在以太网上运行 PPP 的一种方式,而 PPP 则是一种通用的协议,不仅可以在以太网上运行,也可以在其他类型的网络上运行。

PPP为点对点连接上传输多种协议的数据包提供了一种标准的方法,其最初的设计目的,是为两个对等结点之间的IP传输提供一种封装协议,除了IP以外,PPP还可以封装其它协议,包括Novell的IPX协议(Internetwork Packet Exchange,网间分组交换)等。

???? 1.2 组成

PPP协议为在点对点链路传输各种协议数据报提供了一个标准方法,主要由以下三部分构成:

  • 对各种协议数据报的封装方法(封装成帧)
  • 链路控制协议LCP 用于建立、配置以及测试数据链路的连接
  • 一套网络控制协议NCPs 其中的每一个协议支持不同的网络层协议

在这里插入图片描述

???? 1.2.1 帧格式

在这里插入图片描述

  • Flag字段为帧定界标志,用来标识PPP帧的开始与结束,长度为1字节,取值固定为0x7E
  • Address字段为地址字段,用来标识接收方的地址,长度为1字节,由于点到点链路的接收方是唯一的,故此字段取值固定为0xFF,表示只有对端才能接受到数据。
  • Control字段为控制字段,长度为1字节,取值固定为0x03,表示无序号信息(Unnumbered Information)。
  • Protocol字段为协议字段,用来标识PPP帧封装的协议数据类型,长度为2字节。此字段使PPP得以封装不同的协议。
字段值 协 议
0x0021 IP(Internet Protocol)
0x0029 Appletalk
0x8021 IPCP(Internet Protocol Control Protocol)
0xC021 LCP(Link Control Protocol)
0xC023 PAP(Password Authentication Protocol)
0xC025 LQR(Link Quality Report)
0xC223 CHAP(Challenge Handshake Authentication Protocol)
  • Information字段为信息字段,该字段长度不固定,最大长度等于MRU(Maximum Receive Unit)值,默认为1500字节。此字段存放承载的协议数据,包括LCP、NCP等。
  • FCS(Frame Checksum)字段为帧校验和字段,用来检测PPP帧的完整性(CRC计算),长度为2字节。

???? 1.2.2 透明传输

在这里插入图片描述

字节填充:面向字节的异步链路采用插入转义字符的字节填充法。

在这里插入图片描述

发送方:

  • 如PPP帧的标志字段取值为7E(16进制),如果数据中出现7E则需要在数据前插入转义字符7D(16进制),并将原来的7E减20(16进制),所以7E在数据中最终会变成7D,5E
  • 如果数据中有转义字符7D怎么办呢?可以在转义字符7D再加一个转义字符7D,并将数据的7D减20(16进制),于是转义字符7D在数据中最终会变成7D,5D
  • 数据中出现的每一个ASCII码控制字符(数值小于0x20的字符),则在该字符前面插入一个7D字节,同时将该字符的编码加上0x20

接收方:进行反变换即可恢复出原来的帧的数据部分。

零填充:面向比特的同步链路采用插入比特0的比特填充法。
在这里插入图片描述

发送方:对帧的数据部分进行扫描(一般由硬件实现)。只要发现5个连续的比特1,则立即填充1个比特0

接收方:对帧的数据部分进行扫描(一般由硬件实现)。只要发现5个连续的比特1,就把其后的1个比特0删除

???? 1.2.3 差错检测

在这里插入图片描述

接收方每收到一个PPP帧,就进行CRC检验(多项式)。若CRC检验正确,就收下这个帧;反之就丢弃这个帧(不可靠传输服务)。检验由尾部的FCS实现

用于检验的多项式为
C R C − C C I T T = x 16 + x 12 + x 5 + 1 CRC-CCITT =x^{16}+x^{12}+x^{5}+1 CRCCCITT=x16+x12+x5+1

使用PPP的数据链路层,向上提供的是不可靠数据传输服务。

???? 1.3 工作流程

在建立、保持和终止PPP链路的过程中,PPP链路需要经过5个阶段,除认证阶段外,其它4个阶段都是必要过程。 5个阶段如下:

  1. 链路不可用阶段(Dead)
  2. 链路建立阶段(Establish)
  3. 认证阶段(Authenticate)
  4. 网络层协议阶段(Network)
  5. 链路终止阶段(Terminate)

在这里插入图片描述

???? 2. LCP协议

???? 2.1 概述

LCP(Link Control Protocol,链路控制协议):用于建立、配置、维护和终止PPP链路

LCP负责PPP的链路管理,和上层(网络层)协议无关。

???? 2.2 报文格式

当PPP帧中Protocol字段为0xC021时,表示Information 字段数据为LCP报文。

在这里插入图片描述

  • Code为代码字段(也称类型字段),长度为1字节,用来标识LCP中链路控制报文的类型。
  • Identifier为标识符字段,长度为1字节,是报文的唯一标识。
    • Identifier字段用于匹配请求和回复。
  • Length为长度字段,长度为2字节,Length字段指出该报文的长度,包括Code,Identifier,Length和Data。
  • Data为数据字段,长度是零或多个八位字节,由Length字段声明。
    • Data字段的格式由Code字段决定。

???? 2.3 报文种类

类型 功能 报文类型 报文代码
链路配置 建立和配置链路 Configure-Request 1
Configure-Ack 2
Configure-Nak 3
Configure-Reject 4
链路终止 终止链路 Terminate-Request 5
Terminate-Ack 6
链路维护 管理和调试链路 Code-Reject 7
Protocol-Reject 8
Echo-Request 9
Echo-Reply 10
Discard-Request 11

???? 2.3.1 链路配置报文

Configure-Request(配置请求)的Code字段值为0x01,Data字段值为一到多个选项(Options)列表,选项列表中的参数可同时协商。

在这里插入图片描述

  • Type为类型字段,用于区分协商不同参数。
Type值 对应参数 功能
0x00 Reserved 保留
0x01 Maximum Receive Unit 最大接收单元
0x02 Asynchronous Control Character Map 异步控制字符映射
0x03 Authentication Protocol 认证协议
0x04 Quality Protocol 质量协议
0x05 Magic Number 幻数
0x07 Protocol Field Compression 协议域压缩
0x08 Address and Control Field Compression 地址及控制域压缩
  • Length为长度字段,Length字段指出该配置选项(包括Type、Length和Data字段)的长度。
  • Data为数据字段,Data字段为零或者多个字节,其中包含配置选项的特定详细信息。

Configure-Request(配置请求)报文示例:

在这里插入图片描述

若接收的Configure-Request中的每一个配置选项的值都可接受,则回送Configure-Ack(配置确认)报文,回送的Configure-Ack中的Identifier字段必须与最后接收的Configure-Request相匹配。此外,Configure-Ack中的配置选项必须完全匹配最后接收的Configure-Request。

若收到的每个配置选项都可以识别,但是配置选项的值不能接受,接收方必须回送Configure-Nak(配置否认)。配置选项部分仅用不能接受的配置选项进行填充,回送的Configure-Nak中的Identifier字段必须与最后接收的Configure-Request相匹配。

若收到的部分配置选项是不可识别或不能接受,则回送Configure-Reject(配置拒绝确认)。配置选项部分仅用不可识别或不能接受的配置选项进行填充,回送的Configure- Reject中的Identifier字段必须与最后接收的Configure-Request相匹配。

上述报文除Code字段值不同,配置选项的格式与Configure-Request均相同。

???? 2.3.2 链路终止报文

在这里插入图片描述

???? 2.3.3 链路维护报文

Code-Reject(代码拒绝)报文表示无法识别报文的Code字段

若收到该类错误,应立即终止链路,该报文的格式如图,其中“被拒绝的报文”字段包含了无法识别的LCP报文。

在这里插入图片描述

Protocol-Reject(协议拒绝)报文表示无法识别报文的Protocol字段

若收到该类错误,应停止发送该类型的协议报文,该报文的格式如图所示,其中“被拒绝的协议”字段包含了被拒绝的PPP帧的数据区。

在这里插入图片描述

Echo-Request(回复请求)和Echo-Reply(回复应答)用于链路质量和性能测试,其格式如图所示。

在这里插入图片描述

Discard-Request(丢弃请求)是一个辅助的错误调试和实验报文,无实质用途。

这种报文收到即会丢弃。

???? 2.4 工作过程

???? 2.4.1 链路建立和配置流程

在这里插入图片描述

  • 当需要建立逻辑链路时,发起方发送Configure-Request(配置请求)报文,用于协商参数;
  • 若接收方收到的每一个配置选项的值都可接受,则回送Configure-Ack(配置确认)报文;
  • 若收到的配置选项是可以识别,但部分配置选项参数不能接受,则回送Configure-Nak(配置否认)报文,并标示出需要重新协商的配置选项;
  • 若配置选项不可识别或不可接受,则回送Configure-Reject(配置拒绝)报文。

???? 2.4.2 链路终止流程

在这里插入图片描述

  • Terminate-Request(终止请求)报文
  • Terminate-Ack(终止应答)报文

???? 2.4.3 链路维护流程

在这里插入图片描述

  • Code-Reject(代码拒绝)
  • Protocol-Reject(协议拒绝)
  • Echo-Request(回复请求)和Echo-Reply(回复应答)
  • Discard-Request(丢弃请求)

???? 3. NCP协议

???? 3.1 概述

NCP(Network Control Protocol,网络控制协议)用于建立、配置网络层协议,进行参数协商。

不同的网络层协议会使用不同的NCP协议。

  • IP协议使用IPCP(Internet Protocol Control Protocol,IP控制协议);
  • Appletalk协议使用Appletalk NCP进行协商;
  • Novell的 IPX协议使用IPE(Internet Packet Exchange,互连网包交换协议)进行协商。

???? 3.2 IPCP协议

???? 3.2.1 概述

若PPP帧中Protocol字段取值0x8021,表示PPP帧正在使用IPCP协商相关通信参数。

IPCP会完成协商IP地址等工作,其后在该PPP链路上传送IP数据报;

若IP数据报传送完毕,若要关闭IP协议,仍需通过IPCP协商终止;

若要释放链路,则需借助LCP协议。

???? 3.2.2 报文的格式

在这里插入图片描述

类型 功能 报文类型 报文代码
链路配置 建立和配置链路 Configure-Request 1
Configure-Ack 2
Configure-Nak 3
Configure-Reject 4
链路终止 终止链路 Terminate-Request 5
Terminate-Ack 6
链路维护 管理和调试链路 Code-Reject 7

与LCP报文格式几乎一样

???? 3.2.3 配置选项

IPCP协议中,通信双方可协商的配置选项包括3个:

  • 多个IP地址(IP-Addresses)
    • 多个IP地址很难全部协商成功
    • 本选项很少使用
  • IP压缩协议(IP Compression Protocol)
    • 用于协商使用的压缩协议
    • IPCP中仅规定了“Van Jacobson”一个压缩协议,编号为0x002D,Type字段取值为0x02。
    • 该选项默认值为不进行压缩。
  • IP地址(IP Address)
    • 若发起方请求对端分配一个IP地址,接收方应会返回一个合法的IP地址。此时,发起方发送configure-request,type为0x03,length为0x06,其后4字节全为0x00,指明由对端提供IP地址。

在这里插入图片描述

IPCP Configure-Request报文示例:
在这里插入图片描述

???? 4. 认证

???? 4.1 PAP协议

???? 4.1.1 概述

PAP(Password Authentication Protocol,口令认证协议)

优点:PAP的整个认证流程非常简单

缺点:认证只能在链路建立阶段进行,身份和口令是以明文进行传输,安全性低

???? 4.1.2 认证流程

在这里插入图片描述

???? 4.1.3 报文格式

PAP协议的报文共有三种:

  • Authenticate-Request(认证请求)
  • Authenticate-Ack(认证确认)
  • Authenticate-Nak(认证否认)

若PPP帧中Protocol字段取值为0xC023时,表示Information字段承载的是PAP报文。

在这里插入图片描述

???? 4.2 CHAP协议

???? 4.2.1 概述

CHAP(Challenge Handshake Authentication Protocol,基于挑战的握手认证协议)

CHAP为三次握手协议,可以在链路建立和数据通信阶段多次使用,进行认证,同时安全性较高

认证过程中需配合事先协商好的算法,确认被认证方的身份,通常使用MD5(Message Digest Algorithm 5)作为其默认算法。只在网络上传输用户名,而不传输用户口令。

目前PPP协议的认证阶段多使用CHAP认证协议。

???? 4.2.2 认证流程

在这里插入图片描述

???? 4.2.3 报文格式

CHAP协议的报文共有四种:

  • Challenge
  • Response
  • Success
  • Failure

若PPP帧中Protocol字段取值为0xC223时,表示Information字段承载的是CHAP报文。

在这里插入图片描述

???? 5. 实验

题目:本实验模拟企业网络环境。R1为分支机构接入网关设备,PC-1为企业分支机构终端。R2为企业总部接入终端网关设备,PC-2为企业总部终端,网络管理员在分支机构访问总部时部署PPP认证 ,R1和R2互为认证路由器和被认证路由器。只有认证通过才能建立PPP连接进行正常访问。

步骤:开启GNS3虚拟机,新建拓扑文件,在工作区添加两台路由器(c3745)和两台PC,按下图连接路由器、PC,开启设备。并按照下图和下表,在R1和R2之间配置PPP协议,并开启CHAP认证(此时s0/0口关闭),将路由器的配置指令截图如下:
在这里插入图片描述

设备 接口 IP地址 地址掩码 默认网关
R1 S0/0 10.1.1.1 255.255.255.0 -
F0/1 192.168.3.1 255.255.255.0 -
R2 S0/0 10.1.1.2 255.255.255.0 -
F0/1 192.168.4.1 255.255.255.0 -
PC-1 E0 192.168.3.2 255.255.255.0 192.168.3.1
PC-2 E0 192.168.4.2 255.255.255.0 192.168.4.1

配置R1:

# 进入全局模式
R1#configure terminal
# 创建本地用户名和密码,为CHAP认证做准备,用户名为对方hostname
R1#username R2 password 1234
# 进入接口模式,对f0/1口进行配置
R1(config)#interface f0/1
R1(config-if)#ip address 192.168.3.1 255.255.255.0
# 进入接口模式,对s0/0口进行配置
R1(config)#interface s0/0
# 配置s0/0口的IP地址
R1(config-if)#ip address 10.1.1.1 255.255.255.0
# 设置s0/0口作为DCE设备,为DTE设备提供时钟以便同步,时钟速率为128000(bit/s)
R1(config-if)#clock rate 128000
# 在s0/0口封装ppp协议
R1(config-if)#encapsulation ppp
# 设置ppp协议的认证方式为chap
R1(config-if)#ppp authentication chap
# 停用s0/0口
R1(config-if)shutdown

配置R2:

# 进入全局模式
R2#configure terminal
# 创建本地用户名和密码,为CHAP认证做准备,用户名为对方hostname
R2#username R1 password 1234
# 进入接口模式,对f0/1口进行配置
R2(config)#interface f0/1
R2(config-if)#ip address 192.168.4.1 255.255.255.0
# 进入接口模式,对s0/0口进行配置
R2(config)#interface s0/0
# 配置s0/0口的IP地址
R2(config-if)#ip address 10.1.1.2 255.255.255.0
# 在s0/0口封装ppp协议
R2(config-if)#encapsulation ppp
# 设置ppp协议的认证方式为chap
R2(config-if)#ppp authentication chap
# 停用s0/0口
R2(config-if)shutdown

Q:DCE设备和DTE设备是什么?为什么R1要设置时钟而R2不用?
A:DCE 和 DTE 分别代表数据通信设备和数据端点设备。
DCE (Data Circuit-terminating Equipment) 通常指在数据传输中终止数字电路的设备,负责将数字信号转换为模拟信号,以便在通信设备之间传输。例如,MODEM 设备通过电话线将数字信号转换为模拟信号,然后通过电话线进行传输,以连接到互联网。
DTE (Data Terminal Equipment)指的是终端设备,例如电脑、终端、打印机等。在通信中,DTE 既可以接收数据,也可以发送数据,但必须通过通信线路与 DCE 进行连接。
在数据通信中,DCE 和 DTE 通常通过串行通信线(例如 RS-232、V.35 或 X.21)进行连接,DCE 端常常为对方提供时钟同步信号。一些常见的 DCE 设备包括调制解调器、CSU (Channel Service Unit)、DSU (Data Service Unit) 等。
需要注意的是,相同的设备可能在不同情况下被视为 DTE 或 DCE。例如,一个串口可以连接到一个调制解调器作为 DTE,也可以连接到一个计算机作为 DCE。在本次实验中,R1为分支机构接入网关设备(DCE),R2为企业总部接入终端网关设备(DTE),clock rate 128000 命令仅在 DCE 设备上使用,表示 DCE 设备要发送或接收数据的速率。在这里,另一端是一个 DTE 设备,无需使用 clock rate 命令。

配置PC-1和PC-2:

PC-1> ip 192.168.3.2/24 192.168.3.1
PC-2> ip 192.168.4.2/24 192.168.4.1

抓包分析:
在R1和R2的链路上右键start capture

在这里插入图片描述

# 开启R1的链路
R1(config)#interface s0/0
R1(config-if)#no shutdown
# 开启R2的链路
R2(config)#interface s0/0
R2(config-if)#no shutdown

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述