Я недавно читал о прекращении TCP-соединения в доброй старой Википедии [1], и в упомянутой статье упоминалась возможность полуоткрытого состояния [2]. По сути, машина, которая инициирует закрытие TCP-соединения, «должна» продолжить чтение данных, пока не завершится и другая сторона. Это делается на каждой стороне с помощью сегмента / пакета TCP, для которого установлен флаг FIN.
Меня беспокоит это слово "следует". У меня есть два вопроса проверки работоспособности:
Во-первых, как часто это, ДЕЙСТВИТЕЛЬНО? Мне кажется, что, вообще говоря, клиент или запросчик ресурсов должен был бы инициировать разрыв соединения TCP, и они будут делать это после получения всего, что им нужно. При нормальных обстоятельствах не должно быть никаких пакетов, проходящих по проводам, когда соединение TCP завершено, верно?
На связанном примечании, это утверждение, что терминатор соединения "должен" продолжать принимать данныеСильное требование или больше руководства? Как упоминалось выше, с моей точки зрения, соединение может преждевременно закрыться, если что-то пойдет не так, и в этом случае, вероятно, будет невозможно продолжить чтение данных. На мой взгляд, это была бы лазейка в безопасности для продолжения обработки данных. Я мог бы выполнить DDOS-атаку уровня 4, открыв множество TCP-соединений с мошенническими клиентами и отправляя непрерывные спам-данные, даже не отправляя пакет FIN.
[1] https://en.wikipedia.org/wiki/Transmission_Control_Protocol#Connection_termination [2] https://en.wikipedia.org/wiki/TCP_half-open