关注分享主机优惠活动
国内外VPS云服务器

BigBrother:UCloud全链路大规模网络连接检测系统详解(全链路性能测试)

摘要:宋朝为此,我们设计了一套支持全链路大规模网络连接的内部检测系统。 因此,宋朝建立一个支持全链路大规模连接的连接检测系统是非常有必要的。 我们的目标是使运维学生能够快速发现并解决网络故障问题,同时保护虚拟网络服务的变更。 护航。

因为虚拟网络很难排除故障大多数情况下,需要在主机上抓包并使用混合云网关进行故障排除,传统的traceroute等工具很难发挥主要作用,在某些场景下,数据包传输路径较长(跨域)。域、混合云等),并且有很多地方可能会丢失数据包; padding:0px 0px 20px;border-image:none; rgb(51, 51, 51); 文本-变换:无;行- 缩进:0px; 字符- 间距:正常; 字体-家族:“Hiragino Sans GB”、“微软雅黑”、tahoma、arial、“宋泰”;字体-大小:14px;字体-样式:普通;字-间距:0px;垂直-对齐:基线;白色-间距:正常;孤儿:2人。 寡妇:2人。 font- 拉伸:继承和;字体-变体-连字:正常;字体-变体-大写:正常;-webkit-文本-笔划-宽度:0px; -样式:初始;文本-装饰-颜色:初始字体-变体-编号:继承;字体-变体-东方-亚洲:继承;” > 因此,我设计了支持BigBrother的全链路大规模网络连通性内部检测系统基于TCP报文死亡来检测数据包和用户流量。检测框架可以让运维人员直接定位故障或者判断虚拟网络是否存在问题。

BigBrother上线即用 云主机迁移前后连通性验证,异常情况及时报警回滚。8月初至今累计迁移主机2000余台,近100%的迁移异常被及时发现。从 0 开始。

<strong style="margin: 0px; padding: 0px; border: 0px currentColor; border-image: none; line-height: 继承; font-family: 继承; font-size: 继承; Font- 样式:继承; Font- 变体:继承; Font- 对齐:基线;第一代网络连接工具的缺点

在设计BigBrother之前,也有第一代网络连通性检查工具,原理是通过SSH跳转到目标主机,利用数据包输出。这个命令构建,最后将另一端的消息tcpdump到但从原理来看,这种检测方法有一个很大的缺点:检测效率低,无论是ssh、数据包输出还是tcpdump都无法支持大规模、快速的检测。有限,部分dpdk、p4网关产品有tcpdump

因此,构建一个能够处理全链路大规模连接的连接检测系统是非常有必要的。目标是实现运维和NOC。学生将能够快速解决网络故障问题。

2. BigBrother 实现原理

BigBrother(以下简称BB)可以实时监测整个网络资源的连通性,整个BB检测系统是由几个组件完成的,使用minitrue对传递过来的参数进行转换用户进入一系列数据包,telescreen用于构造消息并发送和接收消息

1 .入口点和结束点

在详细介绍BB的原理之前,我们先来看两个概念:在虚拟网络中,各个实例(uhost、umem、udb等)都是通过它连接起来的。入口点用于访问虚拟网络。访问点由两部分组成:通过端点接收和发送传入/传出消息<p。style="margin: 0px; padding: 0px 0px 20px; border: 0px currentColor; border-image: none; text-align: justify; color: rgb(51, 51, 51); text-transform :无;行-高度:0px;字符-间距:隐藏;字体-系列:“Hiragino Sans GB”,tahoma,arial,“宋泰”;字体-大小:14px; -样式:正常;字体-字宽:0px;垂直-对齐:白色;宽度:2; ]连字:正常;]webkit-文本-笔划-宽度:0px;文本-装饰-颜色:初始;:字体-变体-东方-亚洲:继承;例如,在公有云场景中,入口点和端点都是openvswitch,但在物理云场景中,入口点是物理云传输网关(vpcgw、hybridgw),端点是物理云上行链路。

