Sunday, Feb 05th

Last update12:13:00 PM GMT

Вы находитесь на: FreeBSD Сетевые протоколы Кеш SYN

Кеш SYN

Одной из проблем в предыдущих реализациях TCP было то, что для программ злоумышленников имелась возможность затопить систему пакетами SYN, препятствуя выполнению полезной работы по обслуживанию любых настоящих соединений. Эта разновидность атак отказа в обслуживании стала обычной в ходе коммерциализации Интернета в конце 1990-х гг.

Чтобы бороться с этой атакой, был введен кеш синхронизации (syncache), чтобы эффективно сохранять и, возможно, удалять пакеты SYN, которые не приводят к установлению действительных соединений. Кеш синхронизации управляет трехсторонним рукопожатием между локальным сервером и соединяющимся узлом.

 

Когда для сокета, находящегося в состоянии LISTEN, получен пакет SYN, модуль TCP пытается добавить для пакета новый элемент кеша синхронизации, используя процедуру syncache_add(). Если в полученном пакете есть какие-нибудь данные, они в это время не подтверждаются. Подтверждение данных использовало бы системные ресурсы, и атакующий мог бы израсходовать эти ресурсы, затопив систему пакетами SYN, содержащими данные. Если этот SYN раньше не встречался, в хеш-таблице создается новый элемент, основанный на внешнем адресе пакета, внешнем порте, локальном порте сокета и маске. Модуль кеша синхронизации отвечает на SYN посредством SYN/ACK и устанавливает таймер на новый элемент.

Если кеш синхронизации содержит элемент, подходящий полученному пакету, подразумевается, что первоначальный SYN/ACK не был получен инициировавшим соединение узлом, и отправляется другой SYN/ACK, а таймер кеша синхронизации устанавливается снова. Ограничение на число пакетов SYN, которые могут быть отправлены соединяющимся узлом, не установлено. Любое ограничение не соответствовало бы TCP RFC и могло бы мешать соединениям через сети с потерями.


Похожие:
Еще по теме:
Советуем прочитать:

Сейчас 18 гостей онлайн