自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 收藏
  • 关注

原创 Linux防火墙机制Netfilter/iptables简介

Netfilter是什么?Netfilter是Linux的第三代防火墙,因其比之前的两种防火墙ipfwadm及ipchains出色而被Linux组织作为默认的防火墙。Netfilter是自由软件,但在各方面均不逊于商业版的防火墙。Netfilter与Linux的关系Netfilter与Linux是两个相互独立的组织,在Linux 2.4早期的版本,并没有包含Netfilter的功能,到后期的...

2019-12-27 00:41:48 1441 2

原创 Linux kernel开发(二)Hello world模块

完整的hello world模块我准备写一个hello world的内核模块作为内核开发的入门,先看下hello.c文件源码#include <linux/init.h>#include <linux/module.h>MODULE_LICENSE("DUAL BSD/GPL");static int __init hello_init(void){ printk(KERN_ALERT "Hello, world\n"); retur

2021-07-23 00:33:56 437

原创 linux kernel ioctl系统调用

Q:用户空间调用ioctl操作网卡设备行为时,调用链是什么样的?不同的socket类型是否也不一样?先来看一下系统调用ioctl的调用链是什么样的,请看下表函数名称文件名做了什么SYSCALL_DEFINE3(ioctl, unsigned int, fd, unsigned int, cmd, unsigned long, arg)fs/ioctl.cioctl函数入口do_vfs_ioctlfs/ioctl.c真正入口,这个函数里边会区分哪些是针对真正的文件进行操

2021-07-13 17:58:09 492

原创 linux kernel bridge 数据包流向

Q:bridge的入口在哪里?在驱动侧还是内核协议栈?到数据包达到网桥时哪一阶段去匹配目的mac是否与自己的mac匹配,不匹配就丢包?要回答上面的问题,首先需要了解内核模块bridge是如何工作的,当bridge成功加载之后,他受理从用户空间发来的ioctl指令来指示增删桥接口,在嵌入式设备中,通常使用busybox中的brctl命令行工具调用内核ioctl来与内核通信。当用户空间增加一个桥接口时,内核bridge模块就创建对应的桥接口实体,同时将自己的br_handle_frame注入到设备的rx_ha

2021-07-13 17:56:27 578

原创 linux kernel内部产生的数据包流向

Q:从内核程序发出的数据包如何走向的?经过了哪些HOOK点?首先看一下内核模块发送数据包的代码#include <linux/slab.h>#include <linux/kernel.h>#include <linux/init.h>#include <linux/module.h>#include <linux/error.h>#include <linux/netdevice.h>static int send_

2021-07-13 17:54:17 281

原创 linux kernel 路由转发调用过程

skb的路由cache创建过程函数名称文件名做了什么ip_rcvnet/ipv4/ip_input.c网络数据报的入口函数ip_rcv_finishnet/ipv4/ip_input.cip_route_input_norefnet/ipv4/route.c创建路由表对应的entityip_route_input_slownet/ipv4/route.c本函数内部调用函数fib_lookup函数把转发表信息查出来之后,根据转发表内容决定是走路由转.

2021-07-13 17:49:33 407

原创 linux kernel socket系统调用过程

用户空间创建socket过程函数名称文件名做了什么socketany用户空间调用socket函数创建socketnet/socket.c内核socket函数的系统调用入口在/net/socket.c中,关于用户空间网络编程相关的系统调用接口基本都在这个文件中,比如bind函数、shutdown函数等等。sock_createnet/socket.c调用__sock_create__sock_createnet/socket.c首先调用security

2021-07-13 17:47:34 465

原创 linux kernel raw packet的接收与发送

Q:如果我要在linux上写一个程序,程序的功能是接收网络数据包,根据接收到的包再决定发送网络数据包,但这里的网络数据包并非TCP/UDP类型的数据包,而是仅包含以太头的原始数据包raw packet,那么这个的程序应该怎样编写呢?为了使贴上来的程序完整,不至于只包含一部分代码,我先将各文件的完整代码附上,之后再针对各个需要注意的点逐一介绍。先定义一个原始包处理的类,类的接口包括发送与接收、socket的创建与关闭、混杂模式的打开与关闭。头文件如下#ifndef __RAWPKT_PROCESSOR_

2021-07-13 17:44:16 1460

原创 linux kernel 发送网络数据包处理流程

