自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

~~ LINUX ~~

~~ LINUX ~~

  • 博客(43)
  • 资源 (10)
  • 收藏
  • 关注

原创 FRR BGP协议分析11 -- ZEBRA初始化

zebra,翻译是斑马,它负责管理其他所有协议进程的路由信息的更新与交互,并负责与内核交换信息,整体的架构如下: Zebra的初始化在zebra/main.c里面,代码也来的干净直接frr_init创建zebra主进程的master数据结构,用来做事件驱动,我们可以看下thread_master的数据结构。其整合了事件的可读、可写、定时器、信号的处理,后面有时间可以来学习下...

2019-11-29 16:36:11 3156

原创 FRR BGP协议分析10 -- 路由衰减

路由不稳定的主要表现形式是路由振荡(Route Flapping),即路由表中的某条路由反复消失和重现。发生路由振荡时,路由器就会向邻居发布路由更新,收到更新报文的路由器需要重新计算路由并修改路由表。所以频繁的路由振荡会消耗大量的带宽资源和CPU资源,严重时会影响到网络的正常工作。路由衰减(Route Dampening)用来解决路由不稳定的问题。多数情况下,BGP协议都应用于复杂的网络环...

2019-11-29 09:57:53 2094

原创 C++ 好的博客??

https://blog.csdn.net/cfl997/article/details/103225303

2019-11-27 19:47:08 163

原创 FRR BGP协议分析9 -- 路由重分发

本文,我们分析 路由重分发的处理过程

2019-11-27 19:43:00 628 1

原创 FRR BGP协议分析8 -- BGP 层3隧道 (2)

本文,我们分析UPDATE消息的处理过程层3VPN 的UPDATE消息和前面的路由更新报文的接受处理是一样的,从解析属性的地方开始区别,报文如下图:2019/12/26 09:32:44 BGP: : 20.20.20.20 rcvd UPDATE w/ attr: , origin ?, metric 100, extcommunity RT:12.1.1.2:2, path 200...

2019-11-27 19:41:56 1141

原创 FRR BGP协议分析7 -- BGP 层3隧道 (1)

本文,我们分析BGP 和层3隧道 相关的命令处理这些命令的原理这里不再介绍labelexport auto配置label export auto 后,执行如下的命令命令会给每个VRF 分配一个标签,然后下发到MPLS 的LFIB表里面,涉及MPLS表项下发到内核的流程,先大概给个流程,后续再补充。 vpn_leak_postchange vpn...

2019-11-27 19:07:36 729

原创 FRR BGP协议分析9 -- FLOW SPEC

Flowspec引入了一种新的NLRI编码格式,用于分发流量规则流规范。基本上,IP前缀不是简单地依赖于IP前缀的目标IP地址,而是由包含规则的n元组替换。该规则可以是或多或少复杂的以下组合:网络源/目标(可以是一个或另一个,或两者)。 UDP / TCP的第4层信息:源端口,目标端口或任何端口。 ICMP类型和ICMP代码的第4层信息。 TCP标志的第4层信息。 第3层信息:DSC...

2019-11-27 19:04:41 4540

原创 FRR BGP协议分析6 -- 路由更新(3)

本文,我们继续分析配置network 主动发出update消息的处理过程

2019-11-27 17:46:15 1315 1

原创 FRR BGP 协议分析 5 -- 路由更新(2)

处理NLRI获取NLRI的报文长度,填入nlris[NLRI_UPDATE],到现在为止nlris里面的4种类型(如果有的话),已经全部填写到nlris数组结构体里面然后我们遍历这个数组,处理里面所有的NLRI的类型,本次先分析NLRI_UPDATE,MP后面再分析。根据前面解析出来的SAFI选取不同的处理函数,afi/safi定义如下:AFI_IP 的组合定义如下...

2019-11-26 20:52:56 2723 1

原创 FRR BGP协议分析4 -- 路由更新(1)

BGP协议建立起来后,后续的核心就是UPDATE路由,其关键的部分还是在路由的更新与撤销上面,这之间包含了繁杂的属性的处理过程。我们知道,BGP发布路由时采用如下策略:存在多条有效路由时,BGP Speaker只将最优路由发布给对等体。 BGP Speaker从EBGP获得的路由会向它所有BGP对等体发布(包括EBGP对等体和IBGP对等体)。 BGP Speaker从IBGP获得的路...

2019-11-26 14:49:52 5207

转载 Linux网络 - 数据包的发送过程

继上一篇介绍了数据包的接收过程后,本文将介绍在Linux系统中,数据包是如何一步一步从应用程序到网卡并最终发送出去的。如果英文没有问题,强烈建议阅读后面参考里的文章,里面介绍的更详细。本文只讨论以太网的物理网卡,并且以一个UDP包的发送过程作为示例,由于本人对协议栈的代码不熟,有些地方可能理解有误,欢迎指正socket层 +------------...

2019-11-22 15:34:28 316

转载 Linux网络 - 数据包的接收过程

本文将介绍在Linux系统中,数据包是如何一步一步从网卡传到进程手中的。如果英文没有问题,强烈建议阅读后面参考里的两篇文章,里面介绍的更详细。本文只讨论以太网的物理网卡,不涉及虚拟设备,并且以一个UDP包的接收过程作为示例.本示例里列出的函数调用关系来自于kernel 3.13.0,如果你的内核不是这个版本,函数名称和相关路径可能不一样,但背后的原理应该是一样的(或者有细微差别)网...

2019-11-22 15:33:32 789

转载 Linux虚拟网络设备之tun/tap

在现在的云时代,到处都是虚拟机和容器,它们背后的网络管理都离不开虚拟网络设备,所以了解虚拟网络设备有利于我们更好的理解云时代的网络结构。从本篇开始,将介绍Linux下的虚拟网络设备。虚拟设备和物理设备的区别在Linux网络数据包的接收过程和数据包的发送过程这两篇文章中,介绍了数据包的收发流程,知道了Linux内核中有一个网络设备管理层,处于网络设备驱动和协议栈之间,负责衔接它们之间的数据交...

2019-11-22 15:28:37 439

转载 一步一步教你如何在GitHub上上传自己的项目

首先你得注册一个自己的GitHub账号,注册网址:https://github.com/join有了自己的账号以后,就可以进行登录,开始创建一个新的项目创建一个新的项目,填写项目名称,描述创建完成之后,跳转到下面的页面,下面红框中的网址要记住,在后面上传代码的时候需要使用接下来,我们需要先下载Git,这里最好下载最新版本的Git,这里附上我下载的Git2.6.2的网...

2019-11-21 13:59:02 202

原创 FRR BGP 协议分析 3 --- FSM 状态机

前面创建完bgp peer之后,peer是active的话就会开启bgp start timer,然后开始BGP状态机的协商,不然费那么大劲创建出来不做事情就就很尴尬。状态机简介下面是BGP的状态和事件驱动的定义:bgp是基于tcp协议的,即包含了tcp协议的优点,因此上面的状态机也就跟tcp连接有一定的关系:tcp连接建立阶段的状态:Idle, Connect,...

2019-11-20 23:13:29 2868

转载 基于iproute命令集配置Linux网络(ip命令)

iproute是Linux下一个网络管理工具包合集,用于取代先前的如ifconfig,route,ifup,ifdown,netstat等历史网络管理工具。该工具包功能强大,它通过网络链路套接字接口与内核进行联系。iproute的用户界面比net-tools的用户界面要更直观。对网络资源比如链路、IP地址、路由和隧道等用“对象”抽象进行了恰当的定义,因此可以使用一致的语法来管理不同的对象。本文主要...

2019-11-19 23:05:53 605

原创 Ubuntu 在线升级linux 内核的方法

