免费注册 查看新帖 |

Chinaunix

广告
  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2414 | 回复: 8
打印 上一主题 下一主题

询问高手 从网卡读取数据方面的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-01-17 00:05 |只看该作者 |倒序浏览
我想通过驱动直接获取并处理数据包,例如1s 内我获得的包的总量超过10K,我就直接丢弃所有包,否则得话,数据就进入网络协议栈。问一下,内核有没有相关的接口,请高手指点一下。

[ 本帖最后由 xht8015 于 2010-1-17 10:00 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2010-01-17 04:27 |只看该作者
不太清楚LZ想干什么,动机是什么?

如果你想改下网卡驱动,当然可以直接处理数据包,不过是ETHERNET FRAME的形式。

你说的如果1S内数据大于10K就抛弃,这个做法比较奇怪。一般是驱动里面可以放个BUFFER.如果BUFFER满了,多余的就丢掉。不过之前的还是保留的。不知道LZ说的“直接丢弃所有包”是哪些包?

另外,LINUX网卡一般是用NAPI来收包。收到的包一般在驱动里没有缓冲,直接交给上层,OS提供的接口, 里面应该包括了缓冲。

论坛徽章:
0
3 [报告]
发表于 2010-01-17 09:50 |只看该作者

回复 #2 accessory 的帖子

你好,我想做的是一段时间内的流量统计的功能,意思是说1s 内我获得的包的总量不能超过10K,如果超过10k的话,就将收到的这10k的数据包丢掉,并且直接在网卡处丢掉。

论坛徽章:
0
4 [报告]
发表于 2010-01-17 10:38 |只看该作者
LZ的需求有点奇怪。我记得TCP层是有流量控制的。当接受方收到的数据太多的时候,完全可以告诉发送方,让他慢点发。不过好像一般也不会把已经收到的主动丢掉。这样是浪费资源啊。

至于TCP下面,物理层、数据链路层(ETHERNET)、网络层(IP)常用的协议好像都没提供流量控制。不过不一定对。

自己在网卡上做从理论上来说是可以的。假设你的需求就是1s不能大于10k。那么你要在驱动里开个10K的BUFFER.然后发现它一秒就填满的话,就把整个BUFFER清空。

不过不同网卡的驱动程序是不一样的。如果你在驱动层做。那么换了一个网卡之后又要重新实现一遍了。

利用NETFILTER似乎也可以。不过我不是很确定,可以问下版主GODBACH 老兄。

论坛徽章:
0
5 [报告]
发表于 2010-01-17 11:45 |只看该作者

回复 #4 accessory 的帖子

我想问一下,可不可以将数据复制到用户空间,处理之后再进入网络协议栈。

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
6 [报告]
发表于 2010-01-17 11:58 |只看该作者
Linux有现成的TC,不能满足你的需求吗?

论坛徽章:
0
7 [报告]
发表于 2010-01-17 12:13 |只看该作者
我以前用netfilter做过这种流量控制的东西。
就插入到pre_forward或者local_in里面,根据你的需要,
然后设一个定时器和一个计数器,
后面的就很简单了

论坛徽章:
0
8 [报告]
发表于 2010-01-17 12:17 |只看该作者
原帖由 peimichael 于 2010-1-17 12:13 发表
我以前用netfilter做过这种流量控制的东西。
就插入到pre_forward或者local_in里面,根据你的需要,
然后设一个定时器和一个计数器,
后面的就很简单了

呵呵   我以前也这么做过

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
9 [报告]
发表于 2010-01-17 15:11 |只看该作者

回复 #5 xht8015 的帖子

nfqueue可以满足你的要求,不过不是在驱动层上。
你可以通过netfilter实现的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP