自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(192)
  • 资源 (6)
  • 收藏
  • 关注

原创 tcp/ip协议栈--socket API 之发送函数(send/write)

0x01 缘由     前面博文把服务端、客户端三次握手连接过程学习完了,现在开始学习下相关发送数据API。0x02 API介绍  0x03 相关调用一览0x04 tcp层     对应博文http://blog.csdn.net/pangyemeng/article/details/781048720x05 总结     发送过程仅仅是

2017-09-29 16:05:52 1709 1

原创 tcp/ip协议栈--socket API 之accept()

0x01 缘由     前面博文已经学习了socket()\bind(),一切准备好后,开始可以接受客户端的连接请求,建立连接了。下面学习下accept API相关细节。0x02 API介绍在建立好接收队列以后,服务器就调用accept(),然后睡眠直到有客户端的连接请求到达。默认为阻塞API。0x03 源码单步跟踪     环境:linux kernel 2.6.

2017-09-28 15:43:01 855 1

原创 tcp/ip协议栈--socket API 之listen()

0x01 缘由     上篇博文介绍了bind的连接,了解了相关细节,这章继续学习socket API ,这篇关注listen。listen几个关键参数和队列是经常被面试官提出的问题。0x02 API介绍全连接队列的最大长度:     backlog保存的是完成三次握手、等待accept的全连接,而不是半连接。     负载不高时,backlog不用太大。(For

2017-09-28 12:07:36 423

原创 tcp/ip协议栈--socket API 之bind()

0x01 缘由     上篇博文已经学习了socket() API,但是还不清楚创建的socket等相关结构如何使用。上篇文章仅仅创建了相关存储结构和文件描述符sockfd,并没有表示任何地址和端口。0x02 bind()介绍    0x03 单步跟踪分析     guest主机上运行server.c,此函数是通用的服务端模式,其中调用bind()函数,同时在内核源码通用处理s

2017-09-28 11:06:08 597 1

原创 tcp/ip协议栈--socket API 之socket()

0x01 缘由     前面学习了基本tcp/ip协议栈相关处理流程,学习这些主要目的是为加强对网络相关处理的熟练程度,指导将来相关网络设备开发、网络安全产品开发。除此之外,应该进一步关注高性能服务器相关开发,后面几个章节通过结合应用层socket相关API来进一步加强对linux tcp/ip协议栈的理解,同时加强应用层socket开发的理解。     前面有些博文已经提到了应用层soc

2017-09-27 14:18:21 534

原创 tcp/ip协议栈--tcp数据发送流程

0x01 缘由     前面一些章节学习数据的收,现在关注协议socket数据从用户态到内核态,然后发送出去的过程。学习手段还是借助他人的成果,加单步跟踪内核源码。     传送:http://blog.csdn.net/zhangskd/article/details/482075530x02 调用栈0x03 关键代码分析/* tcp_sendmsg()的主要

2017-09-26 17:37:48 851 1

原创 从用户态代码调用到内核态调用单步调试之旅01

0x01 缘由     一直在从事linux c/c++相关网络开发,现在想进一步深入到内核,了解更多的东西,以支撑上层应用的开发。在linux上写个c/s 通讯过程很简单,如何写得高并发、稳定才是真正的难点。0x02 linux c服务端和客户端代码服务端:#include #include #include #include #include #include #i

2017-09-11 10:48:16 312 1

原创 利用eclipse + qemu| Vmware + gdb 调试linux内核

0x01 缘由     最近想调试linux内核协议栈,想单步调试,所以折腾了几天,利用qemu + eclpise去调试相关。0x02 内核初始化调试环境     centos 6.5 内核版本 2.6.32-431.el6.i686     qemu-0.11.0     eclipse cdt          1.首先我们要从www.kernel.org下载内核

2017-09-08 09:40:31 1323

原创 elasticsearch外场分片找回-UNASSIGNED

0x01 缘由     产品开发过程中没有专人去深入理解elasticsearch相关原理,导致在产品生产部署时,没有做到合理的物理架构部署,导致后期问题不断出现。     当外场出现服务器资源瓶颈时,紧急调整相关结构,忙中出错,调整主节点时,导致某个索引无法找回相关分片。类似:          1、3分片 “ UNASSIGNED”0x02 场景描述     软件:

2017-09-06 12:11:27 3793

原创 推送技术-icomet学习和分析

主动推送技术 libevent

2015-09-09 13:11:09 1641

原创 网络设备开军火发库(libnet,libpcap,pfring,dpdk)

1缘起实际工作中开发网络设备时,常用到的一些开源网络库,做一些底层的包的捕获、发送、修改等。下面简单介绍一下有哪些开源工具,以及相应的简单用法。有一些特殊的数据包要做特殊处理,如vlan环境下的数据包。2 libnet(发包)2.1简介libnet是一个小型的接口函数库,主要用C语言写成,提供了低层网络数据包的构造、处理和发送功能。libnet的开发目的是:建立一个简单统一的网

2015-08-14 16:09:45 5267

原创 GreenSQL(数据库安全)学习

一、软件简介    该产品是开源产品,目的也是仅仅保护开源的数据库系统MYSQL和PostgreSQL免遭SQL injection攻击。系统工作在Proxy模式。可以运行于多个Linux发行套件以及FreeBSD之上。对于PostgreSQL而言GreenSQL也是仅有的保护方案。    该产品可以运行于下述模式:    1.Simulation Mode (database

2015-08-11 13:07:49 791

原创 代码静态检查-cppcheck

1安装解压:tar xzvf cppcheck-1.69.tar.gz进入源码,方法1:make & sudo make install如果方法1运行报错(找不到配置文件),则按方法2:make SRCDIR=build CFGDIR=/usr/share/cppcheck/make install CFGDIR=/usr/share/cppcheck/2功能Cpp

2015-08-10 17:22:12 1272

原创 Linux C编程中遇到问题

1、memcpy 和 memmove    功能:拷贝一定长度内存内容到指定的内存;    区别:当内存发生局部重叠的时候,memmove保证拷贝的结果是正确的,memcpy不保证拷贝的结果的正确;    函数原型:    void *memcpy(void *dst, const void *src, size_t count);    void *memmove(void

2015-07-10 15:01:35 483

原创 谈谈linux c编程过程

cppcheck、splint、valgrind、gperftools

2015-07-01 17:32:36 483

原创 C编程之core dump杂谈

C编程之core dump杂谈

2015-06-05 16:39:14 642

原创 linux下借助图形界面操作mysql数据库

0x01缘起    最近总是觉得自己碌碌无为,于是想利用一些开源的东西做一个属于自己的应用,也不枉做一会程序员。    在linux平台下用命令行操作数据库时一件比较痛苦的事,于是想利用一下图形界面,提供开发效率。在网上找了一些工具,大部分是商业的数据库。由于在windows平台也利用过Navicat,所以就选择了它。0x02环境    OS:ubuntu 

2015-06-02 10:28:09 6372

原创 linzdb的应用

libzdb

2015-05-20 15:17:52 478

原创 安装oracle数据库后遇到数据入库为乱码的问题-由于oracle编码和系统编码不同导致

在项目中安装oracle数据库后遇到数据入库为乱码的问题。0x01 背景知识:下表是locale ID与字符集名称的对应关系:LanguageLocale IDNLS_LANGEnglish (American)en_US.UTF-8AMERICAN_AMERICA.AL32UTF8

2015-05-14 14:35:58 999

原创 Libzdb源码解读

1    Libzdb简介一个非常小,简单的数据库连接池库。1.1             Libzdb特点1) 线程安全。2) 连接不同的数据库系统。3) 零运行时配置,连接使用URL。4) 目前支持的数据库MySQL, PostgreSQL, SQLite and Oracle。5) 可以不断进行扩展。1.2             支持平台及开发语言1.2

