PPP简介
介绍PPP特性的定义和目的。
定义
PPP(Point-to-Point Protocol)协议是一种点到点链路层协议,主要用于在全双工的同异步链路上进行点到点的数据传输。
目的
PPP协议是在串行线IP协议SLIP(Serial Line Internet Protocol)的基础上发展起来的。由于SLIP协议具有只支持异步传输方式、无协商过程(尤其不能协商如双方IP地址等网络层属性)、只能承载IP一种网络层报文等缺陷,在发展过程中,逐步被PPP协议所替代。
PPP协议有如下优点:
对物理层而言,PPP既支持同步链路又支持异步链路,而X.25、FR(Frame Relay)等数据链路层协议仅支持同步链路,SLIP仅支持异步链路。
PPP协议具有良好的扩展性,例如,当需要在以太网链路上承载PPP协议时,PPP可以扩展为PPPoE。
提供LCP(Link Control Protocol)协议,用于各种链路层参数的协商。
提供各种NCP(Network Control Protocol)协议(如IPCP、IPXCP),用于各网络层参数的协商,更好地支持了网络层协议。
提供认证协议CHAP(Challenge-Handshake Authentication Protocol)、PAP(Password Authentication Protocol),更好的保证了网络的安全性。
无重传机制,网络开销小,速度快。
PPP报文格式PPP的基本构架PPP协议处于TCP/IP协议栈的数据链路层,主要用在支持全双工的同异步链路上,进行点到点之间的数据传输。 图2-1 PPP在协议栈中的位置
PPP主要由三类协议族组成: 链路控制协议族(Link Control Protocol),主要用来建立、拆除和监控PPP数据链路。 网络层控制协议族(Network Control Protocol),主要用来协商在该数据链路上所传输的数据包的格式与类型。 扩展协议族CHAP(Challenge-Handshake Authentication Protocol)和PAP(Password Authentication Protocol),主要用于网络安全方面的验证。
PPP报文封装的帧格式PPP报文封装格式如图2-2所示。 图2-2 PPP报文格式
各字段的含义如下: Flag域 Flag域标识一个物理帧的起始和结束,该字节为0x7E。 Address域 Address域可以唯一标识对端。PPP协议是被运用在点对点的链路上,因此,使用PPP协议互连的两个通信设备无须知道对方的数据链路层地址。按照协议的规定将该字节填充为全1的广播地址,对于PPP协议来说,该字段无实际意义。 Control域 该字段默认值为0x03,表明为无序号帧,PPP默认没有采用序列号和确认应答来实现可靠传输。 Address和Control域一起标识此报文为PPP报文,即PPP报文头为FF03。 Protocol域 Protocol域可用来区分PPP数据帧中信息域所承载的数据包类型。 Protocol域的内容必须依据ISO 3309的地址扩展机制所给出的规定。该机制规定协议域所填充的内容必须为奇数,也就是要求最低有效字节的最低有效位为“1”。 如果当发送端发送的PPP数据帧的协议域字段不符合上述规定,接收端则会认为此数据帧是不可识别的。接收端向发送端发送一个Protocol-Reject报文,在该报文尾部将填充被拒绝报文的协议号。 Information域最大长度是1500字节,其中包括填充域的内容。Information域的最大长度称为最大接收单元MRU(Maximum Receive Unit)。MRU的缺省值为1500字节,在实际应用当中可根据实际需要进行MRU的协商。 如果Information域长度不足,可被填充,但不是必须的。如果填充则需通信双方的两端能辨认出填充信息和真正需要传送的信息,方可正常通信。 FCS域 FCS域的功能主要对PPP数据帧传输的正确性进行检测。 在数据帧中引入了一些传输的保证机制,会引入更多的开销,这样可能会增加应用层交互的延迟。
LCP报文封装的帧格式LCP报文封装格式请参见图2-2。 在链路建立阶段,PPP协议通过LCP报文进行链路的建立和协商。此时LCP报文作为PPP的净载荷被封装在PPP数据帧的Information域中,PPP数据帧的协议域的值固定填充0xC021。 在链路建立阶段的整个过程中信息域的内容是变化的,它包括很多种类型的报文,所以这些报文也要通过相应的字段来区分。 Code域 Code域的长度为一个字节,主要是用来标识LCP数据报文的类型。 在链路建立阶段,接收方接收到LCP数据报文。当其Code域的值无效时,就会向对端发送一个LCP的代码拒绝报文(Code-Reject报文)。 Identifier域 Identifier域为1个字节,用来匹配请求和响应,当Identifier域值为非法时,该报文将被丢弃。 通常一个配置请求报文的ID是从0x01开始逐步加1的。当对端接收到该配置请求报文后,无论使用何种报文回应对方,但必须要求回应报文中的ID要与接收报文中的ID一致。 Length域 Length域的值就是该LCP报文的总字节数据。它是Code域、Identifier域、Length域和Data域四个域长度的总和。 Length域所指示字节数之外的字节将被当作填充字节而忽略掉,而且该域的内容不能超过MRU的值。 Data域 Data域所包含的是协商报文的内容,这个内容包含以下字段。
表2-3 常见Type中的协商类型值下图是PPP协议整个链路过程需经历阶段的状态转移图: 图2-3 PPP链路建立过程
PPP运行的过程简单描述如下:
通信双方开始建立PPP链路时,先进入到Establish阶段。 在Establish阶段,PPP链路进行LCP协商。协商内容包括工作方式是SP(Single-link PPP)还是MP(Multilink PPP)、最大接收单元MRU(Maximum Receive Unit)、验证方式和魔术字(magic number)等选项。LCP协商成功后进入Opened状态,表示底层链路已经建立。 如果配置了验证,将进入Authenticate阶段,开始CHAP或PAP验证。如果没有配置验证,则直接进入Network阶段。 在Authenticate阶段,如果验证失败,进入Terminate阶段,拆除链路,LCP状态转为Down。如果验证成功,进入Network阶段,此时LCP状态仍为Opened。 在Network阶段,PPP链路进行NCP协商。通过NCP协商来选择和配置一个网络层协议并进行网络层参数协商。只有相应的网络层协议协商成功后,该网络层协议才可以通过这条PPP链路发送报文。 NCP协商包括IPCP(IP Control Protocol)、MPLSCP(MPLS Control Protocol)等协商。IPCP协商内容主要包括双方的IP地址。 NCP协商成功后,PPP链路将一直保持通信。PPP运行过程中,可以随时中断连接,物理链路断开、认证失败、超时定时器时间到、管理员通过配置关闭连接等动作都可能导致链路进入Terminate阶段。 在Terminate阶段,如果所有的资源都被释放,通信双方将回到Dead阶段,直到通信双方重新建立PPP连接,开始新的PPP链路建立。
下面具体介绍PPP协商阶段。 Dead阶段(链路不可用阶段)Dead阶段也称为物理层不可用阶段。PPP链路都需从这个阶段开始和结束。 当通信双方的两端检测到物理线路激活(通常是检测到链路上有载波信号)时,就会从Dead阶段跃迁至Establish阶段,即链路建立阶段。 链路被断开后也同样会返回到链路不可用阶段。
Establish阶段(链路建立阶段)在Establish阶段,PPP链路进行LCP协商。协商内容包括工作方式是SP(Single-link PPP)还是MP(Multilink PPP)、最大接收单元MRU、验证方式和魔术字(magic number)等选项。当完成配置报文的交换后,则会继续向下一个阶段跃迁。 在链路建立阶段,LCP的状态机会发生如下改变。 当链路处于不可用阶段时,此时LCP的状态机处于初始化Initial状态或准备启动Starting状态。当检测到链路可用时,则物理层会向链路层发送一个Up事件。链路层收到该事件后,会将LCP的状态机从当前状态改变为Request-Sent(请求发送)状态,根据此时的状态机LCP会进行相应的动作,也就是开始发送Configure-Request报文来配置数据链路。 如果本端设备先收到Configure-Ack报文,则LCP的状态机从Request-Sent状态改变为Ack-Received状态,本端向对端发送Configure-Ack报文以后,LCP的状态机从Ack-Received状态改变为Opened状态。 如果本端设备先向对端发送Configure-Ack报文,则LCP的状态机从Request-Sent状态改变为Ack-Sent状态,本端收到对端发送的Configure-Ack报文以后,LCP的状态机从Ack-Sent状态改变为Opened状态。 LCP状态机变为Open状态以后就完成当前阶段的协商,并向下一个阶段跃迁。
下一个阶段既可能是验证阶段,也可能是网络层协商阶段。下一阶段的选择是依据链路两端的设备配置的,通常由用户来配置。
Authenticate阶段(验证阶段)缺省情况下,PPP链路不进行验证。如果要求验证,在链路建立阶段必须指定验证协议。 PPP验证主要是用于主机和设备之间,通过PPP网络服务器交换电路或拨号接入连接的链路,偶尔也用于专用线路。 PPP提供密码验证协议PAP(Password Authentication Protocol)和质询握手验证协议CHAP(Challenge-Handshake Authentication Protocol)两种验证方式。 单向验证是指一端作为验证方,另一端作为被验证方。双向验证是单向验证的简单叠加,即两端都是既作为验证方又作为被验证方。在实际应用中一般只采用单向验证。 PAP验证过程 PAP验证协议为两次握手验证,口令为明文。 PAP验证的过程如图2-4所示。 图2-4 PAP认证过程
被验证方把本地用户名和口令发送到验证方。 - 验证方根据本地用户表查看是否有被验证方的用户名
- 若有,则查看口令是否正确,若口令正确,则认证通过;若口令不正确,则认证失败。
- 若没有,则认证失败。
CHAP验证过程 CHAP验证协议为三次握手验证协议。它只在网络上传输用户名,而并不传输用户密码,因此安全性要比PAP高。 CHAP的验证过程如图2-5所示。 图2-5 CHAP的验证过程
CHAP单向验证过程分为两种情况:验证方配置了用户名和验证方没有配置用户名。推荐使用验证方配置用户名的方式,这样可以对验证方的用户名进行确认。 验证方配置了用户名的验证过程
验证方主动发起验证请求,验证方向被验证方发送Challenge报文,报文中包含随机数和ID字段,并同时将本端的用户名附带上一起发送给被验证方。 被验证方接到验证方的验证请求后,先检查本端接口上是否配置了ppp chap password命令,如果配置了该命令,则被验证方用报文ID、命令中配置的用户密码和随机数进行HASH/MD5运算,将生产的HASH值和自己的用户名发回验证方(Response)。如果接口上未配置ppp chap password命令,则根据此报文中验证方的用户名在本端的用户表查找该用户对应的密码,用报文ID、此用户的密钥(密码)和随机数进行HASH/MD5运算,将生产的HASH值和自己的用户名发回验证方(Response)。
验证方没有配置用户名的验证过程
- 验证方主动发起验证请求,验证方向被验证方发送Challenge报文,报文中包含随机数和ID字段。
- 被验证方接到验证方的验证请求后,利用报文ID、ppp chap password命令配置的CHAP密码和随机数进行HASH/MD5运算,将生产的HASH值和自己的用户名发回验证方(Response)。
CHAP与PAP验证过程对比PAP认证中,口令以明文方式在链路上发送,完成PPP链路建立后,被验证方会不停地在链路上反复发送用户名和口令,直到身份验证过程结束,所以安全性不高。当实际应用过程中,对安全性要求不高时,可以采用PAP认证建立PPP连接。 CHAP认证中,验证协议为三次握手验证协议。它只在网络上传输用户名,而并不传输用户密码,因此安全性比PAP认证高。当实际应用过程中,对安全性要求较高时,可以采用CHAP认证建立PPP连接。
Network阶段(网络层协商阶段)PPP完成了前面几个阶段,通过NCP协商来选择和配置一个网络层协议并进行网络层参数协商。每个NCP协议可在任何时间打开和关闭,当一个NCP的状态机变成Opened状态时,则PPP就可以开始在链路上承载网络层数据传输。
Terminate阶段(网络终止阶段)PPP能在任何时候终止链路。当载波丢失、认证失败或管理员人为关闭链路等情况均会导致链路终止。
配置PPP在3G网络中的应用示例组网需求如图2-8所示,Router使用Ethernet2/0/0接口连接企业内网用户,使用3G Cellular接口通过WCDMA网络接入Internet。 已知企业办理了包年业务,采用自动拨号方式接入Internet。企业从运营商获取到的信息如下: - 用户名和密码为3guser和Password123,认证方式为CHAP认证。
- APN为3GNET。
- 拨号串为*99#。
图2-8 3G Cellular接口作为主链路接入Internet组网图(针对WCDMA网络)
配置思路采用如下的配置思路: - 配置自动拨号的3G功能,使企业可以利用3G业务接入Internet。
- 配置企业内网,指定Router作为企业出口网关,由Router为企业内网用户分配IP地址。
- 配置NAT功能,指定接口Cellular0/0/0的IP地址作为企业公网地址。
- 配置缺省路由,指定出接口为Cellular0/0/0,使企业内网的流量通过3G Cellular接口上行传输到Internet。
操作步骤
配置自动拨号的3G功能
# 配置拨号控制列表。
<Huawei> system-view
[Huawei] sysname Router
[Router] dialer-rule
[Router-dialer-rule] dialer-rule 1 ip permit
[Router-dialer-rule] quit
# 配置PPP协商IP地址。
[Router] interface cellular 0/0/0
[Router-Cellular0/0/0] link-protocol ppp
[Router-Cellular0/0/0] ip address ppp-negotiate
# 配置PPP协商DNS服务器地址。
[Router-Cellular0/0/0] ppp ipcp dns request
# 配置PPP认证。
[Router-Cellular0/0/0] ppp chap user 3guser
[Router-Cellular0/0/0] ppp chap password cipher Password123
# 使能轮询DCC。
[Router-Cellular0/0/0] dialer enable-circular
# 配置拨号控制列表关联Cellular0/0/0。
[Router-Cellular0/0/0] dialer-group 1
dialer-group命令的编号和dialer-rule命令的编号必须一致。
# 配置到达对端的拨号串。
[Router-Cellular0/0/0] dialer number *99# autodial
# 配置网络连接方式。
[Router-Cellular0/0/0] mode wcdma wcdma-precedence
[Router-Cellular0/0/0] quit
# 创建APN模板。
[Router] apn profile 3gprofile
[Router-apn-profile-3gprofile] apn 3GNET
[Router-apn-profile-3gprofile] quit
# 在3G Cellular接口上绑定APN模板。
[Router] interface cellular 0/0/0
[Router-Cellular0/0/0] apn-profile 3gprofile
[Router-Cellular0/0/0] shutdown
[Router-Cellular0/0/0] undo shutdown
[Router-Cellular0/0/0] quit
配置企业内网
# 创建VLAN10,将Ethernet2/0/0接口加入VLAN10。
[Router] vlan 10
[Router-vlan10] quit
[Router] interface ethernet 2/0/0
[Router-Ethernet2/0/0] port link-type trunk
[Router-Ethernet2/0/0] port trunk allow-pass vlan 10
[Router-Ethernet2/0/0] quit
# 使能DHCP功能。
[Router] dhcp enable
# 创建全局地址池。
[Router] ip pool 3gpool
[Router-ip-pool-3gpool] network 192.168.100.0 mask 255.255.255.0
[Router-ip-pool-3gpool] gateway-list 192.168.100.1
[Router-ip-pool-3gpool] import all
[Router-ip-pool-3gpool] quit
# 配置接口工作在全局地址池模式。
[Router] interface vlanif 10
[Router-Vlanif10] ip address 192.168.100.1 255.255.255.0
[Router-Vlanif10] dhcp select global
[Router-Vlanif10] quit
配置NAT功能
[Router] acl number 3002
[Router-acl-adv-3002] rule 5 permit ip source 192.168.100.0 0.0.0.255
[Router-acl-adv-3002] quit
[Router] interface cellular 0/0/0
[Router-Cellular0/0/0] nat outbound 3002
[Router-Cellular0/0/0] quit
配置缺省路由,指定出接口为Cellular0/0/0
[Router] ip route-static 0.0.0.0 0 cellular 0/0/0
验证配置结果
# 查看接口的详细信息,当接口上有流量传送时,可以看到接口的物理层和链路层的状态都是Up状态、PPP的LCP和IPCP都是opened状态以及PPP协商获得的IP地址为20.1.1.2/24,这说明链路的PPP协商已经成功。
[Router] display interface cellular 0/0/0
任务示例
Router的配置文件
#
sysname Router
#
vlan batch 10
#
dhcp enable
#
acl number 3002
rule 5 permit ip source 192.168.100.0 0.0.0.255
#
apn profile 3gprofile
apn 3GNET
#
interface Cellular0/0/0
link-protocol ppp
ppp chap user 3guser
ppp chap password cipher
ppp ipcp dns request
ip address ppp-negotiate
dialer enable-circular
dialer-group 1
apn-profile 3gprofile
dialer number *99# autodial
nat outbound 3002
#
interface Ethernet2/0/0
port link-type trunk
port trunk allow-pass vlan 10
#
interface Vlanif10
ip address 192.168.100.1 255.255.255.0
dhcp select global
#
ip pool 3gpool
gateway-list 192.168.100.1
network 192.168.100.0 mask 255.255.255.0
import all
#
dialer-rule
dialer-rule 1 ip permit
#
ip route-static 0.0.0.0 0.0.0.0 Cellular0/0/0
#
return
|