- 博客(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

原创 网络设备开军火发库(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下借助图形界面操作mysql数据库
0x01缘起 最近总是觉得自己碌碌无为,于是想利用一些开源的东西做一个属于自己的应用,也不枉做一会程序员。 在linux平台下用命令行操作数据库时一件比较痛苦的事,于是想利用一下图形界面,提供开发效率。在网上找了一些工具,大部分是商业的数据库。由于在windows平台也利用过Navicat,所以就选择了它。0x02环境 OS:ubuntu
2015-06-02 10:28:09
6372

原创 安装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
2010-12-21
Stack 的建立,删除及相关操作
2010-12-24
Stack 的建立,删除及相关操作
2010-12-24
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人 TA的粉丝