Количество полуоткрытых tcp соединений

Автор gibat92, 11 Июня 2010, 17:37

« предыдущая тема - следующая тема »

0 Пользователей и 2 Гостей просматривают эту тему.

gibat92

Стояли такие параметры:
net.ipv4.tcp_max_syn_backlog=128
#net.ipv4.tcp_syncookies=1
Поставил такие параметры:
net.ipv4.tcp_max_syn_backlog=2048
net.ipv4.tcp_syncookies=1

Но никаких изменений не произошло...

ЦитироватьCPU: C2Q Q9550
RAM: 8192 МБ
ОС: Debian lenny

Как был онлайн на гейм сервере ~960, так и остался... Прошу помощи http://linuxforum.kz/public/style_emoticons/<#EMO_DIR#>/smile.gif\' class=\'bbc_emoticon\' alt=\':)\' />

Dexter

Цитата: gibat92 от 11 Июня 2010, 17:37Стояли такие параметры:
net.ipv4.tcp_max_syn_backlog=128
#net.ipv4.tcp_syncookies=1
Поставил такие параметры:
net.ipv4.tcp_max_syn_backlog=2048
net.ipv4.tcp_syncookies=1

Но никаких изменений не произошло...



Как был онлайн на гейм сервере ~960, так и остался... Прошу помощи http://linuxforum.kz/public/style_emoticons/<#EMO_DIR#>/smile.gif\' class=\'bbc_emoticon\' alt=\':)\' />
А потом после того, как сделали изменения, просто перезагрузились? Что на счет:
$ sysctl-p

Iskander

Я немного не поняд. Что значит онлайн 960? При большем числе соединений сервер падает? Это максимальное число игроков которых может выдержать сервер?

На вас идет DDOS атака как я понимаю?
Любовь и массовые расстрелы спасут мир.

gibat92

11 Июня 2010, 18:40 #3 Последнее редактирование: 11 Июня 2010, 18:44 от gibat92
sysctl-pЭто выполнял, сервер не перезагружал.

ЦитироватьЯ немного не поняд. Что значит онлайн 960? При большем числе соединений сервер падает? Это максимальное число игроков которых может выдержать сервер?
Стоит игровой сервер, максимум игроков онлайн ~960. Потом сервер перестает принимать последующие tcp запросы на порт 29000, до тех пор пока кто-либо не выйдет из игры. Сервер может выдержать больше игроков, т.к. его загруженность ~30-40%, но в ОС стоит  лимит на подключения, который я и пытаюсь найти http://linuxforum.kz/public/style_emoticons/<#EMO_DIR#>/smile.gif\' class=\'bbc_emoticon\' alt=\':)\' />
ддос атаки нету.

Iskander

12 Июня 2010, 13:22 #4 Последнее редактирование: 12 Июня 2010, 13:25 от Iskander
Цитата: gibat92 от 11 Июня 2010, 18:40sysctl-pЭто выполнял, сервер не перезагружал.
в /proc соответсвующие значения поменялись? Впрочем, неважно, ты меняешь совсем не то.
Цитата: gibat92 от 11 Июня 2010, 18:40Стоит игровой сервер, максимум игроков онлайн ~960. Потом сервер перестает принимать последующие tcp запросы на порт 29000, до тех пор пока кто-либо не выйдет из игры. Сервер может выдержать больше игроков, т.к. его загруженность ~30-40%, но в ОС стоит  лимит на подключения, который я и пытаюсь найти http://linuxforum.kz/public/style_emoticons/<#EMO_DIR#>/smile.gif\' class=\'bbc_emoticon\' alt=\':)\' />
ддос атаки нету.
tcp_max_syn_backlog - отвечает за максимальное число "НЕПОДТВЕРЖДЕННЫХ" соединений. Не за открытых, а за число "открывающихся" соединений.

Как работает TCP?
1. Клиент, желающий подключиться к серверу, отправляет так называемый SYN-пакет. Сервер в этот момент создает сокет (фактически выделяет под нового клиента память, управляющие структуры, создает нити и т.п. - от реализации стека зависит), и соединение переходит из состояния LISTEN в состояние SYN-RECEIVED
2. Сервер отсылает клиенту SYN и ACK пакеты.
3. клиент получает эти пакеты и отсылает серверу ACK пакет.

С этого момента соединение считается установленным, и переходит в состояние ESTABLISHED. tcp_max_syn_backlog - это максимальное число соединений в SYN-RECEIVED режиме. То есть соединения, которые были запрошены, но соединение по ним не подверждено. Почему я спросил про DDOS - потому что это один из видов DDOS атаки, и те настройки что были в первом посте - как раз для защиты от нее.
Компьютер ботсети начинает посылать серверу SYN пакеты и сразу же отключаться. Это не требует больших ресурсов от клиента - он отсылает всего один пакет, как UDP почти, а очередь сервера SYN-RECEIVED переполняется.

В твоем случае переполнено максимальное значение соединений в ESTABLISHED режиме. Тут надо увеличивать значение ip_conntrack_max - он отвечает за максимальное число соединений.
Посмотри sysctl -a | grep conntrack_max - узнаешь чему равно.

Если dmesg у тебя выдает что-то вроде "table full, dropping packet" - значит, ip_conntrack_max слишком мал и нужно увеличить это значение. Попробуй прописать
net.ipv4.netfilter.ip_conntrack_max=65535
Либо еще больше поставь. Заодно и параметры net.netfilter.nf_conntrack_max и net.nf_conntrack_max можно в такое жзе значение выделить. Тут только имей в виду - каждое соединение при запуске системы резервирует под себя 350 байт памяти. Впрочем, 65535 * 350 = 22 мегабайта, думаю для 8 гигового сервера это проблемой не будет. Если сейчас стоит такое значение - попробуй увеличить до 150 тысяч скажем.
Любовь и массовые расстрелы спасут мир.