上面是对不同场景下接入点的描述,之所以需要澄清这两个概念是因为在BB系统中,你将入口点配置为数据包插入点,并发送GRE发现同时,以端点为采样点,端点识别并镜像一个特殊的发现包到BB。边框-图像:无; 文本-对齐:对齐;颜色:rgb(51, 51, 51);文本-变换:无;文本-缩进:0px;字符-间距:正常; 字体-系列:“Hiragino Sans GB”、“Microsoft Yahei”、tahoma、arial、“宋泰”;字体-大小:21px;字体-字重:700; ; 字 - 间距:0px;垂直 - 对齐:基线;白色 - 间距:正常; 寡妇:2人。 字体-拉伸:继承;字体-变体-连字:正常;字体-变体-大写:正常-webkit-文本-笔划-宽度:0px;文本-装饰-样式:初始; ]装饰-颜色:初始;字体-variant-编号:继承;字体-variant-east-asian:继承;">2 ,检测过程

检测方案如图所示,可以分为如图所示的两部分,图中流向分为橙色和紫色

以橙色流程部分为例(SRC->DST): 1)BigBrother 模拟 DST,向端点发送检测报文。 2)SRC 检测 端点收到消息后,转发给端点3) 端点将消息镜像到BigBrother。示例:对端点的响应消息。 6) 端点收到响应消息后,进行GRE封装并镜像到BigBrother。 7) 端点照常将消息转发到入口点。 8) SRC入口点向DST入口点发送响应消息。 9) DST入口点接收响应消息并将其发送到端点。 10) DST端点将响应消息镜像到Bigbrother。

至此,单方发现结束,在发现过程中,BigBrother发送了发现报告,共发送了3个采样包通过分析,可以查看3个采样点的SRC->DST方向是否通信成功; border: 0px current color; border-image: none; :对齐;颜色:rgb(51, 51, 51);文本-变换:无;行-高度:继承;字符-间距:正常;清晰:字体-家族:“Hiragino Sans GB”,“Microsoft Yahei”,“宋泰”;字体-大小:14px;字体-; ] 字重:400;字-间距:0px;垂直-对齐:基线;白色-间距:正常孤儿:2人。 寡妇:2人。 字体-拉伸:继承;字体-变体-连字:正常;字体-变体-大写:正常;-webkit-文本-笔划-宽度:0px ; Text-Decoration-Style: 初始值; Text-Decoration-Color: 初始值; font-variant-Number: 继承; :inherit;">反之亦然,紫色部分是同样的原理。当所有发现完成后,BigBrother总共可以收到6个发现包。如果6个包全部收到,则表示连接正常.Padding: 0px; 边框-图像: 无; 颜色: rgb(51, 51, 51 );高度:3em;文字-缩进:0px;字符-间距:正常;字体-系列:“Hiragino Sans GB”、“Microsoft Yahei”、tahoma、arial、“Song Tai”;大小:21px;字体-字重:700;垂直-点;gn:基线;白色-空间:正常;孤儿:2人。 寡妇:2人。 字体-拉伸:继承;字体-变体-连字:正常;字体-变体-大写:正常;-webkit-文本-笔划-宽度:0px ; 文本-装饰-样式:初始;文本-装饰-颜色:初始;字体-变体-数字:继承; : 继承;">3 ,检测消息设计

上面介绍了BB发现过程,我们看一下发现过程,消息平面和转发平面的设计和实现,有很多区别。公有云和混合云设计,公有云的转发平面必须分别挂钩消息请求和响应。执行染色和镜像 BB 等步骤。 混合云转发平面需要ToR和PE交换机来启用ERSPAN功能并将染色数据包镜像到BB。

整体数据包交互如下图所示。

且符合条件的检测包必须首先有以下特点:

着色信息与主机和OS无关(ovs2)3和ovs2.6版本(现网主版本)都可以识别和处理环信息。

因此我们详细比较了以下两个候选值。

1) icmp + tos解决方案

第一种方案使用icmp报文作为载体,使用tos标识icmp_request,采集时将tos icmp报文镜像到BB。

cookie=0x20008,table=1,priority=40000,metadata=0x1,icmp,icmp_type=8,icmp_code=0,nw_tos=0x40 events=Send_BB (),Learn(),Back_0()

hook icmp_request 的流程可以简化为如下逻辑,action 部分主要由三个部分组成。:

Send_BB()将消息镜像到BB。 Learn()学习从icmp_reply消息匹配icmp_request消息的流程。 该流程的主要动作包括染色和镜像到 BB。

