2013-02-12 8 views
3

Я программирую шлюз, который является одной из функций для уничтожения соединений при обмене достаточным количеством пакетов. Я хотел бы знать, как правильно формировать пакеты RST для отправки клиенту и серверу для прекращения соединения.Правильно отправить RST-пакет на TCP-клиент и сервер в качестве шлюза

Чтобы проверить это, я использую ftp-соединения/сеансы. Прямо сейчас, я вижу, что когда я отправляю пакеты RST, клиент бесконечно отвечает пакетами SYN, а сервер просто продолжает поток данных с помощью пакетов ACK. Обратите внимание: после того, как я решил уничтожить соединение, я блокирую трафик между обоими концами.

Я думаю, что может быть что-то не так с тем, как я обрабатываю свои номера SEQ и ACK. Я не смог найти ressources, чтобы объяснить, что делать с номерами SEQ и ACK при отправке RST-пакета. Прямо сейчас я устанавливаю SEQ в новое случайное число (с rand()) и устанавливаю ACK в 0 (поскольку я не использую флаг ACK). Я инвертирую адрес источника с адресом назначения и исходным портом с портом назначения, и видел, что я правильно вычисляю контрольные суммы.

Кажется, что и клиент, и сервер не принимают окончание.

+0

Я не знаю, почему это считается «неконструктивным». Это вопрос о факте. – EJP

ответ

2

Я не знаю, какие «ресурсы» вы используете, но это, похоже, полностью подпадает под «Сбросить генерацию» в разделе 3.4 RFC 793. RST имеет порядковый номер нуль, а поле ACK установлено на входящее поле ACK плюс длина и т. д., как описано здесь несколько раз.

+0

Спасибо, я новичок в сети и собираю кусочки знаний из googling, но теперь я знаю, чтобы перейти в RFC для своих сетевых потребностей! –

+0

Однако, я думаю, что повторная отправка SYN - это просто прикладной уровень ftp, который пытается восстановить соединение, так как я прерываю его в середине передачи файла. –