
SDN
文章平均质量分 81
软件定义网络
阿狸的家
我是阿狸,INTJ,一个专注自我提升的笔记博主
展开
-
OVS流表转发DNS流量
由于 IP 地址具有不方便记忆并且不能显示地址组织的名称和性质等缺点,人们设计出了域名,并通过域名解析协议(DNS,Domain Name System)来将域名和 IP 地址相互映射,使人更方便地访问互联网,而不用去记住能够被机器直接读取的 IP 地址数串。...原创 2022-08-06 16:51:56 · 771 阅读 · 0 评论 -
OVS底层实现原理
ovs在内核态datapath实现原创 2022-07-09 19:35:06 · 1684 阅读 · 0 评论 -
OVS流表转发DHCP流量
DHCP协议及报文动态主机配置协议(DHCP)是一种基于UDP协议且仅限于在局域网内部使用的网络协议,目的就是为了减轻TCP/IP网络的规划、管理和维护的负担,为局域网内部的设备分配IP地址、子网掩码、网关、DNS地址等网络信息。DHCP功能分为两个部份:一个是服务器端,端口号67 ,而另一个是客户端,端口号68DHCP的8种报文:①:DHCP DISCOVER:这是 DHCP 客户端首次登录网络时进行 DHCP 过程的第一个报文,用来寻找 DHCP 服务器。②:DHCP OFFER:DHCP服务原创 2022-03-19 15:29:34 · 4587 阅读 · 0 评论 -
OVS CT连接追踪实现NAT
OVS CT连接跟踪(connection tracking)CT连接跟踪中所说的“连接”,概念和 TCP/IP 协议中“面向连接”( connection oriented)的“连接”并不完全相同TCP/IP 协议中,连接是一个四层(Layer 4)的概念。TCP 是有连接的,或称面向连接的(connection oriented),发送出去的包都要求对端应答(ACK),并且有重传机制UDP 是无连接的,发送的包无需对端应答,也没有重传机制CT 中,一个元组(tuple)定义的一条数据流(flo原创 2022-03-12 10:27:18 · 9656 阅读 · 2 评论 -
OVS流表实现arp代答
物理拓扑1、PC封包:源ip:10.1.1.2,目的ip:20.1.1.2,源mac:fe:fe:fe:fe:fe:aa,目的mac:不知道,此时数据层将这个不完整的包缓存,发arp报文,注意,主机内核会检测到是跨网段访问,arp请求的是网关ip对应的mac2、ARP报文组成:数据层(源mac:fe:fe:fe:fe:fe:aa,目的mac:ff:ff:ff:ff:ff:ff)+ ARP头部(发送者ip:10.1.1.2,发送者mac:fe:fe:fe:fe:fe:aa,接收者ip:10.1.1.2(原创 2022-01-08 18:44:54 · 4176 阅读 · 2 评论 -
OVS Group组表
group作用1、存储多个动作:group匹配到一个合适的动作后可以执行多个动作,优化了流表一个匹配+一个动作的工作模式2、流量复制:group可将流量复制成多份,在广播、组播中广泛使用3、设置备用路径:group可对一条flow设置备份出接口,当识别主接口down,自动切换到备用出接口4、负载分流:group可以选择动作中的一个执行group组成Group Identifier:uint32,组表在交换机中的身份Group Type:组的类型Counters:数据包被组处理时跟新数值Ac原创 2022-01-02 11:00:13 · 2778 阅读 · 0 评论 -
resubmit和goto区别
一、resubmit和goto定义resubmit官方定义:goto官方定义:二、resubmit和goto区别根据官方文档定义我们可知,resubmit和goto都用作在流表间跳转,区别是goto只能跳转到当前table编号之后的流表,而resubmit没有限制三、resubmit和goto使用场合在一些场合下只能使用gotoovs-ofctl add-flow anet-br -O OpenFlow13 "table=5,priority=200,ip actions=write_me原创 2022-01-01 12:37:33 · 1487 阅读 · 0 评论 -
ovs流表实现icmp网关代答
ovs流表设计虚拟机 ping 任何ip前要发送arp广播请求目的mac,icmp报文对于同网段返回真实mac,对于其他网段返回的是网关的mac利用ovs流表将收到的icmp request报文,修改为icmp reply报文并原路返回cookie=0x0, duration=336.660s, table=17, n_packets=6, n_bytes=588, priority=24576,icmp,metadata=0xa/0xffffff,nw_dst=10.1.1.1,icmp_type=原创 2022-01-01 12:19:50 · 2085 阅读 · 4 评论 -
K8s网络模型
Docker网络模型容器容器不是模拟一个完整的操作系统,而是对进程进行隔离,对容器里的进程来说它接触到的各种资源都是独享的,比虚拟机启动快、占用资源少。DockerDocker是对Linux底层容器技术的封装,提供容器使用接口,docker将应用程序和该程序的依赖打包在同一个文件,即Docker image,运行Docker image就会生成一个Docker容器,程序在容器里运行就像在物理机或者虚拟机一样。容器与虚拟机对比虚拟机要模拟整台机器的操作系统,包括硬件资源;容器和主机共享操作系统,容原创 2021-07-18 16:36:27 · 3205 阅读 · 2 评论 -
ETCD实现及原理分析
etcd的优点:高可用性:保存各个服务的部署,运行信息,若他出现故障可导致集群无法变更,业务瘫痪数据一致性:集群之间没有单点故障,多节点之间保障数据一致性低容量:通过内存树仅存储key版本数据,value数据存储在内存增删改查功能:还可以监听数据变化运维的可维护性:提供API变更节点,降低运维成本从高可用、数据一致性、增删改查功能角度,zookeeper也是满足需求的,但是zookeeper不支持通过API变更,运维成本比较高,其次zookeeper是java编写,部署繁琐,zookeer使原创 2021-04-29 21:44:08 · 3799 阅读 · 1 评论 -
server和client通过grpc建立连接
一、文件结构server端和client端分布在两个不同的集群里,可以通过下发mq消息,或者grpc连接传递消息,这里介绍通过grpc建立连接,第一步是创建proto文件,要传递的方法和变量都在这里定义sendData/├── data.proto└── log二、创建data.proto文件注意,如果server端和client端不在同一集群,两边都要创建proto文件syntax = "proto3"; //指定protobuf的版本package sendDa原创 2020-10-26 09:02:53 · 2516 阅读 · 5 评论 -
golang etcd服务注册与发现
产生场景服务端架构最前面是 一台网关节点 ,网关后面是多台运行着一样的 服务的计算节点,客户端一般就是访问网关 ,然后 网关 就把流量 转发到 后面的计算节点上。如果后面的计算节点信息处理不过来的时候,我们需要加机器,最low的方法就是 加上一台服务器,然后 修改网关服务器的配置表 加上 新加的 服务器的IP 和端口,然后重启网关。但如果后面的机器一旦down 了,网关是不知道的,还会把流量转发到 down的机器上,造成服务的不可用,etcd可以避免硬件的单点故障或网络问题etcd注册etcd 是一个原创 2020-07-05 12:14:31 · 4718 阅读 · 2 评论 -
rpm包制作
rpm包制作流程1、指定rpm包制作位置,默认/root/rpmbuild文件夹里面包含BUILD、BUILDROOT、RPMS、SOURCES、SPECS、SRPMS文件夹2、将要打包的包放入rpmbuild/SOURCES文件夹下3、制作spec文件rpmbuild文件夹 %_topdirBUILD 编译rpm包的临时目录 %_builddirBUILDROOT 编译后生成的软件...原创 2020-05-07 22:57:18 · 2538 阅读 · 0 评论 -
git log统计代码量、打tag、rebase、merge、删除本地分支
三棵树(相当于3个文件夹,将文件在这3个文件夹搬来搬去)cmd下进入到某一目录下1—git clone xxx/gitwork2—cd gitwork3—git init (此时git文件夹已经自动生成,也是git的核心)4—手动创建README.md项目说明文档5—git add README.md(将READ.md说明文档放入暂存区域)6—git commit -m “此处添加...原创 2020-03-11 22:32:01 · 952 阅读 · 0 评论 -
python部署时py转pyc
在部署程序时将经常需要将py文件转换为pyc文件,这里需要引入compileall这个python包官网地址:https://docs.python.org/3/library/compileall.htmlimport sysimport compileallimport globimport os# 第一个参数:文件路径,legacy:True代表替换原py文件的位置c...原创 2019-10-22 16:55:45 · 826 阅读 · 1 评论 -
python的并发方式
并发:一个时间段内,多个程序在一个CPU上运行,但任意时刻只有一个程序在运行并行:基于多内核,在任意时刻多个程序运行在多个CPU上,彼此互不干扰在并发里的程序运行方式:多进程:利用计算机多CPU的特性,创建多个进程,彼此互不干扰,常用python库multiprocessing,但是创建进程需要占用一定的运行空间,开销较大 多线程:依附于进程,不占用资源,如果只有一个CPU,是无法实...原创 2019-10-22 12:53:22 · 266 阅读 · 0 评论 -
消息队列:RabbitMQ和Kafka
消息队列2种模式点对点:consumer主动对queue监控,检查是否收到消息 订阅模式:Queue主动推送,consumer收到消息后决定是否去Queue里pull(类似微信公众号的文章推送)优点:解耦(通过中间件通信) 冗余:可做缓存 扩展性 顺序保证 异步通信:consumer即使down掉,消息还是保存在Queue,等consumer恢复会自动处理消息Rabbit...原创 2019-10-19 14:23:41 · 394 阅读 · 0 评论 -
supervisor
Supervisor是用Python开发的一个client/server服务,是Linux系统下的一个进程管理工具,不支持Windows系统。它可以很方便的监听、启动、停止、重启一个或多个进程。用Supervisor管理的进程,当一个进程意外被杀死,supervisort监听到进程死后,会自动将它重新拉起,很方便的做到进程自动恢复的功能,不再需要自己写shell脚本来控制。应用场景:创建探针,与...原创 2019-10-18 17:33:14 · 1430 阅读 · 0 评论 -
python docker
docker常用命令docker ps -a 查看yare-demo的container-iddocker exec -it 03df4594c149 /bin/sh,进入到该container的代码里,然后正常使用docker top 03df4594c149 查看container里运行的进程(如下图就是postgres数据库)docker logs -f 3d23 查看doc...原创 2019-09-23 17:42:18 · 652 阅读 · 0 评论 -
telemetry
①:指定设备的版本,平台等信息②:根据设备的指定信息通过telemetry在控制器上创建item③:通过kafka收集设备的sr消息④:通过python的confluent_kafka包收集kafka里的监控设备信息分成sr-policy和sr-flow存到数据库⑤:从数据库获取数据返回apiSR-TE一个sr-policy会有多个candidate-path,选出比较原则最优的一条...原创 2019-10-09 20:58:17 · 3004 阅读 · 0 评论 -
SDN流量调度
拓扑:标准的两地三平面网络流量调度:对指定的数据流(包括上行流量和下行流量)在OA平面与TRS平面之间进行调度上行流量为客户端到服务器端的流量、下行流量为服务器端到客户端的流量下一跳信息根据SNMP的mib=1, 3, 6, 1, 4, 1, 9, 9, 187, 1, 2, 5, 1, 11, 1, 4拿到邻居的AS和IP,并用IP作为下一跳,来验证下一跳是否可达from ...原创 2019-09-27 09:57:20 · 4598 阅读 · 1 评论 -
snmp监控
SNMP即使网络管理发出一个request请求,设备response响应SNMPv1只有一种安全级别,团体名,类似于密码很容易被截获SNMPv2c对发出的报文除了目的ip都进行了加密SNMPv3添加安全认证和加密,(路由器而言,不通过认证,不允许你对我监控,对SNMP数据进行加密)支持用户名,密码和community监控软件snmpb可以直接从官网下载,点开树形的...原创 2019-09-25 10:43:57 · 3163 阅读 · 0 评论 -
Twisted
TwistedTwisted是以高性能为目标的异步网络编程框架。每一个路由器对应一个reactortwisted是一个用python语言写的事件驱动的网络框架,他支持很多种协议,包括UDP,TCP,TLS和其他应用层协议Reactorreactor是事件管理器,用于注册、注销事件,运行事件循环,当事件发生时调用回调函数处理。1. Twisted的reactor只有通过调用reac...原创 2019-09-24 17:27:59 · 592 阅读 · 0 评论 -
RabbitMQ队列
RabbitMQ并不是python内置的模块,而是一个需要额外安装的程序,安装完毕后可通过python中内置的pika模块来调用MQ发送或接收队列请求RabbitMQ收到一条message时不会直接发给queue, 它必须经过exchangeconsumer是周期性不断运行的程序,一直在监听等待处理rabbitmy发来的message,目前我遇到处理的情况是监听探针发来的BGP报文,主要针对异...原创 2019-09-24 17:05:02 · 211 阅读 · 0 评论