- 博客(41)
- 资源 (4)
- 收藏
- 关注
原创 云计算与虚拟化概述
资料来源 http://liangweilinux.blog.51cto.com/8340258/1729162云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问,进入可配置的计算资源共享池(资源包括网络,服务器,存储,应用程序,服务),这些资源能够被快速提供,只需投入很少的管理工作,或与服务供应商进行很少的交互。在云计算之前的模式和技术 1、IDC托管 2、IDC租用
2016-01-02 22:56:01
973
原创 vxlan
1、概述 (1)VXLAN是建立在物理IP(overlay)网络之上的虚拟以太网 使用UDP封装完整的内层以太帧,封装报文头共五十个字节 (2)VXLAN使用24位VXLAN网络标识符(VLAN为12位) 最大支持16,000,000个逻辑网络 (3)VXLAN可跨越物理三层网络
2015-12-30 14:11:08
1094
原创 setsockopt 总结
setsockopt设置socket状态 1.closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket:BOOL bReuseaddr=TRUE;setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL));如果
2015-12-30 09:02:55
933
原创 centeros 下安装crash kdump
linux内核发送崩溃时,kdump会生成一个内核转储文件vmcore。 可以通过分析vmcore分析出内核崩溃的原因。 crash是一个被广泛应用的内核奔溃转储文件分析工具。 使用crash调试内核转储文件,需要安装crash工具和内核调试工具kernel-debuginfo。安装、配置、启动kdump安装kdump: yum search kexec-tools yum i
2015-11-13 13:23:09
1717
原创 接口层输出
概述每个CPU有一个单独的softnet_data实例,用来存储与网络中断处理相关的报文输出和输出队列。在输出过程中会用到softnet_data中的output_queue和completion_queue队列。/* * Incoming packets are placed on per-cpu queues so that * no locking is needed. */struc
2015-11-01 22:11:02
560
原创 接口层输入
NAPI和非NAPI的区别NAPI使用中断+轮询的方式,中断产生之后暂时关闭中断然后轮询接收完所有的数据包,接着再开中断。而非NAPI采用纯粹中断的方式,一个中断接收一个数据包NAPI都有自己的struct napi结构,非NAPI没有NAPI有自己的poll函数,而且接收数据都是在软中断调用poll函数时做的,而非NAPI使用公共的process_backlog函数作为其poll函数,接收数
2015-11-01 20:35:32
701
原创 linux 套接口缓存
概述Linux网络核心数据结构是套接字缓存(socket buffer),简称skb。它代表一个要发送或处理的报文,并贯穿于整个协议栈。套接字缓存 skb由两部分组成: (1) 报文数据:它保存了实际在网络中传输的数据; (2) 管理数据:供内核处理报文的额外数据,这些数据构成了协议之间交换的控制信息。当应用程序向一个socket传输数据之后,该socket将创建相应的套接字缓存,
2015-11-01 19:04:50
625
原创 网络体系概述
协议栈模型链路层:设备驱动程序 物理层:网络介质,串口联路。 网络层:接受发送转发报文。 传输层:数据传输、数据控制、端端数据控制。 应用层:具体业务,如HTTP.SMTP协议栈层次结构系统调用接口 套接口 传输层 网络层 邻居子系统 网络设备接口 驱动套接口通过网络协议栈通信都需要通过套接口操作,套接口层是协议无关接口,他提供一些接口支持各种协议。Linux中用socket 结
2015-11-01 16:57:10
618
原创 用户空间与内核空间通讯接口之procfs
概述procfs是比较老的一种用户态与内核态的数据交换方式,内核的很多数据都是通过这种方式出口给用户的,内核的很多参数也是通过这种方式来让用户方便设置的。除了sysctl出口到/proc下的参数,procfs提供的大部分内核参数是只读的。创建实例struct proc_dir_entry *create_proc_entry(const char *name, mode_t mode, struct
2015-11-01 13:45:08
799
原创 预先创建线程池的服务器程序
1) 定义存放已连接套接字描述符共享数组 2)创建线程池 3)等待用户连接 4)等待为之服务的客户描述符#include <time.h>#include <sys/types.h> /* See NOTES */#include <sys/socket.h>#include <string.h>#include <unistd.h>#include <stdio.
2015-10-18 12:47:40
500
原创 一款简单易用的 DNS 发包工具
#include <stdio.h>#include <string.h>#include <netinet/in.h>#include <netdb.h>#include <sys/time.h>#include <sys/types.h>#include <unistd.h>#include <stdlib.h>#include <signal.h>#include <pthr
2015-10-17 22:08:11
3898
原创 LocalDNS 授权服务器
背景知识1) DNS:域名系统。 2)LocalDNS:提供缓存和递归的服务。 3)授权DNS:提供权威解析。 4)原始问题:用户发送的DNS请求所查询的问题。 5)派生问题:在进行递归查询的过程中会不断派生新问题,称之为派生问题。 6)活动派生问题:在递归的整个过程中已向授权服务器发出请求,还未收到响应的派生问题。工作流程用户发送DNS请求到LDNS系统,首先到达缓存模块,如果缓存模块缓
2015-10-17 18:29:01
11177
原创 CDN 技术浅析
CDN 背景基本及概念直接解释为内容分发网络,主要任务是将客户需要提供给使用者的内容从源站传递到客户端,简单理解就是一中介,房产中介,加快租房或者买房的速度,为什么需要CND呢主要有几个方面 1)网站接入互联网的带宽有限。业务繁忙时就会拥塞。 2)不同运营商互联互通拥塞 3)长途骨干传输容易成为互联网瓶颈 由此产生CDNCDN 工作过程 1)用户点击本地URL,经过本地DNS解析,DNS会
2015-10-17 09:37:46
898
原创 使用线程的TCP回射服务器程序
使用线程缘由1)fork 代价昂贵 2)fork 返回之后父子进程信息传递需要通过IPC机制同一进程内的线程除共享全局变量外还共享: a)进程指令 b)大多数数据 c)打开的文件描述符 d)信号处理函数和处理 e)当前工作目录 f)用户ID和组ID不过每个线程有各自的a)线程ID b)寄存器集合 c)栈 d)errno e)信号掩码 f)优先级
2015-10-13 07:35:23
592
原创 IO 复用
I/O复用典型的场景1)客户处理多个描述符时 2)如果TCP服务器既要处理监听套接字,又要处理已连接套接字。 3)一个服务器既要处理UDP又要处理TCP时 4)一个服务器要处理多个服务或者协议时I/O模型1)阻塞式 2)非阻塞式 3)IO复用 select poll等 4)信号驱动I/O 5)异步I/O
2015-10-12 07:45:21
428
原创 避免僵死进程
http://blog.youkuaiyun.com/divlee130/article/details/49048881中 如果服务器主机子进程终止会给父进程发送一个sigchld 信号,但是父进程并没有处理该信号,所以子进程进入僵死状态,在UNIX 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他, 那么他将变成一个僵尸进程。 但是如果该进程的父进程已经先结束了,那么该进
2015-10-11 20:51:26
366
原创 tcp 客户、服务器程序示例
1)client 从标准输入读入一行文本,并写给服务器。 2)服务器从网络输入读入这行文本,并回射给客户。 3)客户从网络输入读入这行回射的文本,显示在标准输出上标准输入—–fgets—-> tcp 客户—write——————-read–>tcp 服务器标准输出<—-fputs—–tcp 客户<—read——————-write—tcp 服务器client 代码#include <stdio.
2015-10-11 16:18:41
458
原创 TCP时间获取socket程序
客户服务器设计范式之迭代服务器,不过这种服务器使用范围很有限,因为这种服务器无法处理已等待服务的新用户。#include <stdio.h>#include <sys/types.h> /* See NOTES */#include <sys/socket.h>#include <arpa/inet.h>#include <unistd.h>#include <strin
2015-10-09 23:53:45
589
原创 DPDK 之ubuntu安装
概要本文环境为ubuntu虚拟机。主要讲解如何在虚拟机下安装DPDK开发环境步骤1.安装VM-Workstation处理器数量至少2个核一个用于DPDK报文处理一个用于内核处理,2个网络适配器一个用于DPDK报文处理一个用于内核处理。就用默认的NAT模式即可。2.进入DPDK-2.0.0 目录执行./tools/setup.sh依次执行 9 编译 12 安装igb_uio驱动, 14
2015-09-21 10:00:42
3718
1
原创 linux 防火墙配置规则
基础知识Linux系统内核内建了netfilter防火墙机制。Netfilter(数据包过滤机制),所谓的数据包过滤,就是分析进入主机的网络数据包,将数据包的头部数据提取出来进行分析,以决该连接为放行或阻挡的机制。Netfilter提供了iptables这个程序来作为防火墙数据包过滤的命令。Netfilter是内建的,效率非常高。我们可以通过iptables命令来设置netfilter的过滤机制。i
2015-08-27 09:49:53
5936
原创 利用crash 分析软死锁问题
软死锁问题定位分析。 现象:服务器软死锁,增量数据无法下发。一直报cpu soft lockup1.通过kxfr日志确认出问题出现的地方 通过对服务器分析可以看到出现问题的地方都是下发配置kxfr_id=2202438的地方由此大概定位出问题的域名。2.进一步分析机器内核信息可以看到如下kxfr_add_rdset流程出了问题。 按理说简单的遍历比较不会出问题。这里怎么会有问题呢。没有思路看
2015-08-20 13:30:06
2884
原创 linux 内存管理基本框架
概述linux 内核机制采用3层映射机制,逻辑上把32位线性地址划分4个段,各段占有若干位,依次为PGD(全局页面目录),PMD(中间页面目录),PT(页表),以及物理页的偏移。基地址->PGD->PMD->PT->OFFSET->物理页面中相应的地址进程虚拟空间32位地址代表4G的地址空间,Linux将这4G地址空间划分为2个部分,最高的1G(0xC000000-0XFFFFFFFF)用于内核本身
2015-08-09 22:26:18
1030
原创 DPDK简介之二
前沿DPDK是专为快速收发包所开发的一系列的库文件和驱动代码。可以在Intel的芯片上运行。可以用来在极短的时间里面完成收发包(一般低于80个周期) 可以开发快速的抓包算法。 可以运行第三方的快速路径栈而DPDK最大的优点就是改进小封包吞吐量与作业负荷效能,传统的网路架构都是针对大封包吞吐量进行最佳化,而Intel® DPDK可以解决小封包所带来效能不佳的问题。除了应用在企业终端外, Intel
2015-07-28 13:44:22
34874
原创 多线程多进程
多进程#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <unistd.h>int main(){ pid_t child_pid; /* 创建一个子进程 */ child_pid = fork(); if(child_pid == 0) { sleep
2015-07-14 07:19:23
582
原创 awk命令简介
简介awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。使用方法awk ‘{pattern + action}’ {filenames} 其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一
2015-07-13 21:11:32
834
原创 DPDK简介
DPDK是什么Intel® DPDK全称Intel Data Plane Development Kit,是intel提供的数据平面开发工具集,为Intel architecture(IA)处理器架构下用户空间高效的数据包处理提供库函数和驱动的支持,它不同于Linux系统以通用性设计为目的,而是专注于网络应用中数据包的高性能处理。具体体现在DPDK应用程序是运行在用户空间上利用自身提供的数据平面库来
2015-07-08 18:34:06
61125
原创 bind udp 处理流程之补充篇
概述udp数据的处理主要的处理流程已经在http://blog.youkuaiyun.com/divlee130/article/details/46391981有所介绍,但是具体到当一个请求过来时是如果提取请求信息,然后根据请求如果处理下一步的操作等等。 是递归还是怎么样? 这些到目前为止还不清楚。本文试图解决这个问题。client_request通过创建client_create注册ISC_SOCKEVEN
2015-07-06 07:22:08
1857
1
原创 bind 配置文件介绍
BIND服务器配置文件option语句:指定全局选项,这里只介绍常用的。格式如下: options{ option; option; … };version “string”; #[服务器的真实版本号] 可以将它真实地版本号隐藏 directory “path”; #[启动服务器的目录] 可以让named程序cd到这个目录(绝对路径)中。推荐/var/named not
2015-07-03 06:37:36
1281
原创 bind 启动过程
概述bind 启动是从bin/named下的main开始。在bind架构一文已有所介绍,本文试图从更细的角度试图分析,到底做了什么操作。main开始[root@localhost ~]# /usr/local/sbin/named -c /etc/named.conf -g -d 1502-Jul-2015 21:54:30.896 starting BIND 9.6.0-P1 -c /etc/n
2015-07-02 22:14:10
1710
原创 bind 安装
BIND概述1984年,加州大学伯克利分校的几个学生完成了Unix名称服务的实现,起名叫做Berkeley Internet Name Domain(BIND)。目前,它是互联网上使用最为广泛的DNS服务软件。bind的发行版一般包含三个部分:域名服务器、域名解析器库、软件测试工具。下面就安装bind来完成整个DNS的实验安装BIND下载bind的源码,官网下载地址http://www.isc.or
2015-07-02 18:36:34
1470
原创 rndc reload 执行过程
概述rndc可以在不停止DNS服务器工作的情况进行数据的更新,使修改后的配置文件生效。这里面有比较详细的介绍http://baike.baidu.com/view/1301778.htm?fr=aladdin,本文主要是在本机执行该命令,bind 是如何处理该命令的?函数调用关系load configuration 的时候通过ns_controls_configure 创建 listener 侦听
2015-07-02 07:14:19
3021
原创 用户空间与内核空间通讯接口之sysctl
概述Sysctl是一种用户应用来设置和获得运行时内核的配置参数的一种有效方式,通过这种方式,用户应用可以在内核运行的任何时刻来改变内核的配置参数,也可以在任何时候获得内核的配置参数。通常,内核的这些配置参数也出现在proc文件系统的/proc/sys 目录下,用户应用可以直接通过这个目录下的文件来实现内核配置的读写操作。使用register_sysctl_table方式实现内核数据交互。数据结构/
2015-06-28 13:11:29
753
原创 排序
引言基本的算法问题是每个程序员需要掌握的基本功,无论是平时工作还是找工作都会遇到基本的算法问题。这个系列的文章主要是算法。其中大部分的内容是来自网络和自己总结,由于本人水平有限错误在所难免,如有问题请多多指教。概述算法是用来解决一类计算问题的,注意是一类问题,而不是一个特定的问题。排序与查找是基本的算法。排序种类每种算法都有它特定的使用场合,很难通用。 总结各种算法之前,现介绍下几个概念:稳定度
2015-06-14 18:05:06
424
原创 cloudxns 智能解析领域的一匹黑马
cloudxns来源CloudXNS是北京快网自主研发全新架构的智能DNS解析系统,提供多元化智能DNS解析服务。网站地址为http://www.cloudxns.net CloudXNS在响应、分发、存储及负载均衡等设计中使用一套私有DNS协议,所有的解析生效都是实时生效,自助解析简单方便,一目了然。界面简单干净。使用方便 。cloudxns 特点除了传统的DNS解析提供商提供的功能外,clou
2015-06-14 00:13:31
1617
原创 bind 定时器
概述BIND中有一些操作是定时任务,server.c的run_server函数中创建了三个定时任务,分别执行interface_timer_tick、heartbeat_timer_tick和pps_timer_tick;其他模块中还有很多时间任务。 我们知道linux中的定时器可以用条件变量实现(用其中的pthread_cond_timedwait函数),这里有一个简单实现。BIND中的定时器也
2015-06-09 22:25:15
1083
原创 bind acl 实现
概述BIND配置中一大堆一大堆的acl,allow-query, allow-recursion, allow-update还有view的match-clients等 acl中的主要存储的就是IP,可以把acl当做是一个IP池,在需要验证的时候就从这个IP池中查找该IP是否存在。那么BIND中如何实现这个非常常用的IP池的呢?数据结构struct dns_acl { unsigned int
2015-06-08 07:09:24
1557
原创 bind udp 数据处理
简介本文简要介绍一下BIND9中的UDP数据处理,包括bind是如何处理UDP报文,如何收发报文信息,创建socket设置什么socket参数、多线程环境中如何让多个线程读取53端口的数据。对于UDP而言,BIND9的做法是在主进程中创建好UDP socket,然后各个线程都在这个fd上通过recvmsg来收取消息并处理。函数调用关系ns_interface_listenudp <–ns_inter
2015-06-06 22:18:45
1507
原创 bind query.c
整体结构分析主要包含处理各种类型和情况的查询函数,多数函数仅仅为该文件内的其它调用,以便方便的完成查询。ns_query_start()函数向外提供完整的查询服务。数据结构/*% nameserver query structure */struct ns_query { unsigned int attributes; unsigned int
2015-06-06 17:20:45
796
原创 bind client.c
整体功能分析client.c 主要是负责DNS 服务器与用户接口的设置,可以分成三个模块: 1.数据包传送模块 2.用户的创建模块 3.用户管理器的创建模块 用户的创建模块是为用户管理器的创建模块建立的,对于同一用户,他每次建立连接,只要连接不断开和超时,他的用户创建模块不会被再次激发。因此,这两个模块仅是一次性的,在用户创建以后再发送数据包,它们将不会有任何影响。数据包传送模块则是关于数据
2015-06-05 06:58:35
885
原创 bind server.c
整体功能分析server.c 主要完成BIND 服务器的启动、关闭、reload、reconfig、refresh 等命令的处理,进行服务器、视图和区域配置的解析和处理。函数调用关系setup调用ns_server_create 函数创建默认服务器对象。ns_server定义在/bin/named/include/named/server.h 保存服务器配置。structns_server {
2015-06-04 07:13:54
1072
snort-2.8.3.1源码及windows安装包
2012-11-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人