应用层发送数据包的调用链如下我们的流程以发送一个UDP包为例,阐述linux kernel数据包发送过程,下图为调用链,至上而下。函数名称文件名做了什么udp_send_skbudp.c封装UDP头,调用ip_send_skb发送ip数据包ip_send_skbip_output.cip_local_outip_output.c__ip_local_outip_output.cnf_hookip_output.c调用关系到了这里就再继续下

2021-07-13 17:39:40 480

原创 linux kernel 接收网络数据包处理流程

数据包接收处理流程系统启动时,在kernel/softirq.c文件中函数spawn_ksoftirq会调用smpboot_register_percpu_thread,这个函数位于kernel/smpboot.c文件中,他的作用就是为每一个cpu注册一个软中断的线程处理函数,而这个软中断处理线程函数名称为run_ksoftirqd软中断线程入口函数run_ksoftirqd会检测softirq的pengding位是否置位,如果置位则调用__do_softirq();位于文件kernel/softi

2021-07-13 17:13:46 391

原创 符号运算编程总结

无符号数与有符号数交叉运算在一般的混合运算中,如果存在有符号数与无符号数交织运算,这个时候必须主要计算结果的符号位转换,下面举例说明一下:#include <stdio.h>int main(void){ unsigned int uiData = 2; int iData = -20; if(iData + uiData > 6) { printf("%s\n", "a+b > 6"); } else

2021-07-13 17:05:16 319

原创 Linux kernel开发(一)升级内核

背景在写此文章以前,我时常想将linux kernel的源码下载下来,然后搭建一个最基本的开发环境,之后就可以在此基础上自由开发调试,但是都因中文社区没有太多类似的详细教程而止步,最近因工作需要涉及linux kernel module开发,所以在这方面也积累了一些开发经验,为了不忘来时的路,我将之前的一些问题写成文章,便于以后时间间隔太长时能够快速恢复。环境准备一台安装了linux centos 7的电脑在升级内核之前,你起码得有一台linux版本的内核,如果你不知道如何将一台电脑安装成linu

2021-04-27 00:59:30 552

原创 Redis在C++中的对象封装

