自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

北风

IT小白

  • 博客(89)
  • 资源 (5)
  • 收藏
  • 关注

原创 rsync和inotify-tools实现两个linux机器的文件实时共享

Inotify 是一种强大的、细粒度的、异步的文件系统事件监控机制,linux内核从2.6.13起,加入了Inotify支持,通过Inotify可以监控文件系统中添加、删除,修改、移动等各种细微事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools就是这样的一个第三方软件。当服务主备或负载均衡的方式部署在两个服务器上时,服务会在本地生成文件,需要实现文件在两个机器实时同步,可以使用rsync和inotify-tools实现这一目标。(2) 设置免密登录。

2024-05-08 13:05:56 267 1

原创 双指针算法总结

(1) 分析:双指针从广义上来说,是指用两个变量在线性结构上遍历而解决的问题。狭义上说:对于数组,指两个变量在数组上相向移动解决的问题;对于链表,指两个变量在链表上同向移动解决的问题,也称为“快慢指针”问题。 (2) 双指针主要有以下几种类型: 快慢指针:指两个指针从同一侧开始遍历数组,将两个指针按照不同的策略移动,一快一慢,如快指针每次移动两个,慢指针一次移动一个。常见的如删除数组的重复项、判断链表的环路问题、求链表倒数第k个元素等。 删除有序数...

2021-12-10 20:38:16 763

原创 排序算法总结

1、直接插入排序 (1) 分析:假设一个待排序集合A={a,b,c,d,e,f…},插入排序就是初始时将a视为只有一个元素的有序子集和B;从b开始,依次和集合B的元素比较,找到其插入的位置,最终的有序集合B即为排序的集合。直接排序的最坏情况的时间复杂度:O(n2)。 (2) 应用场景:直接插入排序是稳定的,也就是说要排序的数中有两个相同的数,插入法进行排序后,两个相等数的位置不会互换,则A算法是稳定的,否则A不稳定,所以当实现一个排序且不想改变相对位置时可以使用直接插入排序。...

2021-11-23 21:42:57 608

原创 基于SDN的访问控制模块实现

一、背景1、访问控制访问控制技术,指防止对任何资源进行未授权的访问,从而使计算机系统在合法的范围内使用。意指用户身份及其所归属的某项定义组来限制用户对某些信息项的访问,或限制对某些控制功能的使用的一种技术。访问控制通常是系统管理员控制用户对服务器、目录、文件等网络资源的访问。2、防火墙防火墙是最常见的访问控制技术的实现,其通过设置一系列的访问过滤规则实现限制访问主体对客体的访问的功能。现有最常见的防火墙分为:包过滤防火墙和状态检测防火墙。(1)包过滤防火墙包过滤是指在网络层对每一个数

2021-10-25 10:32:16 4955 3

原创 基于python的MySQL和redis数据同步实现(redis做缓存)

一、背景原理1、MySQL数据库MySQL是一种关系型数据库,主要用于存放持久化数据,将数据存储在硬盘中,读取速度较慢。每次请求访问数据库时,都存在着I/O操作,如果反复频繁的访问数据库:会在反复链接数据库上花费大量时间,从而导致运行效率过慢;反复的访问数据库也会导致数据库的负载过高。所以,针对MySQL的缺点,衍生出了缓存的概念。2、redis数据库redis是一款非关系型数据库,是一种缓存数据库,数据存放在内存中,用于存储使用频繁的数据,这样减少访问数据库的次数,提高运行效率。所以red

2021-10-15 14:36:26 5354 3

原创 python MySQL操作(增删改查)

