-
修改nfqueue支持零拷贝
解决问题描述产品中的snort采用nfqueue从内核层获取数据包到应用层,因为nfqueue是采用netlink实现,其中涉及到数据包从内核层到应用层传输时进行数据包拷。从应用层下发抉择数据到内核层也需要进行数据包的拷贝,导致性能比较差,从而将从netlink方面进行性能优化。采用的优化方式将snort中daq中获取数据包的源码nfqueue部分改为支持netlink mmap的方式。研究netlink相关内容netlink相关的内容讲解网上有很多,此处就不多说,研究netlink相关的...…
-
ebtable现场小实践
现场问题描述在远程支持现场中,有个如下图所示的现场环境,客户端通过交换机连接设备的两个网卡eth0(设备做了特殊处理,数据包处理的比较慢)和eth1,同时通过设备的eth3连接到服务器,由于现场中特殊要求,客户端只能和eth0通信,不和服务器通信,同时,服务器的IP、设备Ip和客户端Ip不可以变,同时网络拓扑也不可以修改,因为有其它用途。 【现场网络拓扑图如下所示:】 问题分析由于客户端Ip、设备eth0Ip和服务器IP都在同一个网段,但此时网卡eth0的Ip和服务器Ip出现冲...…
-
找到占用内存大文件
现场问题描述在远程支持现场问题的时候,发现linux操作系统的内存占用过大,而且目录多深度广(可以认为是整个操作系统),不太好找到具体哪个文件占用过大内存,导致若是拷贝一些文件或生产文件的时候导致失败。达到目的在整个操作系统中,找到过大的且无用的文件,删除。解决方法 通过df命令找到系统中那些目录占用较大内存。 可以看出/目录占用100%。 进入/目录,通过du命令一级一级的查找,其中命令-d1是查找的深度。 进入第2步中找到的目录,再接...…
-
Go常见知识点汇总
前言对于工作和学习中遇到,容易忘记的知识点进行汇总,方面以后使用的时候,能够及时查到相关点,节约重新学习和搜索的时间。GO工程布局此部分主要总结关于Go语言开发过程中,实现工程化方面知识点。同一个目录下怎样声明源码包 在同一个目录下的源码文件都需要被声明为属于同一个代码包,这有这有才能通过编译。源码文件代码包声明的基本规则 第一条:同目录下的源码文件的代码包声明语句要一致。也就是说,他们要同属于一个代码包。这对于所有源码文件都是适用的。 第二条:源码文件声明的代码包的名词可以与其所在...…
-
数据结构与算法学习心得
前言本文档主要是针对在学习和工作中对于数据结构与算法的感悟,主要包括以下内容常用的基础的数据结构与算法。其涉及到以下数据结构:数组、链、栈、队列、散列表、二叉树、堆、跳表、图、树等。涉及到的算法主要包括递归、排序、二分查找、搜索、哈希算法、分治算法、回溯算法、动态规划、字符串匹配算法等。 对于此部分的学习不要死记硬背,要掌握分析的能力,抓住算法的特定,应用场景。用到的时候,能够想到即可,再花些时间弄懂即可。知识需要沉淀,不要想试图一下子掌握所有,学习知识的过程是反复迭代、不断沉淀的过程...…
-
定时器与线程之间的关系
前言本文档主要是针对工作中对于定时器与线程涉及到的知识点进行总结,以及对定时器与线程相互之间的执行过程验证。 其具体验证问题如下所示: 如何实现单定时器,当定时时间到时,执行一次相应的操作。 如何实现循环定时,每过一个时间段,执行一次相应的操作。 对于定时器,当执行的操作的过程中,定时器有一次触发,会不会中断当前正在执行的操作。 对于定时器计时,是否包含执行操作的时间,即当定时器执行的操作,小于定时器的时间,定时器的时间,是从定时器执行操作后开始计时,还是定时执行操作之前计时。 ...…
-
向有序单向链表添加新的节点
前言向一个单向有序链表添加一个新的节点,这种问题记得在大学数据结构课上老师讲过好些次,都是进行分类处理,想到一步写一步,准确地阐释了所见即所想,所想即所写,所写即所得,这是一种试错的解题方法。 随后尝试了另外一种解题策略归纳总结,只需明确达到什么条件,向那个点插入即可。链表数据结构与函数链表的数据结构:struct node{ struct node * next; //连接链表的元素 int priority; //优先级,此值越大越挂载链表的...…
-
linux内核协议栈架构简述
前言本文档简要概述了如何在Linux内核协议栈中实现TCP传输过程。对于其中涉及到的关键点,以及整个网络传输的性能影响参数进行了总结说明。对于设计到的细节描述不太全面,有兴趣者可以根据其中涉及到的点进行由线到面的自行扩充,本文档主要是根据自己理解进行整理,若是有错误之处,希望不吝赐教。###参考链接: Linux kernel design patterns - part 1 转载请注明:HunterYuan的博客 » linux内核协议栈架构简述…
-
linux内核协议栈研读设计感悟
前言对于linux网络协议栈源码研读过程中,对于涉及到的一些设计思想,进行简单记录,同时写下自己的感悟,方便以后进行这种设计思想更加深入的研究、体会、践行。对于文中的观点,只是根据自己的理解和工作中经验进行了简述,会由于自己功力有限或理解偏差产生错误,若是有错误的地方希望能够留下您宝贵的意见和指正。源码主要参考linux-3.10.0-862.el7.x86_64版本。设计思想网络协议栈对skb的存储设计网络协议栈中层与层的传输以及操作,对于系统中skb存储以及设计的要求比较高,主要包括以...…
-
Iptables之nf_conntrack模块
nf_conntrack模块nf_conntrack(在老版本的 Linux 内核中叫 ip_conntrack)是一个内核模块,用于跟踪一个连接的状态的。连接状态跟踪可以供其他模块使用,最常见的两个使用场景是 iptables 的 nat 的 state 模块。iptables 的 nat 通过规则来修改目的/源地址,但光修改地址不行,我们还需要能让回来的包能路由到最初的来源主机。这就需要借助 nf_conntrack 来找到原来那个连接的记录才行。而 state 模块则是直接使用 nf...…
-
Linux网络IO并行化技术总结
前言本文主要是对网络性能需要有所改善的技术,进行简单的总结。在对NIC进行调整的时候,发现RSS(receive side scaling)和RPS(Receive Packet Steering)是两个需要关注的点。RSS和RPS都是网卡为了在接受数据包的时候使用多核架构而进行的性能增强,RSS是在硬件层面而RPS在软件层面。在数据包接收到之后在用户态的处理逻辑怎么处理,应用层的响应数据包如何发送都会影响系统性能,RFS(Receive Flow Steering)和XPS(Transm...…
-
Iptables汇总
前言本文主要是对于网上或书上关于iptables感觉不错的文章进行汇总,以供自己参考、学习、提升为理论知识,从而更好的了解Linux内核中对于netfilter实现过程。在防火墙关闭状态下,不要通过iptables指令(比如 iptables -nL)来查看当前状态!因为这样会导致防火墙被启动,而且规则为空。虽然不会有任何拦截效果,但所有连接状态都会被记录,浪费资源且影响性能并可能导致防火墙主动丢包!若是要加载/etc/sysconfig/iptables中规则,需要重启防火墙system...…
-
Java核心技术卷一
前言最近目标是学习设计模式和算法知识,考虑到好些设计、算法书以及架构相关的书籍,大多通过java说明的,所以来学习下这本书。以前对于java也是比较感兴趣的,由于时间问题,一直搁浅了,最近愈发对java感兴趣,就利用零散的时间来学习这本书,我将以读书提炼作为tags,所涉及到的内容,主要有以下方面: 为什么要学习这本书,学习这本书要达到的目标和收获。 每个章节所讲的内容,和自己的提炼和感悟。 对整本书读后的感悟和收获。 提炼出整本书的知识点。为什么,目标对于工程化的语言学习无非就是...…
-
Shell命令EOF使用
使用背景执行脚本的时候,需要往一个文件里自动输入N行内容。如果是少数的几行内容,还可以用echo追加方式,但如果是很多行,那么单纯用echo追加的方式显得不那么优雅! 这个时候,就可以使用EOF结合cat命令进行行内容的追加。知识点梳理EOF是END Of File的缩写,表示自定义终止符.既然自定义,那么EOF就不是固定的,可以随意设置别名,在linux按ctrl-d就代表EOF.EOF一般会配合cat能够多行文本输出.其用法如下:<<EOF //开始.......…
-
深度探索C++对象模型
前言最近目标是学习C++底层知识,因此找了一本《深度探索C++对象模型》来啃,以前也看过一些书,但由于没有进行总结和提炼,导致只有个浅显的印象,而没有个全局的统筹、知识点扩展、和已有知识点类比。为了解决自己这个问题,想到了一种解决办法,将所有看过的书进行一些记录,方便以后查阅,知识总结和形成自己的理论。对于此系列的文章,我将以读书提炼作为tags,所涉及到的内容,主要有以下方面: 为什么要学习这本书,学习这本书要达到的目标和收获。 每个章节所讲的内容,和自己的提炼和感悟。 对整本书读...…
-
网络名词汇总
AAH : (Authentication Header, 验证头)主要用于IPSec中对数据添加验证头使用。ACL : (Access Control List,访问控制列表)基于ACL的包过滤防火墙是将制定出的不同区域间访问控制策略部署在路由器端口处过滤进出数据包,达到对访问进行控制,维护网络安全的目的。CCVE :(Common Vulnerabilities and Exposures,通用漏洞与披露)用以查询漏洞的库。DDHCP :(Dynamic Host Configurat...…
-
工作中遇到的名词总结
PUB/SUB模型Pub/Sub模型定义了如何向一个内容节点发布和订阅消息,这些节点被称为主题(topic)。主题可以被称为是消息的传输中介,发布者(publisher)发布消息到主题,订阅这(subscriber)从主题订阅消息。主题是的消息订阅者和消息发布者保持相互独立,不需要接触即可保证消息的传送。主要使用场景:按服务种类的微服务中,跨板块间需要交互。此时需要一个类似于Pub/Sub 的高可用的并可以持久化的消息订阅通知的中间件来打通各个版块的数据和信息交换。Twitter-Snow...…
-
go中强制类型转换的特点
问题提出对于string类型内部是通过[]byte切片进行存储的,而本身string类型是静态类型,若通过下标进行修改,将会报错,如何进行下标修改呢?若是将string类型强制转换为[]byte切片,用转换类型进行拷贝赋值,这时会像真正的切片一样进行引用拷贝,还是和string类型一样进行内容拷贝呢?进行验证对于第一个问题可以将string类型强制为[]byte切片后再进行下标修改,对于第二个问题猜测是进行内容拷贝,强制不能改变本身类型的属性。直接上代码:package mainimpor...…
-
Docker命令小结
基本命令docker run docker run 容器标识 : 运行容器,该命令实际上是 docker create 和 docker start 的组合。 docker run 容器标识 命令 : 容器启动时执行相应的命令。-d docker run -d 容器标识 : 以后台守护进程形式运行容器。-it docker run -it 容器标识 : 以交互模式进入容器,并打开终端。--name docker run 容器标识 –name “my_test”: 在启动容器时可以...…
-
Ubuntu镜像容器安装vim
运行Ubuntu镜像容器使用sudo docker run -it ubuntu运行Ubuntu容器,-it 参数的作用是以交互模式进入容器,并打开终端。34a11bd82bc9 是容器的内部 ID。 安装vim确认没有安装vim。 指令安装vim。 提示:Reading package lists... DoneBuilding dependency tree Reading state information... DoneE: Unable to loca...…