自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

明天你好

菜鸟

  • 博客(180)
  • 收藏
  • 关注

原创 路由--------------------------------------

这里以ip_queue_xmit()中的条件为例看输出路由查询条件是如何指定的,实际使用中,可能更高层的协议(比如TCP)在调用IP层接口发送数据前就已经进行了路由查询,不过查询条件的指定方式是一致的。// 该路由项被设置了DEAD标记,表示该路由项即将被删除,这种路由不能使用了,继续查询下一条。// 标记该fa_alias被访问过了,它影响路由缓存的刷新,要注意设置它和选中该路由并没有关系。// 找到了路由结点,说明存在到达该网络的路由,进一步检查路由项的其它条件是否满足要求。

2024-07-03 13:35:56 98

原创 负载均衡拓扑图

2021-09-16 09:36:28 1258

原创 内部网关协议(ospf,rip)和外部网关协议(bgp)network函数不一样的原因

内部网关协议:network IP 只能发布系统网口存在的IP网段外部网关协议:network IP 可能发布任意网段bgp这个是个边界网关协议,他自己本身不能产生路由,也不能自主学习域内的路由。这个跟ospf这些igp协议是不太一样的,igp协议在接口使能之后,他可以通过这些接口学习到域内的路由,他们一般使用广播之类的。bgp是tcp的,和具体哪个接口啥的没关系。所以两者在network上就有比较大区别...

2021-02-22 16:13:31 1251

转载 2020-11-23

一 原理1. IP合法关于IP地址的合法性验证很简单,方法也很多,比如字符串分解、正则表达式等。2. 子网掩码是否合法简单来讲,子网掩码就类似这样一串数字,前面一段是连续的1, 类似“111111111“,后面一段是连续的0,类似“00000”,这样合法的样子是“11111111000000000”,总共是32位。一个合法的子网掩码要满足如下条件:  1、是合法的IP地址  2、二进制码要相邻,即形如111...11000...0的形式  3、与IP地址对应...

2020-11-23 16:29:11 697

转载 网络 IO 模型

大纲1 阻塞与非阻塞--开胃菜 阻塞 我们知道在调用某个函数的时候无非就是两种情况,要么马上返回,然后根据返回值进行接下来的业务处理。当在使用阻塞IO的时候,应用程序会被无情的挂起,等待内核完成操作,因为此时的内核可能将CPU时间切换到了其他需要的进程中,在我们的应用程序看来感觉被卡主(阻塞)了。阻塞IO传统阻塞IO模型传统阻塞IO模型特点: 通过阻塞式IO获取输入的数据 其中每个连接都采用独立的线程完成数据输入,业务处理以及数据返回的操作 ..

2020-09-23 10:17:14 341

转载 【网络协议】TCP分段与IP分片

我们在学习TCP/IP协议时都知道,TCP报文段如果很长的话,会在发送时发生分段,在接受时进行重组,同样IP数据报在长度超过一定值时也会发生分片,在接收端再将分片重组。 我们先来看两个与TCP报文段分段和IP数据报分片密切相关的概念。 MYU(最大传输单元) MTU前面已经说过了,是链路层中的网络对数据帧的一个限制,依然以以太网为例,MTU为1500个字节。一个IP数据报在以太网中 传输,如果它的长度大于该MTU值,就要进行分片传输,使得每片数据报的长度小于MTU。分片传输的I...

2020-09-01 21:14:01 501

转载 linux设置代理

msys2设置网络代理在文件 .bashrc 中添加export http_proxy="proxy IP:port"如export http_proxy="192.168.0.1:8080"export https_proxy="192.168.0.1:8080"一,场景:有些linux服务器处于内网,并且没有公网ip,故要想与外网进行http/https通信只能通过nat或者加proxy的方式。nat服务器有网段的限制,而http/https proxy代理则没有,使用.

2020-08-21 14:56:47 2178

转载 readv()和writev()函数

read()和write()系统调用每次在文件和进程的地址空间之间传送一块连续的数据。但是,应用有时也需要将分散在内存多处地方的数据连续写到文件中,或者反之。在这种情况下,如果要从文件中读一片连续的数据至进程的不同区域,使用read()则要么一次将它们读至一个较大的缓冲区中,然后将它们分成若干部分复制到不同的区域,要么调用read()若干次分批将它们读至不同区域。同样,如果想将程序中不同区域的数据块连续地写至文件,也必须进行类似的处理。UNIX提供了另外两个函数—readv()和writev(),它们只