2014-10-11 21:25:35 1061

原创 epoll两种模式(lt/et)复习

0x01 缘由    最近又在复习一些基础知识,现在看看epoll的相关知识点。0x02 介绍    epoll是Linux内核为处理大批量文件描述符而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。另一点原因就是获取事件的时候,它无须遍历整个被侦听的描述符集,只

2018-01-08 16:41:44 535

原创 如何快速融入一个研发团队?

0x01 缘由    最近就要马上入职新的公司了,离开上家公司也是迫不得已,但是为了自己的职业发展和眼界开阔,做出这样的选择已成自然。已经和三年多前的一次职业选择不同了, 毕竟已经有四年多的工作经验了,需要做事有章法。关于如何快速融入一个研发团队?我有话说。0x02 注意点    1、适应环境,自我调整(前期以自己调整为主)    融入一个新的环境,每个环境有自己自治习惯和风格

2018-01-03 16:59:09 1787 1

原创 进程池组件闲聊

0x01 缘由    在开发过程中,某些业务场景可能要使用到进程池或者线程池。主要目标是消除动态创建进程或进程时的开销。一般如果能够准确预测自己每个进程或进程的职责,这个都是在程序启动时就创建的,后期不会动态的去创建线程池或进程池。今天主要从几个方面来学习和探讨进程池或线程池技术。0x02 场景    常见的web服务器(需要处理较多的并发请求):        常见的lightt

2018-01-03 16:24:34 315

原创 tcp/ip--面试中遇到几个问题

0x01 缘由    前段时间遇到的几个问题,现在简单总结和分析下:    1、tcp三次握手过程中交换了哪些信息?    2、一次tcp会话过程中序列号初始值是固定还是随机?    3、tcp三次握手过程中,三次握手的最后一个过程数据包在网络中丢掉,该如何处理?    4、TIME_WATE的作用?    5、保证tcp可靠传输的方法?    以上问题在实际应用中还是

2017-12-25 16:07:20 901 1

原创 linux 编程 信号处理

0x01 缘由    最近面试遇到SIGPIP信号的处理的场景,但是这个信号的处理一般常见socket编程,我们在编写基础框架时一般都会对此信号进行捕获。    现在系统学习相关信号,以及常出现的场景。0x02 信号介绍    0x03 SIGPIPE介绍    这个信号的触发常出现在这样socket编程场景:连接建立,若某一端关闭连接,而另一端仍然向它写数据,第一次写数据

2017-12-20 15:46:08 241

原创 main函数的返回值

0x01 缘由    最近在面试过程中,面试官都会问些C语言容易忽视的地方,如main函数返回值的作用等。这些细节还是得学习下,虽然在实践工作中的使用会较少。0x02 介绍    程序运行过程入口点main函数,main()函数返回值类型必须是int,这样返回值才能传递给程序激活者(如操作系统)表示程序正常退出。main(int args, char **argv) 参数的传递。参数的

2017-12-20 15:24:15 5550

转载 C++基础——用C++实例理解UML类图

目的:学习下UML类图的创建和认识转载于:http://blog.csdn.net/lanchunhui/article/details/49557083类展示基本概念及术语可见性visibility参数的方向parameter direction类成员变量或者函数的类型类关系关系的多重性multiplicity类关系assocationkonws adep

2017-12-14 11:23:16 7057 2

原创 boost重要库编码实例

0x01 缘由    最近几周没有再继续学习新的知识点,而是准备一些面试题。大家懂的。。。。0x02 boost::shared_ptr 智能指针介绍请看另外一篇博文:http://blog.csdn.net/pangyemeng/article/details/72842566example1:#include #include #include class Sha

2017-12-12 10:15:34 539

转载 初窥c++11:从move语义到右值引用

