Написать свой nginx, с собственной реализацией TCP
ru_linux — 14.06.2011 Прочитал недавно книжку, что программирование -- это очень просто и решил стать программистом. И чего-нибудь напрограммировать. Что-нибудь грандиозное. Например, высокопроизводительный веб-сервер аналогичный nginx. Только устойчивый к ddos-атакам.Есть, правда, одна проблема. По сравнению с современным протоколом UDP, протокол TCP, изобретённый десятки лет назад, очень тормозной, ненадёжный, жрёт много памяти. Но, к сожалению, до сих пор большинство пользователей использует именно TCP для доступа к веб-серверу.
Проблему можно решить, сделав собственную реализацию TCP, с блэкджеком и шлюхами. Как это сделать?
На самом деле, совершенно не хочется подходить к пингвинам слишком близко, а тем более лезть в их ядро. Поэтому желателен обходной вариант.
В идеале было бы достаточно при открытии или принятии соединения, сообщить системе, что хочу работать с открываемым сокетом напрямую, и потому прошу просто присылать все IP пакеты на этот сокет, пока я его сам не закрою. В свою очередь, системе не требуется запоминать про сокет ничего, кроме IP юзера, номера порта и хэндла сокета. Не знаю как там у пингвинов пахнет в ядре, но при 16 байтах на сокет, 64K номерах портов, и, скажем, 1000 атакующих IP, нужен всего 1 гиг, чтобы этот хаос запомнить.
Лучше бы, конечно, вычислять атакующие IP и пропускать через себя их трафик полностью, чтобы система про них вообще не помнила ничего, кроме того, что они на мне. Но тут вряд ли получится без влезания в ядро и, скорее всего, придётся работать сразу со всеми сокетами, не только со своими, и реализовывать стек полностью.
Что посоветуете? Копать куда? Да, пока тренировался с TCP/IP только на форточках.