Назад | Перейти на главную страницу

TCP-пакет, которого нет в журнале strace

Может кто-нибудь подсказать мне следующую ситуацию (Linux 2.6.18-348.4.1.el5):

  1. В какой-то момент tcpdump показывает пакет [FIN, ACK], отправленный с порта сервера локальному клиенту.
  2. Журнал strace не показывает активности сокета, выполняемой для этого дескриптора сокета для этого порта в этот момент (журнал strace правильно показывает остальную связь для этого клиента)
  3. Брандмауэр и SELinux остановлены
  4. Проблема на 100% воспроизводима в сложных условиях, которые требуют от сервера выполнения сетевого запроса для проверки подлинности Kerberos другого клиентского соединения.

Каковы возможные причины, по которым tcpdump может показать пакет, который отсутствует в strace? Это больше похоже на проблему с сервером, проблему с настройками TCP или проблему с брандмауэром?

касперд был прав насчет strace не показывает все потоки процесса (я почему-то был уверен, что присоединение к процессу будет отслеживать все потоки). Итак, auditd подтвердил, что это мое приложение закрывает сокет (потому что происходит какой-то таинственный "сигнал 33" и recv () не обрабатывает EINTR должным образом. Я задам другой вопрос по этому поводу).

Что-то вызывает закрытие соединения на стороне сервера. Скорее всего, это приложение на удаленном сервере отключает соединение. Возможные причины - простаивающая функция отключения на сервере, программные ошибки и т. Д.

Если удаленный сервер находится за NAT, это также может быть вызвано истечением срока действия записи NAT в устройстве, выполняющем NAT.

Ты должен бежать tcpdump на сервере и посмотрите, FIN пакет исходит от этого сервера. Если да, то вероятным виновником является приложение. Если нет, то это от брандмауэра.