E-COM-NET
首页
在线工具
Layui镜像站
SUI文档
联系我们
推荐频道
Java
PHP
C++
C
C#
Python
Ruby
go语言
Scala
Servlet
Vue
MySQL
NoSQL
Redis
CSS
Oracle
SQL Server
DB2
HBase
Http
HTML5
Spring
Ajax
Jquery
JavaScript
Json
XML
NodeJs
mybatis
Hibernate
算法
设计模式
shell
数据结构
大数据
JS
消息中间件
正则表达式
Tomcat
SQL
Nginx
Shiro
Maven
Linux
linux协议栈
一个Netfilter nf_conntrack流表查找的优化-为conntrack增加一个per cpu cache
独悲需要忍受,快乐需要分享对
Linux协议栈
多次perf的结果,我无法忍受conntrack的性能,然而它的功能是如此强大,以至于我无法对其割舍,我想自己实现一个快速流表,但是我不得不抛弃依赖于conntrack
dog250
·
2015-08-01 23:00
Linux协议栈
链路层处理
基于Linux3.3整个过程不考虑2.6.35引入的RPS,另一篇文档会单独介绍RPS 数据包接收 首先介绍下,softnet_data结构,这是一个每CPU变量,数据包的收发都会使用该结构。/* *Incomingpacketsareplacedonper-cpuqueues */structsoftnet_data{ structQdisc *output_queue; structQdisc
多线程任务
·
2015-07-05 22:42
linux
接口
数据包
placed
Linux协议栈
链路层处理
基于Linux3.3整个过程不考虑2.6.35引入的RPS,另一篇文档会单独介绍RPS 数据包接收 首先介绍下,softnet_data结构,这是一个每CPU变量,数据包的收发都会使用该结构。/* *Incomingpacketsareplacedonper-cpuqueues */structsoftnet_data{ structQdisc *output_queue; structQdisc
多线程任务
·
2015-07-05 22:42
linux
接口
数据包
placed
Linux协议栈
accept和syn队列问题
Linux协议栈
accept和syn队列问题2014-03-1911:30:06分类:LINUX环境: Client通过tcp连接server,server端只是listen,但是不调用accept
xuerongdeng
·
2015-05-21 10:00
Linux协议栈
-netfilter(5)-iptables
iptables是用户态的配置工具,用于实现网络层的防火墙,用户可以通过iptables命令设置一系列的过滤规则,来截获特定的数据包并进行过滤或其他处理。iptables命令通过与内核中的netfilter交互来起作用。我们知道netfilter通过挂在每个hook点上的hook函数来过滤数据包,并且将过滤规则存放在几个表中供hook函数使用。相应的,iptables工具也定义了同样的几张规则表来
落尘纷扰
·
2015-04-04 22:15
Linux内核源码
Linux系统
Linux协议栈
-netfilter(5)-iptables
iptables是用户态的配置工具,用于实现网络层的防火墙,用户可以通过iptables命令设置一系列的过滤规则,来截获特定的数据包并进行过滤或其他处理。iptables命令通过与内核中的netfilter交互来起作用。我们知道netfilter通过挂在每个hook点上的hook函数来过滤数据包,并且将过滤规则存放在几个表中供hook函数使用。相应的,iptables工具也定义了同样的几张规则表来
jasonchen_gbd
·
2015-04-04 22:00
iptables
Netfilter
Linux协议栈
-netfilter(4)-期望连接
传统的conntrack和NAT处理只对IP层和传输层头部进行转换处理,但是一些应用层协议,在协议数据报文中包含了地址信息。为了使得这些应用也能透明地完成NAT转换,NAT使用一种称作ALG的技术,它能对这些应用程序在通信时所包含的地址信息也进行相应的NAT转换。例如:对于FTP协议的PORT/PASV命令,在数据包载荷中需要包含地址信息,并且数据包如果需要做NAT,那应用层数据部分的地址也需要做
落尘纷扰
·
2015-04-04 22:18
Linux内核源码
Linux协议栈
-netfilter(4)-期望连接
传统的conntrack和NAT处理只对IP层和传输层头部进行转换处理,但是一些应用层协议,在协议数据报文中包含了地址信息。为了使得这些应用也能透明地完成NAT转换,NAT使用一种称作ALG的技术,它能对这些应用程序在通信时所包含的地址信息也进行相应的NAT转换。例如:对于FTP协议的PORT/PASV命令,在数据包载荷中需要包含地址信息,并且数据包如果需要做NAT,那应用层数据部分的地址也需要做
jasonchen_gbd
·
2015-04-04 22:00
期望连接
Linux协议栈
-netfilter(3)-NAT
本文对netfilter中NAT部分的源码进行分析,读者需要先对NAT的基本概念有一个大致了解。1.NAT模块的初始化NAT模块的初始化过程主要是初始化一些全局变量以及注册NAT相关的hook函数。在下面nf_nat_init()函数和nf_nat_standalone_init()函数的流程图中用红色标记了要初始化的全局数据结构。nf_nat_init()函数:nf_nat_standalone
jasonchen_gbd
·
2015-04-04 18:00
NAT
Netfilter
linux协议栈
Linux协议栈
-netfilter(2)-conntrack
连接跟踪(conntrack)用来跟踪和记录一个连接的状态,它为经过协议栈的数据包记录状态,这为防火墙检测连接状态提供了参考,同时在数据包需要做NAT时也为转换工作提供便利。本文基于Linux内核2.6.31实现的conntrack进行源码分析。1.conntrack模块初始化1.1conntrack模块入口conntrack模块的初始化主要就是为必要的全局数据结构进行初始化,代码流程如下:上面这
落尘纷扰
·
2015-04-04 17:40
Linux内核源码
Linux协议栈
-netfilter(2)-conntrack
连接跟踪(conntrack)用来跟踪和记录一个连接的状态,它为经过协议栈的数据包记录状态,这为防火墙检测连接状态提供了参考,同时在数据包需要做NAT时也为转换工作提供便利。本文基于Linux内核2.6.31实现的conntrack进行源码分析。1.conntrack模块初始化1.1conntrack模块入口conntrack模块的初始化主要就是为必要的全局数据结构进行初始化,代码流程如下:上面这
jasonchen_gbd
·
2015-04-04 17:00
conntrack
连接跟踪
linux协议栈
Linux协议栈
-netfilter(1)-框架
1.netfilter框架Netfilter是Linux内核中进行数据包过滤、连接跟踪、地址转换等的主要实现框架。当我们希望过滤特定的数据包或者需要修改数据包的内容再发送出去,这些动作主要都在netfilter中完成。iptables工具就是用户空间和内核的Netfilter模块通信的手段,iptables命令提供很多选项来实现过滤数据包的各种操作,所以,我们在定义数据包过滤规则时,并不需要去直接
jasonchen_gbd
·
2015-04-04 14:00
Netfilter
linux协议栈
Linux协议栈
优化之Netfilter分类conntrack
首先,如果你不同意我以下的观点,本文就不必看了:如今内存不值钱,空间换时间很划算,要知道,一万年前的1秒和一万年后1秒是一样的,你要是觉得人们做的事情可能不同,但是请记住,永远都会发生“安迪给你的被比尔拿走”之类的事情,对于你而言,什么都没有改变!虽然空间可以被拓展,但是要讲技巧。以下是一张截图,测试的是http服务器的常规性能,我依然使用相对值比较,因为我的电脑压不出真实性能,另外,为了将网络影
dog250
·
2014-11-16 20:43
Linux
电脑
服务器
Linux协议栈
优化之Netfilter分类conntrack
首先,如果你不同意我以下的观点,本文就不必看了:如今内存不值钱,空间换时间很划算,要知道,一万年前的1秒和一万年后1秒是一样的,你要是觉得人们做的事情可能不同,但是请记住,永远都会发生“安迪给你的被比尔拿走”之类的事情,对于你而言,什么都没有改变! 虽然空间可以被拓展,但是要讲技巧。以下是一张截图,测试的是http服务器的常规性能,我依然使用相对值比较,因为我的电脑压不出真实性能,另外,
dog250
·
2014-11-16 20:43
linux
服务器
技巧
结构体
电脑
Linux协议栈
优化之Netfilter分类conntrack
首先,如果你不同意我以下的观点,本文就不必看了:如今内存不值钱,空间换时间很划算,要知道,一万年前的1秒和一万年后1秒是一样的,你要是觉得人们做的事情可能不同,但是请记住,永远都会发生“安迪给你的被比尔拿走”之类的事情,对于你而言,什么都没有改变!虽然空间可以被拓展,但是要讲技巧。以下是一张截图,测试的是http服务器的常规性能,我依然使用相对值比较,因为我的电脑压不出真实性能,另外,为了将网络影
dog250
·
2014-11-16 20:44
Linux协议栈
优化之Netfilter分类conntrack
首先,如果你不同意我以下的观点,本文就不必看了:如今内存不值钱,空间换时间很划算,要知道,一万年前的1秒和一万年后1秒是一样的,你要是觉得人们做的事情可能不同,但是请记住,永远都会发生“安迪给你的被比尔拿走”之类的事情,对于你而言,什么都没有改变! 虽然空间可以被拓展,但是要讲技巧。以下是一张截图,测试的是http服务器的常规性能,我依然使用相对值比较,因为我的电脑压不出真实性能,另外,
dog250
·
2014-11-16 20:00
Linux协议栈
查找算法优化随想
0.查找的种类
Linux协议栈
作为一个纯软件实现,保留了硬件接口,但是本文不涉及硬件。
dog250
·
2014-11-09 13:28
软件
Linux
接口
Linux协议栈
查找算法优化随想
0.查找的种类
Linux协议栈
作为一个纯软件实现,保留了硬件接口,但是本文不涉及硬件。
dog250
·
2014-11-09 13:28
linux
接口
软件
记录
数据包
Linux协议栈
查找算法优化随想
0.查找的种类
Linux协议栈
作为一个纯软件实现,保留了硬件接口,但是本文不涉及硬件。
dog250
·
2014-11-09 13:05
Linux协议栈
查找算法优化随想
0.查找的种类
Linux协议栈
作为一个纯软件实现,保留了硬件接口,但是本文不涉及硬件。
dog250
·
2014-11-09 13:00
Linux邻居子系统的细节之confirm-Open××× server模式的MAC地址学习
在《Linux实现的ARP缓存老化时间原理解析》一文中,我剖析了
Linux协议栈
IPv4的邻居子系统的转化,再次贴出那个状态机转化图,可是这个图更详细了些,因为它有一个外部输入,那就是confirm:请注意
dog250
·
2014-11-02 11:47
Linux
IP地址
server
Linux协议栈
accept和syn队列问题
环境: Client 通过tcp 连接server,server端只是listen,但是不调用accept。通过netstat–ant查看两端的连接情况。server端listen,不调用accept。client一直去connectserver。问题:运行一段时间后,为什么server端的ESTABLISHED连接的个数基本是固定的129个,但是client端的ESTABLISHED连接的
hjxhjh
·
2014-08-23 20:00
使用jprobe构建镜像协议栈的原理与感悟
突然回想起了往事,那是2007年的冬天的一个周五,我在看我的老湿调试
Linux协议栈
的IP层,只见他修改了路由查找的逻辑,然后直接makeinstall了一下就即时生效了,当时我只知道的是,修改了这个逻辑需要重新编译内核
dog250
·
2014-06-07 13:10
Linux
空间
加班费
使用jprobe构建镜像协议栈的原理与感悟
突然回想起了往事,那是2007年的冬天的一个周五,我在看我的老湿调试
Linux协议栈
的IP层,只见他修改了路由查找的逻辑,然后直接makeinstall了一下就即时生效了,当时我只知道的是,修改了这个逻辑需要重新编译内核
dog250
·
2014-06-07 13:10
linux
空间
加班费
使用jprobe构建镜像协议栈的原理与感悟
突然回想起了往事,那是2007年的冬天的一个周五,我在看我的老湿调试
Linux协议栈
的IP层,只见他修改了路由查找的逻辑,然后直接makeinstall了一下就即时生效了,当时我只知道的是,修改了这个逻辑需要重新编译内核
dog250
·
2014-06-07 13:00
NIC与网卡NIC
linux协议栈
pkt流程:http://blog.chinaunix.net/uid-22397896-id-3348984.html1.这是OS级别的,drv封装的时候注意如何满足这一层的需要。
gangyewei
·
2014-05-24 15:03
Linux协议栈
accept和syn队列问题
原文http://blog.chinaunix.net/uid-20662820-id-4154399.html环境: Client通过tcp连接server,server端只是listen,但是不调用accept。通过netstat–ant查看两端的连接情况。server端listen,不调用accept。client一直去connectserver。问题:运行一段时间后,为什么serve
maijian
·
2014-03-20 11:00
报文的发送函数 (linux网络子系统学习 第十三节)
linux协议栈
中提供的报文发送函数有两个,一个是链路层提供给网络层的发包函数dev_queue_xmit()。另一个就是软中断发包函数直接调用的函数sch_direct_xmit()。
guanglongxishui
·
2014-02-15 17:27
linux
发送函数
NETDEV 协议 六
杂谈一:重复地址检测
Linux协议栈
中处理重复地址检测报文的是arp_process()中的一段代码,RFC2131是DHCP的草案,相应的sip==0是DHCP服务器用来检测它所分发的地址是否重复的。
u011553162
·
2014-01-17 22:00
Linux协议栈
skb操作函数介绍
接字缓冲区函数函数名功能函数形成参数描述skb_queue_empty检查队列是否为空intskb_queue_empty(structsk_buff_head*list)list为队列头如果队列为空返回真,否则返回假skb_get引用缓冲区structsk_buff*skb_get(structsk_buff*skb)skb为要引用的缓冲区对套接字缓冲区再引用一次,返回指向缓冲区的指针kfree
start000722
·
2013-12-27 10:00
SKB
skb_get
kfree_skb
alloc_skb
skb_cloned
Linux协议栈
对vlan的处理
(基于linux-2.6.21.7)从代码上看,Linux对VLAN的处理方式如下。1.vlan的处理,主要是依靠网卡本身。 有的网卡不支持vlan,如老的3com网卡3c501。 intel的ixgb(PRO/10GbE)和e1000(PRO/1000)网卡是支持vlan的。 其他的一些网卡驱动,从代码上来看,还未完整支持。 例如,有个网卡驱动(源码文件:drivers\net\spid
crazycoder8848
·
2013-12-02 16:00
Linux协议栈
代码阅读笔记(三)报文接收
(基于linux-2.6.21.7)(一)网卡接收报文以IntelPRO/1000网卡为例。网卡收到报文后,产生中断。驱动程序的中断处理函数e1000_intr(源码文件:\drivers\net\e1000\e1000_main.c)对报文进行接收。中断处理程序先做一些基本的接收工作,然后开始如下的执行路径(从e1000_intr内部开始):(注意,内核与网卡驱动之间,有两套数据交互接口:一套老
crazycoder8848
·
2013-12-02 13:00
发送报文过程的调度 (linux网络子系统学习 第十二节 )
在
linux协议栈
中,发送队列管理队列策略,而直接管理发送报文的是队列策略。所有发包软中断中调度的是队列策略,而不是发送队列。
guanglongxishui
·
2013-10-19 09:57
net_tx_action
linux网络子系统
qdisc_restart
Linux协议栈
代码阅读笔记(二)网络接口的配置
Linux协议栈
代码阅读笔记(二)网络接口的配置(基于linux-2.6.11)(一)用户态通过C库函数ioctl进行网络接口的配置例如,知名的ifconfig程序,就是通过C库函数sys_ioctl实现网络接口的配置的
crazycoder8848
·
2013-10-10 21:00
linux
网络
内核
ifconfig
[置顶]
Linux协议栈
代码阅读笔记(一)
Linux协议栈
代码阅读笔记(一)(基于linux-2.6.21.7)(一)用户态通过诸如下面的C库函数访问协议栈服务intsocket(intdomain,inttype,intprotocol);intbind
crazycoder8848
·
2013-09-26 23:00
软中断 (linux网络子系统学习 第一节)
整个
linux协议栈
是运行在软中断环境中,所以学习协议栈首先要了解软中断。第一节就总结一下linux内核中软中断的具体实现。
guanglongxishui
·
2013-07-30 21:09
linux
softirq
软中断
网络数据包收发流程(4):协议栈之packet_type
比如,arp头和ip头都是紧跟在以太网头后面的,所以在
linux协议栈
中arp和ip地位相同(如上图)但是在OSI
lvzg2005
·
2013-06-26 14:57
linux
网络
模型
数据包
以太网
Linux协议栈
报文收发流程记录
原文出处:http://blog.chinaunix.net/uid-22397896-id-3348984.htmlRX流程1.非NAPI的RXdriver的isr调用eth_type_trans //确定skb->pkt_type和skb->protocoldriver的isr调用netif_rx //可查看返回值,NET_RX_DROP表示丢包,__skb_queue_tail(&queue
lvzg2005
·
2013-06-08 14:15
linux协议栈
Linux协议栈
报文收发流程记录
原文出处:http://blog.chinaunix.net/uid-22397896-id-3348984.htmlRX流程1.非NAPI的RXdriver的isr调用eth_type_trans//确定skb->pkt_type和skb->protocoldriver的isr调用netif_rx//可查看返回值,NET_RX_DROP表示丢包,__skb_queue_tail(&queue->
lvzg2005
·
2013-06-08 14:15
linux协议栈
Linux_kernel
Linux协议栈
报文收发流程记录
来自:http://blog.chinaunix.net/uid-22397896-id-3348984.htmlRX流程1.非NAPI的RXdriver的isr调用eth_type_trans //确定skb->pkt_type和skb->protocoldriver的isr调用netif_rx //可查看返
icemilk00
·
2013-04-12 09:00
linux协议栈
skb操作函数
转自http://linux.chinaitlab.com/administer/842245.htmlstaticinlineunsignedchar*skb_pull_inline(structsk_buff*skb,unsignedintlen){ returnunlikely(len>skb->len)?NULL:__skb_pull(skb,len);}skb_put()增长数
yxnyxnyxnyxnyxn
·
2013-03-11 14:00
linux协议栈
skb操作函数
接字缓冲区函数函数名功能函数形成参数描述skb_queue_empty检查队列是否为空intskb_queue_empty(structsk_buff_head*list)list为队列头如果队列为空返回真,否则返回假skb_get引用缓冲区structsk_buff*skb_get(structsk_buff*skb)skb为要引用的缓冲区对套接字缓冲区再引用一次,返回指向缓冲区的指针kfree
newnewman80
·
2012-09-20 15:00
linux
struct
list
null
insert
扩展
linux下tap的一种使用方法
这样的好处是数据处理效率很高(普通的
linux协议栈
中需要两次内存的拷贝,效率低),但是也因此带来了一些问题,有些
pingpang
·
2012-07-19 22:00
从
Linux协议栈
代码和RFC看原理
终于搞定了的方案,由于一直无法下载那个内核模块,于是也就只能自己写了,在理解了的原理之后,写这个模块并不很费事(其实为了简单不是写模块,而是直接修改内核协议栈代码),下面先说一下原理,然后再说一下关于内核修改的建议。序.所谓是一个借用历史小说而命名的欺骗GfW的方案,有很多的实现。说实话我真的不知道《西厢记》中的那家伙到底有何与众不同,有时间一定看一下。而无非就是利用了防火墙的一些弱点而瞒天过海的
xitong
·
2012-02-09 22:00
linux
网络数据包收发流程(四):协议栈之packet_type
比如,arp头和ip头都是紧跟在以太网头后面的,所以在
linux协议栈
中arp和ip地位相同(如上图)但是在OSI七层模型中,arp属于链路层,ip属于网络层.....
174181597
·
2011-12-04 20:20
职场
休闲
Linux内核分析 - 网络[十]:ARP杂谈
内核版本:2.6.34杂谈一:重复地址检测
Linux协议栈
中处理重复地址检测报文的是arp_process()中的一段代码,RFC2131是DHCP的草案,相应的sip==0是DHCP服务器用来检测它所分发的地址是否重复的
qy532846454
·
2011-10-20 15:00
linux
windows
网络
interface
linux内核
网络数据包收发流程(四):协议栈之packet_type
比如,arp头和ip头都是紧跟在以太网头后面的,所以在
linux协议栈
中arp和ip地位相同(如上图)但是在OSI七层模型中,arp属于链路层,ip属于网络层.....这里就不死抠概念,我们就说arp,
jw212
·
2011-09-01 10:00
数据结构
list
网络
struct
socket
hook
LINUX协议栈
详解 ARP协议
ARP协议负责从IP地址到物理MAC地址的转换。ARP格式/**Thisstructuredefinesanethernetarpheader.*/structarphdr{__be16ar_hrd;/*formatofhardwareaddress*/__be16ar_pro;/*formatofprotocoladdress*/unsignedcharar_hln;/*lengthofhard
hongchunhua
·
2011-07-28 18:01
LINUX内核协议栈
TCP/IP
LINUX协议栈
详解 流控TC
在数据包发送一节提到了流控TC的实现,现在进一步研究。数据包发送是通过dev_queue_xmit实现的,if(q->enqueue){ rc=__dev_xmit_skb(skb,q,dev,txq); gotoout;}如果有enqueue则说明进行流控,否则直接发送。参考函数__dev_xmit_skb,我们可以看到对skb进行了e
hongchunhua
·
2011-07-14 17:32
LINUX内核协议栈
TCP/IP
LINUX协议栈
详解 协议处理
协议处理,主要介绍了从驱动中获取数据后,如何进行分发给不同的协议处理,包括IP协议、ARP协议等处理。__netif_receive_skb协议处理的开始,主要的数据结构是ptype_all和ptype_base,其中ptype_all是一个链表结构,ptype_base则是一个数组,并通过hash来type来实现索引。list_for_each_entry_rcu(ptype,&ptype_al
hongchunhua
·
2011-07-13 23:06
LINUX内核协议栈
TCP/IP
上一页
1
2
3
下一页
按字母分类:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
其他