广域网技术之HDLC和ppp原理与配置

在广域网中,一般会使用串行链路来提供远距离的数据传输,通常,会用到HDLC和ppp这两种串口封装协议。
HDLC:(High-Level Data Link Control)高级数据链路控制协议
PPP: (Point to Point Protocol)点到点协议
这两者有一定的区别。

串行链路的数据传输方式

在广域网中,普遍会使用串行链路来进行数据传输,在串行链路中定义了两种数据传输方式:同步和异步。
同步和异步传输的简单示意图

异步传输以字节为单位,需要用额外的二进制值为0的起始位来标记字节的开始,二进制值为1的停止位来标记字节的结束,所以在采用异步传输方式来传输数据的时候会有很大的额外的开销。
同步传输以帧为单位,在通信的时候,会采用时钟来同步发送端和接收端的设备通信。(上图中的DCE是数据通信设备,它提供了一个用于同步DCE设备和DTE设备之间数据传输的时钟信号**。DTE是数据终端设备,它通常使用DCE产生的时钟信号。)
备注1:什么是串行链路?串行链路就是使用了串口线来连接两个路由器的串口,这样的链路就是串行链路。

HDLC的应用

HDLC,是一种面向比特的链路层协议,传送的信息单位是帧,可以进行全双工通信,所有帧均采用CRC校验,并对信息帧进行编号,可防止漏收或重收,传输可靠性高。

HDLC的帧结构

完整的HDLC帧由标志字段(Flag)、地址字段(Address)、控制字段(Control)、信息字段(Information)、帧校验序列字段(FCS)等组成。
标志字段用以标志帧的开始与结束。地址字段携带的是地址信息。
控制字段用于构成各种命令及响应,它将HDLC的帧分成了三种类型,分别是信息帧、监控帧、无编号帧。(信息帧用于传送有效信息或数据,通常简称为I帧。监控帧用于差错控制和流量控制,通常称为S帧。无编号帧简称U帧,用于提供对链路的建立、拆除以及多种控制功能。)
信息字段可以包含任意长度的二进制数,其上限由FCS字段或通讯节点的缓存容量来决定,目前用得较多的是1000-2000比特,而下限可以是0,即无信息字段。监控帧中不能有信息字段。
帧检验序列字段可以使用16位CRC对两个标志字段之间的内容进行校验。
HDLC的帧结构

HDLC的配置

我们可以在华为的ensp上模拟一下实验:
1.选取AR系列的路由器AR1和AR2:
2.在启动两个路由器之前,需要将两个路由器的设置打开,选取串口可以使用的接口卡放入路由器的卡槽,如下图所示
选取串口的接口卡放入卡槽

3.接着,我们使用串口线连接两台路由器,如下图所示

串口线的选取

4.启动设备,进入正确的串口,配置HDLC协议,配置ip地址.

[AR2]interface Serial 1/0/0
[AR2-Serial4/0/0]link-protocol hdlc
Warning: The encapsulation protocol of the link will be changed. Continue? [Y/N]:y
[RTA-Serial4/0/0]ip address 10.0.1.1 30

PPP协议应用

PPP协议是一种点到点链路层协议,主要用于在全双工的同异步链路上进行点到点的数据传输。PPP协议有如下优点:
PPP既支持同步传输又支持异步传输,具有很好的扩展性,例如,当需要在以太网链路上承载PPP协议时,PPP可以扩展为PPPoE。
PPP提供了LCP(Link Control Protocol)协议,用于各种链路层参数的协商。
PPP提供了各种NCP(Network Control Protocol)协议(如IPCP、IPXCP),用于各网络层参数的协商,更好地支持了网络层协议。
PPP提供了认证协议:CHAP(Challenge-Handshake Authentication Protocol)、PAP(Password Authentication Protocol),更好的保证了网络的安全性。
无重传机制,网络开销小,速度快。
注2:在华为的设备上的串行接口默认运行PPP协议。

PPP组件

PPP包含两个组件:链路控制协议LCP和网络层控制协议NCP。

名称 作用
链路控制协议 (Link Control Protocol) 用来建立、拆除和监控PPP数据链路
网络控制协议(Network Control Protocol) 用于对不同的网络层协议进行连接建立和参数协商