2020-08-18 16:23:34 2341

转载 FIB表与RIB表的区别与联系

RIB (route information base)和 FIB (forwarding information base),又称Ip路由表 和 CEF表,它们之间的关系可以用下面这张图片来高度概括。本质上,RIB(route information base) 是由节点上各种路由过程通过路由协议(例如OSPF,IS-IS,BGP,甚至是静态路由条目)提供的信息来构建的。从RIB中的所有路由中选出最佳路由后,将它们复制到FIB。因此,RIB包含节点愿意保留的所有路由以及路由协议正在使用的信息,硬.

2020-07-27 17:13:42 8300

转载 linux内核 路由fib表之数据结构

要想看懂路由,最好先能理清各个结构体之间的关联,这样才能有一个整体的印象。1内核fib路由表1.1基本结构1.1.1 fib_table_hash结构图1.1.2 举例说明fn_zone结构体的关系说明:结构体Fn_zone[33]中存放同一掩码长度表项的集合;结构体fib_node存放同一网段的路由表项集合;结构体fib_alias存放具体的一条路由表项;结构体fib_info存放下一跳网关等信息。1.1.3 结构体描述相关...

2020-07-27 15:36:43 859

转载 BGP为什么全网状连接下就可以关闭同步

先说2个概念:1.什么是IBGP? IBGP的本质是BGP,所以它牵涉的路由表必然是BGP的路由表,一个AS中哪些路由器可以看作是IBGP路由器,取决于你定义了哪些路由器之间的BGP对等体关系,如果你没定义,那么即使是在一个BGP的AS中,那它也不过是一个普通的IGP路由器。2.什么是全网状互联?这是一个IBGP的概念,即你把一个AS里的所有路由器都定义了彼此的对等关系,即它们是平等的,它们都运行了BGP协议。全网状未必是真的物理上的全互联,只要通过TCP可以到达对等体则可 ,所以是一个..

2020-07-11 09:38:11 1009

转载 Linux系统调用原理

操作系统通过系统调用为运行于其上的进程提供服务。当用户态进程发起一个系统调用,CPU将切换到内核态并开始执行一个内核函数。 内核函数负责响应应用程序的要求,例如操作文件、进行网络通讯或者申请内存资源等。原文地址:https://learn-linux.readthedocs.ioQQ交流群:278378501。微信公众号:小菜学编程(coding-fan)举一个最简单的例子,应用进程需要输出一行文字,需要调用write这个系统调用:#include <str...

2020-07-07 14:58:52 258

转载 IO多路复用之epoll总结

1、基本知识  epoll是在2.6内核中提出的,是之前的select和poll的增强版本。相对于select和poll来说,epoll更加灵活,没有描述符限制。epoll使用一个文件描述符管理多个描述符,将用户关系的文件描述符的事件存放到内核的一个事件表中,这样在用户空间和内核空间的copy只需一次。2、epoll接口  epoll操作过程需要三个接口,分别如下:#include <sys/epoll.h>int epoll_create(int size);int ep

2020-07-07 14:57:06 196

转载 用户空间与内核空间,进程上下文与中断上下文

用户空间与内核空间,进程上下文与中断上下文[总结]1、前言  最近在学习linux内核方面的知识,经常会看到用户空间与内核空间及进程上下文与中断上下文。看着很熟悉,半天又说不出到底是怎么回事,有什么区别。看书过程经常被感觉欺骗,似懂非懂的感觉,很是不爽,今天好好结合书和网上的资料总结一下,加深理解。2、用户空间与内核空间    我们知道现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方)。操心系统的核心是内核,独立于普通的应用程序,可以

2020-07-07 14:40:02 237

转载 简单图解有限状态机与状态模式

限状态机将一个对象的行为分解为容易处理的“块”或者状态,对象执行了某些变换对象将从一个状态变成了另一种状态,说的简单点就是状态流程图,然后这些状态的数量是有限的。毛星云的博客里举了一个很好的例子说明我们为什么要使用有限状态机。http://blog.csdn.net/poem_qianmo/article/details/52824776就拿他举的例子说明吧:假如我们现在正在开发一款横版游戏。当前的任务是实现玩家用按键操纵女英雄。当按下向上方向键的时候,女英雄应该跳跃。那么我们可以这样实现:

2020-07-07 11:28:08 1065

转载 状态模式、有限状态机 & Unity版本实现

