「Multicast」- 形成组播分发树(PIM Sparse Mode)
PIM-SM(ASM)首次形成 Distribution Tree 主要依赖: 1)RPT 构建(RPT Setup):组播叶子路由器主动建立到 RP 的组播分发树(RPT) 2)SPT 构建(SPT Setup):通过 Multicast Source Registration(组播源注册机制)形成组播源到RP的组播分发树(SPT) 3)DR 选举(DR Election):DR负责源端或组成员端组播报文的收发,避免重复组播报文,同时成员端DR还负责发送Join加组消息。
RPT Setup
RPT(RP Tree)是一棵以 RP 为根,以存在组成员关系的 PIM Router 为叶子的组播分发树。
在网络中,当出现 Multicast Receiver(形成 IGMP 表项)时: 1)Receiver-DR 向 RP 发送 Join 报文(广播); —- Join 报文包含 Upstream-Neighbor 字段,暗示由 RPF Neighbor 来处理该报文; —- Join 报文周期(60s)发送 ⇒ Reveiver-DR 作为 IGMP Querier 周期发送 Query 报文,而 Multicast Revceiver 会回复 Report 报文,进而导致 Reveiver-DR 会周期发送 Join 报文; 2)在 Join 报文去往 RP 的路径上,所有 PIM Router 将逐跳创建 (*, G) 表项,生成一棵以 RP 为根的 RPT; —- 鉴于 Join 报文的周期发送,该 (*, G) 表项的超时时间会被刷新,即:只要存在 Multicast Receiver,则该表项不会消失;
在使用 RPF 检查时,应该针对 RP 地址进行测试;
SPT Setup
问题描述:在 Multicast Source 与 Source-DR 间,没有 IGMP 协议,所以无法发送 Join 报文,所以无法通过 IGMP 生成 PIM (*, G) 表项,进而无法发送 Join 消息形成组播分发树。
解决方案:在 PIM-SM(ASM)中,想要形成从 Source-DR 到 RP 的 SPT,需要 Multicast Source Registration 机制(组播源注册)。
注册机制
形成 SPT 需要 Register 与 Join 报文,具体过程如下: 1)在 Multicast Source 中,发送组播数据到 Source-DR 设备; 2)在 Source-DR 中,根据 RP 信息,将 Register 报文(单播)发送给 RP 设备(组播数据被封装入 Register 中,目的地址为 RP 地址); 3)在 RP 中,基于组播报文的[……]
「Multicast」- PIM-Sparse Mode,常见报文格式
Bootstrap(BSR Election)
Frame 866: 60 bytes on wire (480 bits), 60 bytes captured (480 bits) on interface -, id 0
Ethernet II, Src: HuaweiTe_3e:77:c4 (00:e0:fc:3e:77:c4), Dst: IPv4mcast_0d (01:00:5e:00:00:0d)
Internet Protocol Version 4, Src: 10.0.45.5, Dst: 224.0.0.13
Protocol Independent Multicast
0010 …. = Version: 2
…. 0100 = Type: Bootstrap (4)
Reserved byte(s): 00
Checksum: 0x43cd [correct]
[Checksum Status: Good]
PIM Options
Fragment tag: 0x6f10
Hash mask len: 30
BSR priority: 30
BSR: 10.0.0.4
Address Family: IPv4 (1)
Encoding Type: Native (0)
Unicast: 10.0.0.4
C-RP-Advertisement
Frame 1585: 60 bytes on wire (480 bits), 60 bytes captured (480 bits) on interface -, id 0
Ethernet II, Src: HuaweiTe_ce:7c:6d (00:e0:fc:ce:7c:6d), Dst: HuaweiTe_54:69:ea (00:e0:fc:54:69:ea)
Internet Protocol Version 4, Src: 10.0.0.2, Dst: 10.0.0.4
Protocol Independent Multicast
0010 …. = Version: 2
…. 1000 = Type: Candidate-RP-Advertisement (8)
Reserved byte(s): 00
Checksum: 0xea62 [correct]
[Checksum Status: Good]
PIM Options
Prefix-count: 1[……]
「Multicast」- PIM-Sparse Mode
静态 RP 配置
[Huawei] multicast routing-enable
[pim] static-rp x.x.x.x {ACL} # 每台设备都要进行配置
参考设备手册,以获取更多细节。
动态 RP 配置
配置命令:
[AR3]display current-configuration interface
[V200R003C00]
#
interface GigabitEthernet0/0/0
ip address 192.168.2.253 255.255.255.0
pim sm
#
interface GigabitEthernet0/0/1
ip address 10.0.45.3 255.255.255.0
pim sm
#
interface GigabitEthernet0/0/2
#
interface NULL0
#
interface LoopBack0
ip address 10.0.0.3 255.255.255.255
pim sm
#
return
————————————————————————— C-RP
[AR3-pim]display this
[V200R003C00]
#
pim
c-rp LoopBack0
#
return
————————————————————————– C-BSR
[AR5-pim]display this
[V200R003C00]
#
pim
c-bsr LoopBack0
#
return
查看信息:
[AR3-pim]display pim rp-info
VPN-Instance: public net
PIM-SM BSR RP Number:2
Group/MaskLen: 224.0.0.0/4
RP: 10.0.0.2
Priority: 0
Uptime: 00:02:30
Expires: 00:02:00
Group/MaskLen: 224.0.0.0/4
RP: 10.0.0.3 (local)
Priority: 0
Uptime: 00:08:02
Expires: 00:02:00
[AR3-pim]display pim bsr-info
VPN-Instance: public net
Elected AdminScoped BSR C[……]
「Multicast」- 协议扩展
[……]
「Multicast」- SPT Switchover(PIM-SM,ASM)
问题描述
在PIM-SM网络中,一个组播组只对应一个RP。因此组播数据最初都会发往RP,由RP进行转发,这会导致两个问题: 过大的组播流量会对RP形成巨大的负担。 组播转发路径有可能是次优路径。
如果所示,从 Source 到 Reveiver 中,经过 RP(Router B)是次优路径。
解决方案
当数据发送至 RP 后,RP 会沿 RPT 将数据发送给成员端 DR。
为了解决 RPT 潜在的次优路径问题,Receiver-DR 会基于组播数据包中的 SRC-IP,反向建立从成员端 DR 到 Multcast Source 的 SPT;
具体过程如下:
事先在 Receiver-DR 中配置流量阈值,超过该阈值,将进行 SPT Switchover 操作: 1)基于 RPF 规则,决定(简单说,就是单播路由)的最短路径,设备将 Join 消息从 RPF 选举得出的上行接口发出; 2)而后,流量将从新的接口流入; 3)原有次优接口以后会送来流量,但是经过 RPF 检查(根据源地址进行 RPF 检查,而非 RP 地址),将进行修剪(用什么报文?);
在 SPT 切换的过程中,多路访问网络可能会存在重复报文,需要利用 Assert 机制快速选定下行接口。
组播分发树的维护
当组播分发树(SPT 或 RPT)稳定后,Receiver-DR 会周期性发送 Join/Prune 报文,用于维护组播分发树。 如果没有组播流量: 1)SPT 在一段时间后(默认 210s)会消失; 2)Receiver-DR 恢复到 RP 的 RPT(即原始转发路径);[……]
「Multicast」- PIM, 3.PIM Sparse Mode (SSM)
SSM 针对特定 Multicast Source 和 Multicast Group 的绑定数据流提供服务。
Multicast Receiver 在加入 Mutlicast Group 时,能够指定只接收特定 Multicast Source 的数据(加入 Multicast Group 以后,Multicast Receiver 只会收到指定源发送到该组的数据。),或指定拒绝接收来自特定 Multicast Source 的数据。 SSM 对组地址不再要求全网唯一,只需要每个 Multicast Source 保持唯一。这里的“唯一”指的是同个 Multicast Source 上不同的组播应用必须使用不同的 SSM 地址来区分。不同的 Multicast Source 间可以使用相同的组地址,因为 SSM 中针对每一个 (S, G) 信息都会生成表项。这样一方面节省了组播组地址,另一方面也不会造成网络拥塞。
解决方案
原理简述
由于 SSM 提前定义组播的源地址,所以 PIM-SM(SSM)可以在 Reveiver-DR 上基于组播源地址直接反向建立 SPT;
PIM-SM(SSM)无需维护 RP、无需构建 RPT、无需注册组播源,可以直接在 组播源 与 组成员 间建立SPT。PIM-SM(SSM)无需Assert机制
在PIM-SM(SSM)模型中,关键机制包括邻居发现、DR竞选、构建 SPT(DR与邻居发现机制与PIM-DM模式相似)。
组播分发树形成与维护
PIM-SM(SSM)模型构建组播分发树的形成主要依赖 IGMPv3 报文与 Join 报文。
PIM-SM(SSM)模型形成的组播分发树会一直存在(周期 Join 报文),不会因为没有组播流量而消失。[……]
「NETWORKING」- 差错控制技术
差错控制技术一般可以分为前向纠错与后向纠错两种:
后向纠错
ARQ(Automatic Repeat-reQuest,自动重传请求),是一种按需重传机制,发送方通过“发送-确认”机制感知接收方是否收到数据报文,如果没有收到接收方发的确认报文则会重传相应报文,由于是通过发送方重新发送报文达到纠错的结果,所以也被称为后向纠错;
这种纠错方式需要重复发送报文所以会引入额外时延。
前向纠错
将冗余纠错包与数据包一起发往接收方,接收方如果发现差错,直接通过冗余纠错包还原丢失的数据包。由于该纠错行为是发生在接收方的,所以也被称为前向纠错;
例如:FEC 技术;[……]
「NETWORKING」- A-FEC(Adaptive-FEC)
问题描述
在 FEC 中,原始数据与冗余纠错包的数量比例是固定的。当碰到突发丢包时有可能因丢包过多,导致冗余包无法还原原始数据,因此当面对有突发丢包的网络时,FEC 是不适用的。同时,FEC 由于添加了冗余包使得带宽利用率有所下降;
解决方案
A-FEC(Adaptive-FEC)技术可以基于现有网络质量灵活地增加冗余包,较好地解决 FEC 面临的问题;
原理简述
当网络质量较好时,A-FEC 可以少量添加或者不添加冗余包,提高带宽利用率; 当网络质量较差时,A-FEC 会增加冗余包的数量,避免因突发丢包导致的数据无法还原的问题;
应用场景
使用 FEC 或 A-FEC 可以保障关键的视频应用,减少视频卡顿与花屏。使用 A-FEC 算法根据应用和链路质量在发送端灵活增加冗余包,抵御网络连续丢包,可保障关键的视频应用在 20% 丢包的情况下无卡顿、无花屏;[……]
「NETWOKRING」- FEC(Forward error correction,前向纠错)
问题描述
在 IP 视频通话中常会因为丢包导致图像失真,音频中断等问题,因此在传输过程中需要部署差错控制技术;
解决方案
FEC(Forward error correction,前向纠错)技术是差错控制技术的一种,发送方在发送数据时会附上冗余纠错包,接收方如果发现差错后可以基于冗余包进行纠错;
原理简述
特性特征
FEC 冗余纠错包的纠错能力是有一定限制的,比如:4 个报文中丢了 3 个报文,那么依靠剩下的 1 个报文,FEC 是没有办法还原出其余三个报文的;
应用场景
FEC 适用于会随机丢包或者跨国 RTT 比较大的网络;[……]
「Networking」- 网络可靠性
问题描述
网络的可靠性,指当设备或者链路出现单点或者多点故障时,能够保证网络服务不间断的能力;
解决方案
网络的可靠性,通过从两类技术实现: 1)故障检测:能够通过软件实现; 2)冗余组件:能够从单板、设备、链路、软件多个层面实现
单板可靠性(硬件实现)
S12700E-8 机框正面结构
框式交换机由机框、电源模块、风扇模块、主控板、交换网板(SFU)、线路板(LPU)构成; 机框:为各种板卡、模块提供插槽,实现板卡间的通信; 电源模块:设备的供电系统 风扇模块:设备的散热系统 主控板(MPU,Main Processing Unit):负责整个系统的控制平面和管理平面; 交换网板(SFU,Switch Fabric Unit):负责整个系统的数据平面。数据平面提供高速无阻塞数据通道,实现各个业务模块之间的业务交换功能; 线路板(LPU,Line Processing Unit):线路处理单元是物理设备上用于提供数据转发功能的模块,提供不同速率的光口、电口;
S12700E-8 机框正面结构
以 S12700E-8 为例,设备提供 8 个线路板槽位、4 个交换网板槽位、2 个主控板槽位、6 个电源模块槽位、4 个风扇模块槽位; 框式交换机配置多个主控板、交换网板可保证设备自身的可靠性,单个槽位的交换网板、主控板损坏不影响设备的正常运行; 框式交换机的线路板损坏后,该板卡上的接口无法正常转发数据;
设备可靠性(硬件实现)
主备备份
设备冗余设计的网络中,下游交换机双上行接入,采用链路一主一备的方式,主链路上行接口、设备故障可以切换到备份链路,通过备份设备转发;
链路检测技术(软件实现)
为保证设备间链路可靠性,在设备间部署多条物理线路,为防止环路 STP 只保留一条链路转发流量,其余链路成为备份链路;
IP Flow Performance Measurement (FPM)
用于检测链路可靠性技术;
通过业务数据测试,所以测试结果对于业务更加精准;
Network Quality Analysis (NQA)
网络质量检测技术;[……]
「NETWORKING」- 高可靠性:链路探测技术
问题描述
网络链路质量的波动会影响业务质量,而如何快速地感知链路质量波动是改善链路质量的第一步;
解决方案
探测链路质量的协议和技术有很多,基本可以分为两大类:
链路连通性检测技术
主要有: 1)BFD(Bidirectional Forwarding Detection,双向转发检测) EFM(Ethernet in the First Mile,最后一公里以太网) CFM(Connectivity Fault Management,连接错误管理)
链路质量检测技术
主要有: NQA(Network Quality Analysis,网络质量分析) IP FPM(IP Flow Performance Measurement,IP 流性能测量)
应用场景
在现网中,主要使用 BFD 探测链路连通性,使用 NQA、IP FPM 探测链路质量;
常用链路质量探测场景
NQA 与 BFD 通常会与浮动路由联动。当 NQA 或 BFD 检测到链路出现故障,则高优先级路由会失效,备用路由会被启用;
端到端链路质量探测场景
IP FPM 通过将数据包进行染色标注数据包,帮助入口与出口的设备测量特定流量的丢包或抖动; 由于 IP FPM 可以端到端地测量网络质量,所以可以在出口多链路的场景下测试不同链路的真实网络质量;[……]
「Network」- 双向转发检测(BFD, Bidirectional Forwarding Detection)
问题描述
随着网络应用的广泛部署,网络发生故障极大可能导致业务异常。为了减小链路、设备故障对业务的影响,提高网络的可靠性,网络设备需要尽快检测到与相邻设备间的通信故障,以便及时采取措施,保证业务正常进行;
在无法通过硬件信号检测故障的系统中: 1)应用通常采用上层协议本身的 Hello 报文机制检测网络故障。例如,常用路由协议的 Hello 报文机制检测时间较长,检测时间超过 1s。当应用在网络中传输的数据超过 GB/s 时,秒级的检测时间将会导致应用传输的数据大量丢失; 2)在三层网络中,静态路由本身没有故障检查机制;
解决方案
BFD(Bidirectional Forwarding Detection,双向转发检测)提供了一个通用的、标准化的、介质无关、协议无关的快速故障检测机制,用于快速检测、监控网络中链路或者 IP 路由的转发连通状态;
故障检测存在的意义是:为了及时发现问题以进行切换,而非单纯检测故障。所以,存在主备链路才更加有意义;
原理简述
BFD 是个简单的 Hello 协议: 1)两个系统间建立 BFD Session 通道,并周期性发送 BFD 检测报文; 2)如果某个系统在规定的时间内没有收到对端的检测报文,则认为该通道的某个部分发生故障;
特性说明
对相邻转发引擎之间的通道提供轻负荷、快速故障检测; 用单一的机制对任何介质、任何协议层进行实时检测;
应用场景[……]
「BFD」- 概念、术语
检测机制
两个系统建立BFD会话,并沿它们之间的路径周期性发送BFD控制报文,如果一方在既定的时间内没有收到BFD控制报文,则认为路径上发生了故障。
建立会话
BFD 通过控制报文中的 本地标识符 和 远端标识符 区分不同的 Session(会话);
根据 Local Discriminator 和 Remote Discriminator 的配置方式不同,会话的建立有两种方式:静态建立会话;动态建立会话:
静态建立会话
对于静态建立的会话: 1)通过命令行手工配置会话参数,包括配置本地标识符和远端标识符等; 2)然后手工下发 BFD 会话建立请求;
应用场景:单臂回声(当对方不支持 BFD 时使用)
动态建立会话
对于动态建立的会话: 1)Local Discriminator,是由触发创建会话的系统动态分配; 2)Remote Discriminator 从收到对端 BFD 消息的 Local Discriminator 的值学习而来。
动态建立会话时,系统对本地标识符和远端标识符的处理方式如下: 1)动态分配本地标识符,当应用程序触发动态创建BFD会话时,系统分配属于动态会话标识符区域的值作为BFD会话的本地标识符。然后向对端发送 Remote Discriminator=0 的BFD控制报文,进行会话协商。 2)自学习远端标识符,当BFD会话的一端收到 Remote Discriminator=0 的BFD控制报文时,判断该报文是否与本地BFD会话匹配(?),如果匹配,则学习接收到的 BFD 报文中 Local Discriminator 的值,获取远端标识符。
应用场景:通过协议驱动,需要协议程序支持 BFD 功能。比如 OSFP 的 BFD 特性,当开启后,运行 OSPF 的同时会进行 BFD 检测。
会话状态
会话有四种状态: 1)在会话过程中包含有三个状态:Init、Up 两个用来建立会话;Down 用来断开会话; 2)另外还有一个特殊状态:AdminDown,使会话可以通过管理手段 down,在状态机中 AdminDown 也是 down 状态。
Down 状态说明当前会话断开。会话将持续维持在 down 状态,直到收到对端的报文并且该报文的 sta 字段标志着对端状态不是 up 状态: 1)如果收到的是 down 报文,状态机将从 down 状态跳转到 init 状态; 2)如果收到的是 init 报文,状态机将从 down 状态跳转到 up 状态; 3)如果收到的是 up 包,状态机维持 down 状态。
Init 状态说明与远端正在通信,并且本地会话期望进入 up 状态,但是远端还没回应。一个init状态的会话会维[……]
「BFD」- 报文格式
BFD 检测是通过维护在两个系统间建立的 BFD Session 来实现的,系统通过发送 BFD 报文建立会话; BFD 控制报文根据场景不同封装不同,报文结构由 强制部分 和 可选的认证字段 组成;
强制部分
Ver:BFD协议版本号,目前为 1; Diag:诊断字,标明本地 BFD 系统最近一次会话状态发生变化的原因; Sta:BFD本地状态;
P:参数发生改变时,发送方在BFD报文中置该标志,接收方必须立即响应该报文; F:响应P标志置位的回应报文中必须将F标志置位; C:转发/控制分离标志,一旦置位,控制平面的变化不影响BFD检测; A:认证标识,置1代表会话需要进行验证; D:查询请求,置位代表发送方期望采用查询模式对链路进行监测; M:为BFD将来支持点对多点扩展而设的预留位;
Detect Mult:检测超时倍数,缺省 3 倍。用于检测方计算检测超时时间; Length:报文长度,单位为字节;
My Discriminator:BFD 会话连接本地标识符(Local Discriminator) 。发送系统产生的一个唯一的、非零鉴别值,用来区分一个系统的多个BFD会话; Your Discriminator:BFD 会话连接远端标识符(Remote Discriminator) 。从远端系统接收到的鉴别值,这个域直接返回接收到的“My Discriminator”,如果不知道这个值就返回0;
Desired Min TX Interval:本地支持的最小 BFD 报文发送间隔; Required Min RX Interval:本地支持的最小 BFD 报文接收间隔; Required Min Echo RX Interval:本地支持的最小Echo报文接收间隔,单位为微秒(如果本地不支持Echo功能,则设置0);
可选部分(认证字段)
报文格式
单臂回声
Frame 33: 66 bytes on wire (528 bits), 66 bytes captured (528 bits) on interface -, id 0
Ethernet II, Src: HuaweiTe_84:0e:3c (00:e0:fc:84:0e:3c), Dst: HuaweiTe_76:6c:63 (00:e0:fc:76:6c:63)
Internet Protocol Version 4, Src: 10.0.25.2, Dst: 10.0.25.2
User Datagram Protocol, Src Port: 49154, Dst Port: 3784
BFD Control message
001. …. = Protocol Version[……]
「BFD」- 常用配置示例
配置示例(Huawei)
参考设备文档,以获取 BFD 与使用方法,以及常见问题的处理方法。
补充说明: 1)静态:当设备开启 BFD 并 commit 后,设备便已开始发送 BFD 报文;后续操作是将 BFD Session 与其他模块进行关联(联动)。 2)动态:无需执行 commit 指令,直接提交即可;
动态 BFD 配置
[AR4]bfd
[AR4]bfd 1 bind peer-ip 10.0.46.6 interface GigabitEthernet 0/0/1 source-ip 10.0.46.4 auto
与静态路由联动
[R1] bfd 12 bind peer 10.0.12.2 interface GigabitEthernet 0/0/1
[BFD] discriminator local 10
[BFD] discriminator remote 20
[BFD] commit
[R2] bfd 21 bind peer 10.0.12.1 interface GigabitEthernet 0/0/1
[BFD] discriminator local 20
[BFD] discriminator remote 10
[BFD] commit
[R1] ip route-static 4.4.4.4 10.0.12.2 track bfd-session 12 # 被 BFD 追踪,当链路故障时,立即时效
[R1] ip route-static 4.4.4.4 10.0.13.2 preference 100 # 该优先级 100 的静态路由开始生效
<Huawei> display bfd session all verbose
单臂回声
[Huawei] bfd
[R2] bfd 21 bind peer 10.0.12.1 interface GigabitEthernet 0/0/1 one-arm-echo
[BFD] discriminator local 20
[BFD] commit
[R1] ip route-static 4.4.4.4 10.0.12.2 track bfd-session 12 # 被 BFD 追踪,当链路故障时,立即时效[……]
「BFD」- 高级功能
共享会话
同一个数据路径上只建立一个BFD会话,如果不同的应用在同一个数据路径上需要使用不同的BFD协议参数,则应该考虑通过共享解决:选择能覆盖所有应用要求的参数来配置唯一的BFD会话,BFD会话的状态变更将上报给所有绑定的应用。
注意,这并非 BFD 高级特性,而是实践经验;
BFD Echo
BFD Echo(BFD 回声功能),是由本地发送 BFD Echo 报文,远端系统将报文环回的一种检测机制。
支持 BFD 功能的设备主动发起回声请求功能,不支持 BFD 功能的设备接收到该报文后直接将其环回,从而实现转发链路的连通性检测功能。
原理简述
发送端的 BFD 报文使用相同的源目地址
特性说明
1)不要求远端支持 BFD 特性,仅本端支持 BFD 特性便能完成链路检测; 2)当不能用于多跳:数据包不会发送到远端,在送达远端前便被中间系统转发回来(RFC 5883/Section 3);
应用场景
在两台直接相连的设备中,R1 支持 BFD 功能,R2 不支持 BFD 功能,只支持基本的网络层转发。为了能够快速的检测这两台设备之间的故障,可以在 R1 上创建 One-Arm-Echo(单臂回声)功能的 BFD 会话。
联动功能
联动,是指 BFD 与其他协议共同工作。例如 BFD 与 OSPF 联动就,是将 BFD 和 OSPF 关联起来, BFD 将链路故障的快速检测结果告知 OSPF 协议(否则依赖 OSPF Hello 报文检测会需要很久才能发现链路故障)。
原理简述
当 BFD 会话建立后,会周期性地快速发送 BFD 报文。如果在检测时间内没有收到 BFD 报文则认为该双向转发路径发生故障,通知被服务的上层应用进行相应的处理。
联动功能由三部分组成: 1)监测模块:负责对链路状态、网络性能等进行监测,并将探测结果通知给追踪模块; 2)追踪模块:当收到监测模块的探测结果后,将及时改变追踪项的状态,并通知应用模块; 3)应用模块:根据追踪项的状态,进行相应的处理,从而实现联动;
场景:与 Static Routing 联动
静态路由自身没有检测机制,如果静态路由存在冗余路径,通过静态路由与 BFD 联动,当主用路径故障时,实现静态路由的快速切换 。
如下图,当通往 ISP1 的链路出现故障的时候,BFD会话能够快速感知,并通知路由器将流量切换到指向 ISP2 的链路:[……]
「IP-FPM」- IP Flow Performance Measurement,IP性能测量
问题描述
随着云计算时代的到来,业务端到端的性能检测变得非常重要,
但是常用的 NQA 技术在网络端到端性能统计的场景下存在缺陷: 1)NQA 通过构造业务报文,模拟业务报文在网络上转发,因此统计得到的性能指标不够精确; 2)NQA 不支持跨网络层端到端的场景,不能很好地解决 IP 网络在多路径场景下,网络性能难以监控和统计的问题;
解决方案
IP FPM(IP Flow Performance Measurement,IP 性能测量)是一种通用的 IP 网络性能检测的方案,可以有效地解决上述问题;
一方面,IP FPM 可以直接对业务报文进行测量,测量数据可以真实反映 IP 网络的性能; 另一方面,IP FPM 可以在线监控 IP 网络承载的业务的变化,真实准确地反映出业务的运行情况;
原理简述
TLP(Target Logical Port,目标逻辑端口)
TLP 是分布在网络边缘的观测点,对应网络中边缘节点的接口,负责完成如下动作: 执行统计动作(丢包统计、时延统计); 产生统计数据(收发报文计数、收发流量统计、时间戳信息等);
对于一条具体的目标流: 1)如果一个 TLP 是其上游统计点,那么该 TLP 被称为 In-Point-TLP; 2)如果该 TLP 是目标流的下游统计点,那么该 TLP 被称为 Out-Point-TLP;
DCP(Data Collecting Point,数据收集点)
DCP 是 IP FPM 统计系统的数据收集点,对应网络中的边缘节点,负责完成如下动作: 管理和控制 TLP; 收集 TLP 产生的统计数据; 上报统计数据给 MCP;
MCP(Measurement Control Point,测量控制点)
MCP 是 IP FPM 统计系统的控制角色,对应网络中的中间节点,负责完成如下动作: 收集 DCP 上送的统计数据; 完成统计数据的汇总和计算; 向用户终端或者网管系统上报统计结果;[……]
「NQA」- 网络质量分析(Network Quality Analysis)
问题描述
为了使网络服务质量可见,使用户能够自行检查网络服务质量是否达到要求,需要采取以下措施: 1)在设备上,提供能够说明网络服务质量的数据; 2)在网络中,部署探针设备能对网络服务质量进行监控;
但是,当部署上述措施时,需要在设备侧提供(如时延、拌动、丢包率等)相关统计参数和使用专用的探针设备,增加设备和资金的投入;
解决方案
NQA(Network Quality Analysis,网络质量分析)能够实现该需求,并减少设备和资金的投入(控制成本);
NQA 是种实时的网络性能探测和统计技术,可以对响应时间、网络拌动、丢包率等网络信息进行统计;
原理简述
NQA 通过发送特定的数据包,达到测试该业务在现网中的业务质量的目的:
1)NQA 测试中,把测试两端称为客户端和服务器端 (或者称为源端和目的端); 2)NQA 的测试由客户端发起,在客户端配置测试例后,NQA 把相应的测试例放入到测试例队列中进行调度; 3)NQA 测试可与多个模块进行联动,NQA 将结果通知其他模块,其他模块会根据探测结果进行相应处理;
特性特征
当设备部署 NQA 时,就不用部署专门的探针设备,可以有效的节约成本; NQA 可以实现对网络运行状况的准确测试,输出统计信息; NQA 的联动功能能够用于链路连通性检测; 使用非业务数据测试网络质量,所以测试结果对于业务会存在偏差;
应用场景
NQA 监测网络上运行的多种协议的性能,使用户能够实时采集到各种网络运行指标,例如:HTTP 的总时延、TCP 连接时延、DNS 解析时延、文件传输速率、FTP 连接时延、DNS 解析错误率等;
概念术语
联动功能组成部分
联动功能由检测模块、Tack、应用模块组成:
测试类型
NQA 的测试主要是针对常用的网络服务进行测试:
在 SD-WAN 中,还会关注链路的时延,以控制流量的转发;[……]
「NETWORKING」- 可靠性技术:冗余
当网络出现问题时,问题点可能无法第一时间发现或者修复,因此需要冗余技术;
常用的冗余技术主要有 Stack(堆叠)、Link Aggregation(链路聚合)、VRRP 等。
其中出口或者网关设备使用最多的网络冗余技术是 VRRP;[……]
「Link Aggregation」- 链路聚合、链路汇聚、绑定
问题描述
随着网络规模不断扩大,用户对骨干链路的带宽和可靠性提出了越来越高的要求。随着业务的发展和园区网络规模的不断扩大,用户对于网络的带宽、可靠性要求越来越高。传统解决方案通过升级设备方式提高网络带宽,同时通过部署冗余链路并辅以STP(Spanning Tree Protocol,生成树协议)协议实现高可靠。传统解决方案存在灵活度低、故障恢复时间长、配置复杂等缺点。
在传统技术中,常用更换高速率的接口板或更换支持高速率接口板的设备的方式来增加带宽,但这种方案需要付出高额的费用,而且不够灵活。
解决方案
将多条物理链路捆绑为一条逻辑链路,从而实现增加链路带宽的目的。同时,这些捆绑在一起的链路通过相互间的动态备份,可以有效地提高链路的可靠性,生成树计算时按一个链路计算,这样的方法叫做链路聚合。
以太网链路聚合,Eth-Trunk / port trunking, link bundling, Ethernet/network/NIC bonding, channel bonding, NIC teaming,Link Aggregation,思科叫做 port-channel,华为叫做 Eth-trunk
原理简述
采用 链路聚合技术 能够在不进行硬件升级的条件下,通过将多个物理接口捆绑为一个逻辑接口,来达到增加链路带宽的目的。
此时,当链路聚合后,在 STP 中,认为是单个链路,STP 将 Eth-Trunk 视为单个接口。
协议特性
1)增加带宽:链路聚合接口的最大带宽可以达到各成员接口带宽之和。实现增大带宽目的(而 STP 会阻塞端口,无法完全利用带宽)
2)提供冗余:当某条活动链路出现故障时,流量可以切换到其他可用的成员链路上,从而提高链路聚合接口的可靠性。
3)负载分担:担在一个链路聚合组内,可以实现在各成员活动链路上的负载分担。
Q:链路聚合是否会导致环路?即同个数据帧是否会在同个链路聚合组内的多条链路间转发? A:在链路聚合组内的端口,交换机不会将数据发送给组内的其他端口。
应用场景
核心节点部署:数据转发都要通过核心节点,所以链路聚合需要部署在核心节点中,提升整个网络的数据吞吐量。
交换机之间:为保证交换机之间的链路带宽以及可靠性,可以在交换机之间部署多条物理链路并使用Eth-Trunk。
交换机与服务器之间:为了提高服务器的接入带宽和可靠性,将两个或者更多的物理网卡聚合成一个网卡组,与交换机建立链路聚合。
交换机与堆叠系统:汇聚层交换机进行堆叠,堆叠系统使得两台交换机成为一台逻辑上的设备,交换机与堆叠系统通过链路聚合互联可以组建高可靠、无环的网络。
防火墙双机热备心跳线:在防火墙双机热备组网中,使用心跳线来检测[……]
「Link Aggregation」- 概念、术语
Link Aggregation Group,LAG,聚合组
LAG,是指若干条链路捆绑在一起所形成的的逻辑链路。
每个聚合组唯一对应着一个逻辑接口,这个逻辑接口又被称为链路聚合接口(Eth-Trunk接口)
链路聚合模式:Manual Mode、LACP Mode
根据是否开启 LACP(Link Aggregation Control Protocol,链路聚合控制协议),链路聚合分为:Manual Mode;LACP Mode;
LACP Mode,能够实现:部分接口进行数据转发;部分接口进行备份,以用于故障切换; Manual Mode,所有接口都出于转发状态,无法像 LACP Mode 那样选择用于转发的链路;
成员接口,成员链路
组成 Eth-Trunk 接口的各个物理接口称为成员接口。
成员接口对应的链路,称为成员链路。
活动接口,活动链路,非活动接口,非活动链路
活动接口又叫选中(Selected)接口,是参与数据转发的成员接口。
活动接口对应的链路,被称为活动链路(Active link)。
非活动接口:又叫非选中(Unselected)接口,是不参与转发数据的成员接口。
非活动链路(Inactive link):非活动接口对应的链路
活动接口阈值
在 LACP Mode 中, 1)活动接口上限阈值:活动端口的最大数量; 2)活动接口下限阈值:活动端口的最少数量;低于该数量,将停止转发(此时即使存在正常链路,也无法转发数据)
在广域网中,需要使用该特性:需要部分链路出于备份状态(可能备份链路性能低,仅用于短暂的备份目的);
数据流控制
两端接口数量、速率、双工方式、流控速率必须相同。
负载分担模式
基于包的负载分担
同源数据帧乱序问题:在使用Eth-Trunk转发数据时,由于聚合组两端设备之间有多条物理链路,如果每个数据帧在不同的链路上转发,则有可能导致数据帧到达对端时间不一致,从而引起数据乱序。
基于流的负载分担
Eth-Trunk 推荐采用逐流负载分担的方式,即一条相同的流负载到一条链路,这样既保证了同一数据流的数据帧在同一条物理链路转发,又实现了流量在聚合组内各物理链路上的负载分担。
Eth-trunk支持基于报文的IP地址或MAC地址来进行负载分担,可以配置不同的模式(本地有效,对出方向报文生效)将数据流分担到不同的成员接口上。
常见的模式有:S-IP、S-MAC、D-IP、D-MAC、S-D-IP、S-D-MAC。
在实际业务中,用户需要根据业务流量特征选择配置合适的负载分担方式。业务流量中某种参数变化越频繁,选择与此参数相关的负载分担方式就越容易实现负载均衡[……]
「Bonding」- 网卡绑定
什么是网卡绑定?
通过把多张物理网卡绑定为一张逻辑网卡,实现本地网卡的冗余、带宽扩容、负载均衡等功能;
网络绑定通过增加网络吞吐量和带宽来提供性能改进和冗余。如果一个接口关闭或拔掉插头,另一个接口将工作。它可用于需要容错,冗余或负载平衡网络的情况;
网卡绑定七种模式
在 Linux 中,一个名为 bonding 的特殊内核模块用于将多个网络接口连接到一个接口。两个或多个网络接口可以连接到单个逻辑“绑定”接口。绑定接口的行为取决于所使用的绑定方法的类型(7 种模式);
bond0(balance-rr)
这种 NIC 组合的方法称为“循环”(Round-Robin),因此名称中会有“rr”;
所谓“循环”就是网卡轮流发送数据包。例如,在该模式下有 eth0、eth1、eth2 三张网卡都属于 bond0 接口,在发送数据包的时候,第一个数据包由 eth0 发出,第二个数据包由 eth1 发出,第三个数据包由 eth2 发出,然后在第 4 个数据包的 eth0 处发回;
注意:该方式需要配置交换机;
bond1(active-backup)
主备模式;
该模式下,只有一个网口是活动状态的,称之为“主网口”,另外一个网口是备用状态,称之为“备网口”。当主网口出现故障后,自动切换到备用网口进行工作;
注意:该模式不需要配置交换机;
bond2(balance-xor)
在一个 balance-xor 模式下,Bond 设备将评估来源和目标 MAC 地址,以确定使用哪个接口发送网络数据包。此方法将为给定的 MAC 地址选择相同的接口,因此能够进行负载平衡和容错;
注意:该方式需要配置交换机;
bond3(broadcast)
在这种方法中,Bond 设备将把数据包从所有的接口中传输出去,因此是这种特定绑定方法称为“广播”。这种方法的用途非常少,但确实提供了一定程度的容错性;
注意:该方式需要配置交换机;
bond4(802.3ad)
LACP
这是一种链路聚合的特殊绑定方法,需要特定的绑定接口所连接的交换机进行特殊配置。该方法遵循 IEEE 标准进行链路聚合,并提供容错和增加的带宽;
注意:该方式需要配置交换机;
bond5(balance-tlb)
在 TLB 中,将正常接收从属接口上的数据包,但是当系统需要发送数据包时,将根据每个接口的负载 / 队列情况来确定哪个接口最适合传输数据;
注意:该模式不需配置交换机;
bond6(balance-alb)
类似于模式 5,但是新增了接收数据包的负载均衡能力;
注意:该模式不需要配置交换机;
注意事项
balance-rr[……]
「E-Trunk」- 跨设备的链路聚合
e-trunk 使得 eth-trunk 能够跨越设备
在 E-Trunk 中,缺省主备模式(单活),需要配置双活(配置 ESI 相同,以防止 BUM 环路);[……]
「Link Aggregation」- LACP Mode (IEEE 802.3ad, bond 4)
LACP Mode,是指采用 LACP(IEEE 802.3ad)协议的一种链路聚合模式。设备间通过 LACPDU(链路聚合控制协议数据单元,Link Aggregation Control Protocol Data Unit,LACPDU)进行交互,通过协议协商确保对端是同一台设备、同一个聚合接口的成员接口;
在 LACPDU 中,包含设备优先级、MAC 地址、接口优先级、接口号等等:
第一步、确定主动端
在 LACP Mode 下,两端设备所选择的活动接口数目必须保持一致,否则链路聚合组就无法建立。此时可以使其中一端成为主动端,另一端(被动端)根据主动端选择活动接口;
确定主动端的方法: 1)通过 System Priority 确定主动端,值越小优先级越高。默认 32768,越小越优,通常保持默认; 2)当优先级一致时,LACP 会通过比较 MAC Address 选择主动端,MAC 地址越小越优;
注意事项,虽然我们说“主动端”“被动端”,但是这并不是 LACP 定义的术语。两端同时使用 LACPDU 进行交互,当各自收到报文后,根据协议算法 ,明确自己的角色,然后开始进行相应动作;
第二步、确定活动链路
当确定主动端后,将根据主动端来选择活动接口,被动端将根据主动端来被动设置活动端口;
确定活动端口的方法: 1)通过 Port Priority 比较,以确定活动接口。默认为 32768,越小越优,通常保持默认; 2)当 Port Priority 一致时,将通过 Port Number 选择活动接口,越小越优;
第三步、通知被动端
被动端交换机,只能根据主动端发来的 LACPDU 报文,来被动接收设置;
至此,Eth-Trunk 的活动链路选举过程完成;
最大活动接口数
LACP-Mode 支持配置最大活动接口数目,当成员接口数目超过最大活动接口数目时会通过比较接口优先级、接口号选举出较优的接口成为活动接口,其余的则成为备份端口(非活动接口),同时对应的链路分别成为活动链路、非活动链路。交换机只会从活动接口中发送、接收报文;
当活动链路中出现链路故障时,可以从非活动链路中找出一条优先级最高(接口优先级、接口编号比较)的链路替换故障链路,实现总体带宽不发生变化、业务的不间断转发;[……]
「Link Aggregation」- Manual Mode
手工模式: Eth-Trunk的建立、成员接口的加入均由手动配置,双方系统之间不使用LACP进行协商。
正常情况下所有链路都是活动链路,该模式下所有活动链路都参与数据的转发,平均分担流量,如果某条活动链路故障,链路聚合组自动在剩余的活动链路中平均分担流量。
当聚合的两端设备中存在一个不支持 LACP 协议时,可以使用手工模式。
问题缺陷
1)为了使链路聚合接口正常工作,必须保证本端链路聚合接口中所有成员接口的对端接口:属于同一设备;加入同一链路聚合接口。手工模式下,设备间没有报文交互,因此仅能通过管理员人工确认。
2)在手动模式下,设备仅能通过物理层状态,来判断对端接口是否正常工作。 —- 当接口处于假死状态,虽然链路 UP 状态,但是数据依据无法正常转发。[……]
「Link Aggregation」- 常见问题处理
[……]
「Linux」- 配置 Bonding 聚合(Mode = 1)
解决方案
系统环境:Debian 网络绑定模式:Mode=1(active-backup)
安装ifenslave包
apt-get install ifenslave-2.6
加载内核的bonding模块
如果要使用网络绑定功能,内核需要加载bonding模块。执行命令:
# 加载 bonding 模块
# 在正常情况下,执行该命令是没有输出的;
# 如果输出 modprobe: ERROR: could not insert ‘bonding’: Module already in kernel 表示模块已加载;
modprobe –first-time bonding
# 持久化配置,即在重启主机时会自动加载bonding模块:
echo ‘bonding’ >> /etc/modules
创建网络绑定接口(bond0)
这一步配置bond0接口。需要编辑/etc/network/interface,该文件包含了系统连接的所有网络设备的网络接口的设置信息。创建bond0接口的配置如下:
# vim /etc/network/interface
# 系统启动时自动初始化bond0。由于暂时不需要自动启动,所以注释调了。
# auto bond0
# 定义bond0,并从DHCP获取IP地址
iface bond0 inet dhcp
# 设置bond模式为1;
bond-mode 1
# 指定主网口;
bond-primary wlan0
# 声明所属bond的网口;
bond-slaves wlan0 wlan1
# 告诉内核每100毫秒检查一次链路状态
bond-miimon 100
# 关闭当前活跃网口前等待的时间;
bond-downdelay 400
# 使用新网口等待的时间;
bond-updelay 800
# 注意事项:
# downdelay和updelay必须是miimon的倍数
启动bond0网口
首先,如果要启动bond0网口,记住一定要先down掉从网卡,在这个例子中我们要donw调wlan0、wlan1,命令如下:
ifconfig wlan0 down
ifconfig wlan1 down
# 如果你在/etc/network/interfaces中配置了wlan0与wlan1,那么可以使用ifdown命令:
ifdown wlan0
ifdown wlan1
然后,执行如下命令来启动bond0接口:
ifup b[……]
「Link Aggregation」- 常见问题处理
使用NetworkManager来配置
创建Team接口
添加网络绑定接口team0,并添加eth0、eth1这两个从属网口:
nmcli connection add type team con-name team0 ifname team0 config team1-master-json.conf
nmcli connection add type team-slave con-name team0-slave0 ifname eth0 master team0
nmcli connection add type team-slave con-name team0-slave1 ifname eth1 master team0
配置Team接口
配置网络绑定接口team0,并激活:
nmcli connection modify team0 ipv4.address 172.16.1.65/24 ipv4.method manual
nmcli connection up team0
查看Team接口状态
查看网卡team0的绑定状态:
teamdctl team0 state
参考文献
参数team1-master-json.conf[……]
「Switching」- Smart Link
解决方案
Smart Link是一种为双上行组网量身定做的解决方案: 1)在双向行的设备上部署,当网络正常时,两条上行链路中,一条处于活跃状态,而另条则处于备份状态(不承载业务流量)。如此一来二层环路就此打破。 2)当主用链路发生故障后,流量会在毫秒级的时间内迅速切换到备用链路上,保证数据的正常转发。 3)Smart Link配置简单,便于用户操作。 4)无需协议报文交互,收敛速度及可靠性大大提升。
参考文献
Smart Link[……]
「Switching」- 堆叠,集群,Stack, Cluster
问题描述
随着企业的发展,企业网络的规模越来越大,这对企业网络提出了更高的要求:更高的可靠性、更低的故障恢复时间、设备更加易于管理等。
传统的园区网高可靠性技术出现故障时切换时间很难做到毫秒级别、实现可靠性的方案通常为一主一备,存在着严重的资源浪费。同时随着网络设备的越来越多,管理将会变得越加复杂。
传统 STP 组网,两台汇聚交换机分别与接入层交换机构成三角形的二层环路,因此必须部署 STP 协议以消除环路。但是 STP 将阻塞网络中的接口,造成链路带宽无法充分利用。
解决方案
为构建可靠、易管理、资源利用率高、易于扩展的交换网络,引入交换机堆叠(Stack)、集群(CSS)技术。
注意事项 1)CSS 与 iStack 是华为命名。在思科中,采用其他命名。 2)该笔记将采用华为术语来记录笔记;
原理简述
Intelligent Stack,iStack
解释: 堆叠(iStack,Intelligent Stack):将多台支持堆叠特性的交换机,通过堆叠线缆连接在一起,从逻辑上变成一台交换设备,作为一个整体参与数据转发。
场景: iStack 针对华为盒式交换机。
Cluster Switch System,CSS
解释:CSS(Cluster Switch System,集群交换机系统),又称为集群,是指将两台支持集群特性的交换机设备组合在一起,从逻辑上组合成一台交换设备。
范围: CSS 针对华为框式交换机,且仅支持两台设备。
特性说明
性能提升
使用堆叠、集群可有效提高资源利用率,获得更高的转发性能、链路带宽。 1)核心设备虚拟化为一台逻辑设备,同时转发流量。 2)汇聚到核心的所有链路使用链路聚合进行捆绑,均参与流量转发。 3)设备、链路利用率高。
性能提升:通过交换机堆叠,设备同时工作,充分提高链路带宽利用率,能够实现网络大数据量转发;
增强冗余
一台物理设备故障,其他设备可以接管转发、控制平台,避免了单点故障。 1)单台设备故障、链路故障不影响业务转发,流量将会被链路聚合负载分担到其他链路。 2)业务几乎感知不到中断。 提高冗余:冗余设备能够增加网络高可靠性;
简化管理
交换机多虚一:堆叠交换机对外表现为一台逻辑交换机,控制平面合一,统一管理,简化运维,方便管理。
逻辑设备之间使用链路聚合,无需再部署STP、VRRP。 降低了网络规划复杂度、设备配置复杂度 只需管理虚拟化之后的逻辑设备
转发平面合一:堆叠内物理设备转发平面合一,转发信息共享并实时同步。 1)交换机内部的表能够进行实时同步
跨设备链路聚合:跨物理设备的链路被聚合成一个Eth-Trunk端口,和[……]