PPP 工作原理 + 配置
为什么有PPP
PPP最初是针对IP数据报设计的,但通过使用模块化实现,PPP可传输多种网络层协议的数据,支持TCP/IP、IPX等多协议的LAN到WAN连接,是目前被广泛使用的数据链路层协议。它可用于双绞线、光纤线路和卫星传输链路,也支持串行电缆、电话线、中继线、无线链路。
PPP特点
- 用于全双工的链路上进行点对点的数据传输封装(串行线)
- 两种认证方式:PAP、CHAP
- 可拓展性高,在以太网中,可扩展为PPPoE
- 没有重传机制,网络开销小,速度快
- 提供了LCP(Link Control Protocol)协议,包括IPCP、MPLSCP等协商
- 提供了各种NCP(Network Control Protocol),用于网络层参数协商
PPP 工作原理
大致过程
PPP 的大致运行过程
-
建立物理连接:PPP拨号开始之前,拨号客户端(拨号方)需要先与拨号服务器建立物理连接,可以是通过电话线、ISDN线或其他可用的物理介质来完成, 这时进入Establish阶段。
-
Establish阶段:
拨号客户端和拨号服务器之间会进行LCP(Link Control Protocol)协商。
LCP协商的参数,例如工作方式SP、MP,身份验证方式、最大传输单元(MTU)大小等。
LCP协商成功后进入Opened状态,表示底层链路已经建立。 -
如果配置了验证,将进入Authenticate阶段,开始CHAP或PAP验证。
如果没有配置验证,则直接进入Network阶段。 -
Authenticate阶段
如果验证失败,进入Terminate阶段,拆除链路,LCP状态转为Down。
如果验证成功,进入Network阶段,此时LCP状态仍为Opened。 -
Network阶段
PPP链路进行NCP(Network Control Protocol)协商。
NCP协商包括IPCP(IP Control Protocol)等协商
IPCP协商:内容主要包括双方的IP地址
通过NCP协商来选择和配置一个网络层协议并进行网络层参数协商。
只有相应的网络层协议协商成功后,该网络层协议才可以通过这条PPP链路发送报文。 -
NCP协商成功后,PPP链路将一直保持通信。
PPP运行过程中,可以随时中断连接,物理链路断开、认证失败、超时定时器时间到、管理员通过配置关闭连接等动作都可能导致链路进入Terminate阶段。 -
Terminate阶段
如果所有的资源都被释放,通信双方将回到Dead阶段,直到通信双方重新建立PPP连接,开始新的PPP链路建立
五个阶段
Dead(链路不可用阶段)
Dead阶段代表的是初始状态
也就是拨号客户端和拨号服务器还没有建立物理连接或PPP连接时的状态
当通信双方的两端检测到物理线路激活(通常是检测到链路上有载波信号)时,就会从Dead阶段跃迁至Establish阶段,即链路建立阶段
当然,链路断开的时候,就又回到Dead阶段
Establish (链路建立阶段)
在Establish阶段中,进行LCP协商,最重要的部分
LCP协商内容
LCP协商
① 工作方式 :
- 单链PPP :SP(Single-link PPP)
仅使用单个物理链路进行数据传输,不支持将多个链路绑定为一个逻辑连接- 多链PPP:MP(Multilink PPP)
允许将多个物理链路绑定为一个逻辑连接,以提高传输性能和带宽利用率。②最大接收单元MRU(Maximum Receive Unit)
- 指数据链路层中接收端(通常是PPP的接收端)能够接收的最大数据包的大小。
它是一个配置参数,用于限制接收端一次性可以接收的最大数据包大小③ 验证方式:PAP、CHAP
④魔术字(magic number)
- 标识和验证数据的类型、格式、完整性等方面。
LCP报文
LCP报文 | 报文作用 |
---|---|
Configure-Request(配置请求) | 向对方发起链路配置和参数协商的请求 |
Configure-Ack(配置确认) | 对对方的配置请求进行确认,表示完成链路配置协商的阶段 |
Configure-Nak(配置否定应答) | 向对方指示无法接受请求中的某些选项或参数 |
Configure-Reject(配置拒绝) | 向对方指示无法接受请求中指定的配置选项或参数 ,并提供相关错误信息 |
Terminate-Request (终止请求) | 请求对方终止PPP链路连接,并触发对应的终止处理动作 |
Terminate-Ack(终止确认) | 确认并同意对方的终止请求,终止PPP链路连接。 |
Code-Reject(代码拒绝) | 向对方指示无法识别或不支持的LCP报文类型,并提供相关错误信息 |
Protocol-Reject(协议拒绝) | 向对方指示无法识别或不支持的LCP协议,并提供相关错误信息 |
Echo-Request(回显请求) | 发送一个探测报文,验证PPP链路的可用性 |
Echo-Reply(回显回复) | 对"Echo-Request"报文进行响应,确认链路的正常可用性 |
LCP协商过程
LCP状态机变为Open状态以后就完成当前阶段的协商,并向下一个阶段跃迁。
下一个阶段既可能是验证阶段,也可能是网络层协商阶段。下一阶段的选择是依据链路两端的设备配置的,通常由用户来配置。
Authenticate(认证协商阶段)
通常在缺省的情况下,是不用密码验证的。
如果要求验证,在链路建立阶段必须指定验证协议。
当双方通过LCP(链路控制协议)交换信息,协商选择要使用的验证协议。
常见的验证协议包括PAP(密码认证协议)和CHAP(加密哈希挑战认证协议)。
PAP 验证过程
PAP(Password Authentication Protocol,密码认证协议)
PAP是一种简单的点对点协议验证方法
它的密码是明文形式,就是可以通过抓包查看
被验证方把认证请求报文(里面有用户和密码)发送到验证方。
验证方根据本地用户表查看是否有被验证方的用户名
- 若有
则查看密码是否正确,若密码正确,则认证通过;
若密码不正确,则认证失败。 - 若没有,则认证失败。
CHAP 验证过程
CHAP(Challenge-Handshake Authentication Protocol,加密哈希挑战认证协议)
先在验证方发起挑战
CHAP验证协议为三次握手验证协议。
它只在网络上传输用户名,而并不传输用户密码,因此安全性要比PAP高。
由于每次认证过程都使用随机生成的挑战值,CHAP具有抵抗重放攻击的能力。
验证方主动发起验证请求,验证方向被验证方发送Challenge报文,报文中包含随机数和ID字段,并同时将本端的用户名附带上一起发送给被验证方。
被验证方接到验证方的验证请求后,先检查本端接口上是否配置了ppp chap password命令。
-
如果配置了该命令
则被验证方用报文ID、命令中配置的用户密码和随机数进行HASH/MD5运算,将生产的HASH值和自己的用户名发回验证方(Response)。 -
如果接口上未配置ppp chap password命令
则根据此报文中验证方的用户名在本端的用户表查找该用户对应的密码,用报文ID、此用户的密钥(密码)和随机数进行HASH/MD5运算,将生产的HASH值和自己的用户名发回验证方(Response)。
Network(网络层协商阶段)
在PPP协议中的网络层协商阶段,主要是通过NCP(网络控制协议)来进行网络层参数的协商和配置。
网络层协商过程
-
发起NCP请求:链路中的一方发起一个NCP请求报文,请求对等方开启特定的网络控制协议。例如,如果需要进行IP协议的配置,就发起一个IPCP(IP控制协议)的NCP请求。
-
响应NCP请求:接收到NCP请求的一方,如果支持请求的协议,就发送一个NCP回答报文,表示同意使用该协议。
-
配置网络参数:一旦协商确定使用特定的网络控制协议,接下来就进行具体的参数配置。通常,配置包括IP地址、子网掩码、默认网关、DNS服务器等网络参数的交换和配置。
-
检查配置结果:在配置参数完成后,双方会交换报文来确认配置的结果。如果配置成功,则可以进入网络通信阶段;如果出现问题,可能会进行错误处理,例如重新协商或终止链路。
网络层协商阶段的目的是确保PPP链路的双方都能以一致的网络参数进行通信。
这些参数的配置将为接下来的数据传输提供必要的网络环境。不同的网络协议可能需要不同的NCP协议来进行配置,如IPCP用于IP协议的配置、IPXCP用于IPX协议的配置等。
Terminate(网络终止阶段)
在PPP协议中的终止阶段,也被称为Terminate阶段,主要是用于正常或异常结束PPP链路的过程。
终止阶段过程
-
发起终止请求:链路中的一方(通常是其中一个对等方)发起一个终止请求报文,表明希望终止PPP链路。该请求可以是正常的释放连接请求,也可以是异常情况下的错误通告。
-
响应终止请求:接收到终止请求的一方回答一个终止确认报文,表示同意结束PPP链路。
-
释放资源:一旦终止请求和终止确认报文都被交换,双方会立即释放PPP链路所占用的资源,包括缓冲区、状态信息和配置参数等。
-
断开物理连接:在PPP链路终止后,通常会继续执行物理层的操作,例如断开物理连接或关闭数据链路层设备。
在终止阶段,终止请求和终止确认报文的交换是结束PPP链路的核心步骤。这个过程可以由任一对等方发起,当另一方相应后,链路将被正常地关闭。若终止请求出现异常,可能会导致链路的非正常终止或错误状态的通告。
需要注意的是,PPP链路终止阶段的过程是可靠的,确保了链路的正常结束和资源的释放。这种终止过程可用于实现安全的断开连接,并保证链路资源的有效利用。
配置
ISP
PPP Server
ISP(config)#username cisco password ccie --- 建立用户认证库
ISP(config)#ip local pool R1 202.101.1.10 --- 配置为客户端指定地址池
ISP(config)#int s1/0
ISP(config-if)#no shutdown --- 打开接口
ISP(config-if)#encapsulation ppp --- LCP阶段
ISP(config-if)#ppp authentication pap --- PAP认证
ISP(config-if)#peer default ip address pool R1 --- NCP阶段
DNS Server
ISP(config)#int loopback 1 --- 创建一个环回口,外网地址
ISP(config-if)#ip address 8.8.8.8 255.255.255.255
ISP(config-if)#ex
ISP(config)#ip dns server --- 将ISP作为一个DNS的服务器
ISP(config)#ip host www.google.com 8.8.8.8 --- 设定静态主机(DNS)映射
R1
PPP Client
R1(config)#int s1/0
R1(config-if)#no shutdown
R1(config-if)#encapsulation ppp --- LCP阶段
R1(config-if)#ppp pap sent-username cisco password ccie --- PAP认证
R1(config-if)#ppp ipcp route default --- 下发默认地址
R1(config-if)#ip address negotiated --- NCP阶段
DHCP Server
R1(config)#int e0/0
R1(config-if)#no shutdown
R1(config-if)#ip address 192.168.10.254 255.255.255.0
R1(config)#ip dhcp pool PC --- 创建DHCP地址池
R1(dhcp-config)#network 192.168.10.0 255.255.255.0 --- 宣告网段
R1(dhcp-config)#default-router 192.168.10.254 --- 配置网关
R1(dhcp-config)#dns 8.8.8.8 --- 作为DNS解析地址
NAT
注意:
因为在PPP中有配置一条自动下发的默认路由
所以在NAT这边无需在配置一条默认路由指向ISP
R1(config)#int s1/0
R1(config-if)#ip nat outside --- 标识为NAT的外部接口
R1(config-if)#ex
R1(config)#int e0/0
R1(config-if)#ip nat inside --- 标识为NAT的内部接口
R1(config-if)#ex
R1(config)#access-list 1 permit 192.168.10.0 0.0.0.255 --- 匹配感兴趣流量
-- 将内部网络的私有IP地址转换为外部网络的公共IP地址 --
R1(config)#ip nat inside source list 1 interface serial 1/0 overload
检验PPP是否下发成功
PC
获取IP地址
PC(config)#no ip routing --- 关闭路由功能
PC(config)#int e0/0
PC(config-if)#no shutdown
PC(config-if)#ip address dhcp --- dhcp下发IP地址
PC(config-if)# --- 下发成功
*Aug 9 07:05:07.564: %DHCP-6-ADDRESS_ASSIGN: Interface Ethernet0/0 assigned DHCP address 192.168.10.1, mask 255.255.255.0, hostname PC
检查NAT配置是否成功
PC能Ping通公网,说明配置成功