Одной из проблем в предыдущих реализациях TCP было то, что для программ злоумышленников имелась возможность затопить систему пакетами SYN, препятствуя выполнению полезной работы по обслуживанию любых настоящих соединений. Эта разновидность атак отказа в обслуживании стала обычной в ходе коммерциализации Интернета в конце 1990-х гг.
Чтобы бороться с этой атакой, был введен кеш синхронизации (syncache), чтобы эффективно сохранять и, возможно, удалять пакеты SYN, которые не приводят к установлению действительных соединений. Кеш синхронизации управляет трехсторонним рукопожатием между локальным сервером и соединяющимся узлом.
Когда для сокета, находящегося в состоянии LISTEN, получен пакет SYN, модуль TCP пытается добавить для пакета новый элемент кеша синхронизации, используя процедуру syncache_add(). Если в полученном пакете есть какие-нибудь данные, они в это время не подтверждаются. Подтверждение данных использовало бы системные ресурсы, и атакующий мог бы израсходовать эти ресурсы, затопив систему пакетами SYN, содержащими данные. Если этот SYN раньше не встречался, в хеш-таблице создается новый элемент, основанный на внешнем адресе пакета, внешнем порте, локальном порте сокета и маске. Модуль кеша синхронизации отвечает на SYN посредством SYN/ACK и устанавливает таймер на новый элемент.
Если кеш синхронизации содержит элемент, подходящий полученному пакету, подразумевается, что первоначальный SYN/ACK не был получен инициировавшим соединение узлом, и отправляется другой SYN/ACK, а таймер кеша синхронизации устанавливается снова. Ограничение на число пакетов SYN, которые могут быть отправлены соединяющимся узлом, не установлено. Любое ограничение не соответствовало бы TCP RFC и могло бы мешать соединениям через сети с потерями.
- 31/01/2010 15:30 - Избежание небольших пакетов
- 30/01/2010 12:15 - Избегание синдрома незначительного окна
- 30/01/2010 12:10 - Обработка вывода TCP
- 30/01/2010 11:58 - Обработка ввода TCP
- 30/01/2010 11:55 - Отключение соединения в FreeBSD
- 24/01/2010 19:31 - MTU. Установление соединения
- 21/01/2010 09:34 - Оценка времени обращения
- 19/01/2010 14:04 - Таймеры. TCP Timer.
- 17/01/2010 12:06 - Алгоритмы TCP. Состояние соединения.
- 16/01/2010 11:38 - Отметка времени. Номер последовательности. Переменные последовательности