Я программирую шлюз, который является одной из функций для уничтожения соединений при обмене достаточным количеством пакетов. Я хотел бы знать, как правильно формировать пакеты RST для отправки клиенту и серверу для прекращения соединения.Правильно отправить RST-пакет на TCP-клиент и сервер в качестве шлюза
Чтобы проверить это, я использую ftp-соединения/сеансы. Прямо сейчас, я вижу, что когда я отправляю пакеты RST, клиент бесконечно отвечает пакетами SYN, а сервер просто продолжает поток данных с помощью пакетов ACK. Обратите внимание: после того, как я решил уничтожить соединение, я блокирую трафик между обоими концами.
Я думаю, что может быть что-то не так с тем, как я обрабатываю свои номера SEQ и ACK. Я не смог найти ressources, чтобы объяснить, что делать с номерами SEQ и ACK при отправке RST-пакета. Прямо сейчас я устанавливаю SEQ в новое случайное число (с rand()) и устанавливаю ACK в 0 (поскольку я не использую флаг ACK). Я инвертирую адрес источника с адресом назначения и исходным портом с портом назначения, и видел, что я правильно вычисляю контрольные суммы.
Кажется, что и клиент, и сервер не принимают окончание.
Я не знаю, почему это считается «неконструктивным». Это вопрос о факте. – EJP