![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
网络通信
文章平均质量分 84
魏言华
这个作者很懒,什么都没留下…
展开
-
tc ebpf 实践
1. 用 tc 加载 BPF 程序给定一个为 tc 编译的 BPF 对象文件prog.o, 可以通过tc命令将其加载到一个网 络设备(netdevice)。但与 XDP 不同,设备是否支持 attach BPF 程序并不依赖驱动(即任何网络设备都支持 tc BPF)。下面的命令可以将程序 attach 到em1的ingress网络:$ tc qdisc add dev em1 clsact$ tc filter add dev em1 ingress bpf da obj pro...原创 2021-10-11 17:49:36 · 2325 阅读 · 0 评论 -
bcc安装和基本工具使用说明
目录0. bcc安装0.1 yum 安装0.2 源码安装1.cachestat2.cachetop3. funccount4. trace4.1 trace4.2 trace查看它的传入的参数bcc 提供的所有工具就都安装到 /usr/share/bcc/tools 这个目录中了。不过这里提醒你,bcc 软件包默认不会把这些工具配置到系统的 PATH 路径中,所以你得自己手动配置:$ export PATH=$PATH:/usr/share/bcc/too...原创 2021-10-11 17:30:39 · 4347 阅读 · 0 评论 -
XDP类型的BPF程序
经过上一节的内容,bpf程序和map已经加载到内核当中了。什么时候bpf程序才能发挥它的作用呢?这就需要bpf的应用系统把其挂载到适当的钩子上,当钩子所在点的路径被执行,钩子被触发,BPF程序得以执行。目前应用bpf的子系统分为两大类:tracing:kprobe、tracepoint、perf_event filter:sk_filter、sched_cls、sched_act、xdp、cg_skb接下来分析XDP类型的bpf程序的绑定和触发过程1.Loading via iprou..原创 2021-10-11 17:20:34 · 1200 阅读 · 0 评论 -
ebfp编程常用API介绍
目录1 用户态API1.1 加载prog1.2 查询prog的信息1.3 prog绑定到固定的dev上1.4 创建MAP1.5查询MAP1.6 Object Pinning(钉住对象)2 内核态API2.1 内核总体API2.2 bpf 加载2.2.1 prog 加载2.3 bpf map 操作2.3.1 map 创建2.3.2 map 查找2.3.3BPF_FUNC_map_lookup_elem2.4 obj pin(盯住对象)2...原创 2021-10-11 16:22:54 · 2420 阅读 · 0 评论 -
rdma网络介绍
原创 2021-09-27 17:09:03 · 233 阅读 · 0 评论 -
rdma 编程详解
1.相关名词解释1.1 rdma-core指开源RDMA用户态软件协议栈,(用户空间的驱动)包含用户态框架、各厂商用户态驱动、API帮助手册以及开发自测试工具等。rdma-core在github上维护,我们的用户态Verbs API实际上就是它实现的。https://github.com/linux-rdma/rdma-core1.2kernel RDMA subsystem指开源的Linux内核中的RDMA子系统,(内核空间的驱动)包含RDMA内核框架及各厂商的驱动。RDMA..原创 2021-09-24 09:41:38 · 3127 阅读 · 0 评论 -
rdam 原理解析
1.rdma介绍在网络融合的大趋势下出现的RoCE,使高速、超低延时、极低cpu使用率的RDMA得以部署在目前使用最广泛的以太网上。对比传统DMA的内部总线IO,RDMA通过网络在两个端点的应用软件之间实现buffer的直接传递;而对比传统的网络传输,RDMA又无需操作系统和协议栈的介入。RDMA可以轻易实现端点间的超低延时、超高吞吐量传输,而且基本不需要CPU、OS的资源参与,在高速网络环境下,不必再为网络数据的处理和搬移耗费过多资源。一言概之,RDMA三大特性:CPU offload原创 2021-09-22 19:57:26 · 2553 阅读 · 0 评论 -
rdma 介绍
1. DMA和RDMA概念RDMA是Remote Direct Memory Access的缩写,通俗的说可以看成是远程的DMA技术,为了解决网络传输中服务器端数据处理的延迟而产生的。RDMA允许用户态的应用程序直接读取或写入远程内存,而无内核干预和内存拷贝发生。起初,只应用在高性能计算领域,最近,由于在大规模分布式系统和数据中心中网络瓶颈越来越突出,逐渐走进越来越多人的视野。1.1 DMA传统内存访问需要通过CPU进行数据copy来移动数据,通过CPU将内存中的Buffer1移动到Buff原创 2021-09-22 18:15:15 · 3455 阅读 · 0 评论 -
基于DPDK实现VPC和IDC间互联互通的高性能网关
目录1 背景2 CLOUD-DPVS网关整体架构2.1 CLOUD-DPVS网关整体架构选型3 CLOUD-DPVS网关方案概述3.1 高可用方案的改进3.1.1 支持BFD探测3.2 负载均衡转发层适配3.2.1FULLNAT模式3.2.2 引入VPC的概念3.2.3 cloud-dpvs转发原理3.2.3 增加VXLAN模块4 CLOUD-DPVS后续工作5 参考文章1 背景随着云计算和网络技术的不断发展,越来越多的业务有着上云的需求。...原创 2021-09-12 18:00:47 · 672 阅读 · 0 评论 -
linux skb 结构和相关操作函数分析
sk_buff是Linux网络中最核心的结构体,它用来管理和控制接收或发送数据包的信息。各层协议都依赖于sk_buff而存在。内核中sk_buff结构体在各层协议之间传输不是用拷贝sk_buff结构体,而是通过增加协议头和移动指针来操作的。如果是从L4传输到L2,则是通过往sk_buff结构体中增加该层协议头来操作;如果是从L2到L4,则是通过移动sk_buff结构体中的data指针来实现,不会删除各层协议头。这样做是为了提高CPU的工作效率。1.skb_buff关键结构成员struct sk_b原创 2021-09-06 10:36:56 · 6243 阅读 · 0 评论 -
openvswitch datapath路径的actions处理流程分析
上一章节分析了datapatch中的流表匹配,根据匹配结果会有两个流程,如果匹配成功会执行actions动作,如果没有匹配的流量,会通过upcall流程上送用户态ovs,本章重点分析流表匹配成功时,ovs的actions处理流程。void ovs_dp_process_packet(struct sk_buff *skb, struct sw_flow_key *key){ const struct vport *p = OVS_CB(skb)->input_vport; struct d原创 2021-09-02 20:52:35 · 744 阅读 · 0 评论 -
openvswitch的转发数据面datapath中的流表源码分析
1.datapath的底层数据结构关系流表采用hash的方式排列存放,流表的hash头结点存储数据结构如下该hash 桶的初始化函数alloc_buckets (),生成的数据格式可参考如下2 流表创建流程分析2.1 flow table数据结构1> flow_table流表结构, 每个datapath都有一个流表2> table_instance流表实例, 其中的buckets用来存放具体的flow条目,存储方式参见FlexArray...原创 2021-08-30 18:32:51 · 768 阅读 · 0 评论 -
openvswitch的数据转发面datapath 收发包源码分析
上一章节分析了dp和vport的创建流程以及与内核的交互接口,本章重点分析下datapath的收发包流程1.收包处理流程以netdev类型接口为例进行源码分析,前面章节提到了在把dev加入到ovs时,注册了rx_handler收发包函数netdev_frame_hook|---netdev_port_receive |---ovs_netdev_get_vport(skb->dev) 通过skb->dev获取vport,在注册rx_handler时,附带了一个参数,...原创 2021-08-27 14:06:59 · 337 阅读 · 0 评论 -
OVS与datapath交互源码分析
前面章节分析了ovs与datapath通过netlink通信机制,本章节重点分析下ovs与datapath的具体交互流程。1.交互消息分类datapath在初始时注册6类消息,用于ovs与datapath消息传递。MODULE_ALIAS_GENL_FAMILY(OVS_DATAPATH_FAMILY);MODULE_ALIAS_GENL_FAMILY(OVS_VPORT_FAMILY);MODULE_ALIAS_GENL_FAMILY(OVS_FLOW_FAMILY);MODULE_AL原创 2021-08-26 18:02:59 · 708 阅读 · 0 评论 -
openvswitch 的patch端口与datapath类型
1.patch端口ovs的patch端口,用于连接两个网桥,命令如下ovs-vsctl add-port br10 patch3 -- set interface patch3 type=patch options:peer=patch4ovs-vsctl add-port br12 patch4 -- set interface patch4 type=patch options:peer=patch3patch类型端口,不会将其添加到datapath中,在port_add函数中有原创 2021-08-24 20:47:51 · 1427 阅读 · 0 评论 -
vswitch 与内核datapath通信机制 Generic Netlink介绍
1.netlink介绍netlink socket是一种用于用户态进程和内核态进程之间的通信机制。它通过为内核模块提供一组特殊的API,并为用户程序提供了一组标准的socket接口的方式,实现了全双工的通讯连接。netlink仅支持32种协议类型,目前内核中已经使用其中21个,对于用户需要定制特殊的协议类型略显不够,为此Linux设计了这种通用Netlink协议簇,用户可在此之上定义更多类型的子协议。#define NETLINK_ROUTE 0 /* Routing/device hook原创 2021-08-24 11:22:22 · 551 阅读 · 0 评论 -
ovs datapath 源码分析(一) internal/netdev/vxlan三类端口的注册创建
1 datapath数据结构表datapath为 ovs内核模块,负责执行数据交换,也就是把从接收端口收到的数据包在流表中进行匹配,并执行匹配到的动作。一个datapath可以对应多个vport,一个vport类似物理交换机的端口概念。一个datapth关联一个flow table,一个flow table包含多个条目,每个条目包括两个内容:一个match/key和一个action2数据流向一般的数据包在 Linux 网络协议中的流向为上图中的蓝色箭头流向:网卡eth0 收到数据..原创 2021-08-20 17:34:00 · 1491 阅读 · 0 评论 -
openstack ovs-vswitch收包流程
数据包从物理网卡进入虚拟机的流程物理网卡处理NIC 收到数据包,会先将高低电信号转换到网卡 FIFO 存储器。NIC 首先申请 Ring buffer 的描述,根据描述找到具体的物理地址,NIC 会使用 DMA 将数据包从 FIFO 队列写到该物理地址指向的空间,其实就是 skb_buffer 中。 此时数据包已经被转移到 skb_buffer 中,因为是 DMA 写入,所以内核并没有监控数据包写入情况,这时候 NIC 触发一个硬中断,每一个硬件中断会对应一个中断号,且指...转载 2021-08-19 15:29:12 · 2180 阅读 · 0 评论 -
linux 内核vxlan收发包流程
1.vxlan口收包处理流程前面几章详细介绍了vxlan接口的使用,而且已经知道vxlan是 MAC IN UDP中的封装,因此,在解封装之前,一切按照原有流程走,在此复习一下内核收发包流程(驱动层的数据处理这次不再解析,直接从__netif_receive_skb_core开始)#物理网卡处理中断,触发softirqi40e_intr └─napi_schedule_irqoff#i40e softirq把包放到per cpu backlog,触发softirqi40e_napi_p原创 2021-08-16 19:44:38 · 2913 阅读 · 0 评论 -
openvswitch 架构介绍
OVS架构用户空间主要组件有数据库服务ovsdb-server和守护进程ovs-vswitchd。kernel中是datapath内核模块。最上面的Controller表示OpenFlow控制器,控制器与OVS是通过OpenFlow协议进行连接,控制器不一定位于OVS主机上,下面分别介绍图中各组件ovs-vswitchdovs-vswitchd守护进程是OVS的核心部件,它和datapath内核模块一起实现OVS基于流的数据交换。作为核心组件,它使用openflow协议与上层OpenFlo.原创 2021-08-13 15:21:09 · 2246 阅读 · 0 评论 -
openvswitch实践四 mirror 端口镜像
镜像源select_all:布尔类型(true,false)。设置为 true 时,表示此网桥上的所有流量。 select_dst_port:字符串(端口名称)。表示此端口接收的所有流量。 select_src_port:字符串(端口名称)。表示此端口发送的所有流量。 select_vlan:整形(1-4096)。表示携带此VLAN标签的流量。镜像目的output_port:字符串(端口名称)。接收流量报文的观察端口。 output_vlan:整形(1-4096)。表示只修改VLAN标签,原创 2021-08-12 10:29:34 · 2913 阅读 · 0 评论 -
openvswitch实践三 vxlan内核态实现与openvswitch实现对比
1.vxlan内核态实现1.1 测试环境1.2 试验配置host 172.16.0.100brctl addbr br0ip addr add 10.1.1.2/24 dev br0ip link set dev br0 upip link add vxlan0 type vxlan id 1 group 239.1.1.1 dev eth1 dstport 4789brctl addif br0 vxlan0ip link set dev vxlan0 up..原创 2021-08-11 21:20:39 · 609 阅读 · 0 评论 -
openvswitch实践二 vxlan隧道互联互通
1.试验环境2.试验配置2.1 host 172.16.0.100 配置ovs-vsctl add-br br1ovs-vsctl add-br br2ovs-vsctl add-port br1 tap1 -- set Interface tap1 type=internalovs-vsctl add-port br2 tap2 -- set Interface tap2 type=internalip netns add ns1ip netns add ns2i.原创 2021-08-11 14:11:41 · 1776 阅读 · 0 评论 -
openvswitch 实践一 创建patch port连接ovs两个桥
实验环境配置ovs桥ovs-vsctl add-br br1ovs-vsctl add-br br2ovs-vsctl add-port br1 tap1 -- set Interface tap1 type=internalovs-vsctl add-port br2 tap2 -- set Interface tap2 type=internalip netns add ns1ip netns add ns2ip link set tap1 ...原创 2021-08-11 11:55:41 · 1538 阅读 · 0 评论 -
虚拟化网络
原创 2021-07-26 21:01:54 · 247 阅读 · 0 评论 -
VXLAN介绍
1背景1.1云计算成为企业IT建设新形态云计算,凭借其在系统利用率高、人力/管理成本低、灵活性/可扩展性强等方面表现出的优势,已经成为目前企业IT建设的新形态;而在云计算中,大量的采用和部署虚拟化是一个基本的技术模式。服务器虚拟化技术的广泛部署,极大地增加了数据中心的计算密度;同时为了实现业务的灵活变更,虚拟机VM(Virtual Machine)需要能够在网络中不受限制的迁移(如图1-1所示)...原创 2018-05-30 08:19:28 · 58663 阅读 · 3 评论 -
spider分布式引擎
一、Spider引擎简介1、spider 引擎是什么Spider引擎是一个内置的支持数据分片特性的存储引擎,支持分区和XA事务,该引擎可以在服务器上建立和远程数据库表之间的链接,操作起来就像操作本地的表一样。并且对后台数据库的引擎没有任何限制。目前spider引擎已经集成到了MariaDB中,最新的版本是spider3.2.37.2、spider架构图 3、spider优劣势分析优势分析 1 ...原创 2018-05-29 08:08:34 · 11256 阅读 · 0 评论 -
负载均衡
流量负载均衡介绍1 负载均衡产生的背景LB(Load Balance,负载均衡)是一种集群技术,它将特定的业务(网络服务、网络流量等)分担给多台网络设备(包括服务器、防火墙等)或多条链路,从而提高了业务处理能力,保证了业务的高可靠性。负载均衡技术具有一下优势:(1)高性能:负载均衡技术将业务较均衡的分担到多台设备或链路上,从而提高了整个系统的性能;(2)可扩展性:负载均衡技术可以方便的增加集群中设...原创 2018-05-28 10:08:23 · 46960 阅读 · 2 评论 -
TCP拥塞控制原理
发生拥塞控制的原因:资源的需求>可用资源作用:拥塞控制就是防止过多的数据包进入网络,这样可以使网络中的路由器或者链路不至于过载。拥塞控制的前提就是网络能够承受现有的网络负荷。对比流量控制:拥塞控制是一个全局的过程,涉及到链路上的所有主机和路由。流量控制往往指的是点对点通信的控制,是端对端的问题。流量控制:(1)tcp提供了一种机制可以让发送端根据接收端的实际接收能力来控制发送的速率,具体的操...原创 2018-05-12 18:50:35 · 5444 阅读 · 0 评论