PPP(二层)
- 点到点链路层协议(除了PPP,还有HDLC和Cisco HDLC)
- 3个协议簇:
- 链路控制协议簇LCP:主要用来建立、拆除、监控PPP数据链路。
自动检测链路环境,如是否存在环路;协商链路参数,如最大数据包长度、认证协议等。与其他协议相比,ppp协议的一个重要特点就是提供认证功能,链路两端可以协商使用何种认证协议并实施认证过程,只有认证成功才会建立连接,这使得PPP协议很适合被运营商用来接入分散的用户。 - 网络控制协议簇NCP:主要用来协商在该数据链路上所传输的数据包的格式与类型。
- PPP扩展协议簇:主要用于提供对PPP功能的进一步支持,例如PPP提供了用于网络安全方面的认证协议簇CHAP(挑战握手协议)和PAP(简单密钥认证)
- 链路控制协议簇LCP:主要用来建立、拆除、监控PPP数据链路。
报文结构
- Flag域:标识一个物理帧的起始和结束,该字节为0x7E。
- 如果在数据中出现0x7E,则采用硬件完比特填充(原理跟HDLC) ,只要发现5个连续的1,则立即填入0
- 在数据中,直接能看到的现象是数据中的0x7E被拆分成0x7D+0x5E
- 那如果数据中出现0x7D怎么办呢?再把0x7D拆成0x7D+0x5D
- Address域:Address域可以唯一标识对端。
PPP协议是被运用在点对点的链路上,因此,使用PPP协议互连的两个通信设备无须知道对方的数据链路层地址。按照协议的规定将该字节填充为全1的广播地址,对于PPP协议来说,该字段无实际意义。 - Control域:该字段默认值为0x03,表明为无序号帧,PPP默认没有采用序列号和确认来实现可靠传输。
Address和Control域一起标识此报文为PPP报文,即PPP报文头为FF03。 - Protocol域:用来区分PPP数据帧中信息域所承载的数据报类型。只能为奇数
常见的协议代码:
0281:MPLS单播
0283:MPLS组播
8021:IP
8057:IPv6
C021:LCP
C023:PAP
C223:CHAP
- Information域:信息域最大长度是1500字节,其中包括填充域的内容。信息域的最大长度称为最大接收单元MRU,缺省值为1500字节,在实际应用当中可根据实际需要进行MRU的协商。
- FCS域:对PPP数据帧传输的正确性进行检测。
LCP报文
- Code域:代码域的长度为1个字节,主要是用来标识LCP数据报文的类型。
在链路建立阶段,接收方接收到LCP数据报文。当其代码域的值无效时,就会向对端发送一个LCP的代码拒绝报文(Code-Reject报文)。
常见code值:
0x01:Configure-Request,包含发送者试图使用的、没有使用默认值的参数列表。3秒重传时间内未收到Configure-Ack,则重传Configure-Request,最多连续重传10次,10次之后重新建立。
0x02:Configure-Ack,表示完全接受对端发送的Configure-Request的参数取值
0x03:Configure-Nak,表示对端发送的Configure-Request中的参数取值在本地不合法
0x04:Configure-Reject,表示对端发送的Configure-Request中的参数本地不能识别
0x05:Terminate-Request,用于请求对端关闭连接。3秒重传时间内未收到Terminate-Ack,则重传Terminate-Request,最多连续重传2次,2次之后认为对端不可用,连接关闭。
0x06:Terminate-Ack
0x09:Echo-Request,LCP建立连接之后,使用Echo-Request和Echo-Reply检测链路状态,10秒发送一次Echo-Request
0x0A:Echo-Reply
- Identifier域:标识域为1个字节,用来匹配请求和响应,当标识域值为非法时,该报文将被丢弃。
通常一个配置请求报文的ID是从0x01开始逐步加1的。当对端接收到该配置请求报文后,无论使用何种报文回应对方,但必须要求回应报文中的ID要与接收报文中的ID一致。 - Length域:长度域的值就是该LCP报文的总字节数据。它是代码域、标志域、长度域和数据域四个域长度的总和。
长度域所指示字节数之外的字节将被当作填充字节而忽略掉,而且该域的内容不能超过MRU的值。 - Data域:数据域所包含的是协商报文的内容,这个内容包含以下字段:
Type为协商选项类型。Length为协商选项长度,它是指Data域的总长度,也就是包含Type、Length和Data。Data为协商的选项具体内容。
NCP报文
此部分和LCP基本一致
IPCP,用于协商控制IP参数,使PPP可用于传输IP数据包。IPCP使用和LCP相同的协商机制、报文类型,但IPCP并非调用LCP,只是工作过程、报文等和LCP相同。
工作阶段(不能叫状态机)
【注意】:此处列出的是PPP的工作阶段,并非PPP的协议状态,由于PPP是由一组协议组成的,因此PPP本身没有协议状态,只有特定的协议如LCP和NCP等才有协议状态和状态转换(协议状态机)。
- Dead:这是PPP工作的开始和结束的阶段。
当物理层变为可用状态之后,PPP进入Establish状态 - Establish:PPP在此阶段使用LCP协商链路层参数。
链路层参数协商不成功则PPP连接建立不成功,PPP退回到Dead阶段;链路层参数协商成功则PPP进入Authenticate阶段 - Authenticate阶段:PPP在此阶段认证对端,失败则进入Terminate阶段,成功或者没有认证则进入Network阶段
- Network:PPP在此阶段使用NCP协商网络层参数。
协商成功则PPP连接建立成功,开始传输网络层数据包。当上层协议认为应当关闭此连接或者管理员手动关闭PPP链接,则PPP进入Terminate阶段 - Terminate:PPP在此阶段使用LCP关闭PPP连接。
PPP连接关闭后,PPP进入Dead阶段。
建链过程
- PPP协议运行总是以Dead阶段开始和结束。通常处在这个状态的时间很短,仅仅是检测到硬件设备后(即硬件连接状态为Up)就进入Establish阶段。
- 在Establish阶段,PPP链路进行LCP协商。协商内容包括最大接收单元MRU、认证协议、魔术字(防环)、协议字段压缩、多链路捆绑、链路质量监控、地址和控制字段压缩等选项。LCP协商成功后进入Opened状态,表示底层链路已经建立。
- 如果配置了验证,将进入Authenticate阶段,开始CHAP或PAP验证。如果没有配置验证,则直接进入Network阶段。
- 对于Authenticate阶段,如果验证失败,进入Terminate阶段,拆除链路,LCP状态转为Closed。如果验证成功,进入Network阶段,此时LCP状态仍为Opened,而NCP状态从Initial转到Starting。
- 在Network阶段,PPP链路进行NCP协商,NCP协商包括IPCP(IP Control Protocol)、MPLSCP(MPLS Control Protocol)等协商。IPCP协商主要包括双方的IP地址。通过NCP协商来选择和配置一个网络层协议。只有相应的网络层协议协商成功后(相应协议的NCP协商状态为Opened),该网络层协议才可以通过这条PPP链路发送报文。例如:IPCP协商通过后,这条PPP链路才可以承载IP报文。
- PPP运行过程中,可以随时中断连接,物理链路断开、认证失败、超时定时器时间到、管理员通过配置关闭连接等动作都可能导致进入链路进入Terminate阶段。进入Terminate阶段后且资源释放完,即进入Dead阶段。
LCP协商
NCP协商
协商网络层参数使用IPCP协商,分为静态协商IP地址(互推地址)、动态协商IP地址(获得地址)
静态协商IP地址(互推地址)
- R1先向R2发送configure-Request,里面有个字段就是接口的IP地址,不带掩码信息
- 对端收到后,如果认为这个地址合法的(地址不冲突且非0.0.0.0)就回复ACK,回复 ACK 的同时把 12.1.1.1以一个32位主机路由添加到IGP表里去,R2需要ping 12.1.1.1的时候,直接从接口转。
这就是PPP链路不在同一个段里也能通信的原因
- R2收到Request后就进入NCP的Open,R2 也会把地址推给 R1。
动态协商IP地址(获得地址)
- R1接口不配IP地址,需要敲一条指令,
ip address ppp-negotiate
才会发送configure-Request,因为接口没有地址,所以地址字段会填充为0.0.0.0 - R2收到Request后回复NAK,NAK中会包含分配给对方的地址, 这就需要在被认证方配置一条
remote address x.x.x.x ;ppp ipcp remote-address forced
可以跟一个静态的IP,也可以跟一个dhcp pool,R1收到后会重新发送 Request,地址变为之前分配的地址,对端会送ACK,这个过程R2也会给R1发,然后进入Open状态
NAK分配地址之后,接下来的阶段和静态协商IP地址过程相同
认证
- PAP是由被认证端发请求,CHAP是由认证端发请求
- 接口下配置
ppp mode PAP/CHAP
的为认证方,配置ppp PAP/CHAP username
为被认证方配置在物理接口或者AAA中
- 被认证方是接口优先,接口没有配置用户或密码,再查全局;认证方只使用全局用户名和密码
PAP认证(密码认证协议,Password Authentication Protocol)
PAP验证协议为两次握手验证,口令为明文。验证过程仅在链路初始建立阶段进行。
当链路建立阶段结束后,用户名和密码将由被验证方重复地在链路上发送给验证方,直到验证被通过或者链路连接终止。
如果必须在远端主机上使用明文密码进行模拟登录,这种验证方式是最合适的。
被验证方把本地用户名和口令发送到验证方,验证方根据本地用户表查看是否有被验证方的用户名以及口令是否正确,然后返回不同的响应(接受或拒绝)。
PAP不是一种安全的验证协议。当验证时,口令以明文方式在链路上发送,并且由于完成PPP链路建立后,被验证方会不停地在链路上反复发送用户名和口令,直到身份验证过程结束,所以不能防止攻击。
PAP验证报文帧格式
- Code:标识PAP数据报的类型
- 1表示是Authenticate-Request报文
- 2表示是Authenticate-Ack报文
- 3表示是Authenticate-Nak报文
- Identifier:标识请求报文和应答报文的匹配。
- Length:表示包括Code、Identifier、Length和Data域在内的PAP报文长度。超出此长度的报文将被认为是填充字节并被丢弃。
- Data:Data域的帧由Code域来决定
- Authenticate-Request
- Authenticate-Ack和Authenticate-Nak
如果在验证-请求报文中的用户名和密码都能被验证方验证通过,验证方必须返回Code值是2的Authenticate-Ack报文,表示验证通过。
如果验证-请求报文中用户名或密码有一项没有通过验证,验证方必须返回Code值是3的Authenticate-Nak报文,表示验证失败。
CHAP认证(挑战握手认证协议,Challenge Handshake Authentication Protocol)
CHAP验证协议为三次握手验证协议。它只在网络上传输用户名,而并不传输用户密码,因此安全性要比PAP高。CHAP协议是在链路建立的开始就完成的。在链路建立完成后的任何时间都可以重复发送进行再验证。
CHAP单向验证是指一端作为验证方,另一端作为被验证方。双向验证是单向验证的简单叠加,即两端都是既作为验证方又作为被验证方。在实际应用中一般只采用单向验证。
CHAP单向验证过程分为两种情况:验证方配置了用户名和验证方没有配置用户名。推荐使用验证方配置用户名的方式,这样可以对验证方的用户名进行确认。
认证方的报文根据配置情况不同会有所改变,但是被认证方只有一种报文(ID+challenge值+password)三者的hash+ID+用户名
- 验证方配置了用户名的验证过程
- 验证方主动发起验证请求,验证方向被验证方发送一些随机产生的报文(Challenge报文,保报文中携带随机值),并同时将本端的用户名附带上一起发送给被验证方。
Challenge作用:1.HASH;2.抗重放
验证方--用户名+ID+challenge-->被验证方
- 被验证方接到验证方的验证请求后,先检查本端接口上是否配置了ppp chap password命令,
- 如果配置了密码,则被验证方用报文ID、命令中配置的用户密码和MD5算法对该随机报文进行加密,将生成的密文和自己的用户名发回验证方(Response)
被验证方--(ID+密码+challenge)三者的HASH+ID+用户名-->验证方
- 如果接口上未配置密码,则根据此报文中验证方的用户名在本端的用户表查找该用户对应的密码,用报文ID、此用户的密钥(密码)和challenge进行HASH,将生成的密文和被验证方自己的用户名发回验证方(Response)
被验证方在用户表中查找验证方用户对应的密码,被验证方--(ID+密码+challenge)三者HASH+ID+接口下用户名-->验证方
- 如果配置了密码,则被验证方用报文ID、命令中配置的用户密码和MD5算法对该随机报文进行加密,将生成的密文和自己的用户名发回验证方(Response)
- 验证方用自己保存的被验证方密码和MD5算法对原随机报文加密,比较二者的密文,根据比较结果返回不同的响应。
验证方(同样需要在用户列表中查找验证方发来的用户名对应的密码)--success或者fail-->被验证方
- 验证方主动发起验证请求,验证方向被验证方发送一些随机产生的报文(Challenge报文,保报文中携带随机值),并同时将本端的用户名附带上一起发送给被验证方。
- 验证方没有配置用户名
- 验证方主动发起验证请求,验证方向被验证方发送一些随机产生的报文(Challenge)
验证方--user(空)+ID+challenge值-->被验证方
- 被验证方接到验证方的验证请求后,利用报文ID、ppp chap password命令配置的CHAP密码和MD5算法对该随机报文进行加密,将生成的密文和自己的用户名发回验证方(Response)
被验证方--(ID+challenge值+password)三者的hash+ID+用户名-->验证方
- 验证方用自己保存的被验证方密码和MD5算法对原随机报文加密,比较二者的密文,根据比较结果返回不同的响应。
验证方--success或者fail-->被验证方
- 验证方主动发起验证请求,验证方向被验证方发送一些随机产生的报文(Challenge)
CHAP的3种认证方式配置总结
认证方必须配置AAA和认证模式,被认证方必须在接口下配置用户名
- 认证方接口下配置用户名
配置的用户名仅仅只是发送给被认证方,被认证方在没有配置接口的密码的时候才会使用到,但是校验是否通过是根据被认证方接口下配置的用户名和认证方的AAA中的数据
- 被认证方接口下配置用户名和密码,交互步骤如下:
- 认证方发送接口下用户名
- 被认证方发送接口下用户名和密码
- 认证方根据被认证方的用户名,使用AAA的数据进行检查
- 被认证方接口下只配置用户名,交互步骤如下:
- 认证方还是使用接口下用户名
- 被认证方根据用户名查找AAA中的密码,然后使用接口下的用户名
即本地接口用户名和AAA中认证方用户的密码,也就是说用户名和密码是无联系的
- 认证方根据被认证方接口下用户名查找AAA中密码
即需要认证方的用户名需要在被认证方的AAA中存在,被认证方的用户名需要在认证方的AAA中存在
- 被认证方接口下配置用户名和密码,交互步骤如下:
- 认证方接口下没有配置用户名
此时被认证方接口下必须配置用户名和密码,否则无法根据认证方发来的信息检索到密码
交互步骤如下:- 认证方用户名为空
- 被认证方使用接口下用户名和密码
- 认证方在AAA中进行检查
CHAP报文
- Code:表示CHAP数据报文的类型
- 1表示Challenge报文
- 2表示Response报文
- 3表示Success报文
- 4表示Failure报文
- Challenge报文和Response报文
用来发起CHAP验证
- Success报文和Failure报文
验证通过或验证失败
PPP同步与异步
- 异步传输是以字节为单位传输数据,并且需要采用额外的起始位和停止位来标记每个字节的开始和结束。起始位为二进制0,停止位为二进制1。在这种传输模式下,开始和停止位占据发送数据相当大的比例,每个字节的发送都需要额外的开销。
- 同步传输是以帧为单位,在通信时需要使用时钟来同步本端和对端的设备通信。
BCP协议
桥接控制协议,实现以太网数据帧在PPP链路上传输
先协商LCP,需要保证NCP可达,再协商BCP
MP基本原理
Multilink PPP允许将报文分片,分片将从多个点对点链路上送到同一个目的地。
增加带宽,将多个PPP链路捆绑使用。
MP方式下链路协商过程
- LCP阶段,也需要验证对端接口是否工作在MP方式下
- NCP阶段,根据MP-Group接口或指定虚拟接口模板的各项NCP参数(如IP地址等)进行NCP协商
实现方式
- 虚拟接口模板模式
- MP-Group方式
PPPoE
在以太网上面承载PPP 协议,PPPoE 协议提供了在以太网网络中多台主机连接到远端的宽带接入服务器上的一种标准。以太网不支持身份认证、加密等功能,所以将PPP的特点融入到以太网中。
PPPoE认证配置在是VT和dialer接口
报文类型
- 头部:以太网封装的,目的MAC一般为广播或单播
- 字段:
- 版本号、类型、代码表明是PPPoE报文,并表示了报文类型
- 会话ID:以太网源目MAC定义了一个PPPoE的会话
- 长度:表明PPPoE的载荷长度
- 载荷:内部数据
基本原理
PPPoE拨号可分为三个阶段:
- Discovery发现阶段:发现对方MAC,确定唯一的PPPoE会话
- PADI
PPPOE Active Discovery Initiation
:初始报文,广播发送,主机探测PPPoE服务器 - PADO
PPPOE Active Discovery Offer
:提供报文,单播,服务器收到探测报文回应的 - PADR
PPPOE Active Discovery Request
:请求报文,单播,主机向服务器发送请求 - PADS
PPPOE Active Discovery Session-confirmation
:会话确认报文,单播,服务器向主机分配一个会话ID,后面的会话均一直使用此ID,除非断开该链接
举例:家用路由器性能比较低的时候,长期开机导致网速变慢,或者为了防辐射等等原因,会设置定时开关机,每次开机之后会进行重新拨号,重新拨号之后,会话ID就会变
- PADI
- Session会话阶段:进行PPP协商,传输PPP数据报文
- Terminate会话终止阶段:会话建立的任意时刻,可以发送结束报文关闭会话
- PADT
PPPOE Active Discovery Terminate
:终止报文,单播,主机向服务器发送,表示断开会话
路由器上拨号接口的MTU为1492,为什么?以太网承载,其协议簇为ethernet+pppoe+ppp+ip+payload,多了pppoe和ppp头部,6B的pppoe头部(1B的版本和类型+1B的code+2B的会话ID+2B的长度) 和 2B的ppp头部(只有头部协议字段,省略了0x7EFF03,即flag+address+control)。为什么省略flag?flag的作用是标识报文的开始与结束,在pppoe中可以使用长度字段来标识开始与结束,所以flag字段没有存在的必要了
- PADT
配置步骤
Virtual-template为了L2层协议的以太网承载PPP,可以封装多种同层协议的虚拟接口
dialer虚拟拨号接口:用来控制拨号的接口,在这个接口下配置封装协议。ppp认证、ip地址自动获得、dialer接口拨号使用的用户名、pppoe连接建立的等待时间、dialer所属的组、指定dialer接口的编号、nat地址转换等等的配置,都在是该拨号接口下完成的
1. 服务端配置
- 配置dhcp server pool
- 配置aaa下用户名、密码,服务类型为PPP
- 创建Virtual-Template接口,配置ip地址、remote分配地址池、PPP认证模式
- 物理接口调用pppoe-server bind virtual-template
2. 客户端配置
- 创建dialer接口(创建PPPoE的接口)
- 接口下配置链路封装协议ppp,ip地址为PPP自动协商,指定dialer接口拨号所使用的用户和认证方式等
追问
LCP 的作用
控制链路的建立,维护与拆除
MRU 的作用,魔术字的作用
- 最大接收单元,控制报文的最大接收大小,作用与 MTU 一样,协调最小的值。
- 魔术字的作用是防环
当收到报文的魔术字与发送报文的魔术字一样时就认为有环路,此时会回复 NAK,并携带一个新的魔术字
如何区分认证端与被认证端(LCP 阶段)
- 配置了authehtication-mode命令的一端为认证端
- 在LCP阶段协商认证类型时,只有认证端才会携带认证类型,被认证端不会携带
认证中ID的作用,为什么要进行标识
ID用于标识会话,并参与HASH运算。每一次的认证里都携带了不能的随机数, 随机数也是参与HASH运算的一个因子,所以需要使用ID来关联。
挑战报文中的随机数的作用
防重放攻击
设备会保存之前使用的随机数,缺点是记录时间段比较长的情况下,则保存和查询的开销比较大
如果发现报文中有以前使用过的随机数,就认为是重放攻击
认证端与被认证端各自的密码如何获得
- 认证端:只能在AAA下面配置,通过被认证端发送过来的Response消息中的用户名找到全局AAA下面的密码。不会使用接口下面的密码。
- 被认证端:可在接口与全局 AAA下面配置,接口优于全局。当接口没有配置密码时,认证端接口必须配置用户名。
模拟器实验时:被验证方接口下用户名和验证方用户名不一致时无法正常建立连接,只有验证方和被验证方的AAA中都有相同的用户,且双方接口下均配置这个用户的用户名时才能正常建立邻居
被认证端用户名的作用?认证端密码的作用?
- 被认证端发送的 response 消息中会携带此用户名,认证端收到后会用这个用户名查到全局AAA 找到密码,完成HASH运算。
- 认证端密码只能在全局AAA配置,使用也是完成HASH运算。
什么叫双向认证
认证端也是被认证端
NCP 中包含哪些协议
IPCP、MPLSCP、IPV6CP、OSICP(上层运行 ISIS 时)
IPCP 中互推地址的作用
使对方能获得本端的路由,从而使得p2p网络中不在同一个网段也能通信
双方是否都可以自动获得地址
可以,双方都可以配置 remote-address
为什么需要使用PPPOE
一个站点上的多台主机连接到同一台远程接入设备,同时接入设备能够提供与拨号上网类似的访问控制和计费功能,于是产生了在以太网上传输PPP报文的技术
p2p网络中为什么要设置30位掩码
- 节省IP
- 可防止环路,如果两端都是配置的24位掩码的地址,一端是10.1.1.1 别外一端是10.1.1.2,此时在任意一台路由上ping 10.1.1.3 就会产生环路。环路原因是因为路由表中存在24位的路由, 出接口就是连接对端的接口。而p2p网络中只需要出接口就可以转发数据包,但在MA中需要对端的MAC地址,所以在MA网络中没有环路
PPP中路由学习
AR7上路由:
- 1.1.1.0/30:通过直连形成的,下一跳1.1.1.1
- 1.1.1.1/32:本地接口的
- 2.2.2.2/32:通过IPCP学习到的
- 2.2.2.0/30:只能通过OSPF的1类LSA学习到(通过p2p知道邻居为2.2.2.2,查2.2.2.2的1类LSA,通过stubnet知道2.2.2.0/30)
AAA的全称,除了AAA外还能用什么方式获得密码
AAA是Authentication(认证)、Authorization(授权)和 Accounting(计费)的简称,是网络安全的一种管理机制,提供了认证、授权、计费三种安全功能。AAA可以通过多种协议来实现,目前设备支持基于RADIUS或HWTACACS 方式来实现AAA,在实际应用中,最常使用 RADIUS 协议。在认证中我们所讲的是 AAA 的本地数据库认证,除了这种外还有基于RADIUS或HWTACACS(HUAWEI Terminal Access Controller Access Control System,华为终端访问控制器控制系统协议)的方式。
PPP为什么不需要ARP
使用IPCP解析,不需要ARP