Какая машина на самом деле закрывает TCP-сокет и почему?

Какая машина на самом деле закрывает TCP-сокет и почему?

Я работаю над приложением C#, обрабатывающим TCP-сокеты.

У меня есть серверное приложение (Геркулес) на удаленной машине, пытаясь сохранить сокет открытым.
У меня есть приложение на моей машине, подписывающееся на этот открытый сокет.

я используюTCPViewer от Microsoftчтобы следить за происходящим.

Через несколько минут я вижу, что сокет переходит из установленного состояния в состояние ожидания, а затем соединение с сокетом разрывается.

Я искал в окне просмотра событий обоих компьютеров событие с идентификатором 4227 во всех общих расположениях (Журналы Windows/Приложение, /Безопасность, /Настройка, /Система и /Пересланные события), но ничего не нашел.

Что мне нужно сделать, чтобы узнать, какая машина на самом деле закрывает TCP-сокет и почему?

решение1

Что мне нужно сделать, чтобы узнать, какая машина на самом деле закрывает TCP-сокет?

Для того, чтобы узнать, какая сторона закрывает соединение, необходимо сделать захват пакетов. Смотретьhttps://wiki.wireshark.org/TCP-4-times-close.mdкак выглядит закрытие соединения в Wireshark. Сторона, которая отправляет начальный FIN, является той, которая закрыла соединение.

... и почему?

Это невозможно сказать, просто взглянув на трафик. Соединение может быть закрыто, потому что протокол прикладного уровня ожидает или позволяет это сделать. Оно может быть закрыто из-за сбоя клиента или сервера. Оно может быть закрыто стороной из-за нарушения протокола, т. е. если другая сторона ведет себя не так, как ожидалось... Поэтому, чтобы выяснить причину, вам нужно понять протокол приложения, просмотреть файлы журналов, проверить, запущены ли процессы и т. д.

Связанный контент