抽象网络设备的原理及使用 网络虚拟化是 Cloud 中的一个重要部分。作为基础知识,本文详细讲述 Linux 抽象出来的各种网络设备的原理、用法、数据流向。您通过此文,能够知道如何使用 Linux 的基础网络设备进行配置以达到特定的目的,分析出 Linux 可能的网络故障原因。 Linux 抽象网络设备简介 和磁盘设备类似,Linux 用户想要使用网络功能,不能通过直接操作硬件完成,而需要直接或间接的操作一个 Linux 为我们抽象出来的设备,既通用的 Linux 网络设备来完成。一个常见的情况是,系统里装
overlay 网络是在Underlay网络上构建的一个逻辑网络,满足数据中心构建大二层网络的要求。
上次在内核net_device设备框架的一个缺陷文章中,描述了当前内核net_device框架的一个缺陷。后来内核的net模块的负责人David提交了一个commit “net: Fix inconsistent teardown and release of private netdev state”。这个commit关键的一点,就是给已经很庞大的net_device结构新增一个布尔变量“needs_free_netdev”。这个变量用于在函数netdev_run_todo中,判断是否需要释放netdev。这个变量的赋值,一般是在驱动的setup回调函数中赋值为true。
Linux Bridge 和物理网络一样,虚拟网络要通信,必须借助一些交换设备来转发数据。因此,对于网络虚拟化来说,交换设备的虚拟化是很关键的一环。 上文「网络虚拟化」已经大致介绍了 Linux 内核为了满足网络虚拟化的要求,实现了一套虚拟交换设备——Bridge。本文重点介绍下 Bridge 的加强版——Open vSwitch(OVS),并从 Bridge 过渡到 OVS 的缘由讲起,让大家有个全面的认识。 借助 Linux Bridge 功能,同主机或跨主机的虚拟机之间能够轻松实现通信,也能够让虚拟机
使用Linux上的网络设备模拟真实网络 随着云计算技术的发展,如何以类似物理网络的方式分割虚拟网络成为热点,物理网络也引入了更多支持虚拟化的网络技术,使得问题更加复杂。本文将阐述在 Linux 上如何模拟出传统网络及支持虚拟化技术的网络 ,并介绍其原理。 虚拟化环境中的网络问题 在提供 IaaS 服务的云计算环境中,每个用户都能得到一个虚拟的计算机,而这些虚拟机器以密集的方式运行在后台服务器集群中。虚拟机的一个特点是提供给用户类似于物理机器的体验,而现实世界中的物理机器能通过各种网络拓扑结构组网。如何在
OpenStack在这几年风生水起。随着核心模块稳定性的提高,OpenStack已经有了很多大规模商用的案例,所有与云相关的,无论是商用软件还是开源平台都在积极地寻求着与OpenStack的对接,OpenStack正在成为云计算业界事实上的IaaS标准。 在网络这一口,OpenStack经历了由nova-network到Quantum再到Neutron的演进过程。我们首先来简要地看看各个版本网络的特征: 1)Nova-network是隶属于nova项目的网络实现,它利用了linux-bridge(早期,
OpenStack在这几年风生水起。随着核心模块稳定性的提高,OpenStack已经有了很多大规模商用的案例,所有与云相关的,无论是商用软件还是开源平台都在积极地寻求着与OpenStack的对接,OpenStack正在成为云计算业界事实上的IaaS标准。 在网络这一口,OpenStack经历了由nova-network到Quantum再到Neutron的演进过程。我们首先来简要地看看各个版本网络的特征: 1 Nova-network是隶属于nova项目的网络实现,它利用了linux-bridge(早期,目前
使用Linux上的网络设备模拟真实网络 随着云计算技术的发展,如何以类似物理网络的方式分割虚拟网络成为热点,物理网络也引入了更多支持虚拟化的网络技术,使得问题更加复杂。本文将阐述在 Linux 上如何模拟出传统网络及支持虚拟化技术的网络 ,并介绍其原理。 虚拟化环境中的网络问题 在提供 IaaS 服务的云计算环境中,每个用户都能得到一个虚拟的计算机,而这些虚拟机器以密集的方式运行在后台服务器集群中。虚拟机的一个特点是提供给用户类似于物理机器的体验,而现实世界中的物理机器能通过各种网络拓扑结构组网。如何在虚拟
在某些场景中,我们希望在Linux服务器(CentOS / RHEL)上的同一网卡分配来自不同VLAN的多个ip。这可以通过启用VLAN标记接口来实现,但要实现这一点,首先必须确保交换机上添加多个vlan。
具体在上一章节中《learning vpp:解析创建vlan子接口代码(1)》我们介绍了vpp创建vlan子接口命令行及配置逻辑流程的,接下来,以qinq接口为例,学习三层vlan处理流程。
今天我们接着上节课介绍的 Linux 网络知识,继续来学习它们在虚拟化网络方面的应用,从而为后续学习容器编排系统、理解各个容器是如何通过虚拟化网络来协同工作打好基础。
5、内核源码(网络)阅读:tcp_input.c tcp_out.c tcp_ipv4.c tcp.c
OpenStack的Pike版本中引入了对switchdev的支持,实现了Open vSwitch硬件卸载offloading功能。本文简介一下网络硬件卸载。
VLAN是网络栈的一个附加功能,且位于下两层。首先来学习Linux中网络栈下两层的实现,再去看如何把VLAN这个功能附加上去。下两层涉及到具体的硬件设备,日趋完善的Linux内核已经做到了很好的代码隔离,对网络设备驱动也是如此,如下图所示:
XDP 是一种特殊的 eBPF 程序,在数据包处理上因为在协议栈之前就可以处理数据,所以有非常高的性能。
前言 本文先介绍一下VLAN Trunk的基本概念,以及OpenStack Neutron和OpenFlow based SDN是如何为Trunk port提供网络支持。OpenStack对VLAN Trunk的支持具体是什么?虽然OpenStack与容器,物理主机也做了集成,但是OpenStack最主要的应用还是虚机管理,而现代的操作系统,不论是Linux还是Windows,都支持将网卡配置成Trunk port。OpenStack对VLAN Trunk的支持就是指对OpenStack所管理的虚机的Tru
云网络发展早期,很多厂商的虚拟化网路方案基于内核模块来实现,这时的带宽通常从千兆到万兆,一般情况下还能够满足要求(SDWAN厂商华夏创新的网络加速就是在内核的PREROUTING上做的,性能还可以)。再后来,进入到25G时代了,基于内核的一些实现已经不能满足业务对网络吞吐的性能要求了,大约在2013~2018左右,很多厂商转向用DPDK实现,着实火了一段时间。到现在逐渐进入100G时代,会发现,无论大厂小厂,都逐渐开始转向智能网卡,网络特性offload到硬件,基本是当前和今后一段时间的主流。
一、Openstack网络基础 下面对Openstack和Neutron的介绍,要从几个关键词入手。 1. 三代网络 在网络这一口,OpenStack经历了由nova-network到Quantum再到Neutron的演进过程。我们直观地来看看三代网络的对比分析: 📷 1)Nova-network是隶属于nova项目的网络实现,它利用了linux-bridge(早期,目前也支持OVS)作为交换机,具备Flat、Flat DHCP、VLAN三种组网模式。优点是性能出色,工作稳定,支持mu
iptables是一个配置Linux内核防火墙的命令行工具,它基于内核的netfilter机制。新版本的内核(3.13+)也提供了nftables,用于取代iptables
前言: 对于作者这种没有在通信设备方面工作经验的人来说,理解网桥还是挺困难的。 二层之上的数据处理,协议分层,都是相对容易一些(尽管TCP协议复杂的一塌糊涂),毕竟在linux的协议栈代码中,逻辑层次都很清晰。 然后网桥却不同,它是一个二层逻辑。同时,它又不是一个具体的设备(具体的设备,有连接的物理的port口,插入网线就能通数据)。 在虚拟化场景下,虚拟机需要发送、接受数据,和外部交互,就需要有这样的设备。所以有必要深入了解一下网桥的具体的工作原理。 分析: 1,concept 网上的很多说法,网桥类
一.前言 由于OpenStack Neutron项目本身的高度复杂性和抽象性,加之作为一名初学者,其理解能力有限。因此这里,阐述的仅是凤毛麟角而已,其目的是帮助、引导和我一样对Neutron又敬又畏的朋友们!如果本文中出现纰漏和错误,恳请指正。接受教育,本身也是一种学习。 在这里,需要指出的是,本文仅从宏观角度而言,起一个引导、抛砖引玉的作用。 ——即实现Neutron的整体原理是什么。 二.Neutron架构 Neutron项目共由约1千多个文件构成(k版)。 # tree -l 1 neutron/ 3
一.前言 由于OpenStack Neutron项目本身的高度复杂性和抽象性,加之我仅作为一名初学者,其理解能力有限。因此这里,阐述的仅是凤毛麟角而已,其目的是帮助、引导和我一样对Neutron又敬又畏的朋友们!如果本文中出现纰漏和错误,恳请指正。接受教育,本身也是一种学习。 📷 在这里,需要指出的是,本文仅从宏观角度而言,起一个引导、抛砖引玉的作用。 ——即实现Neutron的整体原理是什么。 好了,下面让我们一起踏上Neutron这条不归之路吧! 二.Neutron架构 Neu
前面的文章讲过了几种 Linux 虚拟网络设备:tap/tun、veth-pair、bridge,它们本质上是 Linux 系统 提供的网络虚拟化解决方案,今天要讲的 macvlan 也是其中的一种,准确说这是一种网卡虚拟化的解决方案。因为 macvlan 这种技术能将 一块物理网卡虚拟成多块虚拟网卡 ,相当于物理网卡施展了 多重影分身之术 ,由一个变多个。
LVS,Linux Virtual Server LVS是章文嵩博士发起的自由软件项目,它的官方站点是http://www.linuxvirtualserver.org。LVS工作在内核空间,实现TCP/IP协议群的四层路由,在Linux2.4内核以前,使用LVS时必须要重新编译内核以支持LVS功能模块,但从Linux2.4内核以后已经完全内置了LVS的各个功能模块,无需给内核打任何补丁,可以直接使用LVS提供的各种功能。
前言 KVM即Kernel Virtual Machine,最初是由以色列公司Qumranet开发。2007年2月被导入Linux 2.6.20核心中,成为内核源代码的一部分。2008年9月4日,Redhat收购了Qumranet,至此Redhat拥有了自己的虚拟化解决方案,之后便舍弃Xen开始全面扶持KVM,从RHEL6开始KVM便被默认内置于内核中。本文介绍KVM虚拟化平台部署及管理。 KVM简介 KVM特点 KVM必须在具备Intel VT或AMD-V功能的x86平台上运行。KVM包含一个为处理器提供
作者:William 孟祥龙,腾讯 CDG 系统架构师,从事云原生技术赋能金融科技。 本文是一篇云原生的关键知识科普,希望给大家提供一扇云原生的“窗户”,传达三个目标:1、透过窗户看到一棵大树代表:云原生的蓝图全貌;2、树上会有很多核心树干代表:云原生的关键技术;3、希望树干上能摘到果实代表:云原生对我的启发。 开始阅读文章前,请角色切换:设想你作为一位中小型 IT 公司 CTO,面对云原生技术决策,你需要回答两个问题: 1、为什么需要上云? 2、上云有何弊端? 作为一家公司的技术决策者,必须
最近升级换了上海电信50M套餐,送中兴B860A 4K IPTV机顶盒,光猫为中兴F420,电信施工完毕后,光猫的3、4口为IPTV接口,同时这两个接口也可以用来接普通的电脑上网。
前面一篇文章《learning:vpp实现dot1q终结功能配置》介绍了vlan dot1q终结子接口功能配置,下面参考vpp官方文档介绍一下创建vlan子接口的命令行。我们都知道vpp默认都是从物理或虚拟主接口收包,那么vpp如何识别vlan报文并将报文转发至vlan子接口上进行业务处理,本文将逐步展开学习。
话接上篇我们基于腾讯云主机搭建了DPDK+VPP的学习平台,接下来学习vlan dot1q终结功能的配置及流程转发流程。下面首先来了解一下BD域的一些概念。
概念 现在云计算大行其道,以kvm和docker为代表,极大地利用了机器的硬件资源,模拟了操作系统,而在海量虚拟机场景下,传统的硬件交换机越来越难以满足需求了。为了更加高效地利用网络,SDN应运而生。而SDN如何落地很大程度上取决于如何用软件交换机替代传统的交换机。 从名称来看,openvswitch就是一个用软件实现的虚拟交换机。一个物理交换机基本支持flows, VLANs, trunking, QoS, port aggregation, firewalling, 还有一些具备3层交换的功能,而虚拟环
在现代计算环境中,尤其是云计算☁️、容器化📦和微服务架构🏗️大行其道的时代,了解和掌握Linux虚拟网络设备变得极为重要。本文将深入探讨Linux虚拟网络设备的世界,带你了解它们是什么、包含哪些类型、为什么需要它们,以及如何在应用开发中充分利用它们。
注意: 本文中使用 ip 命令创建或修改的任何网络配置,都是未持久化的,主机重启即消失。
本文作者 / yogazhao 爱自然科学,赞叹于大师级码农高超的艺术境界;爱生命科学,诚服于古圣先贤的天地气象。 可能大多数瓜农都对《艺伎回忆录》比较熟悉,作为一个IT界的码农,当然也有自己类似的经历,该文分为上篇和下篇,此篇为《OVS BUG撸码回忆录•上篇》 回忆录缘起 以前为排查ovs的某个bug,无奈撸了把相关内核流程。当时因为调用链太多,脑袋栈溢出,处理不过来,所以临时用txt比较零散的记录了下关键点,做完了就丢了。后面想起来,无奈用everything找了好久才找到, 再读之,发现忘了很
▪ 1. SRIOV介绍 ▪ 2. 环境说明 ▪ 3. 开启SRIOV ▪ 4. 生成VF ▪ 5. VF直通 ▪ 6. 开启irqbalance ▪ 7. VM迁移 ▪ 8. 带宽限速 ▪ 9. 安全 ▪ 10. 其他使用限制 ▪ 11. 性能测试 ▪ 12. windows虚拟机使用VF ▪ 13. 运维命令 ▪ 14. 宿主屏蔽VF驱动 ▪ 附. 包转发率测试方法 ▪ 附. 参考文档
1. NSH-SFC概述 当前SFC的实现方案主要分为两种:一种基于NSH(network service header)。数据封装时,在L2或者L3数据后添加NSH头,然后进行L3或L4的封装。转发时,根据nshheader去转发SFC中的数据,整个过程都是依据同一个SPI(service path id)和递减的SI(service index);另一种无NSH头,在转发过程中,SFF需要不停对新来的数据包进行判断,确定是否属于某个SFC。ODL的子项目SFC就是第一种的实现。 1.1 NSH-SFC组
限于 Vlan 测试环境的缺失, F-Stack 项目初期未对 Vlan 进行完全的支持,仅支持配置是否进行 Vlan 的硬件卸载,当交换机配置了服务器返回的包无需打 Vlan tag 时可以正常使用,但如果交换机要求回报需要打 Vlan tag 则无法正常工作。 近期收到了网易 dragonorloong 同学关于 Vlan 的 Pull request,并且找到了 Vlan 测试环境对 Vlan 进行了完整的支持和测试,对以上问题进行了修复。本文将简单介绍 F-Stack
1. rx-checksumming:校验接收报文的checksum。
4. 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法?
作为网络领域的开发人员,我们经常要与Linux的数据报文打交道,一定要搞清楚数据报文是从何而来,又是如何离去。以前针对这个主题写过一些文章(主要是从源码角度),这次会更重视流程示意图(在细节上必然有所简化),争取在一篇文章中,就让大家理清数据报文的来龙去脉。
(一) lvs-fullnat fullnat模式的性能虽然不如dr模式,但是,fullnat支持多vlan,再rs是不同的vlan的情况下,明显使用fullnat是很好的选择。 fullnat的基本原理:假定用户端的ip是cip,vs上有两个ip,一个是vip,还有lip,lip可以是不同网段的一组ip,rs的ip为rip,当客户请求进来,经过vs的时候,再vs出发生一次snat,将cip转化成lip,再由vs到rs的时候又发生了一次dnat,将vip转化成rip,同样的请求返回时,也经历了两次nat,所以一共经历4次nat,从而达到了可以支持多vlan的情况。 client (cip) ---> vs (vip,lip) ---> rs (rip) <--- <--- 但是在这种情况下,只有一台vs,会导致该vs的负载过大,加入keepalived也只能提高稳定性,并不能解决高吞吐量的问题,因此一般会进行一个lvs集群,keepalived可以对rs进行健康检查,在lvs集群前面加上一个路由器或者交换机,使用ospf协议,用户请求到达路由器(或者交换机)后,通过原地址、端口和目的地址、端口的hash,将链接分配到集群中的某一台LVS上,LVS通过内网向后端转发请求,后端再将数据返回给用户,整个会话完成。rs之间的session表要定期同步,以防止其中一个rs出现问题而造成session丢失的情况。 fullnat模式要重新编译内核,下面是步骤: 一 编译内核: 1 从官网上下载rpm源码包,并用rpmbuild重新编译为二进制包 kernel-2.6.32-220.23.1.el6.src.rpm Lvs-fullnat-synproxy.tar.gz 网址:kb.linuxvirtualserver.org 1 rpm -ivh kernel-2.6.32-220.23.1.el6.src.rpm ###安装rpm包### 2 cd rpmbuild/ ###安装完后会在当前目录下 3 yum install -y rpm-build 4 cd /root/rpmbuild/SPECS/ 5 rpmbuild -bp kernel.spec ###解开源码打补丁### ************************************************************************** 6 yum install redhat-rpm-config patchutils xmlto asciidoc binutils-devel newt-devel python-devel perl-ExtUtils-Embed hmaccalc ###依赖性### ************************************************************************** 7 yum install asciidoc-8.4.5-4.1.el6.noarch.rpm newt-devel-0.52.11-3.el6.x86_64.rpm slang-devel-2.2.1-1.el6.x86_64.rpm cd rpmbuild/SPECS/ ************************************************************************** 8 rpmbuild -bp kernel.spec ###解决完依赖性后再次解开源码打补丁### 9 tar zxf Lvs-fullnat-synproxy.tar.gz 10 cd lvs-fullnat-synproxy/ 11 cp lvs-2.6.32-220.23.1.el6.patch ~/rpmbuild/BUILD/kernel-2.6.32-220.23.1.el6/linux-2.6.32-220.23.1.el6.x86_64/ 12 cd ~/rpmbuild/BUILD/kernel-2.6.32-220.23.1.el6/linux-2.6.32-220.23.1.el6.x86_64/ 13 patch -p1 < lvs-2.6.32-220.23.1.el6.patch ###打补丁### 14 vim Makefile 内容: EXTRAVERSION = -220.23.1.el6 ###扩展版本,你所编译的版本### 15 make 16 make modules_install ###安装模块 17 make i
云计算三大组成部分:计算、存储和网络。VXLAN属于云计算虚拟化网络的非常重要的一部分,现在大多数云计算虚拟化网络都是基于此协议实现数据中心互联和虚拟机迁移 ,在数量级很大的虚拟机上完成这些工作是一个非常大的挑战。主要面临以下挑战:
qemu-kvm 该软件包主要包含KVM内核模块和基于KVM重构后的QEMU模拟器。KVM模块作为整个虚拟化环境的核心工作在系统空间,负责CPU和内存的调度。QEMU作为模拟器工作在用户空间,负责虚拟机I/O模拟。 依赖包qemu-img 主要用来QEMU磁盘镜像的管理,如新建一块磁盘镜像给虚拟机。
底层网络 Underlay Network 顾名思义是指网络设备基础设施,如交换机,路由器, DWDM 使用网络介质将其链接成的物理网络拓扑,负责网络之间的数据包传输。
在cloudshare中,我们的服务是由许多部件组成的。当我们更改一个给定组件的代码后我们总需要测试它。我们小心地尝试着平衡单元测试和集成测试(或系统测试)的总量,以便能够实现合理的代码覆盖率和测试运行时间,最重要的是提升对我们代码的信心。
作者简介:冯龙飞,上海酷栈科技有限公司SDN产品经理,多年从事网络虚拟化相关功能的开发、定义、产品设计等相关工作,具有丰富的虚拟化网络技术和SDN产品设计经验。
Neutron概述 Neutron是 OpenStack项目中负责提供网络服务的组件,它基于软件定义网络的思想,实现了网络虚拟化下的资源管理。Neutron 的设计目标是实现“网络即服务(Networking as a Service)”,在设计上遵循了基于 SDN 实现网络虚拟化的原则,在实现上充分利用了 Linux 系统上的各种网络相关的技术。
①、网络是openstack最重要的资源之一,没有网络,虚拟机将被隔离。Openstack的网络服务最主要的功能就是为虚拟机实例提供网络连接,最初由nova的一个单独模块nova-compute实现,但是nova-compute支持的网络服务有限,无法适应大规模、高密度和多项目的云计算,现已被专门的网络服务项目Neutron所取代。
PFQ是一款针对Linux操作系统的功能性框架,可帮助研究人员捕捉网络传输数据包(10G、40G及以上),内核功能处理,内核绕过,以及获取多节点间的套接字/数据包。
领取专属 10元无门槛券
手把手带您无忧上云