HCNA Routing&Switching之广域网协议HDLC和PPP
前文我们了解了地址转换技术NAT相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15168042.html;今天我们来聊一聊广域网中的两个二层封装协议HDLC和PPP协议;
什么是广域网?广域网(Wide Area Network),简称WAN;是一种跨越大的、地域性的计算机网络的集合。通常跨越省、市,甚至一个国家。广域网中经常会使用串行链路来提供远距离的数据传输;HDLC(High-Level Data Link Control)高级数据链路控制协议和PPP(Point to Point Protocol)点对点协议是两种典型的串口封装协议;在前边的博文中我们提到过,串口链路和以太网链路最根本的区别就在于二层的封装不同;以太网二层封装是需要封装源mac和目标mac,而串口链路不需要;对于二层以上的封装两者没有太大区别;
HDLC协议应用
提示:HDLC是一种面向比特的链路层协议;HDLC传输的信息单位为帧,是面向比特的同步数据控制协议的典型;
HDLC的配置
实验:如下拓扑,配置R1和R2使用HDLC封装传输数据
配置R1


sys
sys R1
int s4/0/0
link-proto hdlc
y
ip add 1.0.0.1 24
d th
配置R2


sys
sys R2
int s4/0/0
link-proto hdlc
y
ip add 1.0.0.2 24
d th
提示:默认华为的设备串口都是ppp封装,我们只需要在对应的串口接口模式下使用link-protocol hdlc命令来更改接口的封装为hdlc即可。这里需要注意一点,通信双方的协议必须相同,双方才可以正常通信;
HDLC接口地址借用
什么是地址借用呢?我们知道在路由器上一个接口如果没有ip地址就无法自动生成直连路由,也就无法转发报文;ip地址借用是指允许一个没有IP地址的接口从其他接口借用ip地址。这样一来可以避免一个接口独占ip地址,节约ip地址资源;一般建议使用回环接口的ip地址,因为回环接口总是处于up状态,从而能稳定的提供可用的ip地址;
配置上述拓扑,串口ip地址借用lo1接口ip地址
在R1上删除原有接口的ip地址,在lo1上配置ip地址
在R2上删除原有接口的ip地址,在lo1上配置ip地址
配置R1的s4/0/0接口借用lo1接口的地址
配置R1的s4/0/0接口借用lo1接口的地址
提示:可以看到在对应串口接口下使用ip address unnumbered interface loopback 1命令就可以将lo1上的地址配置在对应的串口接口下;
验证:R1和R2可以正常通信吗?
提示:可以看到虽然地址都配置上了,但是无法正常通信;
查看路由
提示:可以看到对应路由的出接口是lo1并不是对应的串口,对于R2的路由也是一样的;所以导致R1pingR2(或者R2pingR1)时数据包是发送不出去;解决办法,添加静态路由,指定对应的出接口为串口s4/0/0接口;
在R1上添加静态路由
在R2上添加静态路由
提示:这里需要注意,如果回环接口不是32位掩码,这里添加静态路由要添加明细路由,其原因是明细路由会最优先匹配上;如果是网段路由,对应静态路由的优先级没有直连路由的优先级高,所以在对应路由表中,直连路由优先;如果回环接口是32位掩码,这里配置网段路由和明细路由都可以;总之添加了静态路由以后,在路由表中对应路由的出接口是对应的串口即可;
验证:现在R1和R2是否能够正常ping通呢?
提示:可以看到现在R1pingR2就能正常ping通;说明我们配置的静态路由生效;
PPP协议应用
提示:PPP协议是一种点到点链路层协议,主要用于在全双工的同步或异步链路上进行点到点的数据传输;
HDLC和PPP协议对比
PPP协议特点
1、PPP既支持铜鼓传输有支持异步传输,而x.25、FR等数据链路层协议仅支持同步传输,SLIP仅支持异步传输;
2、PPP协议具有很好的扩展性,例如当需要以太网链路层在ppp协议是,ppp可以扩展为PPPoE;
3、PPP提供了LCP(link control protocol)协议,用于各种链路层参数协商;
4、PPP提供了各种NCP(network control protocol)协议;如ipcp,ipxcp;用于个网络层参数的协商,更好地支持了网络层协议;
5、PPP提供了认证协议:CHAP(challenge-handshake authentication protocol)和PAP(password authentication protocol),更好的保证了网络的安全性;
6、无重传机制,网络开销小,速度快;
PPP组件
提示:PPP为了能够适应多种多样的链路类型,定义了链路控制协议LCP;LCP可以自动检测环路环境;协商链路参数,如最大数据包长度,使用何种认证协议等等;与其他链路层协议相比,ppp协议一个重要的特点是可以提供认证功能,链路两端可以协商使用何种认证协议来实施认证过程,只有认证成功之后才会建立连接;NCP主要用于协商网络层地址等参数;对于不同的网络层协议,对应着不同的NCP协议;例如IPCP用于协商控制ip协议,IPXIP用于协商控制IPX协议等;
PPP链路建立过程
提示:dead阶段是物理层不可用阶段,当通信双方的两端检测到物理线路激活时,就会从dead阶段迁移至establish阶段,即链路建立阶段;在establish阶段,ppp链路进行了LCP参数协商,协商内容包括最大接受单元MRU、认证方式、魔术字(magic number)等选项;LCP参数协商成功后会进入Opened状态,表示底层链路已经建立;在多数情况下,链路两端的设备是需要经过认证后才能够进入网络层协议阶段;ppp链路在缺省情况下是不要求进行认证的,如果要求认证,则在链路建立阶段必须指定认证协议。认证方式是在链路建立阶段进行协商的。如果在这个阶段再次受到了configure-request报文,则优惠返回到链路建立阶段;在network阶段,ppp链路进行NCP协商;通过NCP协商来选择和配置一个网络层协议并进行网络层参数协商。只有相应的网络层协议协商成功以后,该网络层协议才可以通过这条ppp链路进行数据的收发;如果在该阶段受到了configure-request报文,也会返回到链路建立阶段;ncp协商成功后,ppp链路将保持通信状态;在ppp运行过程中,可以随时中断连接,例如物理链路断开、认证失败、超时定时器时间、管理员通过配置关闭连接等等都可能导致链路进入terminate阶段;在terminate阶段,如果所有的资源都被释放,通信双方回到dead阶段,知道通信双方重新建立ppp连接;
LCP报文类型
1、configure-request(配置请求):链路层协商过程中发送到第一个报文,该报文表示点到点双方开始进行链路层参数协商;
2、configure-ack(配置响应):收到对端发来的configure-request报文,如果参数取值完全接受,则以此报文响应;
提示:ppp链路层封装协议,需要建立ppp链路的两端设备都必须发送configure-request报文,只有当每个设备都收到对端的configrue-ack类型的报文才表示链路的建立过程已经成功完成;
3、configure-nak(配置不响应):收到对端发来的configure-request报文,如果参数取值不被本端认可,则发送此报文并携带本端可接受的配置参数;
提示:configure-nak报文中包含RTB可以接受的取值(或取值范围),RTA收到configure-nak报文后,会将对应参数修改为RTB能接受的取值或取值范围,然后再次发送configure-request报文;
4、configure-reject(配置拒绝):收到对端发来的configure-request报文,如果本端不能识别对端发送的configure-request中的某些参数,则发送此报文并携带那些本端不能识别的配置参数;
提示:在重新发送的configure-request报文中就不会再包含对端不被识别的参数;
LCP协商参数
1、在vrp平台上,MRU参数使用接口上配置的最大传输单元(MTU)值表示。
2、常用的ppp认证协议有pap和chap,一条ppp链路的两端可以使用不同的认证协议认证对端,但是被认证方必须支持认证方要求使用的认证协议并正确配置用户名和密码等认证信息;
3、LCP使用魔术字来检测链路环路和其他异常情况。魔术字是一个随机产生的数字,随机机制需要保证两端产生相同魔术字的可能性为0;
4、收到一个configure-request报文之后,其中包含的魔术字需要和本地产生的魔术字进行对比,如果不同表示链路无环路,则使用configure-ack报文确认(如果其他参数也协商成功),表示魔术字协商成功。在后续发送的报文中,如果报文中有魔术字字段,则该字段设置为协商成功的魔术字;
IPCP静态地址协商
提示:IPCP使用和LCP相同的协商机制、报文类型、但IPCP并非调用LCP,只是工作过程、报文等和LCP相同;ip地址协商的方式有两种,一种是静态配置协商,一种是动态配置协商;上图就是静态配置协商示意图;
静态ip地址协商过程
1、通信双方都要发送configure-request报文,在此报文中包含本端配置的ip地址;
2、通信双方接收到对端发送的configure-request报文之后,检查其中的ip地址,如果ip地址是一个合法的单播ip地址,而且和本地配置的ip地址不同(不冲突),则认为对端可以使用该地址,回应一个configure-ack报文进行确认;
IPCP动态地址协商
动态ip协商ip地址过程
1、RTA向RB发送一条configure-request报文,此报文中会包含一个ip地址0.0.0.0,表示向对端请求ip地址;
2、RTB收到双数configure-request报文后,认为其中包含的ip地址(0.0.0.0)不合法,使用configure-nak回复包含一个新ip地址10.1.1.1给ra;
3、RTA收到此cinfigure-nak报文之后,更新本地ip地址,并重新发送一条configure-request报文,该报文包含新配置的ip地址10.1.1.1;
4、RTB收到configure-request报文之后,认为其中包含的ip地址为合法地址,回应一个configure-ack报文;
5、在向RTA回复configure-ack报文的同时,RTB也要向RTA发送configure-request报文,请求使用地址10.1.1.2;
6、RTA收到configure-request报文后,认为其中包含的ip地址为合法地址,回应一个configure-ack报文;
PPP配置
提示:ppp的配置和hdlc的配置一样,我们只需要在对应的串口接口模式下使用link-protocol 命令来修改对应的接口封装为ppp即可;华为ARG3系列路由器默认串行接口就是ppp协议封装;
PPP认证模式-PAP
提示:PAP认证协议为两次握手认证协议,密码以明文方式在链路上传输;首先LCP协商完成以后,认证方要求被认证通过方使用PAP进行认证;被认证方将配置的用户名和密码信息使用authenticate-request报文以明文方式发送给认证方;认证方收到被认证方发送到用户名和密码后,它会根据本地配置的用户名和密码被认证方发送过来的用户名和密码是否匹配;如果匹配则返回authenticate-ack报文,表示认证成功;否则返回authenticate-nak报文,表示认证失败;PAP认证协议可以做无限次的尝试(这意味则我们可以进行暴力破解),只有在链路建立的阶段进行认证,一旦链路建立成功,后续不再做认证;
实验:如下拓扑,配置PPP认证模式为PAP
在认证方创建用于ppp认证的用户名和密码
在认证方对应串口接口配置认证模式为pap
提示:建立好的链路如果中途修改认证,此时链路并不会立刻断开;要想生效,我们可以把对应接口宕掉在启动;
shutdown R1的s4/0/0接口,再启动
提示:可以看到当我们把s4/0/0接口shutdown后在启动,对应链路就断掉,重新建立链路时,提示我们R1的s4/0/0接口启用了PAP认证,认证失败的原因是对端没有启用PAP认证;
在被认证方配置pap认证
验证链路是否正常建立?
提示:可以看到链路正常建立;对应接口都up起来了;
抓包看看是否能够抓到用户名和密码?
提示:可以看到在链路上抓包可以抓到被认证方发送的PAP认证的用户名和密码都是使用明文进行传输;
验证链路是否正常建立
提示:在链路任意一段查看对应的接口信息,如果对应接口中显示LCP opened 和IPCP opened表示lcp和ipcp都建立和协商成功;
PPP认证模式-CHAP
提示:CHAP(Challenge Handshake Authentication Protocol)挑战/质询握手认证协议,以MD5来隐藏密码,三次握手机制,由认证方发起认证有效避免暴力破解,在链路建立成功后具有再次认证检测机制,目前在企业网的远程接入环境中用的比较常见。
CHAP认证过程需要进行三次报文的交互;为了匹配请求报文和回应报文,报文中包含有identifier字段,一次认真过程所使用的报文均使用相同的identifier信息;
认证过程
1、LCP协商完成后,认证方发送一个challenge报文给被认证方,报文中包含有id信息和一个随机产生的challenge字符串,此id即为后续报文所使用的id;
2、被认证方收到challenge报文之后,进行一次加密运算,运算公式为md5(id+密码+challenge随机字符串),意思是将id,密码和challenge三部分连成一个字符串,然后对该字符串进行md5运算,得到一个16字节长的摘要信息,然后将此摘要信息和端口上配置的CHAP用户名一起封装在response报文中发送给认证方;
3、认证方收到被认证方发送的response报文后,按照启用的用户名在本地查找对应的密码信息,得到密码信息后,进行一次加密运算,运算方式和被认证方运算方式相同,md5(id+密码+challenge随机字符串),其中id和challenge是一样的;然后对比加密运算后的摘要信息和Response报文中封装的摘要信息,如果两者一样,则表示认证成功,不一样则表示认证失败;
实验:将上述PAP认证模式更改为CHAP认证模式
在认证方的对应接口下修改认证模式为CHAP
提示:认证的用户名和密码,如果存在则不需再创建,如果没有需要创建;其次用户名和密码都是在认证方创建;
在被认证方的对应接口下配置CHAP认证信息
提示:PAP的认证信息其实可以不用删除;
重启端口,让其配置生效
验证链路是否建立
抓包查看认证过程
认证成功抓包
认证失败抓包
提示:可以看到CHAP认证每次都会经历三次握手;认证成功对应给出欢迎消息,认证失败给出非法的用户或密码;
HCNA Routing&Switching之广域网协议HDLC和PPP的更多相关文章
- HCNA Routing&Switching之PPPoE协议
前文我们了解了广域网中的HDLC和PPP协议相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15174240.html:今天我们来聊一聊PPPoE协议相 ...
- HCNA Routing&Switching之动态路由协议OSPF DR和BDR
前文我们了解了OSPF建立邻居关系的条件,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15032907.html:今天我们来聊一聊OSPF中的DR和BDR: ...
- HCNA Routing&Switching之动态路由协议RIP
前文我们了解了动态路由的基本概念,以及动态路由和静态路由的区别,优缺点,动态路由的分类,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/14995317.html ...
- HCNA Routing&Switching之静态路由
前文我们聊到了路由的相关概念和路由基础方面的话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/14947897.html:今天我们聊聊静态路由相关话题: 回顾 ...
- HCNA Routing&Switching之路由基础
在开始聊路由之前,我们首先要明白在网络通讯里,什么是路由?什么是路由表.路由器以及网关的相关术语:路由简单讲就是指网络数据包从源头到目标的路径,主要用来为不同网络间通讯提供数据包转发依据:路由表就是多 ...
- HCNA Routing&Switching之动态路由基本概念
前文我们了解了静态路由的相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/14965433.html:今天我们来聊一聊动态路由相关概念: 首先我们要清楚什 ...
- HCNA Routing&Switching之动态路由协议OSPF基础(二)
前文我们主要了解了OSPF的区域.区域分类.路由器类型.OSPF的核心工作流程,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/15025533.html:今天 ...
- HCNA Routing&Switching之动态路由协议OSPF基础(一)
前文我们了解了基于路径矢量算法的动态路由协议RIP防环以及度量值的修改相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15012895.html:今天我 ...
- HCNA Routing&Switching之交换技术基础
什么是交换机?顾名思义,交换机就是用来数据包交换的:广泛用于终端接入:它的前身是hub(集线器),hub是一个古老的设备,它的作用也是用于终端接入,但hub有一个最大的缺点是它不能隔离冲突域:所谓冲突 ...
随机推荐
- XCTF easyGo
拖入ida,发现符号表需要还原一下,载入一个还原符号表的脚本. go这个语言就有点恶心,字符串后面没有反斜杆零,ida识别出来,字符串就会挤在一堆,就很难看,看了某位师傅的wp,觉得这方法不错,就记录 ...
- buu pyre
一.下载附件是是pyc的字节码文件,找个在线网站反编译一下 思路还是挺清晰: 先逆着求出code, 这里就是求余,有点麻烦,那个+128%128其实没啥用的,省略就好了 算法里面再处理一下细节,跑一下 ...
- wumei-smart智能家居开原项目
一.项目简介 物美智能(wumei-smart)]是一套开源的软硬件系统,可用于二次开发和学习,快速搭建自己的智能家居系统. 硬件工程师可以把自己的设备集成到系统:软件工程师可以使用项目中的设备熟悉软 ...
- Djiango 连接数据库mysql 的基本数据操作
1.单表操作 (1) .增加操作 1 # 增加操作 2 def add_person(request): 3 # 1.使用save() 方法 4 # person_obj = models.Perso ...
- ARTS起始篇
ARTS简要说明(每周需要完成以下四项): Algorithm:每周至少做一道 leetcode 的算法题,编程训练.刻意练习. Review:需要阅读并点评至少一篇英文技术文章,这个是四项里面对我最 ...
- c++ vector用法详解
1. 定义: 向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)可以认为是一个动态数组,其中一个vector中的所有对象都必须是同一种类型的. 2. 构造函 ...
- python02篇 字典、元组、切片
一.字典 1.1 字典的常用方法 # 字典 数据类型 {} key-value # list是挨个循环查找,字典是根据key查找value,比list遍历效率高 d = { 'username': ' ...
- Django基础005-Django开发的整体过程
1.写views views.py代码块 1.在前端以/article/{{ article.id }}这种方式请求后台, 参数配置在urls.py中path('category/<int:id ...
- Java中的基本数据类型和引用数据类型的区别
一.数据类型 Java中的数据类型分为两大类,基本数据类型和引用数据类型. 1.基本数据类型 基本数据类型只有8种,可按照如下分类 ①整数类型:long.int.short.byte ②浮点类型:fl ...
- 【012】JavaSE面试题(十二):多线程(2)
第一期:Java面试 - 100题,梳理各大网站优秀面试题.大家可以跟着我一起来刷刷Java理论知识 [012] - JavaSE面试题(十二):多线程(2) 第1问:多线程的创建方式? 方式一:继承 ...