游戏开发过程中,各种游戏状态的切换无处不在。但很多时候,简单粗暴的if else加标志位的方式并不能很地道地解决状态复杂变换的问题,这时,就可以运用到状态模式以及状态机来高效地完成任务。状态模式与状态机,因为他们关联紧密,常常放在一起讨论和运用。而本文将对他们在游戏开发中的使用,进行一些探讨。PS:这篇文章起源于《Game Programming Patterns》第二章第六节。这是一篇略长的文章,约5200余字,将分析游戏开发过程中状态模式与有限状态机的运用,已经非常了解相关内容的高端选手.

2020-07-07 11:27:06 238

转载 linux netlink机制介绍与实例

开发和维护内核是一件很繁杂的工作,因此,只有那些最重要或者与系统性能息息相关的代码才将其安排在内核中。其它程序,比如GUI,管理以及控制部分的代码,一般都会作为用户态程序。在linux系统中,把系统的某个特性分割成在内核中和在用户空间中分别实现一部分的做法是很常见的(比如linux系统的防火墙就分成了内核态的Netfilter和用户态的iptables)。然而,内核程序与用户态的程序又是怎样行通讯的呢?答案就是通过各种各样的用户态和内核态的IPC(interprocess communication...

2020-07-06 14:13:39 1678

转载 Linux系统内存知识

Linux 内存是后台开发人员,需要深入了解的计算机资源。合理的使用内存,有助于提升机器的性能和稳定性。本文主要介绍Linux 内存组织结构和页面布局,内存碎片产生原因和优化算法,Linux 内核几种内存管理的方法,内存使用场景以及内存使用的那些坑。从内存的原理和结构,到内存的算法优化,再到使用场景,去探寻内存管理的机制和奥秘。一、走进Linux 内存1、内存是什么?1)内存又称主存,是 CPU 能直接寻址的存储空间,由半导体器件制成2)内存的特点是存取速率快2、内存的作用.

2020-07-03 13:53:07 308

转载 线性地址、逻辑地址、虚拟地址、物理地址

逻辑地址(Logical Address) 是指由bai程式产生的和段相du关的偏移地址部分。例如zhi,你在进行C语言指针编dao程中,能读取指针变量本身值(&操作),实际上这个值就是逻辑地址,他是相对于你当前进程数据段的地址,不和绝对物理地址相干。只有在Intel实模式下,逻辑地址才和物理地址相等(因为实模式没有分段或分页机制,Cpu不进行自动地址转换);逻辑也就是在Intel保护模式下程式执行代码段限长内的偏移地址(假定代码段、数据段如果完全相同)。应用程式员仅需和逻辑地址打交道,而分段和分页

2020-07-03 10:59:32 1026

转载 流表

如前文所述,OpenFlow的设计目标之一就是将网络设备的控制功能与转发功能进行分离,进而将控制功能全部集中到远程的控制器上完成,而OpenFlow交换机只负责在本地做简单高速的数据转发。在OpenFlow交换机的运行过程中,其数据转发的依据就是流表。所谓流表,其实可被视作是OpenFlow对网络设备的数据转发功能的一种抽象。在传统网络设备中,交换机和路由器的数据转发需要依赖设备中保存的二层MAC地址转发表或者三层IP地址路由表,而OpenFlow交换机中使用的流表也是如此,不过在它的表项中整合了网络中

2020-07-02 16:03:23 3160

转载 Linux下的umask函数

umask函数为进程设置文件模式创建屏蔽字,并返回以前的值。函数原型为:#include <sys/stat.h>mode_t umask(mode_t cmask);cmask是由下表列出的9个常量中的若干个按位“或”构成的S_IRUSR用户读S_IWUSR用户写S_IXUSR用户执行S_IRGRP组读S_IWGRP组写S_IXGRP组执行S_IROTH其他读...

2020-07-02 14:11:58 338

转载 route-map

一、关于route-maproute map可用于路由的再发布和策略路由,还经常使用在BGP中。策略路由实际上是复杂的静态路由,静态路由是基于数据包的目标地址并转发到指定的下一跳路由器,策略路由还利用和扩展IP ACL链接,以便提供更多功能的过滤和分类。 如下图,在R2上将OSPF路由重发布进RIP,重发布时,可以使用metric关键字来设置路由被重发布进RIP后的metric,这里设置为1,直接结果是,所有被注入到RIP的OSPF路由,metric都是1。灵活的调整一下,例如在路由被注入RIP后

2020-07-02 13:44:21 882

转载 getrlimit和setrlimit 两个函数详解