"""创建一个学生表,如下:CREATE DATABASE python_mysql_test01;CREATE TABLE tb_student( stu_id INT PRIMARY KEY NOT NULL, stu_name VARCHAR(20) NOT NULL, stu_birth DATE, stu_addr VARCHAR(100));插入一些数据:INSERT INTO tb_student VALUES (1001, '张三丰', '1990-12-15', .

2021-10-11 19:41:34 1352

原创 MySQL设计学生选课系统(关系型数据库概论)

/* 关系型数据库概论1、-- DQL、DDL、DML、DCLDQL数据查询语言: 用来查询表信息,select、from、whereDDL数据定义语言:用来创建数据库中的各种对象--表、视图,create table/view/index...DML数据操纵语言:插入(insert),更新(update),删除(delete)DCL数据控制语言:用来授予或回收访问数据库的某种特权,并控制数据库操纵事务发生的时间及效果,对数据库实行监视,授权(grant),收回权限(revoke)2、-- .

2021-10-10 20:49:13 11494 3

原创 python redis操作(五个基本类型、集群、管道、池、远程连接)

一、redis基本介绍1、介绍Redis:REmote DIctionary Server(远程字典服务器),是完全开源免费的,用C语言编写的,遵守BSD协议,是一个高性能的(Key/Value)分布式内存数据库,基于内存运行,并支持持久化的NoSQL数据库,是当前最热门的NoSQL数据库之一,也被人们称为数据结构服务器。Redis与其他key-value缓存产品有以下三个特点:Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。 Redis不仅仅支持

2021-09-30 22:48:23 1236

原创 Docker+Ovs构建SDN网络

一、背景知识关于Docker的基础知识和实验用到的Docker ryu镜像可以参考:Docker命令、基于Docker的SDN实验环境部署(1)_北风-CSDN博客Docker网络模式:本实验,主要利用两个Docker作为主机,OVS作为交换机,一个Docker作为控制器构建。构建的Topo如下所示。二、构建步骤(1)创建两个未配置网络的docker,命令如下。# 创建Docker01docker run -it --name host1 --network none .

2021-09-20 15:24:52 2207 1

原创 ryu--北向接口(流表的操作以及多控制器流表信息互通)

目标:(1)实现两控制器的流表互通(2)域内信息互通(主机ip)(3)控制控制器进行流表下发实现链路的切断与连接(3)控制控制器进行流表下发实现ip匹配流屏蔽拓扑:两个控制器分别位于两个docker中,利用docker进行模拟控制器;两个控制器程序利用socket同同一个服务端进行通信docker处理:创建两个docker,分别作为as1和as2的控制器,docker和宿主机之间共享同一存储空间,也就是进行数据卷挂载,方便在pycharm中进行python程序的编写,同.

2021-09-17 10:13:49 3302 4

原创 基于python爬虫下载网站在线视频

流程分析首先,对爬取流程进行分析,这里我们以某卫视的学习视频为例代码编写

2021-09-03 15:05:18 5147 1

原创 Docker命令、基于Docker的SDN实验环境部署(1)

背景Docker简介1、docker的作用2、docker常见命令介绍Docker镜像构建1、Dockerfile2、镜像代码发布镜像

2021-08-19 14:49:30 2146

原创 python 线程详解

一、线程1、什么是线程?线程:操作系统提供的抽象概念,是程序执行中一个单一的顺序控制流程,是程序执行流的最小单元,是处理器调度和分派的基本单位。一个进程可以有一个或多个线程,同一进程中的多个线程将共享该进程中的全部系统资源,如虚拟地址空间,文件描述符和信号处理等等。2、python如何实现多线程?python通常使用threading模块实现多线程,导入threading包,然后对象名= threading.Thread(target = 函数名) 创建线程对象,最后对象名.start()

2021-07-28 22:03:27 358 1

原创 ryu---北向接口(利用socket对外通信)

最近有人问ryu控制器如何实现与应用层(如web、app等)的通信,实际上,实现通信就需要利用SDN的北向接口,关于SDN的北向接口,各种文章的解释不一,难以理解。实质上,北向接口实现的功能就是和两个软件实体之间的通信无任何区别,也就是说,北向接口不需要任何新的协议,只要会写简单的socket编程就能轻易实现应用层与控制层之间的通信。下面我介绍一下如何使用python的socket编程实现控制器和应用层之间的通信。...

2021-07-27 17:32:26 1467 3

原创 python 进程详解

1、什么是进程?进程:操作系统提供的抽象概念,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。程序是指令、数据及其组织形式的描述,进程是程序的实体。程序本身是没有生命周期的,它只是存在磁盘上的一些指令,程序一旦运行就是进程。2、python如何实现多进程?在python中,利用multiprocessing可以实现多进程。multiprocessing是一个支持使用与threading模块类似的 API 来产生进程的包。multiprocessing包同时提供了本地和远程并发操...

2021-07-26 09:34:29 2518 1

原创 python---闭包、装饰器

闭包和装饰器是python中的概念,刚开始看时可能比较难理解,二者也是一个递进的关系,所以下面我先介绍闭包的概念,再解释装饰器的概念。1、闭包在"流畅的python"中对闭包有这样一句描述:闭包指延伸了作用域的函数,其中包含函数定义体的引用、但是不在定义体中定义的非全局变量。这里面最重要的概念就是延伸了作用域。那么接下来,如何理解闭包呢?首先,需要知道什么是函数的嵌套,所谓嵌套就是函数内定义函数,也就是如下所示格式:def outer(): a = 200 def

2021-07-05 09:53:04 193

原创 ryu实例---基于链路质量(时延)的最短路径转发

一、前言预备知识:(1) ryu网络拓扑发现:https://www.sdnlab.com/11576.html(2) ryu基于跳数最短路径转发:https://blog.csdn.net/weixin_40042248/article/details/116977397?spm=1001.2014.3001.5501(3) ryu网络时延探测:https://blog.csdn.net/weixin_40042248/article/details/117562160?spm=1001.

2021-06-09 16:04:42 4874 22

原创 ryu实例---网络时延探测

前面的博文写到了基于跳数的最短路径的案例实现,然而基于跳数的最短路径转发并未考虑网络链路的质量,所以针对这种情况,应该有一种基于链路zhi

2021-06-04 18:34:19 4228 12

原创 python创建二叉树及前中后序、层次遍历

"""二叉树的创建:(1)实现二叉树的链式存储结构,创建二叉树(2)二叉树的前中后序遍历"""class BinTree: # 二叉树的节点结构,包括存储数据、左指针、右指针 class TreeNode: __slots__ = {'_element', '_left', '_right'} def __init__(self, element, left=None, right=None): self._eleme.

2021-06-01 21:24:32 707

原创 python实现单链表的增、删、改、查

下面的介绍主要基于单链表进行的程序编写。单链表结构:链表的增删改查函数如下:class SinLinkedList: # 节点的数据结构,包含一个值和一个指针 class Node: __slots__ = {'_element', '_next'} def __init__(self, element): self._element = element self._next = None

2021-05-26 22:49:40 543

原创 python的栈和队列的实现代码

"""基于列表的栈实现"""class ArrayStack: # 初始化一个空列表 def __init__(self): self.data = [] # 返回栈的大小 def __len__(self): return len(self.data) # 若栈为空,返回True def is_empty(self): if len(self.data) == 0: r.

2021-05-19 11:05:48 194

原创 ryu实例---基于跳数的最短路径转发

参考网上的一些知识,本篇内容主要介绍如何利用networkx实现最短路径转发,同时介绍ryu如何获取链路拓扑。一、获取拓扑对于ryu控制器而言,获取链路拓扑的主要模块在ryu/topology目录下面,下面主要介绍接下来用到的api.py和switches.py。(1) api:api是ryu对开发者提供的获取链路信息的接口,api提供了get_switch(), get_link()方法,通过这两个接口,可以获取链路的交换机的信息和各个节点的链路信息,具体的代码如下。def get_

2021-05-18 19:10:10 5690 19

原创 ryu实例---ECMP的rr(轮询)算法实现

最近,做到一个实验,需要每隔一段时间,就改变数据的传输路径,如下图所示,主机之间的数据传输需要经过s1和s2两个交换机,交换机之间的链路有两条,实验是在这两条链路之间每隔10秒切换一次,也就是相当于ECMP的轮询算法(当然,若想以流为单位切换链路,比如说:上一个流经链路1下一条流经链路2,这种方式的轮询利用集线器的程序改变一下就可以实现)。轮询,即各个流在多条路径之间轮询传输。拓扑的端口对应关系:接下来,重点说明程序如何写,不再赘述一些关于拓扑构建和轮询的一些概念。一、程序SDN架

2021-05-15 10:47:36 3296 6

原创 ovs的生成树协议(STP)实验

一、相关概念(1) 概述为了提高网络可靠性,交换机网络中通常会使用冗余链路,冗余链路会给交换机带来环路风险,并导致广播风暴以及MAC地址表不稳定等问题,生成树协议STP(Spanning Tree Protocol)可以在提高可靠性的同时又避免环路带来的各种问题。随着局域网规模的不断扩大,越来越多的交换机被用来实现主机之间的互连。如果交换机之间仅使用一条链路互连,则可能会出现单点故障,导致业务中断。为了解决此类问题,交换机在互连时一般都会使用冗余链路来实现备份。 冗余链路虽然增强了网络的可靠性,

2021-05-08 22:08:19 2084 1

原创 ryu实例---网络聚合(LACP)

这一篇重点介绍ryu来实现网络聚合的功能,建议先阅读关于LACP的知识,可以参考上一篇博文:https://blog.csdn.net/weixin_40042248/article/details/116395325?spm=1001.2014.3001.5501一、拓扑构建在介绍程序之前,先介绍一下实验拓扑的构建。拓扑如下图所示,其中h1和交换机连接的两条链路绑定在一个逻辑平面之中,接下来的实验就是针对这两个链路进行。这个拓扑的构建,本实验选择namespace进行,新建h1-h4四个n

2021-05-07 21:22:44 1784 7

原创 ryu基础---ryu源码的解析

https://www.cnblogs.com/zxqstrong/p/4789105.html

2021-05-06 21:05:21 630

原创 LACP(网络聚合)与openflow group表Fast failover类型的对比试验

一、LACP:1、概念链路聚合控制协议LACP(Link Aggregation Control Protocol),是基于IEEE802.3ad标准的一种实现链路动态聚合与解聚合的协议,以供设备根据自身配置自动形成聚合链路并启动聚合链路收发数据,LACP模式就是采用LACP的一种链路聚合模式。聚合链路形成以后,LACP负责维护链路状态,在聚合条件发生变化时,自动调整链路聚合。具体工作方式参考(https://support.huawei.com/enterprise/zh/doc/EDOC11

2021-05-04 11:37:24 1329 1

原创 ryu实例---自学习交换机

前面的几篇博客介绍了hub、流表的操作、数据包的解析等知识(以下若有不明白之处,建议先把前几篇博客看完)。接下来,根据这些知识就可以编写自学习交换机的实例了。第一部分:相关知识转发表、路由表、ARP表之间的关系需要先行了解(https://cloud.tencent.com/developer/article/1173761)参考ryubook(https://github.com/Yang-Jianlin/ryu/tree/master/spec_book)OpenFlow 交换器会接受来

2021-04-21 20:59:17 1662 1

原创 转发表(MAC表)、ARP表、路由表总结

https://cloud.tencent.com/developer/article/1173761

2021-04-21 14:07:34 461

原创 ryu实例---流表的操作

本文章基于https://ryu.readthedocs.io/en/latest/ofproto_v1_3_ref.html里面的Modify State Messages的内容进行讲解的,即openflow1.3的流表的操作的简单实现。通过这里的讲解,可以实现控制器对交换机的流表的增加删除等操作。接下来,着重讲一下ryu如何实现对交换机的流表的操作。(重点以默认流表项的添加为例)第一部分:涉及的openflow知识在学习ryu之前,我认为初学者需要先大致的了解openflow协议,理解交换机

2021-04-18 19:39:56 5543

原创 ryu实例---数据包解析

本文章基于https://ryu.readthedocs.io/en/latest/writing_ryu_app.html里面的Packet library的内容进行讲解的,即数据包解析的简单实现。ryu包库可以帮助我们去解析和构造各种数据协议包。下面就着重讲一下,ryu如何对数据包进行解析。首先,数据包解析是指控制器对从交换机收到的数据包进行解析。那么这个数据包在哪呢,按照官网的给出的开发文档,我们知道数据包主要指的是msg.data,如下图所示。可以看出data数据是由一串16进制的数

2021-04-16 10:17:01 2322 1

原创 ryu实例---Hub

本文章基于https://ryu.readthedocs.io/en/latest/writing_ryu_app.html里面的第一个应用,即hub的简单实现。但是,按照这里的原程序,出现了一些问题,这篇文章里我给出了一些我自己的解决方案。接下来,我就按照官网的示例进行讲解。第一部分:代码新建一个类L2Switch,内容如下:from ryu.base import app_managerfrom ryu.ofproto import ofproto_v1_3class L2Sw

2021-04-14 18:51:44 1237 2

原创 基于Android的天气预报查询系统设计

早前模仿别人的做的一个APP,基于Android的天气预报设计,加上语音识别的功能,现在分享一下,希望可以给大家带来帮助。代码仓库:https://github.com/Yang-Jianlin/Hefeng-Xiyu1 UI设计1.1 城市选择界面设计城市选择界面设计,城市选择界面主要针对用户首次使用系统的初始城市设置和用户在使用过程中切换城市的设置,界面主要包括三个层次: 省、市、县(区) ,最终天气界面将显示所选县(区)的具体天气状况。当用户首次进入系统时,城市选择页面作为初始化城市设

2021-04-12 19:14:15 7274 10

原创 python Memcached用法示例

memcache是一套分布式的高速缓存系统,由LiveJournal的Brad Fitzpatrick开发,但目前被许多网站使用以提升网站的访问速度,尤其对于一些大型的、需要频繁访问数据库的网站访问速度提升效果十分显著。MemCache的工作流程如下:先检查客户端的请求数据是否在memcached中,如有,直接把请求数据返回,不再对数据库进行任何操作;如果请求的数据不在memcached中,就去查数据库,把从数据库中获取的数据返回给客户端,同时把数据缓存一份到memcached中(memcached客户

2021-04-08 19:59:18 726

原创 python udp socket解决服务端响应时间长的指数退避算法

UDP连接是一个不可靠的连接,也就是说,UDP通信过程中可能出现数据包丢失的情况,或者是服务端宕机后,客户端不知道服务端状态,仍然不停的访问服务端的情况。针对这一情况,UDP客户端必须选择一个等待时间,一旦超过这个时间间隔还未收到服务端的响应,就重新发送请求,若多次请求仍未收到服务端的响应,就认为服务端宕机。而且,由于数据丢包的主要原因在于网络拥塞,因此,客户端在等待时间内未收到服务端的应答,客户端重发不应该和上次一样,这样就会造成网络拥塞加剧,鉴于这种情况,客户端采用指数退避算法,使得重发数据包频率越来越

2021-03-31 22:29:18 1250 1

转载 生成器实现协程的行为

1、例子中的c.send(None),其功能类似于next(c),比如:>>> def num(): yield 1 yield 2 >>> c = num()>>> c.send(None)1>>> c.send(None)2>>> c.send(None)Traceback (most recent call last): File "<pysh...

2021-03-31 11:17:27 134

原创 python实现tcp socket多连接通信---进程、线程、协程

利用python实现socket通信,需要实现客户端和服务端。通常,服务端不仅仅是为一个客户端服务,可能同时为多个客户端提供连接服务,在python中常见的提供多连接的方式有进程、线程、协程以及select和poll实现的异步I/O。这篇文章,主要介绍使用进程、线程、协程实现的socket多连接通信。首先,这里先介绍一下进程、线程、协程的区别?(https://my.oschina.net/u/4543837/blog/4465255)进程:操作系统提供的抽象概念,是系统进行资源分配和调度的基本单位

2021-03-30 22:22:55 4483 5

原创 python获取Linux系统的网卡和对应的IP

1,联网状态下,这种方法Windows和Linux都可以使用import socketdef get_host_ip(): s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) try: s.connect(('8.8.8.8', 80)) ip = s.getsockname()[0] finally: s.close() return ipif __na

2021-03-26 08:59:51 1299

原创 python socket 编程

一、socket是什么?Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。socket通过各种函数实现数据封装,建立目标主机端口连接,在客户端的socket进行数据接收,将数据交付给目标主机。二、socket的基本参数和函数介绍1、Socket函数使用的格式为:socket(family,type[,protocol])(1)参数一:family 指定应用程序使用的通信协议的协议族,对于TCP/IP协议族,该参数为

2021-03-14 15:11:07 346 1

原创 python中*和**之间的区别和联系

def story1(*params): print(params)def story2(*params): print("There is a {job}, his name is {name}.".format_map(params[1]))def story3(**params): print(params)def story4(**params): print("There is a {job}, his name is {name}....

2021-03-10 11:34:42 1676

利用python socket实现五元组抓包实验数据

python socket实现多台主机的相互之间的tcp通信

2021-03-16

ovs-commands-reference.pdf

详细介绍了ovs的各种命令使用

2021-02-18

Smart_see(Android调试助手)

实现Android端和Windows端的通信,Android通信调试助手的开发,方便Android通信的验证和数据对比,就是利用Android开发一个数据端和Windows数据端进行通信。

2020-12-05

基于海康威视Android二次开发

最近的一次开发工作中,需要开发一个app里面包含海康威视摄像机的监控和控制部分,通过和海康sdk工程师联系已经网上的资源,终于实现的所需要的功能,下面是我开发过程中的监控部分的代码和步骤,分享给大家,希望有所帮助,同时也是对网上资源的感谢。我的开发是使用Android studio,在局域网环境下,将几个摄像机插到路由器上,然后手机和摄像机在同一网段下实现的监控。

2018-08-14

基于esp8266的Android网络调试助手

基于ESP8266的Android WiFi通信广泛应用于物联网领域,常用是通过局域网实现Android端和下位机的通信,达到控制目的。

2018-08-10

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除