如何让 linux 包转发达到 40万pps,尝试中!
问题:1000Kpps,好像有点难度哦,cisco2600我记得就那么几十Kpps解答(多种解答):1000MBps线速才148.8Wpps,你这个100Wpps快达到千兆线速了,X86构架是没戏的,只能考虑NP构架了问题:148.8Wpps是怎么来的?X86的限制在哪里呢?解答:包转发线速的衡量标
Hacking the Linux Kernel Network Stack(译本)(2)
HackingtheLinuxKernelNetworkStack(译本[chp5-end])第五章NetFilter钩子其他可能的用法在这里我将会就Netfilter在其它方面的更有趣的应用给你作一些建议。在5.1我会给你提供一些思想源泉。5.2节将会讨论并提供能运行的代码,这个代码使一个基于内核
Hacking the Linux Kernel Network Stack(译本)(1)
深入Linux内核网络堆栈作者:bioforgealkerr@yifan.net原名:<<HackingtheLinuxKernelNetworkStack>>翻译,修改:duanjigang<duanjigang1983@126.com>翻译参考:raodan(
Netfilter源码分析(9)
/*kendo2006-4-2修正原来对target部份描述不完全的情况*/filter表的内容,还剩下三个内容:1、target的匹配;2、每个模块的target/match等函数的实现;3、内核与用户空间的交互;这里,以target的匹配做为2005的的结尾吧(因为明天飞贵州,估计2005年是没
Netfilter源码分析(8)
本节前面大部份为解决问题的思路,和前面的贴子有重复,可以直接跳到后半截看^o^。内核中的match:1、表与规则内核中,表用structipt_table表示,其成员structipt_table_info*private;表示表的数据区,而private的成员charentries[0]__att
Netfilter源码分析(7)
内核中的match接下来的流程,似乎应该是分析扩展match及target的匹配了,如继续分析do_match:staticinlineintdo_match(structipt_entry_match*m,conststructsk_buff*skb,conststructnet_device*i
Netfilter源码分析(6)
ip_packet_match函数,标准match部份的匹配先来看看相关的数据结构,在内核中,标准的match是以structipt_ip结构来表示的,它包含了一条规则最基本的部份:/*Yes,Virginia,youhavetozerothepadding.*/structipt_ip{/*来源/
Netfilter源码分析(5)
前面说到,对于filter表来说,所有的一切,要靠ipt_do_table函数来进行包配备,前面提过,过滤规则分为三部份:标准mathc,扩展match,target。可以预想一想,ipt_do_table就是要针对这三部份来过滤,来看一下该函数:/*Returnsoneofthegenericfi
Netfilter源码分析(4)
三、Hook的注册如果你对Netfilter的hook的注册还不了解的话,推荐先到网上搜搜《深入Linux网络核心堆栈》bioforge<alkerr@yifan.net>看看先。(本节中有部份文字引自该文)注册一个hook函数是围绕nf_hook_ops数据结构的一个非常简单的操作,n
Netfilter源码分析(3)
表的注册中涉及到的重要函数表注册函数中,主要涉及到的重要函数有:translate_tablelist_named_findlist_prepend1、translate_table/**函数:translate_table()*参数:*name:表名称;*valid_hooks:当前表所影响的ho
Netfilter源码分析(2)
二、表的注册表的注册由函数ipt_register_table来完成,ipt_register_table(&packet_filter);其参数packet_filter包含了待注册表的各个参数:staticstructipt_tablepacket_filter={{NULL,NULL}
Netfilter源码分析(1)
一、主函数init为初始化函数,主要完成表的注册,然后再注册与表相对应的HOOK//初始化函数为init:module_init(init);//init函数负责注册filter表和默认的三个chainstaticint__initinit(void){intret;if(forward<0|
网络子系统在链路层的收发过程剖析
R.wen(rwen2012@126.com)由于太长,这只是一部分内容,完整的文档在附件中。有兴趣的请看看并帮忙指正,谢谢。1),Skb_buff/*Toallow64Kframetobepackedassingleskbwithoutfrag_list*/#defineMAX_SKB_FRAGS
Linux内核IP Queue机制的分析(一)——用户态接收数据包(3)
3.ipq_user.c这个函数就是具体的测试函数。功能比较简单,通过调用libipq.c中提供的API实现获取IPQueue数据包的简单信息,包括数据包在本地机上的入口以及报文的长度等,整个源码如下:/**ipq_usr.c**TestingprogramforreceivingIPQueuepa
Linux内核IP Queue机制的分析(一)——用户态接收数据包(2)
三、一个实现接收内核态发送的IPQueue数据包的用户态例程由于IPQueue是使用Netlink机制进行内核态和用户态通信的。因此,用户态要接收内核态发送的IPQueue数据包,就需要设计相应的Netlink程序,也就是设计相应的基于Netlink的socket程序即可。这里,我不会详细介绍如何使
Linux内核IP Queue机制的分析(一)——用户态接收数据包(1)
一、基础知识1.NetfilterLinux内核在Netfilter(下文简称NF)框架的基础上提供了IPQueue机制,使得基于用户态(UserMode)的防火墙开发成为可能。内核中NF对网络报文的处理这里不做详细描述。假设读者已经熟悉NF的工作原理和工作流程。但这里还是要简单介绍一下NF中各个钩
[网络子系统] [原]Netfilter实现机制分析
[原]Netfilter实现机制分析原作者:Minit1.前言Netfilter作为目前进行包过滤,连接跟踪,地址转换等的主要实现框架,了解其内部机制对于我们更好的利用Netfilter进行设计至关重要,因此本文通过阅读内核源码2.6.21.2,根据自身的分析总结出Netfilter的大致实现机制,
Netfilter 地址转换的实现(3)
第一个值得关注的是find_appropriate_src函数,它主要是在一个以bysource为首的链表中进行遍历查找,这是做什么?我们初始化NAT的时候,对bysource进行过处始化,所以,到目前为止,这个链表还是空的,我们暂时跳过对这个函数的讨论,函数接下来执行:/*将curr_tuple赋
Netfilter 地址转换的实现(2)
ip_nat_outstaticunsignedintip_nat_out(unsignedinthooknum,structsk_buff**pskb,conststructnet_device*in,conststructnet_device*out,int(*okfn)(structsk_bu
Netfilter 地址转换的实现(1)
网络地址转换的实现初步分析网络地址转换(NAT),从本质上来讲,是通过修改IP数据首部中的地址,以实现将一个地址转换成另一个地址的技术。当然,在某些情况下,修改的不仅仅是IP首部的来源或目的地址,还包括其它要素。随着接入Internet的计算机数量的不断猛增,IP地址资源也就愈加显得捉襟见肘。目前N