2011-07-05 39 views
3

我需要找到生成一百万个tcp连接的最佳方法。 (越多越好,更不好)。尽可能快地机器:D生成百万个tcp连接的最佳方法

为什么我需要这个?我正在测试一个NAT,我想用尽可能多的条目加载它。

我目前的方法是在一个虚拟eth上生成一个子网,并从该虚拟网关连接到实际eth到lan到nat到主机。

subnetnicfake----routeToRealEth----RealEth---cable---lan----nat---host. 
|<-------------on my machine-------------------->| 
+0

百万*同时*连接? – thkala

+0

您是否尝试过['iperf'](http://sourceforge.net/projects/iperf/)工具? –

+0

我不知道iperf在这种情况下会有帮助吗? – nikhilelite

回答

0

搜索了很多天后,我发现了这个问题。显然这个问题已经深思熟虑了,应该是,因为它非常基本。问题是,我不知道这个问题应该被调用。在知识中,它显然被称为c10k问题。我想要的是c1m问题。然而,似乎有一些努力获得C500k。或并发500k连接。

http://www.kegel.com/c10k.htmlhttp://urbanairship.com/blog/2010/09/29/linux-kernel-tuning-for-c500k/

@deadalnix。

阅读上面的链接,并启发自己。

+0

从上面的链接:«误解的前提是每个IP只有很多短暂的端口。事实是,限制是基于IP对,或者换句话说,就是客户端和服务器IP。单个客户端IP可以连接到服务器IP 64,000次,另一个客户端IP也可以连接到一个服务器IP。»由于NAT,这是哪种情况。 – deadalnix

-3

只要你在TCP中有65536端口可用,除非你有一大群服务器连接到,否则这是不可能实现的。

那么,最好的方法是什么?只要在服务器上打开尽可能多的连接并查看会发生什么。

+0

这些端口是每个ip。我说我有一个虚假的子网。所以每IP你得到65536最大(虽然其严格受限于文件描述符限制和其他参数)。但我的观点是要加快速度,我没有时间坐下来等待1/2小时以使这些连接正常工作。任何人有什么好主意来提高速度? – nikhilelite

+0

@deadalnix这是不正确的。他不需要大量的服务器。他受限于每个客户端的出站连接数,但每个服务器的传入连接数不受端口空间的限制。它们使用与正在侦听的端口相同的端口号。 – EJP

+0

服务器将为每个连接创建一个套接字。所以,有限的因素是文件描述符表的大小。 – badawi

3

一百万个并发TCP会话可能是困难的:如果你依赖于标准connect(2)套接字API来创建功能,您要使用的物理内存很多:每个环节都需要一个struct inet_sock,其中包括struct sock,其中包括struct sock_common

我很快就猜到大小:struct sock_common需要大约58个字节。 struct sock需要大约278个字节。 struct inet_sock需要大约70个字节。

这是387兆字节的数据之前,你有收到和发送缓冲区。 (对于某些信息,请参阅tcp_memtcp_rmemtcp_wmemtcp(7)。)

如果你选择走这条路,我建议设定每个插槽的内存控制低,因为他们去。如果4096是您设置的最低值,我不会感到惊讶。 (SK_MEM_QUANTUMPAGE_SIZE,存储到sysctl_tcp_rmem[0]sysctl_tcp_wmem[0]。)

这就是内存另外八个千兆字节 - 四为接收发送缓冲区缓存,四。

这就是除了系统需要您的程序打开一百万个文件描述符。 (见/proc/sys/fs/file-maxproc(5)

所有这些记忆是而非可交换 - 内核销内存 - 所以你真的只有64位计算机上处​​理这个问题,至少8千兆字节记忆。大概10-12会做得更好。由Paketto Keiretsu tools采取

一种方法是打开原始连接,执行所有使用单个原始套接字的TCP三次握手,并尝试计算什么是需要的,而不是储存,处理更大量的数据比平时。尝试尽可能少地存储每个连接,并且不要使用简单的列表或结构树。

的Paketto的Keiretsu工具上次在2003年左右更新,所以他们仍然可能无法扩展到上万元的好,但他们肯定是我的出发点,如果这是我的问题解决了。

0

您是否尝试过使用tcpreplay?您可以准备或捕获一个或多个带有所需流量的PCAP网络捕获文件,并让一个或多个tcpreplay实例重播它们以对您的防火墙/ NAT进行压力测试。

相关问题