wenqian 'blog

厚积薄发——Practice makes perfect !

本博客全文目录索引

本专栏博文索引(目录)涵盖:C/C++、STL、Data Structure、Algorithm、TCP/IP、Linux(Interface/Driver/Kernel)和 Projects。 C/C++ 详解C指针 C++对象模型 深度探索C++对象内存模型 深度剖析C++虚...

2016-01-26 18:34:02

阅读数 2295

评论数 2

【Linux 内核网络协议栈源码剖析】系统网络协议栈初始化及数据传输通道建立过程

本文先大致阐述系统协议栈初始化过程,然后剖析数据包的接收和发送通道过程,在文章最后着重梳理其过程及通道结构区别。 源码版本:Linux kernel 1.2.13;工具:Source Insight 3.5 下图为网络协议栈初始化程序流程框架 本篇幅将根据上图来介绍系统网络协...

2015-08-24 19:51:02

阅读数 1904

评论数 0

TinyHTTPd--超轻量型Http Server源码分析

TinyHTTPd是一个超轻量型Http Server,使用C语言开发,全部代码不到600行,附带一个简单的Client,可以通过阅读这段代码理解一个Http Server的本质。源码下载链接http://sourceforge.net/projects/tinyhttpd/ 分析这段源码前,需...

2015-05-27 13:14:34

阅读数 5570

评论数 4

深度剖析C++虚函数

前面探索了C++对象的内存模型,其中简单的涉及到了虚函数,作为C++实现其多态的一个重要机制,这里进一步探索下虚函数机制,以前也看过网络上关于虚函数机制的一些精彩的文章,但现在决定自己再分析这个虚函数机制以加深理解,看与自己动手探索还是有区别的。

2014-11-27 20:57:40

阅读数 1264

评论数 1

深度探索C++对象内存模型

前面简单的论述过C++对象模型,总觉得不够深入,现近闲来进一步挖掘C++对象内存布局情况。主要讨论:单一继承,多重继承,钻石继承的有无虚函数以及虚拟继承的情况。贴出测试程序,并给出测试结论以及对应的类对象的大小计算。(PS:类对象的内存布局取决于编译器,这里的测试都是基于Visual Studio)

2014-11-14 21:48:15

阅读数 1427

评论数 0

详解C指针

基础的东西经过很长时间积累而且还会在未来至少10年通用。 指针是一个特殊的变量,它里面存储的数值被解释成为内存(用户空间的虚拟内存)里的一个地址。一、指针的属性一个指针包含四个方面的内容:指针的类型、指针所指向的类型、指针所指向的内存区、指针本身所占据的内存区。接下来就下面几个例子作说明:1、 i...

2016-01-17 15:29:17

阅读数 1822

评论数 2

C语言内存管理:malloc、calloc、free的实现

任何一个对C稍稍有了解的人都知道malloc、calloc、free。前面两个是用户态在堆上分配一段连续(虚拟地址)的内存空间,然后可以通过free释放,但是,同时也会有很多人对其背后的实现机制不了解。 这篇文章则是通过介绍这三个函数,并简单的予以实现,对比现有C的标准库实现(glibc等)相比...

2016-01-03 21:07:35

阅读数 7371

评论数 2

【Linux 驱动】Netfilter/iptables (八) Netfilter的NAT机制

NAT是Network Address Translation的缩写,意即“网络地址转换”。从本质上来说,是通过修改IP数据首部中的地址,以实现将一个地址转换成另一个地址的技术。当然在某种情况下,修改的不仅仅是IP首部的来源或目的地址,还包括其它要素。 随着接入Internet的计算机数量不断猛...

2015-12-27 21:28:08

阅读数 1852

评论数 1

【Linux 驱动】Netfilter/Iptables (七) 内核协议栈skb封装分析(续六)

上文介绍了netfilter机制下,如何重造并发送一个skb,涉及到内核协议栈编程,而不是我们平时所说的用户层socket网络编程。我们先来介绍下上面skb重构程序涉及到的几个函数: 首先,有必要说下,也是后面每段程序中都有说道的,就是开发源码树版本是3.13的,这个版本的skb_buff和我们...

2015-12-25 15:24:57

阅读数 2104

评论数 0

【Linux 驱动】Netfilter/iptables (六) 内核协议栈编程(发送skb)

内核态基于 Netfilter 构造skb数据包 前面第四篇介绍了 Netfilter Hook 机制,我们知道了数据包在协议栈中传递时会经过不同的HOOK点,而每个HOOK点上又被Netfilter预先注册了一系列hook回调函数,每个数据包经过时都会经过这些hook函数的处理。在hook回调...

2015-12-25 10:33:22

阅读数 3605

评论数 0

【Linux 驱动】Netfilter/iptables (五) 数据包过滤

通过前面的学习,我们窥探了整个Netfilter框架,下面我们就通过一些编程实例来进一步学习。一. 基于网络设备接口进行数据包过滤 根据hook函数接收的参数中的 struct net_device 结构,net_device 结构体用于描述网络接口设备,其中name这个成员表示对应设备的名字,...

2015-12-22 14:48:45

阅读数 3399

评论数 0

【Linux 驱动】Netfilter/iptables (四) 窥探 Netfilter Hook 机制

上篇文章介绍了注册和注销Netfilter/iptables,其中对于hook函数,我们没有具体到数据包的规则处理,直接一律来者皆拒(NF_DROP)。 ok,我们接着前面,深入探索下hook函数: typedef unsigned int nf_hookfn(const struct nf_...

2015-12-22 14:46:00

阅读数 2362

评论数 0

【Linux 驱动】netfilter/iptables (三) 注册和注销Netfilter hook

继前面介绍了 netfilter hook,这里我们开始进行实例讲解: wqlkp.c:#include <linux/module.h> #include <linux/kernel.h> #include <linux/netfilter.h> #incl...

2015-12-22 10:58:37

阅读数 2116

评论数 1

【Linux 驱动】netfilter/iptables (二) Netfilter hook 数据结构

Netfilter是Linux 2.4.x 引入的一个子系统,它作为一个通用的、抽象的框架,提供一整套的hook函数的管理机制,使得诸如数据包过滤(filter)、网络地址转换(NAT)和基于协议类型的链接跟踪成为了可能。这些功能仅通过使用内核网络代码提供的各式各样的hook函数完成。对于数据在网...

2015-12-22 10:57:22

阅读数 2531

评论数 0

【Linux 驱动】netfilter/iptables (一) 基础概念

在介绍netfilter/iptables之前,我们先来了解下防火墙: 防火墙是指设置在不同网络或网络安全域之间的一系列部件的组合,它能增强机构内部网络的安全性。它通过访问控制机制,确定哪些内部服务允许外部访问,以及允许哪些外部请求可以访问内部服务。它可以根据网络传输的类型决定IP包是否可以传...

2015-12-20 13:15:40

阅读数 1954

评论数 0

【Linux 驱动】中断处理(一)上半部

关于中断大家应该很熟悉,无论是操作系统的学习也好还是微机原理也好都会接触到中断。以前进行单片机单板开发的时候,会有外部中断,定时器中断以及串口中断,就是有一个事件触发(外部中断则是外部有按键触发(边缘触发和水平触发),串口中断则是串口有数据输入,定时器中断则是内部设置一个定时器,时间到了就触发),...

2015-12-20 10:43:00

阅读数 1176

评论数 0

【Linux 驱动】中断处理(二)下半部tasklet

前面我们介绍了Linux驱动的[中断处理程序机制] 由于其本身存在一些局限,所以它只能完成整个中断处理流程的上半部分。这里我们则着重介绍下半部。

2015-12-17 16:23:28

阅读数 748

评论数 0

【Linux 驱动】异步通知机制

异步通知机制:一旦设备就绪,则主动通知应用程序,这样应用程序根本就不需要查询设备状态,是一种“信号驱动的异步I/O”。 信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上,进...

2015-12-16 22:41:26

阅读数 1701

评论数 0

【Linux驱动】内存管理

关于linux内存管理的概念请参考笔者前面的博文: linux内存管理(一)基础篇 linux内存管理(二)伙伴算法 linux内存管理(三)slab分配器下面的驱动程序中的函数的区别,以及对应的函数介绍请参考第一个链接(linux内存管理基础篇)#include <linux/mod...

2015-12-15 20:28:19

阅读数 911

评论数 0

【Linux驱动】轮询操作select()和poll()

使用非阻塞I/O的应用程序通常会使用select()和poll()系统调用查询可对设备进行无阻塞的访问。select()和poll()系统调用最终会引发设备驱动中的poll()函数被执行。 select()和poll()系统调用的本质是一样的。本系列只关注设备驱动中的函数层,对于应用层具体请参考...

2015-12-12 15:27:40

阅读数 2241

评论数 0

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