2011-07-05 73 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進行壓力測試。

相關問題