Соединение теряется при отправке данных. Сервер получает RST, ACK после рукопожатия

У меня есть простой TCP-сервер, размещенный на 64-битном сервере Windows Server 2008 R2. TCP-сервер просто принимает соединение и отвечает на входящие данные полученным сообщением (эхо). Около 600-700 клиентов пытаются подключиться и отправить некоторую информацию. И проблема в том, что сервер теряет почти все соединения (около 90%) при отправке данных от клиента к серверу (первые 15-20 подключений выполнялись нормально). Я прослушал TCP-трафик с помощью Whireshark. Журнал на стороне сервера:

 +--------------+--------------+--------------------------------+
 | 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 Соединение не потеряно при подключении из локальной сети.


person imilbaev    schedule 06.06.2013    source источник


Ответы (2)


Я не думаю, что это связано с вашим кодом, но у меня есть несколько вопросов: 1. Какова скорость сети между клиентом и сервером? Потерялись ли пакеты для других приложений? Каков размер сообщения, отправленного от клиента? 2. Сколько времени проходит между получением RST и окончанием подтверждения (сервер) или отправкой сообщения (клиент)? 3. Знаете ли вы, есть ли межсетевые экраны между клиентом и сервером? Вы также сказали, что это хорошо работает в локальной сети. China GFW часто так поступает.

person Steven Ding    schedule 06.06.2013
comment
1. Пропускная способность серверной сети 1 Гбит / с. Другие приложения не теряют пакеты. Размер сообщения около 100-150 байт (короткие сообщения). 2. Сразу теряется связь. 3. Только брандмауэр Windows, но я его отключил. - person imilbaev; 07.06.2013
comment
Сейчас вроде бы отброшен из-за каких-то ограничений. Когда вы говорите, что падение на 90%, эти связи устанавливаются за очень короткий период времени? Вы пытались подождать какое-то время, чтобы увидеть, удастся ли это? Другой вопрос: в успешных случаях вы закрывали соединения после ответа сервера? - person Steven Ding; 07.06.2013
comment
Да, я немного подождал - результат был такой же. Я не закрываю соединение после ответа сервера, соединение должно быть открыто для обмена сообщениями. - person imilbaev; 10.06.2013
comment
Я имел в виду - остановить клиента, подождать некоторое время (30 минут), а затем позволить клиенту отправлять запросы на соединение. - person Steven Ding; 10.06.2013
comment
Мы не можем останавливать клиентов. Они автономны и географически распределены. - person imilbaev; 10.06.2013

Я нашел решение. Проблема заключалась в том, что провайдер без предупреждения изменил тарифный план. Новый тарифный план ограничил максимальное количество подключений.

person imilbaev    schedule 21.09.2013