自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 资源 (8)
  • 论坛 (7)
  • 收藏
  • 关注

原创 Zebra命令模式分析(二)[补]

这两天又看到之前整理的zebra命令模式的代码,花了两天时间重新整理了下,key_resolver[]封装了对所有特殊按键的处理相关FTF代码链接:http://download.csdn.net/detail/qy532846454/5228412

2013-04-07 10:50:50 2318 2

原创 Linux内核分析 - 网络[十七]:NetFilter之连接跟踪

内核版本:2.6.34转载请注明 博客:http://blog.csdn.net/qy532846454 by yoyo      前面章节介绍过Netfilter的框架,地址见:http://blog.csdn.net/qy532846454/article/details/6605592,本章节介绍的连接跟踪就是在Netfilter的框架上实现的,连接跟踪是实现DNAT,SNAT还有有

2012-12-04 14:43:28 11911 1

原创 Twitter开源库Twemcache分析

Twemcache(发音: “two-em-cache”),是twitter公司使用的内存缓存技术,在2012.7.17号向github提交了twitter定制过的memcached,命名为twemcache;并在上周其官网首次出现了对twemcache的介绍。      与memcache相比,twemcache更轻便,定制性更强,无论从代码结构还是模块设计,都是很优雅的。      源

2012-08-23 15:35:57 7910 6

原创 Linux内核分析 - 网络[十六]:TCP三次握手

内核:2.6.34      TCP是应用最广泛的传输层协议,其提供了面向连接的、可靠的字节流服务,但也正是因为这些特性,使得TCP较之UDP异常复杂,还是分两部分[创建与使用]来进行分析。这篇主要包括TCP的创建及三次握手的过程。      编程时一般用如下语句创建TCP Socket:socket(AF_INET, SOCK_DGRAM, IPPROTO_TCP)      由

2012-08-19 13:23:32 10170 4

原创 Linux内核分析 - 网络[十五]:陆由表[再议]

内核版本:2.6.34      陆由表作为三层协议的核心数据结构,理解它是至关重要的。前面已经分析过路由表,有兴趣的可以参考:      第一篇:路由表 http://blog.csdn.net/qy532846454/article/details/6423496                分析了路由表的基本数据结构和基本操作      第二篇:路由表使用 http://b

2012-05-15 16:01:42 7633

原创 Linux内核分析 - 网络[十四]:IP选项

内核版本:2.6.34      在发送报文时,可以调用函数setsockopt()来设置相应的选项,本文主要分析IP选项的生成,发送以及接收所执行的流程,选取了LSRR为例子进行说明,主要分为选项的生成、选项的转发、选项的接收三部分。      先看一个源站路由选项的例子,下文的说明都将以此为例。       主机IP:192.168.1.99       源路由:192.168

2012-04-25 17:14:09 7452 1

原创 Linux内核分析 - 网络[八补]:IP协议补充

内核版本:2.6.34在前一篇”IP协议”中对报文接收时IP层的处理进行了分析,本篇分析将针对报文发送时IP层的处理。      传输层处理完后,会调用ip_push_pending_frames()将报文传递给IP层:        ip_push_pending_frames() -> ip_local_out() -> __ip_local_out()      在ip_pu

2012-02-22 09:18:10 13864 2

原创 Linux内核分析 - 网络[十三]:校验和

内核版本:2.6.34报文的IP校验和、ICMP校验和、TCP/UDP校验和使用相同的算法,在RFC1071中定义,网上这方面的资料和例子很多,就不解释算法流程了,而是侧重于在实现的变化和技巧。The checksum algorithm is simply to add up all the 16-bit words in one's complement and then to tak

2011-11-25 10:25:10 16635 5

原创 Linux内核分析 - 网络[十二]:UDP模块 - 收发

内核版本:2.6.34UDP报文接收       UDP报文的接收可以分为两个部分:协议栈收到udp报文,插入相应队列中;用户调用recvfrom()或recv()系统调用从队列中取出报文,这里的队列就是sk->sk_receive_queue,它是报文中转的纽带,两部分的联系如下图所示。第一部分:协议栈如何收取udp报文的。      udp模块的注册在inet_init()

2011-11-20 19:40:27 16698 1

原创 Linux内核分析 - 网络[十二]:UDP模块 - socket

内核版本:2.6.34这部分内容在于说明socket创建后如何被内核协议栈访问到,只关注两个问题:sock何时插入内核表的,sock如何被内核访问的。对于核心的sock的插入、查找函数都给出了流程图。sock如何插入内核表      socket创建后就可以用来与外部网络通信,用户可以通过文件描述符fd来找到要操作的socket,内核则通过查表来找到要操作的socket。这意味着soc

2011-11-07 12:08:07 8868 3

原创 Linux内核分析 - 网络[十一]:ICMP模块