为了能适应多种多样的链路类型,PPP定义了链路控制协议LCP。LCP可以自动检测链路环境,如是否存在环路;协商链路参数,如最大数据包长度,使用何种认证协议等等。还可以提供认证功能,链路两端可以协商使用何种认证协议来实施认证过程,只有认证成功之后才会建立连接。
每一个NCP对应了一种网络层协议,用于协商网络层地址等参数,例如IPCP用于协商控制IP协议,IPXCP用于协商控制IPX协议等。

PPP链路建立过程

和HDLC不同的是,ppp在建立的时候,中间会有很多过程,如下图所示
ppp链路建立过程

Dead阶段也称为物理层不可用阶段。当通信双方的两端检测到物理线路激活时,就会从Dead阶段迁移至Establish阶段,即链路建立阶段。 在Establish阶段,PPP链路进行LCP参数协商。如果LCP参数协商成功就会进入Opened状态,表示底层链路已经建立,之后就会进入认证阶段,如果认证成功就会进入NCP协商,NCP协商成功后,PPP链路将保持通信状态,在Terminate阶段,如果所有的资源都被释放,通信双方将回到Dead阶段,直到通信双方重新建立PPP连接。

PPP帧格式

ppp帧格式
注:
Flag域标识一个物理帧的起始和结束,
PPP数据帧的控制域默认为00000011(0X03),表明为无序号帧。
帧校验序列(FCS)用于检查PPP帧的完整性。
协议字段用来说明PPP所封装的协议报文类型,
信息字段包含协议字段中指定协议的数据包。
Code字段,主要是用来标识LCP数据报文的类型。
Identifier域为1个字节,用来匹配请求和响应。
Length域的值就是该LCP报文的总字节数据。
数据字段则承载各种TLV(Type/Length/Value)参数用于协商配置选项,包括最大接收单元,认证协议等等。

LCP报文

LCP在链路层参数协商时会用到四种报文类型。
Configure-Request(配置请求):链路层协商过程中发送的第一个报文,该报文表明点对点双方开始进行链路层参数的协商。
Configure-Ack(配置响应):收到对端发来的Configure-Request报文,如果参数取值完全接受,则以此报文响应。
Configure-Nak(配置不响应):收到对端发来的Configure-Request报文,如果参数取值不被本端认可,则发送此报文并且携带本端可接受的配置参数。
Configure-Reject(配置拒绝):收到对端发来的Configure-Request报文,如果本端不能识别对端发送的Configure-Request中的某些参数,则发送此报文并且携带那些本端不能认别的配置参数。
如下图所示

RTA首先发送一个Configure-Request报文,此报文中包含RTA上配置的链路层参数。当RTB收到此Configure-Request报文之后,如果RTB能够认这个报文中的所有参数,那么它就向RTA回应一个Configure-Ack报文。如果不认可就会回复Configure-Nak报文,
如下图所示,RTA在收到Configure-Nak报文之后,需要根据此报文里的参数重新选择本地配置的其它参数,并重新发送一个Configure-Request。

如果RTB收到RTA发送的Configure-Request报文之后,RTB不能识别这个报文里面的某个参数,那么RTB需要向RTA回应一个Configure-Reject报文。在此Configure-Reject报文中,只包含不能被识别的参数。
RTA在收到Configure-Reject报文之后,需要向RTB重新发送一个Configure-Request报文,在这个新的Configure-Request报文中,不再包含不被对端(RTB)识别的参数。
在这里插入图片描述

LCP链路参数协商

LCP报文携带的一些常见的配置参数有MRU,认证协议,以及魔术字。
LCP链路参数协商

PPP基本配置

