USB-ключ не подключается при загрузке для разблокировки системы LUKS

Общий вопрос. Возможно, кто-то сможет ответить на ваш вопрос о стеке TCP ядра между конкретными версиями ядра.

Пара общих ответов:

Со стороны клиента

  1. В случае поступления сигнала SIGKILLядро ​​прекращает выполнение программы и, помимо прочего, закрывает открытые файловые дескрипторы процесса . Сокеты TCP обрабатываются ядром немного иначе, чем обычные файлы, поскольку их необходимо сбрасывать и проходить через процесс отключения TCP.

    Разница между немедленным «FIN, ACK» от клиента и более длительным закрытием сокета может зависеть от того, в каком состоянии было клиентское TCP-соединение, когда клиентское приложение было завершено. Но обычно ядро ​​закрывает открытые сокеты приложения.

Со стороны сервера

  1. Сервер не всегда знает, когда клиент отключается. Самый надежный способ определить, завис ли клиент, — это попытаться прочитать из сокета, который возвращает EOF.

    TCP спроектирован таким образом, чтобы быть устойчивым к задержке соединения и периодическим сбоям. Это также приводит к некоторым проблемам с надежным обнаружением разъединения в случае, если FIN, ACK4-стороннее квитирование разъединения не происходит.

Резюме

После kill -9клиента вы можете увидеть, что сервер переходит в состояние CLOSE_WAITTCP, где он ожидает Тайм-аут TCP. Это может занять некоторое время. Несмотря на то, что клиент ушел, если ядро ​​не обработало квитирование разъединения TCP, серверу придется тайм-аут.

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

1
23.05.2017, 15:40
0 ответов

Теги

Похожие вопросы