next

PBR策略路由

安稳与你 提交于 2020-08-19 05:42:31
PBR策略 路由 Policy-based routing 之前所学习的是路由策略,这两个是完全不同的东西 路由策略:必须有路由,然后针对于路由施加策略 策略路由:很策略,后路由,可以没有路由 啥意思, 这样说,当一个数据包进入到路由器以后, 是先查策略,再查路由,然后再进行转发。 当然了,这项技术也是离不开 route-map的。 配置思路 1 ACL匹配数据 2 route-map定义 3 接口挂接route-map。(PBR) 定义好的 PBR,是一定要进行挂接的,如果不挂接,显然是不生效的, 另外,所挂接的接口也是有讲究的,是数据来的方向。 针对的数据有两种,一种是经过这里的,一种是本地的,所使用的挂接命令也是不同的,后面会详细讲到的。 应用场景 局域网出口网关,当出现多条路径时,可以使用 PBR来实现指定选路,而不需要设置路由策略。 例 1 如图所示, R1和R2上分别做默认路由指向R3, R3做 为 r4-r4两台 模拟 pc的GW, 在 R1和R2上分别有一个loop 接口,地址都是100.1.1.1 R1,R2开启TELNET 功能 现要求, R4 icmp 请求让其去往R2 R4 telnet 请求去往R1 R5 icmp请求去往R1 R5 telnet 请求去往R2 在 R3上不做任何的路由指向 分析, 考虑到数据走向的问题,就要借助PBR,(policy

TCP协议粘包问题详解

a 夏天 提交于 2020-08-19 04:32:11
TCP协议粘包问题详解 前言    在本章节中,我们将探讨TCP协议基于流式传输的最大一个问题,即粘包问题。本章主要介绍TCP粘包的原理与其三种解决粘包的方案。并且还会介绍为什么UDP协议不会产生粘包。 基于TCP协议的socket实现远程命令输入    我们准备做一个可以在Client端远程执行Server端 shell 命令并拿到其执行结果的程序,而涉及到网络通信就必然会出现 socket 模块,关于如何抉择传输层协议的选择? 我们选择使用TCP协议,因为它是可靠传输协议且数据量支持比UDP协议要大 。好了废话不多说直接上代码了。    Server端代码如下: # !/usr/bin/env python3 # -*- coding:utf-8 -*- # ==== 基于TCP协议的socket实现远程命令输入之Server ==== import subprocess from socket import * server = socket(AF_INET, SOCK_STREAM) server.bind(( " 172.17.0.16 " ,6666)) # 填入私网IP server.listen(5 ) while 1: # 链接循环 conn,client_addr = server.accept() while 1: # 通信循环 try : #

Windows系统Git安装教程(详解Git安装过程)

浪尽此生 提交于 2020-08-19 04:15:31
Windows系统Git安装教程(详解Git安装过程)   今天更换电脑系统,需要重新安装Git,正好做个记录,希望对第一次使用的博友能有所帮助! 获取Git安装程序   到Git官网下载,网站地址: https://git-scm.com/downloads,如下图:   因为我们是用Windows系统上的浏览器访问的,Git官网自动之别到了我使用的操作系统,所以右侧直接显示下载使用Windows系统的最新版本(如果识别错误,可以在中间选择系统),点击即可下载。我下载的是 2.24.0 for Windows,文件名称是“Git-2.24.0.2-64-bit.exe”。下载到电脑上之后,鼠标双击这个文件即可进入安装过程。 Git安装过程   双击看到的第一个界面如下图: 01、使用许可声明   点击“Next”进入下图页面: 02、选择安装路径   在输入框内输入想要安装到的本机路径,也就是实际文件夹位置,或点击“Browse...”选择已经存在的文件夹,然后点击“Next”按钮继续,进入下图界面: 03、选择安装组件   上图红框内的选项是默认勾选的,建议不要动。绿色框1是决定是否在桌面创建快捷方式的。绿色框2是决定在所有控制台窗口中使用TrueType字体和是否每天检查Git是否有Windows更新的。这些根据自己需要选择。   点击“Next”按钮进入下图界面: 04

精美图文讲解Java AQS 共享式获取同步状态以及Semaphore的应用

巧了我就是萌 提交于 2020-08-19 04:13:48
| 好看请赞,养成习惯 你有一个思想,我有一个思想,我们交换后,一个人就有两个思想 If you can NOT explain it simply, you do NOT understand it well enough 现陆续将Demo代码和技术文章整理在一起 Github实践精选 ,方便大家阅读查看,本文同样收录在此,觉得不错,还请Star🌟 看到本期内容这么少,是不是心动了呢? 前言 上一篇万字长文 Java AQS队列同步器以及ReentrantLock的应用 为我们读 JUC 源码以及其设计思想做了足够多的铺垫,接下来的内容我将重点说明差异化,如果有些童鞋不是能很好的理解文中的一些内容,强烈建议回看上一篇文章,搞懂基础内容,接下来的阅读真会轻松加愉快 AQS 中我们介绍了独占式获取同步状态的多种情形: 独占式获取锁 可响应中断的独占式获取锁 有超时限制的独占式获取锁 AQS 提供的模版方法里面还差共享式获取同步状态没有介绍,所以我们今天来揭开这个看似神秘的面纱 AQS 中的共享式获取同步状态 独占式是你中没我,我中没你的的一种互斥形式,共享式显然就不是这样了,所以他们的唯一区别就是: 同一时刻能否有多个线程同时获取到同步状态 简单来说,就是这样滴: 我们知道同步状态 state 是维护在 AQS 中的,抛开可重入锁的概念,我在上篇文章中也提到了

链表:反转链表

痞子三分冷 提交于 2020-08-19 03:27:27
题目描述 输入一个链表,反转链表后,输出新链表的表头。 考察点:如何调整指针以达到反转的效果。 思路: 初始化3个指针: 1.pre:已反转链表的最后一个节点,刚开始没有反转,所以是null。 2.cur:原始链表的第一个节点,刚开始就是head; 3.nex:原始链表的第二个节点,用来保留原始链表。刚开始是null,循环里要重新定义。 每次循环: 1.nex=cur.next;---先保留原始链表 2.cur.next=pre;---倒转指针去指向已反转链表的最后一个节点 3.pre=cur; cur=nex; 继续去操作下一个节点。 循环条件:cur !=null; 跳出循环时,pre就是反转完成的链表的首节点了,返回pre即可。 代码: public class Solution { public ListNode ReverseList(ListNode head) { ListNode pre=null; ListNode cur=head; ListNode nex=null; while(cur!=null){ nex=cur.next; cur.next=pre; pre=cur; cur=nex; } return pre; } } 来源: oschina 链接: https://my.oschina.net/u/4527334/blog/4300063

skynet源码学习(一) linux无锁化编程

六眼飞鱼酱① 提交于 2020-08-19 02:59:26
以下是skynet源码: struct groupnode { int handle; struct skynetcontext ctx; struct groupnode next; }; struct group { int lock; struct groupnode node[HASHSIZE]; }; struct group G = NULL; inline static void lock(struct group g) { while (synclocktestandset(&g->lock,1)) {} } inline static void unlock(struct group g) { synclockrelease(&g->lock); }* gcc从4.1.2开始提供了sync系列的build-in函数,用于提供加减和逻辑运算的原子操作 type synclocktestandset (type ptr, type value, …):将ptr设为value并返回ptr操作之前的值。 void synclockrelease (type ptr, …):将ptr置0。 type只能是int, long, long long以及对应的unsigned类型 来源: oschina 链接: https://my.oschina.net/u/4340310

2020-07-25:如何实现一个高效的单向链表逆序输出?

↘锁芯ラ 提交于 2020-08-19 01:03:47
福哥答案2020-07-25: 1.链表反转。反转,输出,反转。 2.递归。 3.数组。遍历存数组,然后反向遍历数组。 4.栈。遍历存栈,然后pop栈输出。 golang代码采用第2种方法。代码如下: package test27_reverseprint import ( "fmt" "testing" ) //Definition for singly-linked list. type ListNode struct { Val int Next *ListNode } //go test -v -test.run TestReversePrint func TestReversePrint(t *testing.T) { head := &ListNode{Val: 3, Next: &ListNode{Val: 1, Next: &ListNode{Val: 2}}} fmt.Println("正序输出--------------------") temp := head for temp != nil { fmt.Print(temp.Val, "\t") temp = temp.Next } fmt.Println("\r\n\r\n反序输出--------------------") reversePrint(head) } func reversePrint

c#多线程总结(纯干货)

我们两清 提交于 2020-08-19 00:49:01
线程基础 创建线程 static void Main( string [] args) { Thread t = new Thread(PrintNumbers); t.Start(); // 线程开始执行 PrintNumbers(); Console.ReadKey(); } static void PrintNumbers() { Console.WriteLine( " Starting... " ); for ( int i = 1 ; i < 10 ; i++ ) { Console.WriteLine(i); } } View Code 暂停线程 class Program { static void Main( string [] args) { Thread t = new Thread(PrintNumbersWithDelay); t.Start(); PrintNumbers(); Console.ReadKey(); } static void PrintNumbers() { Console.WriteLine( " Starting... " ); for ( int i = 1 ; i < 10 ; i++ ) { Console.WriteLine(i); } } static void PrintNumbersWithDelay() {

《Java8实战》笔记(13):函数式的思考

拥有回忆 提交于 2020-08-19 00:47:32
函数式的思考 实现和维护系统 为了让程序易于使用,你还希望它具备哪些特性呢? 你会希望它具有良好的结构,最好类的结构应该反映出系统的结构,这样能便于大家理解; 甚至软件工程中还提供了指标,对结构的合理性进行评估,比如耦合性(软件系统中各组件之间是否相互独立)以及内聚性(系统的各相关部分之间如何协作)。 对大多数程序员而言,最关心的日常要务是代码维护时的调试:代码遭遇一些无法预期的值就有可能发生崩溃。 为什么会发生这种情况? 它是如何进入到这种状态的? 想想看你有多少代码维护的顾虑都能归咎到这一类!很明显, 函数式编程提出的“无副作用”以及“不变性”对于解决这一难题是大有裨益的 。 共享的可变数据 无法预知的变量修改问题,都源于共享的数据结构被你所维护的代码中的多个方法读取和更新。 假设几个类同时都保存了指向某个列表的引用。 那么到底谁对这个列表拥有所属权呢? 如果一个类对它进行了修改,会发生什么情况? 其他的类预期会发生这种变化吗? 其他的类又如何得知列表发生了修改呢? 我们需要通知使用该列表的所有类这一变化吗? 抑或是不是每个类都应该为自己准备一份防御式的数据备份以备不时之需呢? 换句话说,由于使用了可变的共享数据结构,我们很难追踪你程序的各个组成部分所发生的变化 。 假设有这样一个系统,它不修改任何数据。维护这样的一个系统将是一个无以伦比的 美梦

.Net core+Reds如何实现Aop缓存

匆匆过客 提交于 2020-08-18 23:28:37
.Net core+Reds如何实现Aop缓存 前言 在实际开发的场景中,有很多需要缓存的数据,为了减少重复代码的编写,想采用Aop的方式来实现切面编程减少对以有业务代码的改动和侵入性。 在传统的 .Net Framework项目中实现Aop有很多简单的方式,但是在 .Net Core中尤其是1.X版本笔者没有找到比较好的解决方案采用了一个三方开源的Aop库,下面会写出来。 准备 本次采用的环境是 .Net Core 1.1版本 本次使用的Aop 开源库是 AspectCore 0.1.2版本 实践 Aop顾名思义面向切面编程,是一种通过预编译和运行时动态代理来实现的一种技术,本文中采用了三方开源的Aop库 AspectCore 是.Net Core 中一个轻量级和模块化的Aop 解决方案 首先创建一个 缓存特性 CacheAttribute 继承 AspectCore中的 InterceptorAttribute并且重写 InterceptorAttribute中的 Invoke方法 代码 如下 1 public async override Task Invoke(AspectContext context, AspectDelegate next) 2 { 3 try 4 { 5 // 用方法名称+入参 生成Key 6 string key = context.Proxy