功能描述:获取或设定资源使用限制。每种资源都有相关的软硬限制,软限制是内核强加给相应资源的限制值,硬限制是软限制的最大值。非授权调用进程只可以将其软限制指定为0~硬限制范围中的某个值,同时能不可逆转地降低其硬限制。授权进程可以任意改变其软硬限制。RLIM_INFINITY的值表示不对资源限制。用法:#include <sys/resource.h>int getrlimit(int resource, struct rlimit *rlim);int setrlimit(in

2020-06-30 14:17:23 615

转载 浅谈linux的命令行解析参数之getopt_long函数

前言在linux中,经常需要各种命令,通常情况下都会带各种参数,而这些参数是如何解析的呢?通常使用GNU C提供的函数getopt、getopt_long、getopt_long_only函数来解析命令行参数。一、关于命令行参数命令行参数可以分为两类,一类是短选项,一类是长选项,短选项在参数前加一杠"-",长选项在参数前连续加两杠"--",如下表(ls 命令参数)所示,其中-a,-A,-b都表示短选项,--all,--almost-all, --author都表示长选项。...

2020-06-30 09:57:10 190

转载 gdb 中 watch

1.watch 变量的类型a. 整形变量: int i; watch i;b. 指针类型:char *p; watch p, watch *p;它们是有区别的.watch p 是查看 *(&p), 是p 变量本身。watch (*p) 是 p 所指的内存的内容, 查看地址,一般是我们所需要的。我们就是要看莫地址上的数据是怎样变化的,虽然这个地址具体位置只有编译器知道。c. watch 一个数组或内存区间...

2020-06-29 14:13:21 1077

原创 树莓派4b安装wringPi

当使用树莓派时输入gpio readall命令查看引脚状态时,系统提示:出现这个问题的原因在于,系统当前的wiringpi版本不支持树莓派4B,但是这个问题不会影响我们编程使用树莓派的所有引脚的功能。解决这个问题的步骤:进入树莓派系统,首先需要确保树莓派可以正常上网。我们可以输入一下命令来判断树莓派是否可以正常上网。ping www.baidu.com如上图所示,能正常ping通就表示树莓派可以正常上网,我们就可以进行以下步骤了。输入如下命令安装Git.s...

2020-05-14 21:52:04 1206 1

转载 变参详解

可变参数函数又称参数个数可变函数(本文也简称变参函数),即函数参数数目可变。原型声明格式为: type VarArgFunc(type FixedArg1, type FixedArg2, …); 其中,参数可分为两部分:数目确定的固定参数和数目可变的可选参数。函数至少需要一个固定参数,其声明与普通函数参数相同;可选参数由于数目不定(0个或以上),声明时用"…"...

2020-03-25 15:52:51 939

转载 inet_ntop()、inet_pton()、inet_addr()、inet_ntoa()函数之间的关系

- emmmmm,先看这张图来理解,知道这些函数的作用1. inet_pton()源码int inet_pton(int family, const char *strptr, void *addrptr){ if (family == AF_INET) { struct in_addr in_val; if (inet_aton(strptr,...

2020-03-13 16:20:47 523

转载 realloc用法

realloc函数并不初始化内存,如果要初始化内存里面的内容,可以用memset函数realloc原型:extern void *realloc(void *mem_address, unsigned int newsize);用法:#include <stdlib.h> 有些编译器需要#include <alloc.h>功能:改变mem_address所指内存区...

2020-03-03 16:25:01 2562

原创 虚拟机网卡配置IPV6

首先你在虚拟机中开启支持ipv6在虚拟机中点击编辑选项、打开虚拟网络编辑器,设置好加载IPV6模块:打开网卡配置文件 vi /etc/sysconfig/network-scripts/ifcfg-eth0加上这几行然后用ipv6测试一下 看是否配置成功...

2020-02-25 11:46:45 4500

转载 链表创建

1.经常要用链表,所以找了个模板。----#include<stdio.h>#include<malloc.h>#include<stdlib.h>typedef int ElementType; // 定义数据类型,可根据需要进行其他类型定义 // 链表节点...

2020-02-21 08:55:19 545

转载 深入理解软件包的配置、编译与安装

前言从源代码安装过软件的朋友一定对 ./configure && make && make install 安装三步曲非常熟悉了。然而究竟这个过程中的每一步幕后都发生了些什么呢?本文将带领你一探究竟。深入理解这个过程将有助于你在LFS的基础上玩出自己的花样来。不过需要说明的是本文对 Makefile 和 make 的讲解是相当近视和粗浅的,但是对于理解安装过程来...

2020-01-15 14:24:53 408

转载 (十六)洞悉linux下的Netfilter&iptables:开发自己的hook函数【实战】(下)

从用户空间来操作内核中Netfilter框架里自定义的HOOK函数本文承上一篇博客。主要是和大家探讨一下如何从用户空间操作我已经注册到Netfilter中的自定义hook函数。有些童鞋可能就纳闷,难道iptables不能操作到么?如果我们需要让iptables操作我们在Netfilter框架中做过的扩展,那么最有效最直接的办法就是开发一个match或者target。但我们现...

2019-11-23 17:17:44 216

转载 (十五)洞悉linux下的Netfilter&iptables:开发自己的hook函数【实战】(上)

向Netfilter中注册自己的hook函数 数据包在协议栈中传递时会经过不同的HOOK点,而每个HOOK点上又被Netfilter预先注册了一系列hook回调函数,当每个清纯的数据包到达这些点后会被这些可恶hook函数轮番调戏一番。有时候我们就在想,只让系统自带的这些恶棍来快活,我自己能不能也make一个hook出来和它们同流合污呢?答案是肯定的。 我们来回顾一...

2019-11-23 17:17:25 214

转载 (十二)洞悉linux下的Netfilter&iptables:iptables命令行工具源码解析【下】

iptables用户空间和内核空间的交互iptables目前已经支持IPv4和IPv6两个版本了,因此它在实现上也需要同时兼容这两个版本。iptables-1.4.0在这方面做了很好的设计,主要是由libiptc库来实现。libiptc是iptables control library的简称,是Netfilter的一个编程接口,通常被用来显示、操作(查询、修改、添加和删除)netfilter的...

2019-11-23 17:17:08 446

转载 (十一)洞悉linux下的Netfilter&iptables:iptables命令行工具源码解析【上】

预备知识:part1: 初见getopt_long()在分析iptables源码时,作为命令解析的核心函数getopt_long()不得不提。随便百度或google搜索关于该函数的介绍有很多例子和解释,这里我只举一例,目的是让大家了解传递给iptables命令的每个参数是如何被正确识别并处理的。getopt_long(intargc,char * constargv[],co...

2019-11-23 17:01:13 362

转载 (十三)洞悉linux下的Netfilter&iptables:为防火墙增添功能模块【实战】

为netfilter/iptables增添新功能模块:ipp2p 一个防火墙功能模块包含两部分:内核空间的ko模块和用户空间的so模块。如下: 而且文件的命令都非常有讲究。例如我们有个模块名叫AAA,那么内核中该模块的文件名一般为ipt_AAA.c和ipt_AAA.h;对应的用户空间模块叫libipt_AAA.c。今天我通过简单的向防火墙添加ipp2p扩展功能模块的例...

2019-11-23 17:00:43 195

转载 (十四)洞悉linux下的Netfilter&iptables:开发一个match模块【实战】

自己开发一个match模块 今天我们来写一个很简单的match来和大家分享如何为iptables开发扩展功能模块。这个模块是根据IP报文中有效载荷字段的长度来对其进行匹配,支持固定包大小,也支持一个区间范围的的数据包,在用户空间的用法是:iptables -A FORWARD -m pktsize --size XX[:YY] -j DROP ...

2019-11-23 16:58:08 358

转载 make 查找的文件名顺序为:“GNUmakefile”、“makefile”、“Makefile”

默认的情况下,make会在工作目录(执行make的目录)下按照文件名顺序寻找makefile文件读取并执行,查找的文件名顺序为:“GNUmakefile”、“makefile”、“Makefile”。通 常应该使用“makefile”或者“Makefile”作为一个makefile的文件名(我们推荐使用“Makefile”,首字母大写而比较显著, 一般在一个目录中和当前目录的一些重要文件(REA...

2019-11-22 15:18:38 1247

转载 (十)洞悉linux下的Netfilter&iptables:网络地址转换原理之SNAT

源地址转换:SNAT SNAT主要应用于下列场景: 这种情况下,我们只有一个公网地址A,而又有三台主机需要同时上网,这时就需要SNAT了。它的主要作用是将那些由私网发来的数据包skb的源地址改成防火墙的公网地址A,这是因为目的主机在响应源地址为私网地址的数据包时,私网地址不能在网络上路由的缘故。SNAT仅可以在LOCAL_OUT和POSTROUTING点生效...

2019-11-21 11:23:25 277

空空如也

空空如也

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

TA关注的人

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