Как проверить активный сокет TCP, если он еще жив или нет - PullRequest
0 голосов
/ 16 мая 2019

Мы подозреваем, что межсетевой экран между двумя серверами прерывает наше TCP-соединение слишком рано, не уведомляя серверы, и мы хотели бы знать, возможно ли использовать PowerShell для этого.Мы знаем, что время от времени соединения сбрасываются, и наше приложение пытается использовать активный сокет, но после некоторой задержки закрывает его и открывает новый, что вызывает задержку.

Toчтобы получить общее представление, мы попытались передать выходные данные Get-NetTcpConnection в Test-Connection, но, очевидно, это не сработало.

Возможно ли использовать PowerShell для получения списка «установленных» соединений иотправил PING или любой тестовый запрос, чтобы узнать актуальное состояние сокета или посмотреть, жив он или нет?

1 Ответ

0 голосов
/ 17 мая 2019

Прежде всего, локальный сокет на вашем компьютере не предоставляет никакой информации о состоянии этого соединения на межсетевом экране в пути.Кроме того, хотя вы можете перечислять установленные соединения локально, а затем проверять их, это не даст желаемого результата.Мало того, что Test-Connection не является правильным инструментом (он отправляет ICMP-зонды, а не TCP-зонды, т.е. работает на неправильном уровне), но даже если вы используете Test-NetConnection (который поддерживает TCP-зонды), который установит new Соединение, не используйте повторно то, которое использует ваше приложение.

По сути, единственный способ проверить состояние соединения на брандмауэре - это проверить состояние соединения на брандмауэре.

С учетом вышесказанного наиболее вероятной причиной преждевременного сброса соединения брандмауэром является расхождение настроек поддержки активности TCP на брандмауэре и конечных точках подключения, по крайней мере, по моему опыту.В Windows по умолчанию установлено значение Время активности TCP , равное 2 часам, в то время как для многих брандмауэров по умолчанию используется более короткое время поддержки (например, 30 минут).

Время поддержки систем Windows можно изменить в реестре.Например, путем импорта файла .reg со следующим содержимым (0x493e0 == 300000 мс == 6 мин):

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"KeepAliveTime"=dword:000493e0


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...