内核版本:2.6.34  ICMP模块比较简单,要注意的是icmp的速率限制策略,向IP层传输数据ip_append_data()和ip_push_pending_frames()。在net/ipv4/af_inet.c中的inet_init()注册icmp协议,从这里也可以看出,ICMP模块是绑定在IP模块之上的。inet_add_protocol()会将icmp_protocol加入到

2011-10-28 22:24:11 8969

原创 Linux内核分析 - 网络[十]:ARP杂谈

内核版本:2.6.34杂谈一:重复地址检测  Linux协议栈中处理重复地址检测报文的是arp_process()中的一段代码,RFC2131是DHCP的草案,相应的sip==0是DHCP服务器用来检测它所分发的地址是否重复的。 /* Special case: IPv4 duplicate address detection packet (RFC2131) */if (sip =

2011-10-20 15:39:28 7815

原创 Linux内核分析 - 网络[九]:邻居表

内核版本:2.6.34这部分的重点是三个核心的数据结构-邻居表、邻居缓存、代理邻居表,以及NUD状态转移图。      总的来说,要成功添加一条邻居表项,需要满足两个条件:1. 本机使用该表项;2. 对方主机进行了确认。同时,表项的添加引入了NUD(Neighbour Unreachability Detection)机制,从创建NUD_NONE到可用NUD_REACHABLE需要经历一系

2011-09-23 22:28:29 15931 1

原创 Linux内核分析 - 网络[八]:IP协议

内核版本:2.6.34这篇是关于IP层协议接收报文时的处理,重点说明了路由表的查找,以及IP分片重组。ip_rcv进入IP层报文接收函数      丢弃掉不是发往本机的报文,skb->pkt_type在网卡接收报文处理以太网头时会根据dst mac设置,协议栈的书会讲不是发往本机的广播报文会在二层被丢弃,实际上丢弃是发生在进入上层之初。if (skb->pkt_type == PA

2011-09-02 21:00:19 12868 8

原创 Linux内核分析 - 网络[四补]:路由表补充

内核版本:2.6.34      前篇路由表http://blog.csdn.net/qy532846454/article/details/6423496说明了路由表的结构及路由表的创建。下面是一些路由表的使用的细枝末节,作补充说明。      路由可以分为两部分:路由缓存(rt_hash_table)和路由表()      路由缓存顾名思义就是加速路由查找的,路由缓存的插入是由内核

2011-08-28 08:46:22 11546 9

原创 Linux内核实践 - 如何添加网络协议[三]:实现

内核版本:2.6.34接上篇《添加网络协议》。 为了用户方便查看brcm设备的工作状态,使用proc文件系统是很好的方式。一个网络协议模块可以注册到网络空间中register_pernet_subsys(),这个函数会为子空间分配一个id号,通过id可以在网络空间中找到分配给该子空间的内存:init_net->gen->ptr[id - 1]。而我们正是利用这块内存去存储pr

2011-08-04 09:40:03 12603 9

原创 Linux内核实践 - 如何添加网络协议[二]:实现

内核版本:2.6.34实现思路:      报文在网络协议栈中的流动,对于接收来讲,是对报文的脱壳的过程,由于报文是已知的输入,只要逐个解析协议号;对于发送来讲,是各层发送函数的嵌套调用,由于没有已知的输入,只能按事先设计好的协议进行层层构造。但无论报文怎样的流动,核心是报文所在设备(skb->dev)的变化,相当于各层之间传递的交接棒。      按照上述思路,brcm协议接收的

2011-07-30 10:24:35 8838 4

原创 Linux内核实践 - 如何添加网络协议[一]:目的

本文只是一个内核网络协议的实践的例子,先说明添加的目的,下篇开始具体的实现。        内核版本:2.6.34;在支持802.1主机上,报文的一般格式:         现在需要支持一种新的协议[二层] – BRCM协议,与IP等协议不同,它位于2层,拥有6字节的头部和4字节的尾部,添加的层次决定了比起添加其它协议要复杂一些,新的报文格式如下,而我们的目的就是要网络协议栈能

2011-07-23 10:44:57 9204 7

原创 Linux内核分析 - 网络[七]:NetFilter

内核版本:2.6.34NetFilter在2.4.x内核中引入,成为linux平台下进行网络应用的主要扩展,不仅包括防火墙的实现,还包括报文的处理(如报文加密、报文分类统计等)等。NetFilter数据结构        勾子struct nf_hook_ops[net\filter\core.c]struct nf_hook_ops { struct list_head l

2011-07-14 14:45:08 13469

原创 Linux内核分析 - 网络[六]:网桥

看完了路由表,重新回到netif_receive_skb ()函数,在提交给上层协议处理前,会执行下面一句,这就是网桥的相关操作,也是这篇要讲解的内容。skb = handle_bridge(skb, &pt_prev, &ret, orig_dev);        网桥可以简单理解为交换机,以下图为例,一台linux机器可以看作网桥和路由的结合,网桥将物理上的两个局域网LAN1、LAN

2011-07-07 11:54:48 13503 3

原创 Linux内核分析 - 网络[五]:vlan协议-802.1q

内核版本:2.6.34802.1q1. 注册vlan网络系统子空间,err = register_pernet_subsys(&vlan_net_ops);static struct pernet_operations vlan_net_ops = { .init = vlan_init_net, .exit = vlan_exit_net, .id = &vlan_n

2011-06-07 11:22:00 17169 6

原创 Linux内核分析 - 网络[四]:路由表

路由表    在内核中存在路由表fib_table_hash和路由缓存表rt_hash_table。路由缓存表主要是为了加速路由的查找,每次路由查询都会先查找路由缓存,再查找路由表。这和cache是一个道理,缓存存储最近使用过的路由项,容量小,查找快速;路由表存储所有路由项,容量大,查找慢。首先,应该先了解路由表的意义,下面是route命令查看到的路由表:Des

2011-05-16 08:52:00 22853 3

原创 Linux内核分析 - 网络[三]:从netif_receive_skb()说起

在netif_receive_skb()函数中,可以看出处理的是像ARP、IP这些链路层以上的协议,那么,链路层报头是在哪里去掉的呢?答案是网卡驱动中,在调用netif_receive_skb()前,skb->protocol = eth_type_trans(skb, bp->dev);该函数对处理后skb>data跳过以太网报头,由mac_header指示以太网报头:

2011-04-21 20:26:00 18425

原创 Linux内核分析 - 网络[二]:网卡驱动接收报文

纠结了好多天,终于弄懂了B440X的处理。上篇讲到通过中断,最终网卡调用了b44_rx()来接收报文 对这个函数中的一些参数,可以这样理解:bp->rx_cons –处理器处理到的缓冲区号bp->rx_pending –分配的缓冲区个数bp->rx_prod –当前缓冲区的最后一个缓冲号 这里要参数B440X的手册了解下寄存器的作用:

2011-03-30 11:34:00 13019 2

原创 Linux内核分析 - 网络[一]:收发数据包的调用

内核版本:Linux-2.6.34网卡驱动:B4401  什么是NAPINAPI是linux一套最新的处理网口数据的API,linux 2.5引入的,所以很多驱动并不支持这种操作方式。简单来说,NAPI是综合中断方式与轮询方式的技术。数据量很低与很高时,NAPI可以发挥中断方式与轮询方式的优点,性能较好。如果数据量不稳定,且说高不高说低不低,则NAPI会在两种方式切换上消耗不少

2010-12-01 15:08:00 15609 10

原创 linux移植记录(一) - 串口驱动

Linux移植 MIPS 串口驱动

2010-08-01 15:12:00 12987 3

原创 二级指针

最近项目比较忙,随便写点东西,练练笔了只是简单的说明,不涉及复杂的结构传递与赋值 void change_val(char *p){ char new_val[3] = {2, 3, 4}; // [2] p = new_val; return; // [3]}char val[3] = {1, 2, 3};char *p = val; // [1]ch

2010-04-26 09:41:00 1876 2

原创 ICMP协议之time/mask实现

1. 相关ICMP协议概述    这里只讲解与gettime/getmask有关的ICMP消息类型    时间戳请求                  请求端填写发起时间戳    时间戳应答                应答系统收到请求报文时填写接收时间戳;发送应答时填写发送时间戳     地址掩码请求            地址掩码应答         

2010-04-18 14:13:00 4203

原创 ICMP协议之tracert实现

1. 相关ICMP协议概述    这里只讲解与tracert有关的ICMP消息类型,网关发送超时报文(type = 11),主机发送目标不可达报文(type = 3),基本格式如下:    超时报文                  其中code = 0,表示由网关发送    目标主机不可达报文                  其中code = 3,表示在目的主机,端口不可用

2010-04-02 09:36:00 13384

原创 ICMP协议之ping实现

1. 相关ICMP协议概述  这里只讲解与ping有关的ICMP消息类型,主机发送回送消息(Type = 8),被请求主机回送响应消息(Type = 0),基本格式如下:  回送消息[ECHO]       回送响应消息[ECHO REPLY]       其中•Code = 0,     •CheckSum为校验和,重点注意从ICMP的头部(即Type开始),到data结束(即到

2010-03-29 20:36:00 35945 5

原创 ICMP(Internet Control Message Protocol)协议[总]

  ICMP协议总述,包含实现的icmp协议应用集合程序icmpy;在以后各篇将讲解每种协议及其应用程序的实现   ICMP协议是一种发送各种消息报告状态的协态,与IP协议一样属于网络层  报文格式:          完整的Type表:                 1. ICMP Echo      作用:探测主机地址是否存活   回送消息      

2010-03-16 09:21:00 4194 1

原创 Zebra命令模式分析(二) - 实践

对zebra命令模式有所分析后,下面小试牛刀,写个函数测试框架(Function Test Frame),目的在于提供接口函数的测试的代码框架,轻松实现自动补齐、函数解释、函数运行等,方便测试人员与接口使用者迅速了解函数 最新代码链接:http://download.csdn.net/detail/qy532846454/5228412 数据结构基本存储结构为vector

2010-03-03 19:46:00 4810 17

原创 链表(list)的宏定义实现

-- 看代码是一种享受   最近在看DHCP的源码,一些好的记录下来。平时写C,用到链表就是copy数据结构上的代码,简单粗暴,今天换种方式,看下宏定义实现的链表,好处自然是代码少、效率高。   首先下面链表宏定义的实现,摘自wide-dhcpv6-20080615源码包/* * List declarations. */#define LIST_HEAD(name,

2010-01-18 14:46:00 5555 3

原创 Zebra命令模式分析(一) - 分析

zebra分析版本:Zebra-0.95a 命令存储结构       对于上图中略去的cmd_elemnt,它代表了一条命令,具体展开如下:   每条命令按上图存储,命令被分拆为tokens,存储在vector中       如此,形成了zebra命令模式的基本框架:所有命令被分类到不同模式下。这里的模式即上面图中的  节点cmd_node,而命令则相当于cmd

2010-01-16 19:46:00 6729 3

原创 Polish 之接收Fire按键

  J2ME做界面开发时,高级界面是无法自定义接受按键响应的(如Form只能接收左右软键,而List则接收左右软键, Fire键),而只有低级界面(如Canvas, GameCanvas, CustomItem)才可以自定义按键接收(重写keyPressed, keyReleased等函数). 而在实际开发中,所有按键响应的发起都得由左右软键开始,比如选择, 退出等命令,一般情况下,这是足够的.然

2009-09-14 23:28:00 1118 1

原创 Eclipse Polish 2.1 安装指南

 由于最近在做J2ME的开发,用到了Polish(很强大的工具,网上赞的太多,不多讲,很好很强大)。不过也由于Polish在中国还不普及,资料也不健全,上手还是要点耐心的(夸张了,呵呵),为了配Polish的环境,花了整整两天时间,以前都直接用它的工程修改(很偷懒的做法),过程中有曲折,也希望正准备用的少走点弯路,分享下我的配置经验,不保证完全正确性,但有可行性。   先说Polish的几个重要部

2009-09-08 10:34:00 1144

icmp协议ping程序实现

ICMP[version 4]的echo报文运用,模拟ping命令实现pingy命令

2010-03-29

ICMP协议之time实现

ICMP的时间戳协议实现,该协议用于向其它系统获取当前时间

2010-04-18

添加内核网络栈协议 介于二层与三层

向内核协议栈添加一层介于二层和三层之间的协议,并且在vlan协议之下,内核版本是2.6.34。文件包括内核的新协议patch补丁,配置工具bconfig,以及一些重要的源文件

2011-08-25

ICMP协议之tracert实现

利用icmp的超时报文以及目标不可达报文,模拟系统的tracert命令实现tracerty

2010-04-02

zebra命令模式

函数测试框架(Function Test Frame),目的在于提供接口函数的测试的代码框架,轻松实现自动补齐、函数解释、函数运行等,方便测试人员与接口使用者迅速了解函数

2012-04-29

函数测试框架

函数测试框架(Function Test Frame),目的在于提供接口函数的测试的代码框架,轻松实现自动补齐、函数解释、函数运行等,方便测试人员与接口使用者迅速了解函数

2013-04-07

添加内核网络栈协议 介于二层与三层间

向内核协议栈添加一层介于二层和三层之间的协议,并且在vlan协议之下,内核版本是2.6.34。文件包括内核的新协议patch补丁,配置工具bconfig,以及一些重要的源文件

2011-08-03

ICMP协议之mask实现

ICMP的地址掩码协议实现,该协议用于向本地网络获取当前网络地址的掩码

2010-04-18

nginx中master进程的问题

发表于 2013-04-11 最后回复 2013-04-11

IP分片重组的问题

发表于 2011-08-30 最后回复 2012-11-23

邻居表NUD的状态转移

发表于 2011-09-12 最后回复 2012-11-23

构造数据包的问题

发表于 2011-10-24 最后回复 2012-11-23

散分吧,考查下协议栈的掌握程度

发表于 2011-11-22 最后回复 2012-11-23

memcpy(currupt, currupt, 5);为什么可以通过

发表于 2010-05-17 最后回复 2010-05-18

谁能讲解下这个宏定义

发表于 2010-04-26 最后回复 2010-04-26

空空如也

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

TA关注的人 TA的粉丝

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