Background在微服务的开发过程中,分布式缓存数据库redis几乎是必然要使用到的,然后redis的储存数据全是string类型的数据,在读取数据和保存数据时,没法直接将操作对象进行存储和保存,必须进行转换。本文是作者的工程实践的一些经验总结,主要实现目标为提供对象到redis之间的操作接口,使上层应用的调用变得稍微简单一点Getting start假设我们的数据类为Data,定义如下:class Data{public: Data(int inkey):key(inkey){}pub

2020-08-03 11:57:16 923

原创 微服务架构与实践笔记(三)微服务关键技术之服务接入

服务接入边缘服务:边缘服务的作用是简化外部消费者对系统的调用。它可以是纯前端的页面,用于获取多个服务的数据后提供给消费者,也可以是聚合类服务,将结果进行聚合后返回给消费者。边缘服务的典型场景是支撑多样化的消费者,这种情况有时候也称作 BFF(Backend for Frontend)。譬如在支撑多种终端设备的应用中,通常会对服务的结果做必要的聚合或者裁剪,然后提供给不同的设备,如 PC 端...

2020-03-14 00:54:07 1113

原创 微服务架构与实践笔记(二)微服务关键技术之服务划分与实现

微服务关键技术服务划分原则单一职责原则:高内聚、低耦合服务依赖原则:避免循环依赖、根据业务重要性进行划分(核心服务于非核心服务),避免核心服务依赖非核心服务服务自治原则服务划分策略根据业务功能垂直划分-根据数据模型划分根据界限上下文划分根据非功能性划分复用性资源等级一致性部署升级频率伸缩性如何衡量服务划分的合理性服务是否能独立交付服务所属的团队规模:尽量8...

2020-03-14 00:50:24 1068

原创 微服务架构与实践笔记(一)微服务基础

什么是微服务架构微服务的两个核心点:松耦合(Loosely coupled):松耦合表明,服务之间的耦合关系是松散的,即服务能够被独立部署和更新。业务上下文(Bounded context)独立:源于《领域驱动设计》(Domain Driven Design)一书,表明对于单服务而言,它的业务是相对独立的,可以由团队根据接口定义的信息来维护该服务。定义微服务架构是一种架构模式,它提倡...

2020-03-14 00:45:22 423

原创 odb 使用指南(四)数据库查询

背景最近一直在看odb官网上odb-manual,由于是全英文文档,仔细看过一遍之后虽然感觉基本了解,但是隔几天之后再翻开时又要逐一回忆当初理解的一些细节,毕竟不是母语,没有那种一看就条件反射式的想起来,所以把一些key word记录下来,避免下次重复花时间来消化知识。对于一个coder,能够用代码来阐述的,就尽量不用文字,所以在记录过程中尽量通过代码来展示一些api的用法。使用说明本文基于...

2020-03-13 18:05:35 3420

原创 odb 使用指南(三)持久化对象的处理

背景最近一直在看odb官网上odb-manual,由于是全英文文档,仔细看过一遍之后虽然感觉基本了解,但是隔几天之后再翻开时又要逐一回忆当初理解的一些细节,毕竟不是母语,没有那种一看就条件反射式的想起来,所以把一些key word记录下来,避免下次重复花时间来消化知识。对于一个coder,能够用代码来阐述的,就尽量不用文字,所以在记录过程中尽量通过代码来展示一些api的用法。使用说明本文基于...

2020-03-13 18:02:43 1689

原创 odb 使用指南(一)环境搭建

下载安装包访问odb官方下载,需要下载的文件有以下三个:libodb-2.4.0.tar.gzlibodb-mysql-2.4.0.tar.gzodb-2.4.0-1.x86_64.rpm其中我使用的版本号为2.4.0,如果有最新的版本可以下载最新的版本,另外odb的rpm包odb-2.4.0-1.x86_64.rpm需要根据自己linux服务器的架构来选择合适的版本,我这里是x86...

2020-03-13 17:56:48 2294

原创 odb 使用指南(二)Hello World

Hello World实例声明持久化类比如一个person.hxx类的头文件如下所示// person.hxx//#include <string>class person{public: person(const std::string& first, const std::string& last, ...

2020-03-11 10:55:49 2351

原创 CMake构建项目级编译环境

开始之前参与到一个项目时,往往因为需求而去快速Get某些技能,并将之应用到实际的项目中,慢慢的对这些知识越来越熟悉,有时候准备把Get到的这些知识记录下来,但静下来想想要把这些知识点写全也不太容易,而且自我感觉应该不会忘的,所以把笔记的事情没当回事。时间一天天过去,当我们参与到其他项目之中,开始了新的关键技术分析和概要设计,当初Get到的那些技能由于不经常使用而慢慢退化,当某个时间点再次需要这些...

2020-01-20 17:29:33 682

翻译 Linux防火墙netfilter/ebtables简介

备注:本文翻译于ebtables官方用户手册,翻译中有用词不当的地方请指正NAMEebtables (v2.0.10-1) - Ethernet bridge frame table administrationSYNOPSIS(概要)ebtables [-t table ] -[ACDI] chain rule specification [match extensions] [wa...

2019-12-27 17:43:58 1059

原创 The learning Note of Head First Design Pattern

Chapter 1. Intro to Design Patterns: Welcome to Design PatternsNOTE:HAS-A can be better than IS-AThe Strategy Pattern defined:SUMMARY:Chapter 2. The Observer Pattern: Keeping your Objects in...

2019-12-25 17:44:54 358

原创 Redis学习笔记总结

Redis 简介REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈...

2019-12-25 11:55:44 188

原创 redlock编译报错分析

背景介绍在微服务的应用中,多个服务之间有时需要资源共享,这时传统的线程锁不再那么好用,我们希望基于服务于服务之间的互斥锁来实现资源的互访,这时分布式锁应运而生,Redis也提供了分布式锁的功能,我们按照官方推荐的redlock c++版本来进行实践。首次编译从git 库上获取源码git clone https://github.com/jacket-code/redlock-cppcd ...

2019-12-25 10:32:54 409

原创 Redis c++ client选型

redis client基础库选择在有限的开发维护人员情况下,redis客户端库版本稳定对我们来说就显得非常重要了,选择使用人数较多的库在遇到问题时得到回复或获得解决问题的办法相对较多,redis官网提供的redis client列表如下:从列表中我们选择官方推荐的客户端hiredis作为我们的客户端基础库redis c++ client选型当我们确定了hiredis作为我们的客户端基础...

2019-12-24 20:13:00 3201

空空如也

空空如也

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

TA关注的人

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