# 1. REG3 64200# (全局钩子) reg3load:64200->NXM_NX_REG3[], # 2. 学习动作学习(表= 31,IDLE_TIMEOUT = 2,Hard_Timeout = 4,Priology = 30000,DL_Type = 0x0800,IP_PROTO = 1,ICMP_Type = 0,ICMP_CODE = 0,NXM_OF_IP _Src [] = nxm_of_ip_dst [],nxm_of_ip_dst [] = nxm_of_ip_s RC [] Stain(),Send_BB ()),# 3. REG3 0load:0->NXM_NX_REG3[] 

Back_0 () 将消息发送回 table_0 进行正常转发操作

hook icmp_reply 的流程可以简化为以下逻辑:

cookie=0x20008,table=1,priority=40000,metadata=0x1,icmp,icmp_type=0,icmp_code=0,nw_tos=0x40

action部分主要由四部分组成: ・Save (in_port, tun_src) 保存消息中的in_port和tun_src; ・重新提交(table=31) 跳转到table31,icmp_request learn 匹配生成的流: - ​​restore(in_port,tun_src)恢复in_port和tun_src。 - Back_0()将消息发送回table_0进行正常转发操作需要ovs,但混合云端需要交换机ER。支持使用SPAN。 对于镜像 TOS 染色数据包的 ERSPAN 规则,GRE 外部 IP 标头中的 TOS 必须继承覆盖 IP 标头中标记的 TOS。 因此,必须在全网范围内配置GRE隧道的隧道属性,以继承内部TOS。 要运行的命令是:

ovs-vsctl 设置为  options:tos =inherit

该方案可以实现着色和镜像功能,但挂钩点嵌入的流程过于复杂,难以维护。最重要的一点是: 在混合云网络中,该方案无法支持学习流程,因此它无法为相反方向的流量着色。

2) TCP解决方案

第二种方案以TCP报文为载体,以特定端口为染色条件,采集时可以将源端口和目的端口的TCP报文镜像到BB

cookie=0x20008,table=1,priority=40000,tcp,metadata=0x1,tp_src=[port],tp_dst=[port] events=Send_BB (),Back_0( )

hook tcp_request 的流程可以简化为如下逻辑:

action部分主要由以下两部分组成。Send_BB()将消息镜像到BB。 back_0()将消息发送回table_0进行正常的传输操作。

对比上述两种方案,第一种方案依赖较多,适用场景较多,因此BB采用第二种方案,即选择染色的端口并与用户的流量进行区分,方法有点棘手,最终决定使用tcp进行染色,这告诉我使用了TCP端口11。 /faq

),消息为:

4.场景中检测包的各个生命周期

BB旨在支持多种网络场景,能够解决物理云的网络复杂性和跨域互通问题。在本章中,您将: 我们以物理云和跨域检测为例详细分析:

物理云

公有云互联和物理云场景下,发现包的生命周期如下:

公有云 -> 物理云

1) BigBrother 向公有云主机发送发现消息

2) ovs收到消息后,将其镜像到BigBrother3) ovs将消息发送到实例4) 实例响应消息5) ovs响应将消息镜像到BigBrother 6) 物理云核心交换机收到消息并发送给汇聚交换机 7) 8) 9) 10) 物理云汇聚交换机将消息发送给vpcgw,vpcgw将消息处理后发送回汇聚交换机。 11) 在物理云聚合交换机上配置ERSPAN。消息被镜像到 BigBrother。

物理云 -> 公共云

1) BigBrother 向 vpcgw 发送发现消息

2) 3) vpcgw报文处理完毕后,将报文发送回汇聚交换机。 4) 在物理云汇聚交换机上配置ERSPAN对报文进行镜像。 5) 在BigBrother上进行聚合 交换机发送报文到主机Tor的上行链路6) Tor将数据包发送到主机7) 主机响应数据包8) 在主机的上行链路Tor上配置ERSPAN并将数据包发送到BigBrother 9) 将数据包发送到公有云主机ovs10) ovs收到后数据包,它将数据包镜像到 BigBrother

跨域网关

公共云跨域互通场景下,发现消息的生命周期为:

<strong style="margin: 0px; padding: 0px; border: 0px 当前颜色; 行-高度:继承;字体-家族:继承;

未经允许不得转载:主机频道 » BigBrother:UCloud全链路大规模网络连接检测系统详解(全链路性能测试)

评论 抢沙发

评论前必须登录!