几天有人在微信群里询问bond相关的一些问题,在上家公司使用过bond功能,但当时是基于vpp 16.9版本。最近看了一下21.10版本的发现差异很大,bond node节点跳转方式完全不同了。本文基于21.10搭建环境,通过cli来配置和验证bond功能。
下面内容来自华为配置文档介绍以太网链路聚合的定义及目的。
1、定义
以太网链路聚合Eth-Trunk简称链路聚合,它通过将多条以太网物理链路捆绑在一起成为一条逻辑链路,从而实现增加链路带宽的目的。同时,这些捆绑在一起的链路通过相互间的动态备份,可以有效地提高链路的可靠性。
2、目的
随着网络规模不断扩大,用户对骨干链路的带宽和可靠性提出越来越高的要求。在传统技术中,常用更换高速率的设备的方式来增加带宽,但这种方案需要付出高额的费用,而且不够灵活。
采用链路聚合技术可以在不进行硬件升级的条件下,通过将多个物理接口捆绑为一个逻辑接口,达到增加链路带宽的目的。在实现增大带宽目的的同时,链路聚合采用备份链路的机制,可以有效的提高设备之间链路的可靠性。
链路聚合技术主要有以下三个优势:
1、增加带宽:链路聚合接口的最大带宽可以达到各成员接口带宽之和。
2、提高可靠性:当某条活动链路出现故障时,流量可以切换到其他可用的成员链路上,从而提高链路聚合接口的可靠性。
3、负载分担:在一个链路聚合组内,可以实现在各成员活动链路上的负载分担。
vpp bonding特性支持以下可选项目
1、mode:active-backup。此模式使用主备策略(热备)。在所有bond的物理网卡中,同一时刻只有一张网卡被激活,当且仅当活动网卡失效时才会激活其他的网卡。这种模式下做bond的两张或多张网卡的MAC地址和Bond虚拟网卡的MAC地址相同,而Bond的MAC地址是Bond创建启动后活动网卡(Active Slave)的MAC地址。这种模式要求主备网卡能快速的切换,即当主网卡出现故障后能迅速地切换至备用网卡。
2、mode:lacp:动态链接聚合。动态LACP汇聚是一种系统自动创建/删除的汇聚,不允许用户增加或删除动态LACP汇聚中的成员端口。只有速率和双工属性相同、连接到同一个设备、有相同基本配置的端口才能被动态汇聚在一起。即使只有一个端口也可以创建动态汇聚,此时为单端口汇聚。动态汇聚中,端口的LACP协议处于使能状态。
- load-balance l2 | l23 | l34。#支持分担模式。
- numa-only:只有lacp模式下支持numa-only配置。
3、mode xor 平衡策略
表示XOR Hash负载分担,Hash模式支持如下:load-balance l2 | l23 | l34。#支持分担模式。
4、mode round-robin:此模式使用轮询策略,即顺序的在每一个被bond的网卡上发送数据包,这种模式提供负载均衡和容错能力。Bond0可以保证bond虚拟网卡和被bond的两张或多张物理网卡拥有相同的MAC地址,其中bond虚拟网卡的MAC地址是其中一张物理网卡的MAC地址,而bond虚拟网卡的MAC地址是根据bond自己实现的一个算法来选择的。
5、mode broadcast
使用广播策略,数据包会被广播至所有Slave网卡进行传送。
利用wmware虚拟机搭建bond测试环境,每个虚拟机上存在5个虚拟网卡,其中2个绑定内核(1个用于ssh登录,1个用于和vpp接口连接测试),其余给vpp绑定。具体如下图:
1、虚拟机1配置
#创建bond接口并设置为up
create bond mode xor load-balance l34 hw-addr 11:22:33:44:55:66 id 2
set interface state BondEthernet2 up
#设置wan1和wan2up,并加入bond2接口。
set interface state GigabitEthernet13/0/0 up
set interface state GigabitEthernet1b/0/0 up
bond add BondEthernet2 GigabitEthernet13/0/0
bond add BondEthernet2 GigabitEthernet1b/0/0
#配置bond接口ip地址
set interface ip address BondEthernet2 192.168.100.1/24
#设置到learningvpp2的路由
ip route add 200.1.2.0/24 via 192.168.100.2
#设置与内核ens161连接接口并设置ip地址。
set interface state GigabitEthernetb/0/0 up
set interface ip address GigabitEthernetb/0/0 200.1.1.1/24
#设置内核ens161接口ip及配置到learning vpp2路由。
ifconfig ens161 up
ifconfig ens161 200.1.1.2/24
ip route add 200.1.2.0/24 via 200.1.1.1 dev ens161
2、虚拟机2配置
create bond mode xor load-balance l34 hw-addr 11:22:33:44:55:77 id 2
set interface state GigabitEthernet13/0/0 up
set interface state GigabitEthernet1b/0/0 up
set interface state BondEthernet2 up
bond add BondEthernet2 GigabitEthernet13/0/0
bond add BondEthernet2 GigabitEthernet1b/0/0
set interface ip address BondEthernet2 192.168.100.2/24
ip route add 200.1.1.0/24 via 192.168.100.1
set interface state GigabitEthernetb/0/0 up
set interface ip address GigabitEthernetb/0/0 200.1.2.1/24
ifconfig ens33 up
ifconfig ens33 200.1.2.2/24
ip route add 200.1.1.0/24 via 200.1.2.1 dev ens33
上面我们创建bond接口是设置模式xor,(balance-xor) XOR policy(平衡策略),lb设置l34(使用ip层+四层hash分担因子)。分别使用ping 202.1.2.1和202.1.2.2来测试分担情况,使用trace来查看流程。
trace节点后发现当前版本BondEthernet2-output后面未显示后面处理逻辑了。查看了一个trace代码BondEthernet2-tx 是作为trace 起点来处理的。当手动设置BondEthernet2-tx时发现报错了。导致意思就是当前node不支持设置trace。node节点flags未置位。
learning_vpp1# trace add BondEthernet2-tx 10
trace add: node 'BondEthernet2-tx' doesn't support per-node tracing. There may be another way to initiate trace on this node.
#但是发现bond process node 置位了trace,此地一堆问号??
VLIB_REGISTER_NODE (bond_process_node)={
.function=bond_process,
.flags=VLIB_NODE_FLAG_TRACE_SUPPORTED,
.type=VLIB_NODE_TYPE_PROCESS,
.name="bond-process",
};
bond process node节点置位支持设置trace,但是bond porcess只是用来发送免费arp,此flags貌似也没有什么用途吧。
疑问:为什么不直接BondEthernet2-tx增加trace相关处理代码,代码中偏偏作为trace起点??
通过gdb来设置BondEthernet2-tx flags标识位来支持trace,可以支持trace设置。
#709是BondEthernet2-tx node索引。
set var vlib_global_main.vlib_mains[0]->node_main.nodes[709]->flags=2 + 1 << 8
1、在learning vpp1上基于内核ping200.1.2.1 在learning vpp2上设置trace流程如下,报文从bond接口GigabitEthernet13/0/0回应。
00:13:21:048851: dpdk-input
GigabitEthernet1b/0/0 rx queue 0
IP4: 11:22:33:44:55:66 -> 11:22:33:44:55:77
ICMP: 200.1.1.2 -> 200.1.2.1
tos 0x00, ttl 63, length 84, checksum 0xf909 dscp CS0 ecn NON_ECN
fragment id 0xaf99, flags DONT_FRAGMENT
ICMP echo_request checksum 0x2aea id 21077
00:13:21:048934: bond-input
src 11:22:33:44:55:66, dst 11:22:33:44:55:77, GigabitEthernet1b/0/0 -> BondEthernet2
00:13:21:048976: ethernet-input
IP4: 11:22:33:44:55:66 -> 11:22:33:44:55:77
00:13:21:049009: ip4-input
00:13:21:049037: ip4-lookup
00:13:21:049066: ip4-local
00:13:21:049091: ip4-icmp-input
00:13:21:049118: ip4-icmp-echo-request
00:13:21:049150: ip4-load-balance
fib 0 dpo-idx 13 flow hash: 0x00000000
ICMP: 200.1.2.1 -> 200.1.1.2
tos 0x00, ttl 64, length 84, checksum 0x1026 dscp CS0 ecn NON_ECN
fragment id 0x977d, flags DONT_FRAGMENT
ICMP echo_reply checksum 0x32ea id 21077
fib 0 dpo-idx 2 flow hash: 0x00000000
ICMP: 200.1.2.1 -> 200.1.1.2
tos 0x00, ttl 64, length 84, checksum 0x1026 dscp CS0 ecn NON_ECN
fragment id 0x977d, flags DONT_FRAGMENT
ICMP echo_reply checksum 0x32ea id 21077
00:13:21:049197: ip4-rewrite
tx_sw_if_index 4 dpo-idx 2 : ipv4 via 192.168.100.1 BondEthernet2: mtu:9000 next:3 flags:[]
00:13:21:049221: BondEthernet2-output
Packet 5
00:13:21:049248: BondEthernet2-tx
src 11:22:33:44:55:77, dst 11:22:33:44:55:66, BondEthernet2 -> GigabitEthernet13/0/0
2、在learning vpp1上基于内核ping200.1.2.2,在learning vpp2设置trace流程,只显示从内核回应的reply报文,上从bond接口GigabitEthernet1b/0/0回应。
00:13:17:374058: dpdk-input
GigabitEthernetb/0/0 rx queue 0
00:13:17:374103: ethernet-input
00:13:17:374142: ip4-input
ICMP: 200.1.2.2 -> 200.1.1.2
tos 0x00, ttl 64, length 84, checksum 0x19cf dscp CS0 ecn NON_ECN
fragment id 0xcdd3
ICMP echo_reply checksum 0xbfb id 21076
00:13:17:374169: ip4-lookup
00:13:17:374195: ip4-load-balance
00:13:17:374246: BondEthernet2-output
ICMP echo_reply checksum 0xbfb id 21076
Packet 3
00:13:17:374271: BondEthernet2-tx
src 11:22:33:44:55:77, dst 11:22:33:44:55:66, BondEthernet2 -> GigabitEthernet1b/0/0
上面1,2可以看到报文在bond下两个接口进行了分担处理。这种验证也比较勉强,只有2个流。理论上应该设置多条流来验证。环境因素就不进行验证了。
通过上面场景1的trace流程来梳理bond的处理逻辑如下所示:
1、华为eth-trunk配置手册https://support.huawei.com/enterprise/zh/doc/EDOC1000178154/c1b2412c
2、H3c链路聚合配置手册http://www.h3c.com/cn/d_201108/723437_30005_0.htm
3、LInux系统bond模式介绍:https://www.cnblogs.com/yanling-coder/p/11867123.html
T之家 7 月 11 日消息,微软公司在 7 月补丁星期二发布的 Windows 10、Windows 11 系统累积更新中,修复了追踪编号为 CVE-2024-38112 的零日漏洞。
该零日漏洞由 Check Point Research 的安全专家李海飞(Haifei Li,音译)于 2023 年 1 月发现,是一个高度严重的 MHTML 欺骗问题,有证据表明有黑客在过去 18 个月里,利用该漏洞发起恶意攻击,可以绕过 Windows 10、Windows 11 系统的安全功能。
该专家发现网络攻击者通过分发 Windows Internet 快捷方式文件(.url),以欺骗 PDF 等看起来合法的文件,用户一旦点开这些文件,就会下载并启动 HTA 以安装密码窃取恶意软件。
Internet 快捷方式文件只是一个文本文件,其中包含各种配置设置,如显示什么图标、双击时打开什么链接等信息。保存为 .url 文件并双击后,Windows 将在默认网络浏览器中打开配置的 URL。
不过攻击者发现可以通过在 URL 指令中使用 mhtml: URI 处理程序,来强制 Internet Explorer 打开指定的 URL,如下图所示:
IT之家注:MHTML 是一种 "聚合 HTML 文档的 MIME 封装" 文件,是 Internet Explorer 中引入的一种技术,可将包括图像在内的整个网页封装成一个单一的档案。
攻击者使用 mhtml: URI 启动 URL 后,Windows 会自动在 Internet Explorer 中启动 URL,而不是默认浏览器。
漏洞研究人员 Will Dormann 称,在 Internet Explorer 中打开网页会给攻击者带来额外的好处,下载恶意文件时安全警告较少。
尽管微软早在两年前就宣布停止支持该浏览器,并以 Edge 代替其所有实用功能,但这款过时的浏览器仍可被恶意调用和利用。
互联网高速发展的今天,我们通过浏览器可以看到各种各样的网站,包含了各式不同的领域还有内容,通过点击网站上的标签和栏目我们就能够很方便地看到网站上显示的各种数据,而这些都是建立在HTML这种标记语言的基础上做到的。
HTML的英文全称为Hyper Text Markup Language,中文称作超文本标记语言,是一种专门用来建立网站的标识语言。其中包括了许多标签将分散的网络数据连接到一起,聚合同一之后形成了我们现在所看到的网页。
看到这里是不是有许多朋友想要知道这个HTML语言该怎么去学习呢?是需要找老师统一学,还是去图书馆找专业书籍自己学好呢?不用担心,因为今天要给大家推荐的就是一个专门为大家提供各种编程语言教程的学习网站。
这个网站名叫 runoob,直接在浏览器上搜索即可找到。
图片来自RUNOOB网页截图
在首页可以看到该栏目的第二个就是关于HTML的学习教程,点击左边的方框可以调整你的课程进度,在第一章节的教程中很清晰地讲解了什么是HTML,以及告诉了你一些关于网站建立的小知识。
下方的提示框会给你提供一些对HTML零基础新手的科普,关于这种标记语言应该如何进行保存,如何查看文件后辍名,如何打开代码文件等等,还会提供一些专用工具供你学习使用。同时网站会给你简单介绍一些网页编程语言的区别,还有各种用途上的区分,非常地详细。
图片来自RUNOOB网页截图
在第三章节的编辑器一栏里,会提供给你一些HTML的专用编辑器,例如VS Code,还有sublime text 等实用工具,在后面会教你如何将这些HTML必备编辑器下载并安装,然后在浏览器上面运行。
通过插件还有语言编程的格式我们就能够学会如何制作第一步的标题了,刚开始的一步比较简单,相信大家很快就能学会如何在网页上显示自己打入的文字了。之后进一步的学习就是关于如何调整文字段落,还有各种标识的使用。
图片来自RUNOOB网页截图
在如何进行文字排版编辑的方面,教程中也讲述得很详细,包括一些用户们常犯的错误,还有一些网页的实例,甚至是这个教学网站上的排版示范都会进行一一讲解。
更深入的章节会对如何进行图像排列,传输等方面进行细讲,教程中把大部分网站会使用到的技巧还有排版方式都分成了许多个小片段,方便大家能够对每个方面针对性地学习。这些内容并不多,几乎每一个片段都是用很直白的语言进行讲解,方便所有人都能够看懂,并且在下方都会有更详细的术语解析,还有一些比较难懂的点会举例解释。
图片来自RUNOOB网页截图
经过十几章节的教学之后,基本上能够掌握HTML语言的基本用法,还有一些简单的操作了,这个时候如果想要进阶学习的话还可以在网站上查找其他的进阶语言用法,例如CSS, JavaScript等等复杂一些的语言,相应的你也会学到更多如何运营网页的方法。
当然如果想要自己建立一个网站的话,还需要更多资源还有设备,例如高速的网络连接保持网页的稳定性,以及稳定的服务器,用来保证自己的网页24小时都能保持流畅可用。不过这些都是在学会了如何建立网页之后才考虑的事了。
现在网上也有许多编程教学,在网上自学一门知识一门语言变得非常方便,但是仅仅是拥有资源还是不够的。学习如何建立自己的网站还需要大量的努力以及知识的积累,通过不断的练习还有实践才能自如地使用,只有基础扎实,建立出来的网站才能够长久。但还需要大家能够行动起来,只有去学习去实践才能够真正学会东西,希望这个教学网站推荐能够帮到更多人!
*请认真填写需求信息,我们会在24小时内与您取得联系。