2013-06-06 81 views
0

我有一個簡單的TCP服務器託管在64位Windows Server 2008 R2上。 TCP服務器只接收連接並用收到的消息(回聲)答覆傳入數據。有大約600-700個客戶嘗試連接併發送一些信息。問題是:當數據從客戶端發送到服務器時,服務器會丟失幾乎所有的連接(大約90%)(前15-20個連接已經正常執行)。我用Whireshark嗅探了TCP的流量。 從服務器端日誌:數據發送時連接丟失。服務器在握手後收到RST,ACK

+--------------+--------------+--------------------------------+ 
| Source  | Destination | Info       | 
+--------------+--------------+--------------------------------+ 
| 1. client ip | server ip | [SYN] **Handshake step1**  | 
| 2. server ip | client ip | [SYN, ACK] **Handshake step2** | 
| 3. client ip | server ip | [ACK] **Handshake step3**  | 
| 4. client ip | server ip | [RST, ACK] **Loses connection**| 
+--------------+--------------+--------------------------------+ 

從客戶端日誌:

+--------------+--------------+--------------------------------+ 
| Source  | Destination | Info       | 
+--------------+--------------+--------------------------------+ 
| 1. client ip | server ip | [SYN] **Handshake step1**  | 
| 2. server ip | client ip | [SYN, ACK] **Handshake step2** | 
| 3. client ip | server ip | [ACK] **Handshake step3**  | 
| 4. client ip | server ip | [PSH, ACK] Message    | 
| 5. client ip | server ip | [PSH, ACK] CRLF message  | 
| 6. server ip | client ip | [RST, ACK] **Loses connection**| 
+--------------+--------------+--------------------------------+ 

在這兩種情況下,«復位原因»是:\ 000 \ 000 \ 000 ...... \ 000 當我們從本地網絡連接時,連接沒有丟失。

回答

0

我找到了解決方案。問題是,供應商在沒有任何通知的情況下更改了關稅計劃。新的資費計劃限制了最大連接數量。

0

我不認爲它與您的代碼有關,但我確實有幾個問題: 1.客戶端和服務器之間的網絡速度是多少?其他應用程序是否丟失了數據包?客戶端發送的消息大小是多少? 2.收到的RST與握手完成(服務器)或發送的消息(客戶端)之間有多久? 3.你知道客戶端和服務器之間是否有防火牆嗎?你也說過它在局域網上運行良好。中國GFW經常這樣做。

+0

1.服務器網絡容量1Gbit/s。其他應用程序不會丟失包。消息大小約100-150字節(shor消息)。 2.連接立即失敗。 3.只有Windows防火牆,但我禁用它。 – zenio

+0

現在它似乎因某些限制而下降。當你說90%下降時,這些連接是否會在很短的時間內進入?你有沒有嘗試等待一段時間,看看它是否會成功?另一個問題是,對於成功的案例,您是否在服務器響應後關閉連接? –

+0

是的,我試圖等待一段時間 - 結果是一樣的。服務器響應後,我不關閉連接,應該打開連接以進行消息交換。 – zenio

相關問題