转载理由:一直听C++11特性,没认真学习过,学习学习;    技术人员往往比较傲慢,写c语言的鄙视c++,写c++的鄙视Java,写Java的鄙视c#,要是程序员吵起来怎么办,一个流行的办法就是去github约架,比赛写tokenizer和grammar analyzer啊,写不出来滚出程序界啊,哈哈。说到github,不得不说去github找份好代码真不容易,大量“坏味道”的代码充斥其

2017-12-06 09:49:59 166

原创 DPDK-利用DPDK开发项目应该注意的性能点

0x01 缘由    最近也在尝试写一个DPDK应用程序,也是对之前的学习做一下检验。然而在编写过程中,发现自己陷入到一个码API的思路中,完全没有考虑到DPDK的设计思想,于是放开编程指南,学习下。0x02 写高效的代码    Intel® 64 and IA-32 指导手册。    1.内存    内存拷贝:建议不要使用libc中的memcpy函数,而用rte_memcpy

2017-11-28 15:44:31 4659

原创 DPDK-__attribute__((constructor))

0x01 缘由    在DPDK库开发过程中,遇到的问题。做个简短小结。#include__attribute__((constructor)) void before_main() { printf("Before main\n");}__attribute__((destructor)) void after_main() { printf("After main\n")

2017-11-20 10:36:19 559

原创 DPDK-同步互斥机制

0x01 缘由    继续学习DPDK设计思想。0x02 概念   原子操作:多个线程执行一个操作时,其中任何一个线程要么完全执行完此操作,要么没有执行此操作的任何步骤,那么这个操作就是原子的。原子操作操作系统中:“不能被进一步分割的最小粒子”。   原子保证操作:一些基础的内存事务操作,如对一个字节的读和写,它们总是原子的。对于边界对齐的字节、字、双字和四字节都可

2017-11-15 15:02:51 1220

原创 DPDK-并行计算

0x01 缘由    继续学习DPDK在并行计算上的优化。对于DPDK的主要应用领域--数据包处理。资源局部优化、避免跨核共享、减少临界区碰撞、加快临界区皖苏完成速率,都不同程度地降低了不可并行部分和并发干扰部分的占比。0x02 慨念    多核处理器:在一个处理器中集成两个或者多个完整的内核(及计算引擎)。    超线程(Hyper-Threading):在一个处理器中提供两个逻

2017-11-14 16:33:44 463

原创 DPDK-Cache和内存优化点

0x01 缘由     在一篇博文中看到false-sharing问题(多核编程中伪共享问题),引发了我对DPDK内存和Cache的思考和学习。看看这些知识点,大部分都是计算机组成原理和操作系统的知识点,如果做系统编程,这些知识点不能还给大学老师。0x02 概念    南桥:系统I/O芯片(SI/O):主要管理中低速外部设备;集成了中断控制器、DMA控制器、PCI网卡等。    北

2017-11-13 15:49:51 898

原创 DPDK-工具脚本网卡与驱动绑定

0x01 缘由    dpdk_nic_bind.py脚本功能,将网卡名称同dpdk支持的驱动进行绑定,直接修改相关参数来达到此目的。此脚本处理流程:解析参数、检测网卡、将对应的网卡与对应驱动绑定。    脚本做了异常处理:防止断开ssh连接,避免将DPDK驱动绑定到管理网口上。0x02 源码注释    直接上源码目的,复习python和看如何手动绑定驱动。import sys

2017-11-09 13:19:24 5364

原创 API设计--性能

0x01 缘由    前面学习了一些API编写的原则,作为后期的指导作用。今天关注一些API性能细节和分析方法。0x02 API考虑的性能指标和原则    1.编译时速度。    2.运行时速度。    3.运行时内存开销。    4.库的大小。    5.启动时间。    一个重要的性能优化经验是:绝不应该相信你的“哪些部分会比较慢”直觉,而是应该在实际环境中测量

2017-11-08 10:16:18 340

原创 设计模式-包装模式(代理模式、适配器模式、外观模式)

0x01 缘由    编写基于另一组类的包装器接口是一项常见的API设计任务。例如,你的工作可能是维护一个大型的遗留代码库,相比重构所有代码,你更愿意设计一个新的、更简洁的API,以隐藏所有的底层遗留代码;或者你可能已经编写了一个C++ API,后来需要给特定客户提供纯C接口;或者你的API用到了一个第三方依赖库,你想让客户直接使用此库,但是又不想将此库直接暴露给客户。    以上就是包装

2017-11-06 15:47:07 920

原创 DPDK-UIO 驱动认识

0x01 缘由    前期学习了一些DPDK的demo,了解了一些基础DPDK的应用。对dpdk的一些底层原理没做过多分析,今天主要学习用户态驱动程序的实现情况。0x02 用户态驱动程序UIO    UIO(Userspace I/O)是运行在用户空间的I/O技术。Linux系统中一般的驱动设备都是运行在内核空间,而在用户空间用应用程序调用即可。    UIO的内核部分和用户空间的

2017-11-06 14:52:02 7432 1

原创 DPDK-KNI学习和利用(DNS服务)

0x01 缘由    看到这个例子,不禁想起前期我们做的一个项目,我们通过pfring捕获数据包,想让这个数据包再回到linux协议栈,然后访问我们的服务。我记得我们采用的方式是将两个物理网卡相连,然后数据包转发到另外一个普通网卡,让其进Linux协议栈处理流程。    同样KNI也是一种方式,用DPDK捕获数据包让其走linux协议栈去处理。0x02 KNI是咋回事?    KN

2017-11-03 16:43:24 6519

原创 设计模式--工厂模式

0x01 缘由    继续学习相关设计模式,在编程中得到进一步利用,在目前的产品开发过程中,有很多地方都用到了工厂模式。0x02 工厂模式    “工厂”现实中的意义是按照某种工艺制造产品。那么为什么要使用工厂模式了?有什么好处?    工厂模式是一个创建型的设计模式。他允许创造对象时不指定要创建的对象的具体类型(可能就某个参数)。本质上,工厂方法是构造函数的一般化。在C++中,构

2017-11-03 14:08:07 168

数据结构PPT数据结构PPT数据结构PPT数据结构PPT数据结构PPT数据结构PPT数据结构PPT

数据结构PPT数据结构PPT数据结构PPT数据结构PPT数据结构PPT数据结构PPT数据结构PPT数据结构PPT数据结构PPT数据结构PPT数据结构PPT数据结构PPT数据结构PPT数据结构PPT数据结构PPT

2010-12-21

Link操作链表的操作,删除,插入等

链表的操作,删除,插入等链表的操作,删除,插入等链表的操作,删除,插入等链表的操作,删除,插入等链表的操作,删除,插入等

2010-12-18

Snort运行流程图(gperftools结果)

Snort运行流程图(gperftools结果),整体了解snort运行机制。

2017-06-29

Stack 的建立,删除及相关操作

Stack 的建立,删除及相关操作Stack 的建立,删除及相关操作

2010-12-24

Stack 的建立,删除及相关操作

Stack 的建立,删除及相关操作Stack 的建立,删除及相关操作Stack 的建立,删除及相关操作Stack 的建立,删除及相关操作Stack 的建立,删除及相关操作Stack 的建立,删除及相关操作Stack 的建立,删除及相关操作Stack 的建立,删除及相关操作

2010-12-24

Stack 的建立,删除及相关操作

Stack 的建立,删除及相关操作Stack 的建立,删除及相关操作Stack 的建立,删除及相关操作Stack 的建立,删除及相关操作Stack 的建立,删除及相关操作Stack 的建立,删除及相关操作Stack 的建立,删除及相关操作

2010-12-24

空空如也

空空如也

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

TA关注的人 TA的粉丝

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