- MSTP拓扑计算
- 增强P/A机制
- 园区网
- E-trunk
- PPP协议
- Ppoe
- Ppp-mp与IP-trunk
MSTP拓扑计算
在mstp中又这么几个概念:
- CST:公共生成树
- IST:内部生成树,实例0的生成树
- SST:单生成树,一个域内只有一个设备或运行了STP或RSTP的设备会被当做SST
- CIST:公共与内部生成树
- 总根:网络中BID最小的设备
- 域根:MST域内距离总根最近的设备
- 主桥:在IST中距离总根最近的设备,其实也是个域根
- master端口:主桥上距离总根最优的端口
在MSTP中拓扑计算时会先选举总根,然后再选举域根,域根的确定是MSTP拓扑计算的难点,之后再计算CST和IST,最终算出CIST。
如图:
这个网络的拓扑计算中,首先选举总根,总根是整个网络中BID最优的设备,优先级默认都是32768,所以比较mac地址,mac地址小的最优。所以根据选举会选择LSW10为总根,在该设备上,所有的端口都是指定端口。
总根选举完成之后,每个域内都会选举域根,域根是域内到总根最近的那台设备,首先会比较ERPC,外部路径开销,很明显,实例 1和实例 4的域根分别为lsw4和lsw13
实例1的域根:
实例4的域根:
接下来就是选举实例3这个区域内的总根,该区域中去往总根最近的设备是LSW6,所以LSW6是域根。
域根选举完成之后就是CST的计算,他的计算和普通STP计算方式一样。在LSW6上,他会从两个设备收到相同的BPDU,并且ERPC都一样。此时他会比较指定桥发送的BID,越小越优先。从LSW4收到的BID中mac地址为4c1f-cc16-732f,从LSW13中收到的BID中mac地址为4c1f-cc8f-1715,所以4c1f-cc16-732f要小,所以LSW6会阻塞E0/0/3口:
CST这样就计算出来了,在计算内部的生成树的时候,他的计算方式和普通STP计算方式一样,拿总根域举例。
总根是LSW10设备。他的两个接口均为指定口,LSW9和LSW12的上行口均为根端口下行口均为指定端口,主要是在LSW11设备上会选举出一个根端口,阻塞一个端口。她可根据收到BPDU中的指定BID做出选择,优先级一致比较mac地址,lsw9的MAC为4c1f-ccb3-5058,lsw12的MAC为4c1f-cc65-20a7,所以LSW12的mac地址小,所以e0/0/2口为根端口,e0/0/1为阻塞端口。
如果是这种情况的时候LSW6从LSW4的两条链路收到相同的BPDU,ERPC相同。指定BID也相同。
此时就会比较指定桥的接口ID,LSW4的4、5口肯定都是指定端口。所以LSW6要在4、5口上阻塞,LSW6从e0/0/5口收到的指定接口ID要更优,所以阻塞LSW6的e0/0/4接口。
还有种情况是这样的:LSW4和LSW6的中间连接一个hub,LSW6连两根线
此时LSW6从两条线收到的指定BID和指定PID都一样,此时就会比较本地的PID,会阻塞接口号大的,所以e0/0/6会被阻塞。
增强P/A机制
在华为设备中,默认采用增强P/A机制,即在发送proposal置位的BPDU请求的时候紧跟着发送一个A置位的BPDU作为回应。对方在收到P置位的BPDU的同时紧接着又收到了A置位的BPDU,所以它的这个端口能立刻进入转发状态。随后该设备回复一个A置位的BPDU,对方设备收到后也接着进入转发状态。
但注意的是该增强P/A机制是华为的标准,并非工业标准,所以华为设备在与其他厂商设备共存的时候需要改成普通p/a机制。Stp no-agreement-check
园区网
在传统网络中园区网的方案多采用MSTP+VRRP技术,但是这样的话部署复杂,配置复杂,并且ip地址使用量比较多。在新一代的园区网方案则是使用istack+CSS+e-trunk技术。逻辑上更简单,配置也简单,而且昨晚堆叠之后设备天然无环路,无需再部署STP等破换协议。而且还节约IP地址。
同时堆叠之后设备还具有冗余功能,一台设备故障之后不会影响整体网络。同时链路捆绑技术还可以实现负载分担。
E-trunk
E-trunk又叫链路捆绑他是运行在MAC子层和LLC子层之间。属于数据链路层技术。802.3帧中的LLC类似于以太网二帧的type字段。用于标识上层协议。在以太网二帧中,标识ip时候type值为:0x0800,arp协议时则是:0x0806 标识PPP协议则是0x8848。
E-trunk有以下几个特点:
- 提高可靠性
- 增加带宽
- 负载分担
转发原理:
E-trunk在内部会维护一张映射表,根据该映射表来指导数据转发。该表有以下两个参数组成:
- 哈希值:根据数据的ip和mac哈希得出
- 接口号:和加入到e-trunk中的接口有关
比如计算出哈希值为3,3对应的接口为4号口,所以该数据就会被从4号口转发。
E-trunk的实现方式有两种:
- 手动负载分担
- LACP自动负载分担
手动负载分担是手动配置接口加入到的e-trunk,手动接口绑定在本地有效,当一条链路down掉之后对方设备则无法感知该接口故障,就会造成流量丢失。为了解决这一问题,出现了LACP协议。
LACP自动负载分担的工作方式是双方只有在接收到LACP的消息之后才会认为链路状态正常,当链路出现问题后它会做出自动的调整,并且可以确定主动端与活动链路。该实现需要在接口上配置优先级来确立,默认优先级为32768,优先级越小越优先。并且可以配置活动链路数,默认是8条。
配置lacp负载分担,并时LSW1为主动端,活动链路数为2,设置接口1的优先级更优。
[Huawei]lacp priority 100
[Huawei-Eth-Trunk1]max active-linknumber 2
[Huawei-GigabitEthernet0/0/1]lacp priority 100
PPP协议
PPP:peer to peer protocol
PPP的三大组件:
- LCP:定义、协商、测试数据链路层连接
- NCP:包含一组协议,用于网络层协议的建立和参数协商
- 数据封装
帧封装格式:
ppp的头部有9个字节,所以传输效率要比以太网的高。
以太网帧帧格式:
PPP建链过程:
- 链路开始或结束的阶段是dead阶段,当链路up之后,会进入establish阶段
- 在该阶段会进行LCP的协商,主要协商三个参数:MRU、魔术字、认证
- lac协商成功之后,链路opend状态,表示LAC协商完成,协商失败的话直接返回dead阶段。如果没有配置认证会直接进入network阶段
- 如果配置了认证,如pap或chap认证,只有认证成功之后才会进入network阶段,否则会进入terminate阶段,关闭链路。
- 在network阶段会进行NACP的协商,比如IPCP的协商,用于检测IP地址是否冲突,协商成功之后会进入IPCP opend状态
- 当链路关闭时则会进入terminate阶段,该阶段关闭链路,关闭之后会链路进入down状态,返回dead阶段
LACP三个参数:
- MRU:最大接收单元,默认为MTU,不一致时兼容最小MRU
- 认证类型:默认不开启,有PAP和CHAP两种类型
- 魔术字:用于防环,默认开启,当接收到的数据帧中的魔术字和自身MRU一致时则表示发生了环路
LACP协商时候用到的报文:
- configure-request 请求数据参数
- configure-ack 表示完全接受对方的参数和取值
- configure-nak 请求的参数不合法
- configure-reject 请求的参数不识别
没有配置认证时候的configure-request:
当一方配置了认证,另一方不配认证的时候会发送configure-reject,不识别。
之后链路就会关闭,日志:
NCP协商
ncp协商分为两种:
- 静态协商:用于双方手动配置IP地址的情况
- 动态协商:用于一方配置了IP地址,而另一方发起地址为0.0.0.0的协商请求的方式,可以实现IP地址自动分配
静态协商
静态的情况下,如果配置的地址冲突:
则IPCP协商失败,会:
动态协商
可选择地址池的地址,也可以手动指定。
另一方在配置IP地址试选择PPP协商:
接口up之后,首先请求方会发送一个地址为0.0.0.0的请求:
被请求方收到请求之后发现地址为0.0.0.0的,不合法,所以要回复一个NAK,里面携带了要分配给对方的IP地址。
请求方收到这个地址之后,再次以这个地址发起请求
被请求方收到请求后检查地址是否冲突,如果没有冲突,则标识该地址可以。回复ACK
此时的IPCP就协商成功。
请求方此时就获得到了IP地址,而且是个32位地址:
在现网环境中,ppp链路一般都会配置成30位掩码地址,这是因为,如果配置了Ip地址之后,ppp链路会默认为地址产生一条本地32位主机路由,和一条对方的32位主机路由,如果配置成24位掩码,ppp就会除了32位主机路由之外,还会有一条24位的路由和一条.255的广播下一跳指向对方。
在进行数据访问的时候,如果访问了一个该网段内不存在的地址,就会产生环路:
所以为了避免这种情况的发生,一般情况下建议配置ppp的IP地址的时候配置30位掩码,因为30位掩码只有两个地址。
PPP认证
ppp的认证分为两种,一种是PAP认证,一种是CHAP认证。
PAP认证
pap认证只需要两个报文就可以完成,一个被认证方发起的authentication请求,一个认证方发的authentication确认,不过它在传输用户名和密码的时候是以明文的形式传输的,安全性并不高,但是他的过程简单。
过程:
- 认证方的aaa下要保存被认证方的用户名和密码,接接口下开启PAP认证功能。
- 被认证方的接口下要配置用户名和密码
抓包:被认证方发起的authentication请求,用户名和密码都是以明文的形式携带
- 如果认证成功,则认证方发送authentication-ack报文
- 否则就会发送authentication-nak报文
如果失败,被认证方则连发三次
CHAP认证
chap叫做挑战握手认证协议,他是一个三次握手的协议,并且是由认证方主动发起的challenge报文,内含ID+随机数,用户名可选。被认证方收到挑战报文之后,会将ID+随机数+密码做一个哈希运算,得到一个128位的摘要信息,再加上自己的用户名发送给对方。由于他们在网上传输的是经过哈希运算后的数据而不是明文数据,所以它的安全性要比PAP的高。
过程:
- 认证方主动发起challenge挑战握手报文,内含随机数+ID+用户名(可选)
- 被认证方收到数据之后会根据接口下配置的用户密码加上认证方发来的ID和随机数做一个哈希运算,最后将哈希值+用户名以response报文再发给认证方。
- 认证方收到了哈希值和用户名之后,会用报文中的用户名找到自身的密码+随机数+ID进行哈希运算,算出哈希值后和被认证方发来的哈希值进行比对,如果数据一致则表示认证成功,否则则认证失败。
PPPoE
Pppoe是将PPP帧封装到以太网帧中使用的一种技术。为什么会有pppoe呢? 这是因为现在使用最广泛的网络就是以太网,因为以太网他是MA的网络环境,可以连接许多用户,因为这个特点被广泛使用,虽然以太网可以连接更多的用户,但是它还有个缺点,那就是不支持链路认证。而PPP又是唯一可以支持链路认证的协议,但是PPP它仅支持p2p网络环境,不能应用到连接多用户的环境中,结合这两种技术的优点之后,pppoe技术出现,他可以支持在MA环境中链路认证,可以实现计费审计等功能,现在被广泛应用在拨号上网。
既然是PPP帧放到以太网帧中,首先了解一下包结构,拿ping包来举例:
pppoe的服务端配置
- 配置地址池
ip pool hcie
gateway-list 192.168.1.254
network 192.168.1.0 mask 255.255.255.0
- 创建虚模板并配置地址
interface Virtual-Template1
ip address 192.168.1.254 255.255.255.0
- aaa下创建一个用户,用于ppp认证
[server]aaa
[server-aaa]local-user hcie password cipher hcie
Info: Add a new user.
[server-aaa]local-user hcie service-type ppp
- 虚模板下配置认证
[server-Virtual-Template1]ppp authentication-mode chap(或pap)
- 配置动态分配ip(基于地址池)
[server-Virtual-Template1]remote address pool hcie
- 以太网接口下绑定虚模板
[server-GigabitEthernet0/0/0]pppoe-server bind virtual-template 1
pppoe的客户端配置
- 创建拨号接口,并修改协议类型为ppp
interface Dialer1
link-protocol ppp
- 拨号接口里配置用户名和密码
[client-Dialer1]ppp chap user hcie
[client-Dialer1]ppp chap password cipher hcie
- 创建拨号用户(虽然不知道有什么用途)
[client-Dialer1]dialer user hcie
- 创建拨号绑定ID(接口下绑定时调用)
[client-Dialer1]dialer bundle 1
- 创建拨号组(便于管理)
[client-Dialer1]dialer-group 1
- 配置地址为自动协商(自动获取地址)
[client-Dialer1]ip address ppp-negotiate
- 系统下创建拨号规则,并允许拨号1,默认动作是拒绝所有
dialer-rule
dialer-rule 1 ip permit
- 以太网接口下绑定拨号接口
[client-GigabitEthernet0/0/0]pppoe-client dial-bundle-number 1
pppoe的工作过程
pppoe的工作过程分为三步:discover发现阶段、session回话阶段、关闭阶段
发现阶段用到的报文有四个:
- PADI:PPP活动发现初始化(初始化数据)
- PADO:PPP活动发现提供(服务器发送,如果同时受到多个,客户端选择最先收到的那个,此时也能得到服务器的MAC)
- PADR:PPP活动发现请求(向服务器请求会话ID)
- PADS:PPP活动发现会话(服务器将会话ID提供给客户端)
会话阶段和PPP的建链过程是一样的,协商LCP、认证、NCP(自动获取IP)
关闭阶段就是发一个关闭请求,对方回一个确认,连接就关闭了。主要是会话阶段。
Discover阶段工作过程:
- 首先客户端以广播的形式发生一个PADI报文,session ID为空,用于发现网络中的pppoe Server
- 当网络中的pppoe Server收到PADI报文之后会以单播的形式向客户端发送一个PADO(因为客户端的源MAC可以得知)
- 客户端收到了offer之后会单播发送PADR请求pppoe服务器的session ID
- pppoe服务器收到客户端发送的请求之后会单播回复一个PADS,内含会话ID,此时的会话ID发生改变,客户端得到会话ID之后就可以和服务器进入下一个阶段--会话阶段。
Session阶段工作过程:
在该阶段中,首先会进行LCP的协商,协商链路层参数,只是数据的封装有所改变
- configure-request协商LCP参数(MRU、魔术字、认证)
- 如果服务器接收参数,就回复一个configure-ack,如果参数不合法,就回复一个NAK,此时服务器回复了一个NAK
因为在pppoe中,IP-MTU的值是1492,这是因为默认情况下MTU为1500,由于数据前面封装了2字节的PPP投标和6字节的PPPoe头部,所以他需要减去8,最终得到1492 。
- 接下来就是认证过程
- 认证成功之后进行IPCP的协商,该过程和PPP的IPCP协商过程一样,最终得到一个32位的IP地址
并最终可以与服务器进行通信
PPP-MP与IP-trunk
这两种技术是网络层链路的捆绑技术,和E-trunk一样,他们都可以提高带宽和链路的利用率。一般情况下PPP-MP常用与pos口的捆绑,他在PPP的LCP协商时候会有所不同,因为链路是一条捆绑链路,所以在协商的时候会协商和MP相关的参数,同样的,NCP也会不同。
PPP-MP实现的方式有两种
- MP-group:类似于接口的形式 mp-group 0/0/0
- 虚拟模板:虚模板比较强大可以用于pppoe、pppoa、pppofr
不过这两种形式各有各的特点:当使用MP-group时,PPP的认证仍然是配置在物理接口下,当接口数量多的时候配置比较复杂,如果是使用虚模板的时候,则认证可以配置在虚模板的接口下。
Mp-group形式:
配置完成之后,LCP协商完成后,除了进入LCPopend状态之外,也会进入mp-opend
在LCP的协商的时候,会多了一些这些东西。MP的MTU和MP-GROUP的标识
但是在MP-GROUP下是无法配置用户名和密码的。
虚模板形式:
配置和MP-group略有不同,但都是绑定的技术,区别是它可以直接在虚模板里配置ppp的认证
IP-trunk形式:
常用与serial口的捆绑,但是它只支持HDLC的封装方式,所以在配置之前需要将物理链路的协议类型进行修改。
然后将接口加入到Iptrunk:
[Huawei-Ip-Trunk1]trunkport Serial 0/0/0
[Huawei-Ip-Trunk1]trunkport Serial 0/0/1
- MSTP拓扑计算
- 增强P/A机制
- 园区网
- E-trunk
- PPP协议
- Ppoe
- Ppp-mp与IP-trunk
MSTP拓扑计算
在mstp中又这么几个概念:
- CST:公共生成树
- IST:内部生成树,实例0的生成树
- SST:单生成树,一个域内只有一个设备或运行了STP或RSTP的设备会被当做SST
- CIST:公共与内部生成树
- 总根:网络中BID最小的设备
- 域根:MST域内距离总根最近的设备
- 主桥:在IST中距离总根最近的设备,其实也是个域根
- master端口:主桥上距离总根最优的端口
在MSTP中拓扑计算时会先选举总根,然后再选举域根,域根的确定是MSTP拓扑计算的难点,之后再计算CST和IST,最终算出CIST。
如图:
这个网络的拓扑计算中,首先选举总根,总根是整个网络中BID最优的设备,优先级默认都是32768,所以比较mac地址,mac地址小的最优。所以根据选举会选择LSW10为总根,在该设备上,所有的端口都是指定端口。
总根选举完成之后,每个域内都会选举域根,域根是域内到总根最近的那台设备,首先会比较ERPC,外部路径开销,很明显,实例 1和实例 4的域根分别为lsw4和lsw13
实例1的域根:
实例4的域根:
接下来就是选举实例3这个区域内的总根,该区域中去往总根最近的设备是LSW6,所以LSW6是域根。
域根选举完成之后就是CST的计算,他的计算和普通STP计算方式一样。在LSW6上,他会从两个设备收到相同的BPDU,并且ERPC都一样。此时他会比较指定桥发送的BID,越小越优先。从LSW4收到的BID中mac地址为4c1f-cc16-732f,从LSW13中收到的BID中mac地址为4c1f-cc8f-1715,所以4c1f-cc16-732f要小,所以LSW6会阻塞E0/0/3口:
CST这样就计算出来了,在计算内部的生成树的时候,他的计算方式和普通STP计算方式一样,拿总根域举例。
总根是LSW10设备。他的两个接口均为指定口,LSW9和LSW12的上行口均为根端口下行口均为指定端口,主要是在LSW11设备上会选举出一个根端口,阻塞一个端口。她可根据收到BPDU中的指定BID做出选择,优先级一致比较mac地址,lsw9的MAC为4c1f-ccb3-5058,lsw12的MAC为4c1f-cc65-20a7,所以LSW12的mac地址小,所以e0/0/2口为根端口,e0/0/1为阻塞端口。
如果是这种情况的时候LSW6从LSW4的两条链路收到相同的BPDU,ERPC相同。指定BID也相同。
此时就会比较指定桥的接口ID,LSW4的4、5口肯定都是指定端口。所以LSW6要在4、5口上阻塞,LSW6从e0/0/5口收到的指定接口ID要更优,所以阻塞LSW6的e0/0/4接口。
还有种情况是这样的:LSW4和LSW6的中间连接一个hub,LSW6连两根线
此时LSW6从两条线收到的指定BID和指定PID都一样,此时就会比较本地的PID,会阻塞接口号大的,所以e0/0/6会被阻塞。
增强P/A机制
在华为设备中,默认采用增强P/A机制,即在发送proposal置位的BPDU请求的时候紧跟着发送一个A置位的BPDU作为回应。对方在收到P置位的BPDU的同时紧接着又收到了A置位的BPDU,所以它的这个端口能立刻进入转发状态。随后该设备回复一个A置位的BPDU,对方设备收到后也接着进入转发状态。
但注意的是该增强P/A机制是华为的标准,并非工业标准,所以华为设备在与其他厂商设备共存的时候需要改成普通p/a机制。Stp no-agreement-check
园区网
在传统网络中园区网的方案多采用MSTP+VRRP技术,但是这样的话部署复杂,配置复杂,并且ip地址使用量比较多。在新一代的园区网方案则是使用istack+CSS+e-trunk技术。逻辑上更简单,配置也简单,而且昨晚堆叠之后设备天然无环路,无需再部署STP等破换协议。而且还节约IP地址。
同时堆叠之后设备还具有冗余功能,一台设备故障之后不会影响整体网络。同时链路捆绑技术还可以实现负载分担。
E-trunk
E-trunk又叫链路捆绑他是运行在MAC子层和LLC子层之间。属于数据链路层技术。802.3帧中的LLC类似于以太网二帧的type字段。用于标识上层协议。在以太网二帧中,标识ip时候type值为:0x0800,arp协议时则是:0x0806 标识PPP协议则是0x8848。
E-trunk有以下几个特点:
- 提高可靠性
- 增加带宽
- 负载分担
转发原理:
E-trunk在内部会维护一张映射表,根据该映射表来指导数据转发。该表有以下两个参数组成:
- 哈希值:根据数据的ip和mac哈希得出
- 接口号:和加入到e-trunk中的接口有关
比如计算出哈希值为3,3对应的接口为4号口,所以该数据就会被从4号口转发。
E-trunk的实现方式有两种:
- 手动负载分担
- LACP自动负载分担
手动负载分担是手动配置接口加入到的e-trunk,手动接口绑定在本地有效,当一条链路down掉之后对方设备则无法感知该接口故障,就会造成流量丢失。为了解决这一问题,出现了LACP协议。
LACP自动负载分担的工作方式是双方只有在接收到LACP的消息之后才会认为链路状态正常,当链路出现问题后它会做出自动的调整,并且可以确定主动端与活动链路。该实现需要在接口上配置优先级来确立,默认优先级为32768,优先级越小越优先。并且可以配置活动链路数,默认是8条。
配置lacp负载分担,并时LSW1为主动端,活动链路数为2,设置接口1的优先级更优。
[Huawei]lacp priority 100
[Huawei-Eth-Trunk1]max active-linknumber 2
[Huawei-GigabitEthernet0/0/1]lacp priority 100
PPP协议
PPP:peer to peer protocol
PPP的三大组件:
- LCP:定义、协商、测试数据链路层连接
- NCP:包含一组协议,用于网络层协议的建立和参数协商
- 数据封装
帧封装格式:
ppp的头部有9个字节,所以传输效率要比以太网的高。
以太网帧帧格式:
PPP建链过程:
- 链路开始或结束的阶段是dead阶段,当链路up之后,会进入establish阶段
- 在该阶段会进行LCP的协商,主要协商三个参数:MRU、魔术字、认证
- lac协商成功之后,链路opend状态,表示LAC协商完成,协商失败的话直接返回dead阶段。如果没有配置认证会直接进入network阶段
- 如果配置了认证,如pap或chap认证,只有认证成功之后才会进入network阶段,否则会进入terminate阶段,关闭链路。
- 在network阶段会进行NACP的协商,比如IPCP的协商,用于检测IP地址是否冲突,协商成功之后会进入IPCP opend状态
- 当链路关闭时则会进入terminate阶段,该阶段关闭链路,关闭之后会链路进入down状态,返回dead阶段
LACP三个参数:
- MRU:最大接收单元,默认为MTU,不一致时兼容最小MRU
- 认证类型:默认不开启,有PAP和CHAP两种类型
- 魔术字:用于防环,默认开启,当接收到的数据帧中的魔术字和自身MRU一致时则表示发生了环路
LACP协商时候用到的报文:
- configure-request 请求数据参数
- configure-ack 表示完全接受对方的参数和取值
- configure-nak 请求的参数不合法
- configure-reject 请求的参数不识别
没有配置认证时候的configure-request:
当一方配置了认证,另一方不配认证的时候会发送configure-reject,不识别。
之后链路就会关闭,日志:
NCP协商
ncp协商分为两种:
- 静态协商:用于双方手动配置IP地址的情况
- 动态协商:用于一方配置了IP地址,而另一方发起地址为0.0.0.0的协商请求的方式,可以实现IP地址自动分配
静态协商
静态的情况下,如果配置的地址冲突:
则IPCP协商失败,会:
动态协商
可选择地址池的地址,也可以手动指定。
另一方在配置IP地址试选择PPP协商:
接口up之后,首先请求方会发送一个地址为0.0.0.0的请求:
被请求方收到请求之后发现地址为0.0.0.0的,不合法,所以要回复一个NAK,里面携带了要分配给对方的IP地址。
请求方收到这个地址之后,再次以这个地址发起请求
被请求方收到请求后检查地址是否冲突,如果没有冲突,则标识该地址可以。回复ACK
此时的IPCP就协商成功。
请求方此时就获得到了IP地址,而且是个32位地址:
在现网环境中,ppp链路一般都会配置成30位掩码地址,这是因为,如果配置了Ip地址之后,ppp链路会默认为地址产生一条本地32位主机路由,和一条对方的32位主机路由,如果配置成24位掩码,ppp就会除了32位主机路由之外,还会有一条24位的路由和一条.255的广播下一跳指向对方。
在进行数据访问的时候,如果访问了一个该网段内不存在的地址,就会产生环路:
所以为了避免这种情况的发生,一般情况下建议配置ppp的IP地址的时候配置30位掩码,因为30位掩码只有两个地址。
PPP认证
ppp的认证分为两种,一种是PAP认证,一种是CHAP认证。
PAP认证
pap认证只需要两个报文就可以完成,一个被认证方发起的authentication请求,一个认证方发的authentication确认,不过它在传输用户名和密码的时候是以明文的形式传输的,安全性并不高,但是他的过程简单。
过程:
- 认证方的aaa下要保存被认证方的用户名和密码,接接口下开启PAP认证功能。
- 被认证方的接口下要配置用户名和密码
抓包:被认证方发起的authentication请求,用户名和密码都是以明文的形式携带
- 如果认证成功,则认证方发送authentication-ack报文
- 否则就会发送authentication-nak报文
如果失败,被认证方则连发三次
CHAP认证
chap叫做挑战握手认证协议,他是一个三次握手的协议,并且是由认证方主动发起的challenge报文,内含ID+随机数,用户名可选。被认证方收到挑战报文之后,会将ID+随机数+密码做一个哈希运算,得到一个128位的摘要信息,再加上自己的用户名发送给对方。由于他们在网上传输的是经过哈希运算后的数据而不是明文数据,所以它的安全性要比PAP的高。
过程:
- 认证方主动发起challenge挑战握手报文,内含随机数+ID+用户名(可选)
- 被认证方收到数据之后会根据接口下配置的用户密码加上认证方发来的ID和随机数做一个哈希运算,最后将哈希值+用户名以response报文再发给认证方。
- 认证方收到了哈希值和用户名之后,会用报文中的用户名找到自身的密码+随机数+ID进行哈希运算,算出哈希值后和被认证方发来的哈希值进行比对,如果数据一致则表示认证成功,否则则认证失败。
PPPoE
Pppoe是将PPP帧封装到以太网帧中使用的一种技术。为什么会有pppoe呢? 这是因为现在使用最广泛的网络就是以太网,因为以太网他是MA的网络环境,可以连接许多用户,因为这个特点被广泛使用,虽然以太网可以连接更多的用户,但是它还有个缺点,那就是不支持链路认证。而PPP又是唯一可以支持链路认证的协议,但是PPP它仅支持p2p网络环境,不能应用到连接多用户的环境中,结合这两种技术的优点之后,pppoe技术出现,他可以支持在MA环境中链路认证,可以实现计费审计等功能,现在被广泛应用在拨号上网。
既然是PPP帧放到以太网帧中,首先了解一下包结构,拿ping包来举例:
pppoe的服务端配置
- 配置地址池
ip pool hcie
gateway-list 192.168.1.254
network 192.168.1.0 mask 255.255.255.0
- 创建虚模板并配置地址
interface Virtual-Template1
ip address 192.168.1.254 255.255.255.0
- aaa下创建一个用户,用于ppp认证
[server]aaa
[server-aaa]local-user hcie password cipher hcie
Info: Add a new user.
[server-aaa]local-user hcie service-type ppp
- 虚模板下配置认证
[server-Virtual-Template1]ppp authentication-mode chap(或pap)
- 配置动态分配ip(基于地址池)
[server-Virtual-Template1]remote address pool hcie
- 以太网接口下绑定虚模板
[server-GigabitEthernet0/0/0]pppoe-server bind virtual-template 1
pppoe的客户端配置
- 创建拨号接口,并修改协议类型为ppp
interface Dialer1
link-protocol ppp
- 拨号接口里配置用户名和密码
[client-Dialer1]ppp chap user hcie
[client-Dialer1]ppp chap password cipher hcie
- 创建拨号用户(虽然不知道有什么用途)
[client-Dialer1]dialer user hcie
- 创建拨号绑定ID(接口下绑定时调用)
[client-Dialer1]dialer bundle 1
- 创建拨号组(便于管理)
[client-Dialer1]dialer-group 1
- 配置地址为自动协商(自动获取地址)
[client-Dialer1]ip address ppp-negotiate
- 系统下创建拨号规则,并允许拨号1,默认动作是拒绝所有
dialer-rule
dialer-rule 1 ip permit
- 以太网接口下绑定拨号接口
[client-GigabitEthernet0/0/0]pppoe-client dial-bundle-number 1
pppoe的工作过程
pppoe的工作过程分为三步:discover发现阶段、session回话阶段、关闭阶段
发现阶段用到的报文有四个:
- PADI:PPP活动发现初始化(初始化数据)
- PADO:PPP活动发现提供(服务器发送,如果同时受到多个,客户端选择最先收到的那个,此时也能得到服务器的MAC)
- PADR:PPP活动发现请求(向服务器请求会话ID)
- PADS:PPP活动发现会话(服务器将会话ID提供给客户端)
会话阶段和PPP的建链过程是一样的,协商LCP、认证、NCP(自动获取IP)
关闭阶段就是发一个关闭请求,对方回一个确认,连接就关闭了。主要是会话阶段。
Discover阶段工作过程:
- 首先客户端以广播的形式发生一个PADI报文,session ID为空,用于发现网络中的pppoe Server
- 当网络中的pppoe Server收到PADI报文之后会以单播的形式向客户端发送一个PADO(因为客户端的源MAC可以得知)
- 客户端收到了offer之后会单播发送PADR请求pppoe服务器的session ID
- pppoe服务器收到客户端发送的请求之后会单播回复一个PADS,内含会话ID,此时的会话ID发生改变,客户端得到会话ID之后就可以和服务器进入下一个阶段--会话阶段。
Session阶段工作过程:
在该阶段中,首先会进行LCP的协商,协商链路层参数,只是数据的封装有所改变
- configure-request协商LCP参数(MRU、魔术字、认证)
- 如果服务器接收参数,就回复一个configure-ack,如果参数不合法,就回复一个NAK,此时服务器回复了一个NAK
因为在pppoe中,IP-MTU的值是1492,这是因为默认情况下MTU为1500,由于数据前面封装了2字节的PPP投标和6字节的PPPoe头部,所以他需要减去8,最终得到1492 。
- 接下来就是认证过程
- 认证成功之后进行IPCP的协商,该过程和PPP的IPCP协商过程一样,最终得到一个32位的IP地址
并最终可以与服务器进行通信
PPP-MP与IP-trunk
这两种技术是网络层链路的捆绑技术,和E-trunk一样,他们都可以提高带宽和链路的利用率。一般情况下PPP-MP常用与pos口的捆绑,他在PPP的LCP协商时候会有所不同,因为链路是一条捆绑链路,所以在协商的时候会协商和MP相关的参数,同样的,NCP也会不同。
PPP-MP实现的方式有两种
- MP-group:类似于接口的形式 mp-group 0/0/0
- 虚拟模板:虚模板比较强大可以用于pppoe、pppoa、pppofr
不过这两种形式各有各的特点:当使用MP-group时,PPP的认证仍然是配置在物理接口下,当接口数量多的时候配置比较复杂,如果是使用虚模板的时候,则认证可以配置在虚模板的接口下。
Mp-group形式:
配置完成之后,LCP协商完成后,除了进入LCPopend状态之外,也会进入mp-opend
在LCP的协商的时候,会多了一些这些东西。MP的MTU和MP-GROUP的标识
但是在MP-GROUP下是无法配置用户名和密码的。
虚模板形式:
配置和MP-group略有不同,但都是绑定的技术,区别是它可以直接在虚模板里配置ppp的认证
IP-trunk形式:
常用与serial口的捆绑,但是它只支持HDLC的封装方式,所以在配置之前需要将物理链路的协议类型进行修改。
然后将接口加入到Iptrunk:
[Huawei-Ip-Trunk1]trunkport Serial 0/0/0
[Huawei-Ip-Trunk1]trunkport Serial 0/0/1
- MSTP拓扑计算
- 增强P/A机制
- 园区网
- E-trunk
- PPP协议
- Ppoe
- Ppp-mp与IP-trunk
MSTP拓扑计算
在mstp中又这么几个概念:
- CST:公共生成树
- IST:内部生成树,实例0的生成树
- SST:单生成树,一个域内只有一个设备或运行了STP或RSTP的设备会被当做SST
- CIST:公共与内部生成树
- 总根:网络中BID最小的设备
- 域根:MST域内距离总根最近的设备
- 主桥:在IST中距离总根最近的设备,其实也是个域根
- master端口:主桥上距离总根最优的端口
在MSTP中拓扑计算时会先选举总根,然后再选举域根,域根的确定是MSTP拓扑计算的难点,之后再计算CST和IST,最终算出CIST。
如图:
这个网络的拓扑计算中,首先选举总根,总根是整个网络中BID最优的设备,优先级默认都是32768,所以比较mac地址,mac地址小的最优。所以根据选举会选择LSW10为总根,在该设备上,所有的端口都是指定端口。
总根选举完成之后,每个域内都会选举域根,域根是域内到总根最近的那台设备,首先会比较ERPC,外部路径开销,很明显,实例 1和实例 4的域根分别为lsw4和lsw13
实例1的域根:
实例4的域根:
接下来就是选举实例3这个区域内的总根,该区域中去往总根最近的设备是LSW6,所以LSW6是域根。
域根选举完成之后就是CST的计算,他的计算和普通STP计算方式一样。在LSW6上,他会从两个设备收到相同的BPDU,并且ERPC都一样。此时他会比较指定桥发送的BID,越小越优先。从LSW4收到的BID中mac地址为4c1f-cc16-732f,从LSW13中收到的BID中mac地址为4c1f-cc8f-1715,所以4c1f-cc16-732f要小,所以LSW6会阻塞E0/0/3口:
CST这样就计算出来了,在计算内部的生成树的时候,他的计算方式和普通STP计算方式一样,拿总根域举例。
总根是LSW10设备。他的两个接口均为指定口,LSW9和LSW12的上行口均为根端口下行口均为指定端口,主要是在LSW11设备上会选举出一个根端口,阻塞一个端口。她可根据收到BPDU中的指定BID做出选择,优先级一致比较mac地址,lsw9的MAC为4c1f-ccb3-5058,lsw12的MAC为4c1f-cc65-20a7,所以LSW12的mac地址小,所以e0/0/2口为根端口,e0/0/1为阻塞端口。
如果是这种情况的时候LSW6从LSW4的两条链路收到相同的BPDU,ERPC相同。指定BID也相同。
此时就会比较指定桥的接口ID,LSW4的4、5口肯定都是指定端口。所以LSW6要在4、5口上阻塞,LSW6从e0/0/5口收到的指定接口ID要更优,所以阻塞LSW6的e0/0/4接口。
还有种情况是这样的:LSW4和LSW6的中间连接一个hub,LSW6连两根线
此时LSW6从两条线收到的指定BID和指定PID都一样,此时就会比较本地的PID,会阻塞接口号大的,所以e0/0/6会被阻塞。
增强P/A机制
在华为设备中,默认采用增强P/A机制,即在发送proposal置位的BPDU请求的时候紧跟着发送一个A置位的BPDU作为回应。对方在收到P置位的BPDU的同时紧接着又收到了A置位的BPDU,所以它的这个端口能立刻进入转发状态。随后该设备回复一个A置位的BPDU,对方设备收到后也接着进入转发状态。
但注意的是该增强P/A机制是华为的标准,并非工业标准,所以华为设备在与其他厂商设备共存的时候需要改成普通p/a机制。Stp no-agreement-check
园区网
在传统网络中园区网的方案多采用MSTP+VRRP技术,但是这样的话部署复杂,配置复杂,并且ip地址使用量比较多。在新一代的园区网方案则是使用istack+CSS+e-trunk技术。逻辑上更简单,配置也简单,而且昨晚堆叠之后设备天然无环路,无需再部署STP等破换协议。而且还节约IP地址。
同时堆叠之后设备还具有冗余功能,一台设备故障之后不会影响整体网络。同时链路捆绑技术还可以实现负载分担。
E-trunk
E-trunk又叫链路捆绑他是运行在MAC子层和LLC子层之间。属于数据链路层技术。802.3帧中的LLC类似于以太网二帧的type字段。用于标识上层协议。在以太网二帧中,标识ip时候type值为:0x0800,arp协议时则是:0x0806 标识PPP协议则是0x8848。
E-trunk有以下几个特点:
- 提高可靠性
- 增加带宽
- 负载分担
转发原理:
E-trunk在内部会维护一张映射表,根据该映射表来指导数据转发。该表有以下两个参数组成:
- 哈希值:根据数据的ip和mac哈希得出
- 接口号:和加入到e-trunk中的接口有关
比如计算出哈希值为3,3对应的接口为4号口,所以该数据就会被从4号口转发。
E-trunk的实现方式有两种:
- 手动负载分担
- LACP自动负载分担
手动负载分担是手动配置接口加入到的e-trunk,手动接口绑定在本地有效,当一条链路down掉之后对方设备则无法感知该接口故障,就会造成流量丢失。为了解决这一问题,出现了LACP协议。
LACP自动负载分担的工作方式是双方只有在接收到LACP的消息之后才会认为链路状态正常,当链路出现问题后它会做出自动的调整,并且可以确定主动端与活动链路。该实现需要在接口上配置优先级来确立,默认优先级为32768,优先级越小越优先。并且可以配置活动链路数,默认是8条。
配置lacp负载分担,并时LSW1为主动端,活动链路数为2,设置接口1的优先级更优。
[Huawei]lacp priority 100
[Huawei-Eth-Trunk1]max active-linknumber 2
[Huawei-GigabitEthernet0/0/1]lacp priority 100
PPP协议
PPP:peer to peer protocol
PPP的三大组件:
- LCP:定义、协商、测试数据链路层连接
- NCP:包含一组协议,用于网络层协议的建立和参数协商
- 数据封装
帧封装格式:
ppp的头部有9个字节,所以传输效率要比以太网的高。
以太网帧帧格式:
PPP建链过程:
- 链路开始或结束的阶段是dead阶段,当链路up之后,会进入establish阶段
- 在该阶段会进行LCP的协商,主要协商三个参数:MRU、魔术字、认证
- lac协商成功之后,链路opend状态,表示LAC协商完成,协商失败的话直接返回dead阶段。如果没有配置认证会直接进入network阶段
- 如果配置了认证,如pap或chap认证,只有认证成功之后才会进入network阶段,否则会进入terminate阶段,关闭链路。
- 在network阶段会进行NACP的协商,比如IPCP的协商,用于检测IP地址是否冲突,协商成功之后会进入IPCP opend状态
- 当链路关闭时则会进入terminate阶段,该阶段关闭链路,关闭之后会链路进入down状态,返回dead阶段
LACP三个参数:
- MRU:最大接收单元,默认为MTU,不一致时兼容最小MRU
- 认证类型:默认不开启,有PAP和CHAP两种类型
- 魔术字:用于防环,默认开启,当接收到的数据帧中的魔术字和自身MRU一致时则表示发生了环路
LACP协商时候用到的报文:
- configure-request 请求数据参数
- configure-ack 表示完全接受对方的参数和取值
- configure-nak 请求的参数不合法
- configure-reject 请求的参数不识别
没有配置认证时候的configure-request:
当一方配置了认证,另一方不配认证的时候会发送configure-reject,不识别。
之后链路就会关闭,日志:
NCP协商
ncp协商分为两种:
- 静态协商:用于双方手动配置IP地址的情况
- 动态协商:用于一方配置了IP地址,而另一方发起地址为0.0.0.0的协商请求的方式,可以实现IP地址自动分配
静态协商
静态的情况下,如果配置的地址冲突:
则IPCP协商失败,会:
动态协商
可选择地址池的地址,也可以手动指定。
另一方在配置IP地址试选择PPP协商:
接口up之后,首先请求方会发送一个地址为0.0.0.0的请求:
被请求方收到请求之后发现地址为0.0.0.0的,不合法,所以要回复一个NAK,里面携带了要分配给对方的IP地址。
请求方收到这个地址之后,再次以这个地址发起请求
被请求方收到请求后检查地址是否冲突,如果没有冲突,则标识该地址可以。回复ACK
此时的IPCP就协商成功。
请求方此时就获得到了IP地址,而且是个32位地址:
在现网环境中,ppp链路一般都会配置成30位掩码地址,这是因为,如果配置了Ip地址之后,ppp链路会默认为地址产生一条本地32位主机路由,和一条对方的32位主机路由,如果配置成24位掩码,ppp就会除了32位主机路由之外,还会有一条24位的路由和一条.255的广播下一跳指向对方。
在进行数据访问的时候,如果访问了一个该网段内不存在的地址,就会产生环路:
所以为了避免这种情况的发生,一般情况下建议配置ppp的IP地址的时候配置30位掩码,因为30位掩码只有两个地址。
PPP认证
ppp的认证分为两种,一种是PAP认证,一种是CHAP认证。
PAP认证
pap认证只需要两个报文就可以完成,一个被认证方发起的authentication请求,一个认证方发的authentication确认,不过它在传输用户名和密码的时候是以明文的形式传输的,安全性并不高,但是他的过程简单。
过程:
- 认证方的aaa下要保存被认证方的用户名和密码,接接口下开启PAP认证功能。
- 被认证方的接口下要配置用户名和密码
抓包:被认证方发起的authentication请求,用户名和密码都是以明文的形式携带
- 如果认证成功,则认证方发送authentication-ack报文
- 否则就会发送authentication-nak报文
如果失败,被认证方则连发三次
CHAP认证
chap叫做挑战握手认证协议,他是一个三次握手的协议,并且是由认证方主动发起的challenge报文,内含ID+随机数,用户名可选。被认证方收到挑战报文之后,会将ID+随机数+密码做一个哈希运算,得到一个128位的摘要信息,再加上自己的用户名发送给对方。由于他们在网上传输的是经过哈希运算后的数据而不是明文数据,所以它的安全性要比PAP的高。
过程:
- 认证方主动发起challenge挑战握手报文,内含随机数+ID+用户名(可选)
- 被认证方收到数据之后会根据接口下配置的用户密码加上认证方发来的ID和随机数做一个哈希运算,最后将哈希值+用户名以response报文再发给认证方。
- 认证方收到了哈希值和用户名之后,会用报文中的用户名找到自身的密码+随机数+ID进行哈希运算,算出哈希值后和被认证方发来的哈希值进行比对,如果数据一致则表示认证成功,否则则认证失败。
PPPoE
Pppoe是将PPP帧封装到以太网帧中使用的一种技术。为什么会有pppoe呢? 这是因为现在使用最广泛的网络就是以太网,因为以太网他是MA的网络环境,可以连接许多用户,因为这个特点被广泛使用,虽然以太网可以连接更多的用户,但是它还有个缺点,那就是不支持链路认证。而PPP又是唯一可以支持链路认证的协议,但是PPP它仅支持p2p网络环境,不能应用到连接多用户的环境中,结合这两种技术的优点之后,pppoe技术出现,他可以支持在MA环境中链路认证,可以实现计费审计等功能,现在被广泛应用在拨号上网。
既然是PPP帧放到以太网帧中,首先了解一下包结构,拿ping包来举例:
pppoe的服务端配置
- 配置地址池
ip pool hcie
gateway-list 192.168.1.254
network 192.168.1.0 mask 255.255.255.0
- 创建虚模板并配置地址
interface Virtual-Template1
ip address 192.168.1.254 255.255.255.0
- aaa下创建一个用户,用于ppp认证
[server]aaa
[server-aaa]local-user hcie password cipher hcie
Info: Add a new user.
[server-aaa]local-user hcie service-type ppp
- 虚模板下配置认证
[server-Virtual-Template1]ppp authentication-mode chap(或pap)
- 配置动态分配ip(基于地址池)
[server-Virtual-Template1]remote address pool hcie
- 以太网接口下绑定虚模板
[server-GigabitEthernet0/0/0]pppoe-server bind virtual-template 1
pppoe的客户端配置
- 创建拨号接口,并修改协议类型为ppp
interface Dialer1
link-protocol ppp
- 拨号接口里配置用户名和密码
[client-Dialer1]ppp chap user hcie
[client-Dialer1]ppp chap password cipher hcie
- 创建拨号用户(虽然不知道有什么用途)
[client-Dialer1]dialer user hcie
- 创建拨号绑定ID(接口下绑定时调用)
[client-Dialer1]dialer bundle 1
- 创建拨号组(便于管理)
[client-Dialer1]dialer-group 1
- 配置地址为自动协商(自动获取地址)
[client-Dialer1]ip address ppp-negotiate
- 系统下创建拨号规则,并允许拨号1,默认动作是拒绝所有
dialer-rule
dialer-rule 1 ip permit
- 以太网接口下绑定拨号接口
[client-GigabitEthernet0/0/0]pppoe-client dial-bundle-number 1
pppoe的工作过程
pppoe的工作过程分为三步:discover发现阶段、session回话阶段、关闭阶段
发现阶段用到的报文有四个:
- PADI:PPP活动发现初始化(初始化数据)
- PADO:PPP活动发现提供(服务器发送,如果同时受到多个,客户端选择最先收到的那个,此时也能得到服务器的MAC)
- PADR:PPP活动发现请求(向服务器请求会话ID)
- PADS:PPP活动发现会话(服务器将会话ID提供给客户端)
会话阶段和PPP的建链过程是一样的,协商LCP、认证、NCP(自动获取IP)
关闭阶段就是发一个关闭请求,对方回一个确认,连接就关闭了。主要是会话阶段。
Discover阶段工作过程:
- 首先客户端以广播的形式发生一个PADI报文,session ID为空,用于发现网络中的pppoe Server
- 当网络中的pppoe Server收到PADI报文之后会以单播的形式向客户端发送一个PADO(因为客户端的源MAC可以得知)
- 客户端收到了offer之后会单播发送PADR请求pppoe服务器的session ID
- pppoe服务器收到客户端发送的请求之后会单播回复一个PADS,内含会话ID,此时的会话ID发生改变,客户端得到会话ID之后就可以和服务器进入下一个阶段--会话阶段。
Session阶段工作过程:
在该阶段中,首先会进行LCP的协商,协商链路层参数,只是数据的封装有所改变
- configure-request协商LCP参数(MRU、魔术字、认证)
- 如果服务器接收参数,就回复一个configure-ack,如果参数不合法,就回复一个NAK,此时服务器回复了一个NAK
因为在pppoe中,IP-MTU的值是1492,这是因为默认情况下MTU为1500,由于数据前面封装了2字节的PPP投标和6字节的PPPoe头部,所以他需要减去8,最终得到1492 。
- 接下来就是认证过程
- 认证成功之后进行IPCP的协商,该过程和PPP的IPCP协商过程一样,最终得到一个32位的IP地址
并最终可以与服务器进行通信
PPP-MP与IP-trunk
这两种技术是网络层链路的捆绑技术,和E-trunk一样,他们都可以提高带宽和链路的利用率。一般情况下PPP-MP常用与pos口的捆绑,他在PPP的LCP协商时候会有所不同,因为链路是一条捆绑链路,所以在协商的时候会协商和MP相关的参数,同样的,NCP也会不同。
PPP-MP实现的方式有两种
- MP-group:类似于接口的形式 mp-group 0/0/0
- 虚拟模板:虚模板比较强大可以用于pppoe、pppoa、pppofr
不过这两种形式各有各的特点:当使用MP-group时,PPP的认证仍然是配置在物理接口下,当接口数量多的时候配置比较复杂,如果是使用虚模板的时候,则认证可以配置在虚模板的接口下。
Mp-group形式:
配置完成之后,LCP协商完成后,除了进入LCPopend状态之外,也会进入mp-opend
在LCP的协商的时候,会多了一些这些东西。MP的MTU和MP-GROUP的标识
但是在MP-GROUP下是无法配置用户名和密码的。
虚模板形式:
配置和MP-group略有不同,但都是绑定的技术,区别是它可以直接在虚模板里配置ppp的认证
IP-trunk形式:
常用与serial口的捆绑,但是它只支持HDLC的封装方式,所以在配置之前需要将物理链路的协议类型进行修改。
然后将接口加入到Iptrunk:
[Huawei-Ip-Trunk1]trunkport Serial 0/0/0
[Huawei-Ip-Trunk1]trunkport Serial 0/0/1
{{fadai}}