查看当前的内核版本号更新/etc/apt/sources.list 为ALIYUN16.04deb-src http://archive.ubuntu.com/ubuntu xenial main restricted #Added by software-propertiesdeb http://mirrors.aliyun.com/ubuntu/ xenial main re...

2019-11-19 20:17:39 1862

原创 DPDK 中文编程指南

https://dpdk-docs.readthedocs.io/en/latest/linux_gsg/index.htmlhttps://dpdk-docs.readthedocs.io/en/latest/prog_guide/index.html编程指南1. 简介 1.1. 文档地图 1.2. 相关刊物 2. 概述 2.1. 开发环境 2.2. ...

2019-11-19 09:21:03 2386

原创 FRR BGP 协议分析2 -- 创建对等体的命令分析

本次继续分析BGP最简单的配置的代码实现,这样大家对BGP的框架会有进一步的熟悉:router bgp 200bgp router-id 2.2.2.2neighbor 3.3.3.3 remote-as 200neighbor 3.3.3.3 update-source 2.2.2.2router bgp XX命令执行函数是router_bgp_cmd,主要...

2019-11-18 18:51:02 1635

原创 FRR BGP 协议分析 0 --- IMPLEMENTATION abourt BGP structures

This file contains notes about the internals of the BGP implementation. The initial impetus is understanding the memory usage of Quagga'a BGP implementation. There may be some inaccuracies; it is in...

2019-11-18 16:08:54 777 1

原创 FRR的ATOMIC 利用GCC的实现

