- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
NFLOG和ULOG特点及实现机制
目录
ULOG和NFLOG特点比较。。。。。。。。。。。。。。。。。。。。。。。。。 1
NFLOG特点及实现机制 。。。。。。。。。。。。。。。。。。。。。。。。。。。。1
ULOG特点及实现机制 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。6
NFLOG例子程序 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。8
ULOG例子程序 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。9
ULOG和NFLOG特点比较
1.都是使用netlink进行通信,ULOG使用NETLINK_NFLOG通信协议,而NFLOG使用NETLINK_NETFILTER通信协议。
2. ULOG只能从内核发送消息到用户空间,而NFLOG用户空间可以发送消息到内核。
3. NFLOG用户空间有libnfnetlink库的支持,而ULOG没有
4. ULOG消息编码固定,NFLOG消息编码使用属性,相对比较灵活。
5. ULOG的消息池的个数和属性都是固定,而NFLOG消息池是动态添加和撤销,并且属性可以设置。
6. 两个都是使用netlink进行通信,从性能方面看,两者应该差不多。
7. 但是NFLOG有一个特点,就是,消息池是动态建立和撤销的,如果nflog target指定的消息池不存在,则不会去创建消息,也不会去写入消息,避免做无用功。
8. NFLOG消息池是用户空间通过发送配置消息创建,用户空间如果关闭netlink socket,对应的消息池也会随之撤销。
9.NFLOG数据包是通过单播来发送数据包,也就是,只有创建消息池的进程才可以接收到数据包,
而ULOG是通过广播来发送数据包,一个消息池对应一个广播组,所有加入到某个广播组的接收进程都可以接收到这个广播中的数据包。
总的来说:ULOG通信是单向的,用户空间不能发送一些配置命令到内核,而NFLOG弥补了ULOG的不足,使得通信是双向的。
NFLOG特点及实现机制
可以使用libnfnetlink提供的接口来发送和接收数据
一个分组对应一个消息池,可以建立多个消息池,并可以设置消息池的属性,比较有用的属性有3个:
NFULA_CFG_NLBUFSIZ 可以设置消息池的大小
NFULA_CFG_TIMEOUT 设置消息池的刷新定时器时间间隔
NFULA_CFG_QTHRESH 设置消息池允许存储的最大消息个数
说明:内核向用户空间发送数据有3个时机
消息池已满,先发送所有旧的消息,再写入新消息。
刷新定时器到期,发送所有消息。
消息池的消息个数大于允许的最大消息个数,发送所有旧消息,再写入新消息。
消息的创建和撤销是由用户空间程序控制,用户空间通过发送配置消息到netlink子系统,创建消息池,并设置消息池的属性。
用户空间关闭NFLOG子系统,对应的消息池也随之撤销,内核将不再写消息。
也就是说,用户空间的读取程序控制消息池的创建,撤销以及消息池的属性。
iptables中的NFLOG有以下4个属性:
--nflog-group NUM 标识消息写入哪个消息池,如果消息池不存在将不会写消息
--nflog-range NUM 消息中包含网络层数据最大长度,0表示将写入所有网络层数据
--nflog-threshold NUM 消息池消息个数等于大于NUM,刷新消息池。
--nflog-prefix STRING 本条消息的前缀
说明:消息池也有一个threshold属性,target中也有一个threshold属性,每次写入消息前,取两者最小的,然后判断是否刷新消息池。
注意:这里的group是选择消息池,nflog netlink消息是发送给创建这个消息池的进程,不是用广播包来发送,而ULOG是用广播包来发送消息。
iptables的默认属性: -j NFLOG –nflog-group 0 –nflog-threshold 1
图 1 nflog消息编码
图1说明:nflog是使用属性的名值对应来传递消息,可以通过添加属性来传递更多的消息,下图是内核中nflog已有的属性:
图2 nflog属性列表
图2说明:其中nfulnl_attr_type是数据包的信息属性列表
nfulnl_attr_config是用于配置nflog消息池的属性列表
NFLOG消息发送流程:
当一个数据包满足了匹配条件,并开始执行NFLOG target时,需要根据nflog target的私有数据struct xt_nflog_info来构造要发送的消息,并使用xt_nflog_info中消息池编号指定的消息池发送消息,使用单播把数据包发送给创建本消息池的进程。
注意:如果消息池还未建立,将不会写入消息,也不会构造消息。
图3是消息池和
文档评论(0)