PPP的基本配置和HDLC差不多,前面的步骤都差不多,选好AR系列的路由器,加带有串口的板卡,用串口线连起来,启动路由器开始配置,配置如下:
[AR1]interface Serial 4/0/0
[AR1-Serial4/0/0]link-protocol ppp
Warning: The encapsulation protocol of the link will be changed. Continue? [Y/N]:y
[AR1-Serial4/0/0]ip address 10.1.1.1 30
在两台设备上都做好了上面的配置之后,可以抓包看看结果,如下图所示:抓包结果1
由上图的抓包结果,我们可以看见在PPP协商的过程中,有LCP以及NCP里面的IPCP,
我们可以点开其中一个LCP request报文看看里面有哪些东西,可以看到有魔术字(magic number)如下图所示
抓包结果2
从上面的几张图,我们可以看出,在经历了两个configuration-request之后,就被回复了ACK,标志着LCP基本建立完成,接着开始协商NCP的阶段,那么在NCP协商的时候,我们在上图中看到了IPCP(因为本次实验采用的是ipv4地址,所以在协商的时候采用的IPCP,如果本次实验采用的是ipv6的地址,那么在协商的时候会使用IPv6CP)也经过了两次configuration-requestNCP阶段协商成功之后,回复ACK,之后,LCP和NCP都是open状态,如下图所示:
抓包结果3
注3:华为ARG3系列路由器默认在串行接口上使能PPP协议。如果接口运行的不是PPP协议,需要运行link-protocol ppp命令来使能数据链路层的PPP协议。

PPP认证模式

PPP的认证模式有两种,一种是PAP(全称是密码认证协议),这种认证比较简单,认证过程如下图所示,LCP协商完成后,认证方要求被认证方使用PAP进行认证。
被认证方将配置的用户名和密码信息使用Authenticate-Request报文以明文方式发送给认证方。认证方收到被认证方发送的用户名和密码信息之后,根据本地配置的用户名和密码数据库检查用户名和密码信息是否匹配,如果匹配,则返回Authenticate-Ack报文,表示认证成功。否则,返回Authenticate-Nak报文,表示认证失败。
PAP认证
还有一种方式是CHAP(全称是Challenge Handshake Authentication Protocol),这种认证方式,在认证方也有一个aaa数据库,首先认证方发送一个challenge(里面包含了用户名,ID和一个随机数)报文给被认证方,当被认证方收到了信息之后,会用接口里配置的密码加上challenge里面的ID再加上随机数一块去哈希运算,运算过后会得到一个哈希值,被认证方会利用这个Response报文将这个哈希值发送给认证方,认证方在收到信息之后,利用response里面的用户名去检索数据库里面相对应的密码,然后根据这个密码,ID,随机数去做哈希运算,如果双方的哈希值一样,则认证方回复success,如果不一样,则回复failure,认证的过程如下图所示。
CHAP认证过程
PAP 认证的配置
PAP配置
[AR1]aaa
[AR1-aaa]local-user huawei password cipher huawei123
创建一个本地用户,用户名为“huawei”,密码为“huawei123
[AR1-aaa]local-user huawei service-type ppp
设置用户“huawei”为PPP用户。
[AR1]interface Serial 4/0/0
[AR1-Serial4/0/0]link-protocol ppp
[AR1-Serial4/0/0]ppp authentication-mode pap
在认证方(AR1)开启PAP认证的功能,即要求对端使用PAP认证。
[AR1-Serial4/0/0]ip address 10.1.1.1 30

[AR2]interface Serial 4/0/0
[AR2-Serial4/0/0]link-protocol ppp
[AR2-Serial4/0/0]ppp pap local-user huawei password cipher huawei123
在被认证方配置PAP使用的用户名和密码信息。
[AR2-Serial4/0/0]ip address 10.1.1.2 30
配置完成之后,我们可以抓个包,如图所示
抓包 5
CHAP的配置
[AR1]aaa
[AR1-aaa]local-user huawei password cipher huawei123
[AR1-aaa]local-user huawei service-type ppp
[AR1]interface Serial 4/0/0
[AR1-Serial4/0/0]link-protocol ppp
[AR1-Serial4/0/0]ppp authentication-mode chap

[AR2]interface Serial 4/0/0
[AR2-Serial4/0/0]link-protocol ppp
[AR2-Serial4/0/0]ppp chap user huawei
[AR2-Serial4/0/0]ppp chap password cipher huawei12

最后一个问题:CHAP认证方式需要交互几次报文?PAP呢?(答案下期公布。_
That’s all,三克油!

发布了9 篇原创文章 · 获赞 0 · 访问量 109

猜你喜欢

转载自blog.csdn.net/weixin_42463871/article/details/105252900