FRR的ATOMIC 利用GCC的实现,后续项目可以参考/* * Copyright (c) 2015-16 David Lamparter, for NetDEF, Inc. * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee...

2019-11-16 11:25:14 453

原创 GCC 原子操作中 Acquire/Release/Consume/Relaxed 内存模型

原子操作在多线程开发中经常用到,比如在计数器,序列产生器等地方,这类情况下数据有并发的危险,但是用锁去保护又显得有些浪费,所以原子类型操作十分的方便。原子操作虽然用起来简单,但是其背景远比我们想象的要复杂。其主要在于现代计算系统过于的复杂:多处理器、多核处理器、处理器又有核心独有以及核心共享的多级缓存,在这种情况下,一个核心修改了某个变量,其他核心什么时候可见是一个十分严肃的问题。同时在极致最...

2019-11-16 11:24:26 3157

原创 atomic_fetch_add

atomic_fetch_add, atomic_fetch_add_explicit原子操作库 定义于头文件<stdatomic.h> C atomic_fetch_add(volatileA*obj, M arg); (1) (C11 起) C atomic_fetch_add_e...

2019-11-16 11:22:43 2288

原创 Multithreaded simple data type access and atomic variables

Table of contentsIntroductionHow atomic variables workAtomic variables size limitationsUse casesThe real thing…Time to see some actionPrecautionsConslusionIntroductionBACK TO TOCIn this ar...

2019-11-16 11:19:56 286

转载 无锁编程

锁的缺点锁定被迫交出时间片。锁定意味着阻塞,多个线程(进程)排队获取资源,无法充分发挥系统性能。锁定的阻塞无法通过fd进行通知,对性能有进一步的影响(理想的服务器模型是全局一处阻塞统一等待消息)。一些锁限制了必须使用线程的方式进行开发,而线程无法充分利用系统的内存。pthread库在特殊情况下可能产生饥饿的情况。无锁编程的思路加锁的根本起因是什么?资源竞争。解决...

2019-11-16 11:16:33 773

转载 Linux manpages--- ip-link

NAMEip-link - network device configurationSYNOPSISip link{COMMAND|help}ip link add[linkDEVICE] [name]NAME[txqueuelenPACKETS][addressLLADDR] [broadcastLLADDR][m...

2019-11-15 15:56:54 1389

原创 FRR BGP协议分析 1 --- BGP 初始化

FRR支持BGP-4,BGP-4+协议,BGP协议本身的知识点,可以参考很多资料,TCP/IP路由技术是一本不错的书,建议多看几次,还有红茶哥的博客和视频http://blog.sina.com.cn/vinsoney初始化在bgp_main.c的main函数里开始,其他协议也类似,比如ospf的main函数就在ospf_main.c.main里最重要是初始化,包含:事件驱动的初始化...

2019-11-14 23:22:28 2764

转载 java自学经历分享

本人土木工程出身,毕业在深圳混了三年之后(2018年初25岁,同学们可做参考),开始学习java。经过一年鏖战,终于入职。(没有参加培训,可能培训班的同学比我优秀哈)。虽说只是入行,但也算是一个对自己的肯定。总算挺了过来,这里分享下自己的学习经历(包括弯路),算是给自学的同学一点建议:学习网站比较重要,特别不推荐培训班的盗版资料。虽然淘宝10块钱就能买1T,但是不清晰也不够完整也未必看得下去,...

2019-11-12 12:24:54 183

转载 LinuxELF文件格式详解--Linux进程的管理与调度(十二)

对象文件格式对象文件首先,你需要知道的是所谓对象文件(Object files)有三个种类:可重定位的对象文件(Relocatable file) 可执行的对象文件(Executable file) 可被共享的对象文件(Shared object file)可重定位的对象文件(Relocatable file)适于链接的可重定位文件(relocatable file),包含...

2019-11-08 00:07:58 308

原创 JAVA 学习好的网站 --- 加油 2019.11.07开启JAVA的学习

https://how2j.cn/也算是每年学习一门新语言的承诺开始

2019-11-07 23:05:26 120

转载 Linux 内核第一宏

list_entry()有着内核第一宏的美称,它被设计用来通过结构体成员的指针来返回结构体的指针。现在就让我们通过一步步的分析,来揭开它的神秘面纱,感受内核第一宏设计的精妙之处。整理分析的思路list_entry()在内核源代码/include/linux目录下的list.h中被定义,如下:在list_entry的定义中,我们看到出现了另外一个宏container_of。而lis...

2019-11-07 09:25:46 437

转载 Linux进程启动过程分析do_execve(可执行程序的加载和运行)---Linux进程的管理与调度(十一)

execve系统调用execve系统调用我们前面提到了, fork, vfork等复制出来的进程是父进程的一个副本, 那么如何我们想加载新的程序, 可以通过execve来加载和启动新的程序。x86架构下, 其实还实现了一个新的exec的系统调用叫做execveat(自linux-3.19后进入内核)syscalls,x86: Add execveat() system calle...

2019-11-07 09:14:41 827

转载 Linux内存描述之概述--Linux内存管理(一)

1 前景回顾前面我们讲到服务器体系(SMP, NUMA, MPP)与共享存储器架构(UMA和NUMA)1.1 UMA和NUMA两种模型共享存储型多处理机有两种模型均匀存储器存取(Uniform-Memory-Access,简称UMA)模型,将可用内存以连续方式组织起来, 非均匀存储器存取(Nonuniform-Memory-Access,简称NUMA)模型1.2 UMA模型传...

2019-11-07 00:15:57 365

转载 学习Linux必备的硬件基础一网打尽

内容简介:出来混,迟早要还的.....本文详细论述大学时候的基本功,MMU,CACHE, TLB, Page Fault, 进程切换........1.案情回溯某一个夜黑风高的晚上,宋宝华老师组织的微信群一片祥和宁静。我刷着手机,心血来潮往微信群中提出一个疑惑:"宋老师,cache是一个程序维护一份还是所有程序维护一份?你昨天说进程调度损耗还包括cache命中的...

2019-11-06 23:51:19 461 1

原创 linux内核分析及应用 -- Linux 网络层数据流分析(下)

8.3 netfilter 和 lvs通过上一节的介绍我们已经知道,在网络中收发数据最后都会经过 netfilter 层,本节我们继续分析 netfilter 层的具体逻辑。另外,很多网络软件都是在 netfilter 层设置 hook 点来过滤网络包,比如 lvs,本节也会简单介绍。8.3.1 netfilterLinux 在网络层提供了一套包过滤机制,即 netfilter,它在整...

2019-11-06 23:50:01 444

原创 linux内核分析及应用 -- Linux 网络层数据流分析(上)

计算机网络是个庞大且复杂的话题,这不是一本书就可以说清楚的。然而,在互联网极大普及的今天,很少有应用程序不与网络打交道,我还是抱着授人以渔的思想,尝试介绍 Linux 在网络层面的整体架构,这样在解决具体问题的时候,才可以有针对性地进行分析。本章不打算从头到尾来解释 Linux 网络从物理层到应用层的所有实现。关于理论方面的知识,可以单独学习 Andrew 的《计算机网络》,Steven 的《...

2019-11-06 23:49:09 993

原创 linux内核分析及应用 -- Linux 的进程隔离技术与 Docker 容器

近两年容器技术突然变得很火热,几乎所有开发人员都在学习这个技术。技术人员并不见得一定比女性购物更加理智,有时候,选择一种新技术也仅仅是为了追赶时髦和潮流。从实现的角度来讲,容器技术不是全新的发明,Docker 容器只是针对 Linux 内核提供的基础功能(例如 namespace、cgroup)进行了扩展。本章不打算介绍所有与虚拟化相关的技术和实现方案,而是探讨和容器相关的虚拟化技术。主要...

2019-11-06 23:48:03 2780 1

原创 linux内核分析及应用 -- 文件系统

Linux 内核设计,基本上是围绕着“一切皆文件”的思想来展开的。所以,我们能见到的系统调用或者模块功能,都需要使用文件系统。假如没有文件系统,我们就只能直接操作块设备、字符设备等,这需要对外部存储设备运行原理非常了解才行,比如机械盘的结构、不同设备的驱动程序。文件系统的出现给用户屏蔽了这些细节,让我们把精力集中在数据结构组织上,而不用关注硬件的运行原理。本章着重介绍 Linux 的文件系统,...

2019-11-06 23:43:18 682

转载 Linux内核线程kernel thread详解--Linux进程的管理与调度(十)

内核线程为什么需要内核线程Linux内核可以看作一个服务进程(管理软硬件资源,响应用户进程的种种合理以及不合理的请求)。内核需要多个执行流并行,为了防止可能的阻塞,支持多线程是必要的。内核线程就是内核的分身,一个分身可以处理一件特定事情。内核线程的调度由内核负责,一个内核线程处于阻塞状态时不影响其他的内核线程,因为其是调度的基本单位。这与用户线程是不一样的。因为内核线程只运行在内...

2019-11-06 23:35:00 165

转载 tcpdump高级过滤

一:查看帮助选项#tcpdump --helpUsage: tcpdump [-aAbdDefhHIJKlLnNOpqStuUvxX#] [ -B size ] [ -c count ][ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ][ -i interface ] [ -j tstamptype ] [ -...

2019-11-06 09:47:10 1885

汇编语言 王爽

汇编语言 王爽写的好书,学习汇编不错的入门书籍

2013-07-30

ARM硬件结构

学习ARM的硬件体系结构,可以入门看看,或者给别人讲解使用

2013-07-30

基于ARM的嵌入式程序设计

学习ARM体系、学习基于ARM的嵌入式程序设计方法,入门

2013-07-30

ARM体系结构

ARM体系结构介绍,用于学习ARM体系结构

2013-07-30

攻克U-BOOT资料汇总---找了好多关于U-BOOt的移植资料

攻克U-BOOT资料汇总---找了好多关于U-BOOt的移植资料,大家可以参考下

2011-03-15

18B20温度传感器

18B20温度传感器,搞这个的可以看看,介绍了温度传感器的应用

2010-08-21

空空如也

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

TA关注的人

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