Връзката се губи при изпращане на данни. Сървърът получава 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. Знаете ли дали има някакви защитни стени между клиента и сървъра? Казахте също, че работи добре в LAN. China GFW често го прави.

person Steven Ding    schedule 06.06.2013
comment
1. Капацитет на сървърната мрежа 1 Gbit/s. Други приложения не губят пакети. Размер на съобщенията около 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