免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: lenn

Intel-E100网卡驱动实例分析 [复制链接]

论坛徽章:
0
发表于 2006-01-18 16:38 |显示全部楼层
请问 lenn,用“旁路 TCP 拦截”技术,PC 能达到千兆线速吗?

(笔误,之前少写了一个 n,呵呵

[ 本帖最后由 platinum 于 2006-1-19 01:09 编辑 ]

论坛徽章:
0
发表于 2006-01-18 22:37 |显示全部楼层
线速达不到,我们实际电信生产大概一台机器2个网卡能处理1.8G的流量,1个网卡处理950M流量。
实际上“线速”这个概念只存在于实验室,电信的乱包大概是100多字节长度比较多,而且很多都是
大包。旁路拦截其实发出来的拦截包很少的,普通网卡用sock_raw发包就足够了,主要是能收下所有
的包及时处理,“及时”的概念是在下一轮收报不给覆盖,就可以了,延迟点问题不大,因为你处于被控制
的地方最近,通常是出口附近。而访问的地方通常是比较远,跨越路由器的。

我叫lenn,不是len,呵呵...

论坛徽章:
0
发表于 2006-01-19 01:12 |显示全部楼层
原帖由 lenn 于 2006-1-18 22:37 发表
线速达不到,我们实际电信生产大概一台机器2个网卡能处理1.8G的流量,1个网卡处理950M流量。
实际上“线速”这个概念只存在于实验室,电信的乱包大概是100多字节长度比较多,而且很多都是
大包。旁路拦截其实发 ...

继续请教 lenn
“及时”的概念是在下一轮收报不给覆盖,就可以了

倘若被覆盖了,又会怎样呢?

还有,“延时大点无所谓”,这个延时是人为用程序产生的吗?这个怎么理解?

另外,我没有明白上面说的“大概一台机器2个网卡能处理1.8G的流量,1个网卡处理950M流量”,可能我还没能理解“旁路”的工作原理

论坛徽章:
0
发表于 2006-01-19 14:25 |显示全部楼层
延时大点无所谓,我的意思是说,给网卡开的缓冲区是一定的,即使用内部协议栈,包在系统内的生存时间总有一个固定值,
假如说一个网卡1000K包数/秒,开辟一个100M大小的缓冲区,因为一个eth frame是1500,为了计算方便,给每个包使用
2k字节, 则1M放512个包, 100M可以放共100*512= 50K个包; 如果不做任何处理,则包的生存时间是1/20秒= 0.05秒
也就是如果应用程序能够50毫秒内处理完这个包,则系统相当不丢包,在这个条件下,一个应用程序如果有锁的碰撞,很容易丢包.

旁路拦截是在智能交换机(路由器)中,使用portmap或者端口分光技术,把出口的流量进行复制后送给处理机器,这样处理机器
就能处理那么多的流量了. 通常回复包的速度要远远快于正常请求包速度,这样就能先到达请求机器,从而达到控制的目的.
这种情况下,只能对tcp进行拦截,对udp无能为力,如果要对udp应用拦截,只能是模拟应用发送udp请求包.

这个系统缺点是要使用交换机等设备,但是能做交换机作不到的很多工作,比如应用拦截,统计,监控等.
如果采用直接拦截,我认为目前的PC SERVER是达不到这样的能力的,一个普通的防火墙应用,最多也只能处理300M左右
的流量吧(不确定).所以要用PC作这样的高性能防火墙,估计性能还是不怎么够.

如有错误,请多指教,呵呵.

论坛徽章:
0
发表于 2006-01-19 15:03 |显示全部楼层
lenn兄弟的帖子我得顶,哈哈

论坛徽章:
0
发表于 2006-01-19 15:04 |显示全部楼层
不错,高人

论坛徽章:
0
发表于 2006-01-19 15:37 |显示全部楼层

回复 14楼 lenn 的帖子

你说2个网卡能搞1.8G,是不是这个东西的瓶颈就完全在网卡抓包这一块?如果你抓到了1.8G的流量。处理起来cpu和内存是不是增长的不是很大呢?

论坛徽章:
0
发表于 2006-01-19 16:02 |显示全部楼层
技术瓶颈是在抓包这一块,如果走协议栈,CPU都消耗在system上了,达不到要求;
如果CPU> 2.4G的主频,那性能瓶颈是应用处理, 为了分析各种包, 必须要把所有的原数据,比如用户信息,过滤关键信息等
都放在大内存中作cache,这么大的流量,频繁的锁肯定是不能用的,其实都没有什么技术含量了,只有一些经验的做法,知道
怎么处理更快,怎么处理更节约时间,呵呵.

论坛徽章:
0
发表于 2006-01-19 16:30 |显示全部楼层

回复 18楼 lenn 的帖子

如果过滤关键信息的时候也是在cache里处理而不copy出来的话,那应该是需要处理得很快了。但是这个cache怎么组织呢?如果就是一片内存的话,那数据包的长度都不一样,放进去倒是方便,取出来的时候怎么知道哪儿是一个数据包的头,哪儿是尾呢?是不是你还得自己给接受到的数据包也加一个自己定义的头然后在放到cache里?
  
  总之一句话,如果不能频繁加锁。那怎么控制缓存的同步问题?

论坛徽章:
0
发表于 2006-01-21 00:11 |显示全部楼层
好东西啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP