自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(72)
  • 资源 (2)
  • 收藏
  • 关注

原创 Linux网络协议栈(五) -- 数据包的发送(based in 2.6.32)

一、关键数据结构对于输出封包,设备的数据结构主要包括两个:输出队列(queue)和输出队列规则(queue discipline)。我们首先来看输出队列(2.6.18内核中无该结构体):struct netdev_queue {structnet_device  *dev;structQdisc          *qdisc;unsigned long

2016-02-26 11:13:21 2665

转载 多核处理器下的快速包处理软件架构FastGate

FastGate主要的目标是帮助用户缩短研发周期,保护已有的代码,快速开发和灵活部署自己的业务。用户无需关注多核处理器的硬件细节、无需关注性能和扩展性,只需专注于自身功能模块的开发,然后通过和FastGate框架的无缝集成便可以快速形成自己独有的产品,推出市场,同时又可以根据业务需要,灵活的扩展。FastGate框架的的设计和SDN & OpenFlow的思想很吻合

2015-08-22 08:50:48 2001

转载 PFQ,适用于多核处理器系统中的网络监控框架

PFQ 是一个支持多语言的网络框架,主要用于 Linux 操作系统下进行高效的包捕获和传输,适用于多核处理器系统中的网络监控框架。PFQ 专门为多核处理器而优化,包括对多个硬件队列的网络设备优化,支持任意网络设备驱动,并提供一个脚本用来加速和优化对设备数据的获取。该框架可用来开发高性能的应用,使用 C、C++11 和 Haskell 。此外 PFQ 还包含一个纯函数语言 PFQ/l

2015-01-12 15:17:28 1629

转载 高性能网关设备及服务实践

一、引言随着互联网的高速发展,内容量的提升以及对内容智能的需求、云产业的快速突起,作为互联网的计算基石服务器的形态以及使用成为了炙手可热的话题,全球各家大型互联网公司都持续的在服务器平台上有非常大的动作,譬如facebook的OCP等,而整个服务器的生态链也得到了促进和发展。随着服务器硬件性能的提升和网络硬件的开放,传统PC机的处理性能甚者可以和网络设备相媲美。另一方面SDN技术的发展,基

2015-01-11 22:25:15 7161

转载 全局精确流量调度新思路-HttpDNS服务详解

但凡使用域名来给用户提供服务的互联网企业,都或多或少地无法避免在有中国特色的互联网环境中遭遇到各种域名被缓存、用户跨网访问缓慢等问题。那么对于腾讯这样的域名数量在10万级别的互联网公司来讲,域名解析异常的情况到底有多严重呢?每天腾讯的分布式域名解析监测系统在不停地对全国所有的重点LocalDNS进行探测,腾讯域名在全国各地的日解析异常量是已经超过了80万条。这给腾讯的业务带来了巨大的损失。为此腾讯

2014-12-19 09:42:48 8847 1

转载 千万级并发实现的秘密:内核不是解决方案,而是问题所在

原文连接:The Secret To 10 Million Concurrent Connections -The Kernel Is The Problem, Not The Solution 既然我们已经解决了 C10K并发连接问题,应该如何提高水平支持千万级并发连接?你可能会说不可能。不,现在系统已经在用你可能不熟悉甚至激进的方式支持千万级别的并发连接。 要知道它是如

2014-12-16 09:44:06 1250

转载 高性能的内核 Socket 实现 Fastsocket

2014年10月18日,当时就职于新浪操作系统团队的林晓峰在Github上开源了名为Fastsocket的项目,并在之后一天的中国Linux内核开发者大会上对该项目的原理和应用效果进行了介绍(演讲slides在此)。根据Github官网的介绍,Fastsocket是:高度可扩展的socket是Linux内核层面的底层网络实现在多核机器上可实现极佳性能,24核以内的性能增长呈线性

2014-11-14 13:59:52 4707

转载 dig挖出DNS的秘密

我相信使用nslookup的同学一定比使用dig的同学多,所以还是有必要花些时间给大家介绍一下dig的。dig,和nslookup作用有些类似,都是DNS查询工具。dig,其实是一个缩写,即Domain Information Groper。一些专业的DNS管理员在追查DNS问题时,都乐于使用dig命令,是看中了dig设置灵活、输出清晰、功能强大的特点。【最简单的d

2014-01-22 09:12:28 7181 1

转载 结合Wireshark捕获分组深入理解DNS协议

一、概述1.1 DNS    识别主机有两种方式:主机名、IP地址。前者便于记忆(如www.yahoo.com),但路由器很难处理(主机名长度不定);后者定长、有层次结构,便于路由器处理,但难以记忆。折中的办法就是建立IP地址与主机名间的映射,这就是域名系统DNS做的工作。DNS通常由其他应用层协议使用(如HTTP、SMTP、FTP),将主机名解析为IP地址,其运行在UDP之上,使用53号

2014-01-09 19:56:48 22778 2

转载 HTTP协议分析

一、HTTP协议简述    HTTP是一个客户端和服务器端请求和应答的标准(TCP)。客户端是终端用户,服务器端是网站。通过使用Web浏览器、网络爬虫或者其它的工具,客户端发起一个到服务器上指定端口(默认端口为80)的HTTP请求。(我们称这个客户端)叫用户代理(user agent)。应答的服务器上存储着(一些)资源,比如HTML文件和图像。(我们称)这个应答服务器为源服务器(ori

2013-11-09 14:32:42 1713

转载 探索Google App Engine背后的奥秘(6)- 总结

本篇是本系列的最终章,将总结一下App Engine在使用方面的注意点,最佳实践和适用场景,最后会谈一下我对App Engine的一些期望。注意点执行速度偏慢:由于其分布式的设计,所以在速度方面不是最优的,比如普通的Memcache能在几毫秒完成操作,而App Engine的Memcache则大概需要50(毫)秒才能完成操作。私有API:其API有很多都是私有,特别是在其服

2013-11-01 17:09:00 1739

转载 探索Google App Engine背后的奥秘(5)- Datastore的设计

本篇会首先会从程序员角度来介绍一下Datastore在使用方面的一些信息,之后会接着介绍Datastore是如何构建的。使用方面首先,在编程方面,Datastore是基于”Entity(实体)”这个概念,而且Entity和”对象”这个概念比较类似,同时Entity可以包括多个Property(属性),Property的类别有整数,浮点和字符串等,比如,可以设计一个名为”Person

2013-11-01 17:08:05 1670

转载 探索Google App Engine背后的奥秘(4)- Google App Engine的架构

本篇将首先介绍App Engine的一些设计理念,接着将对App Engine的组成部分等进行介绍。设计理念App Engine在设计理念方面,主要可以总结为下面这五条:重用现有的Google技术:大家都知道,重用是软件工程的核心理念之一,因为通过重用不仅能减低开发成本,而且能简化架构。在App Engine开发的过程中,重用的思想也得到了非常好的体现,比如Datast

2013-11-01 17:07:02 1665

转载 探索Google App Engine背后的奥秘(3)- Google App Engine的简介

通过前面两篇介绍,大家应该对Google强大的基础设施有一定的了解。本篇开始介绍构筑在这强大基础设施之上的Google App Engine。Google App Engine的介绍由于发布S3和EC2这两个优秀的云服务,使得Amazon已经率先在云计算市场站稳了脚跟,而身为云计算这个浪潮的发起者之一的Google肯定不甘示弱,并在2008年四月份推出了Google App Eng

2013-11-01 17:05:59 1961

转载 探索Google App Engine背后的奥秘(2)–Google的整体架构猜想

本文是基于现有的公开资料和个人的经验来对Google的整体架构进行总结和猜想。在软件工程界,大家有一个共识,那就是”需求决定架构”,也就是说,架构的发展是为了更好地支撑应用。那么本文在介绍架构之前,先介绍一下Google所提供的主要产品有哪些?产品对于Google和它几个主要产品,比如搜索和邮件等,大家已经非常熟悉了,但是其提供服务的不只于此,并主要可分为六大类:

2013-11-01 17:04:01 1297

转载 探索Google App Engine背后的奥秘(1)–Google的核心技术

本系列文章基于公开资料对Google App Engine的实现机制这个话题进行深度探讨。在切入Google App Engine之前,首先会对Google的核心技术和其整体架构进行分析,以帮助大家之后更好地理解Google App Engine的实现。本篇将主要介绍Google的十个核心技术,而且可以分为四大类:分布式基础设施:GFS、Chubby 和 Protocol Bu

2013-11-01 17:01:54 2045 1

转载 从Linux协议栈代码和RFC看西厢计划原理

终于搞定了西厢计划的方案,由于一直无法下载那个内核模块,于是也就只能自己写了,在理解了西厢计划的原理之后,写这个模块并不很费事(其实为了简单不是写模块,而是直接修改内核协议栈代码),下面先说一下原理,然后再说一下关于内核修改的建议。序.西厢计划所谓西厢计划是一个借用历史小说而命名的欺骗GfW的方案,有很多的实现。说实话我真的不知道《西厢记》中的那家伙翻墙到底有何与众不同,有时间

2013-11-01 16:51:18 2182

转载 DNS欺骗原理及工作工程分析

DNS欺骗  DNS欺骗是这样一种中间人攻击形式,它是攻击者冒充域名服务器的一种欺骗行为,它主要用于向主机提供错误DNS信息,当用户尝试浏览网页,例如IP地址为XXX.XX.XX.XX ,网址为www.bankofamerica.com,而实际上登录的确实IP地址YYY.YY.YY.YY上的www.bankofamerica.com ,用户上网就只能看到攻击者的主页,而不是用户想要取得

2013-08-20 15:00:15 17769 1

转载 L2TP介绍

L2TP概述L2TP(Layer 2 Tunneling Protocol,二层隧道协议)是VPDN(Virtual Private Dial-up Network,虚拟私有拨号网)隧道协议的一种。VPDN是指利用公共网络(如ISDN或PSTN)的拨号功能接入公共网络,实现虚拟专用网,从而为企业、小型ISP、移动办公人员等提供接入服务。即,VPDN为远端用户与私有企业网之间提供了一种经济而

2013-08-19 19:11:30 15566

转载 PPTP 理解以及报文的分析

首先,先来理解下什么是 PPTP。PPTP将PPP(Point-to-Point Protocol)帧封装进IP数据报中,通过IP网络如Internet或其他企业专用Intranet等发送。PPTP通过PPTP控制连接来创建、维护、终止一条隧道,并使用通用路由封装GRE(Generic Routing Encapsulation)对PPP帧进行封装。封装前,PPP帧的有效载荷即有效传输数据一般会经

2013-08-19 19:08:13 30962

转载 Linux可加载内核模块(LKM)

I.基础知识1.什么是LKM 2.什么是系统调用3.什么是内核符号表4.如何进行内核与用户空间内存数据的交换5.使用用户空间的各种函数方法6.常用内核空间函数列表7.什么是内核后台进程8.创建自己的设备II.深入探讨1.如何截获系统调用2.哪些系统调用应被截获2.1 寻找重要的系统调用(strace命令方法)3.迷惑内核系统表4.针对文件系统

2012-12-12 22:21:08 9336 2

转载 Linux内核的同步机制

本系列文章分两部分,第一部分详细地介绍了Linux 内核中的同步机制:原子操作、信号量、读写信号量和自旋锁的API,使用要求以及一些典型示例。第二部分将详细介绍在Linux内核中的另外一些同步机制,包括大内核锁、读写锁、大读者锁、RCU和顺序锁。第1 部分一、  引言在现代操作系统里,同一时间可能有多个内核执行流在执行,因此内核其实象多进程多线程编程一样也需要一些同

2012-12-12 22:16:44 993

转载 iSCSI技术白皮书

一、前言ISCSI(INTERNET SCSI)是由Internet Engineering Task Force(IETF)开发的网络存储标准,目的是为了用IP协议将存储设备连接在一起。通过在IP网上传送SCSI命令和数据,ISCSI推动了数据在网际之间的传递,同时也促进了数据的远距离管理。由于其出色的数据传输能力,ISCSI协议被认为是促进存储区域网(SAN)市场快速发展的关键因素之一。因

2012-12-12 10:29:58 2983

转载 open-iscsi源码分析 -- 会话建立

前面可以看出,处理控制中心还是iscsid守护进程,其他进程都是向它发出服务请求,然后它做出响应,而它完成一些操作又是向底层驱动发出指令。在前面的源码中可以发现,重要是一个mgmt_ipc_functions的函数指针数组是一个操作函数集合,其中的函数分别处理不同的服务,服务id就是它在函数指针数组中的索引。/*不同任务id对应的处理函数地址*/static mgmt_ipc_fn_t

2012-12-11 22:20:15 2362

转载 open-iscsi源码分析 -- list-head分析

list-head结构在linux内核中用得非常多,这是一个双向链表结构,可以灵活嵌入其他数据结构中,对于建立链表非常方便。在Linux内核中,由于很多数据结构都需要连成一个链表进行管理,所以有了list-head将链表的管理独立出来,所以在内核编程不需要自己实现list-head的一些管理函数,可以直接调用。  在open-iscsi用户态编程时,将这个文件从内核中拷贝出来了:

2012-12-11 22:18:13 1007

转载 open-iscsi源码分析 -- 进程通信

前面分析了open-iscsi主要有一个守护进程iscsid,即通过本地socket和用户其他进程通信,比如iscsiadm管理执行任务时,需要和iscsid通信,iscsi的底层驱动则通过netlink和iscsid通信,而用户态其他进程还通过共享内存和iscsid日志守护进程通信。所以在iscsi服务启动后,我们会发现在系统中有两个名为iscsid的进程,其中一个为日志守护进程,另一个

2012-12-11 22:16:42 2446

转载 open-iscsi源码分析 -- 流程详细分析

在iscsid.c文件的main函数中,有:sysfs_init();这个函数主要是获取系统sys目录://获取sys目录int sysfs_init(void){const char *env;/*从环境变量中获取sys路径*/env = getenv("SYSFS_PATH");if (env) {strlcpy(sysfs_path

2012-12-11 22:15:24 2681

转载 open-iscsi源码分析 -- 日志处理

在iscsid主函数中有:  log_pid = log_init(program_name, DEFAULT_AREA_SIZE, daemonize ? log_do_log_daemon : log_do_log_std, NULL);   初始化日志系统,现在进入log_init函数,对open-iscsi的日志处理方式进行详细分析:       /*

2012-12-11 22:13:37 1976

转载 open-iscsi源码分析 -- iscsid

最近用到open-iscsi作用initiator,遇到很多问题,就打算粗率对open-iscsi的源码进行一个分析。    open-iscsi的组成和用法就不讲了,源码包中的README说得非常清楚,主要分为驱动和用户态两部分,用户态又分为服务守护进程和管理程序,必须先加载驱动,守护进程才能启动成功,最后才是运行iscsiadm进行一些常规管理。    今天首先对open-is

2012-12-11 22:11:52 3513

转载 LINUX SCSI I/O分析

概述LINUX 内核中 SCSI 子系统由 SCSI 上层,中间层和底层驱动模块 [1] 三部分组成,主要负责管理 SCSI 资源和处理其他子系统,如文件系统,提交到 SCSI 子系统中的 IO 请求。因此,理解 SCSI 子系统的 IO 处理机制对理解整个 SCSI 子系统就显的十分重要,同时也有助于理解整个 LINUX 内核的 IO 处理机制。本文从 SCSI 设备访问请求的提交,SCSI

2012-12-11 21:30:35 10546 1

转载 Linux I/O调度

Linux I/O调度一) I/O调度程序的总结    1) 当向设备写入数据块或是从设备读出数据块时,请求都被安置在一个队列中等待完成.    2) 每个块设备都有它自己的队列.    3) I/O调度程序负责维护这些队列的顺序,以更有效地利用介质.I/O调度程序将无序的I/O操作变为有序的I/O操作.    4) 内核必须首先确定队列中一共有多少个请求,然后才开始进

2012-12-11 20:31:44 1006

转载 Linux内核中常见内存分配函数

1.   原理说明Linux内核中采用了一种同时适用于32位和64位系统的内存分页模型,对于32位系统来说,两级页表足够用了,而在x86_64系统中,用到了四级页表,如图2-1所示。四级页表分别为:l  页全局目录(Page Global Directory)l  页上级目录(Page Upper Directory)l  页中间目录(Page Middle Directory)

2012-10-24 11:25:21 611

转载 C语言字节对齐

一、概念       对齐跟数据在内存中的位置有关。如果一个变量的内存地址正好位于它长度的整数倍,他就被称做自然对齐。比如在32位cpu下,假设一个整型变量的地址为0x00000004,那它就是自然对齐的。     二、为什么要字节对齐      需要字节对齐的根本原因在于CPU访问数据的效率问题。假设上面整型变量的地址不是自然对齐,比如为0x00000002,则CPU如果

2012-10-20 00:47:42 783

转载 得到一个field在结构体(struct type)中的偏移量

宏定义:得到一个field在结构体(struct type)中的偏移量#define OFFSETOF(type, field) ((size_t)&(((type *)0)->field))(type *)0:把0地址当成type类型的指针。((type *)0)->field:对应域的变量。&((type *)0)->fiel

2012-10-20 00:39:54 3210 1

转载 Linux SCSI子系统

M. Tim Jones, 顾问工程师, Emulex Corp.2007 年 12 月 06 日Small Computer Systems Interface (SCSI) 是一组标准集,它定义了与大量设备(主要是与存储相关的设备)通信所需的接口和协议。 Linux® 提供了一种 SCSI 子系统,用于与这些设备通信。Linux 是分层架构的一个很好的例子,它将高层的驱动器

2012-10-04 19:09:20 1242

转载 浅谈服务器编程

第一部分 编程模型1、服务器编程模型关于server编程模型,大师stevens在他的《UNP》一书中已经做了详细论述,这里不再重复,这里主要讲一下我的一些理解。从线程的角度,可以分为两类,一是单线程,一是多线程。先来看单线程模型。1.1、单线程模型整个进程只有一个线程,由于只有一个线程,所以要实现高性能,必须与“non-blocking IO + IO m

2012-09-19 00:31:33 1903

转载 C语言函数返回类型为指针时的一些问题

1.先看程序:#includechar  *returnStr(){           char  *p = “tigerjibo”;           return  p;}int  main(){           char*str;           str =returnStr();

2012-09-08 17:07:59 8882 7

转载 C语言中长度为0的数组

前面在看Xen的源码时,遇到了一段代码,如下所示:注意上面最后一行的代码,这里定义了一个长度为的数组,这种用法可以吗?为什么可以使用长度为0 的数组?长度为的数组到底怎么使用?……这篇文章主要针对该问题进行简单的讲解。废话不多说了,现在就开始。长度为的数组在标准c和c++中是不允许的,如果使用长度为的数组,编译时会产生错误,提示数组长度不能为。但在GNUc中,这种用法却是合

2012-08-24 16:20:49 20314

转载 C语言中的可变参数

C语言的变长参数在平时做开发时很少会在自己设计的接口中用到,但我们最常用的接口printf就是使用的变长参数接口,在感受到printf强大的魅力的同时,是否想挖据一下到底printf是如何实现的呢?这里我们一起来挖掘一下C语言变长参数的奥秘。先考虑这样一个问题:如果我们不使用C标准库(libc)中提供的Facilities,我们自己是否可以实现拥有变长参数的函数呢?我们不妨试试。一

2012-08-24 16:17:00 1112

转载 C语言中的堆和栈

在计算机领域,堆栈是一个不容忽视的概念,我们编写的C语言程序基本上都要用到。但对于很多的初学着来说,堆栈是一个很模糊的概念。堆栈:一种数据结构、一个在程序运行时用于存放的地方,这可能是很多初学者的认识,因为我曾经就是这么想的和汇编语言中的堆栈一词混为一谈。我身边的一些编程的朋友以及在网上看帖遇到的朋友中有好多也说不清堆栈,所以我想有必要给大家分享一下我对堆栈的看法,有说的不对的地方请朋友们不吝赐教

2012-08-21 16:55:14 884

Linux内核的同步机制

关于Linux内核的同步机制,自旋锁,信号量等

2012-04-09

Linux多线程编程

关于Linux上多线程编程的方法和技巧。

2012-04-09

空空如也

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

TA关注的人

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