Модераторы: feodorv
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> listen и размер очереди 
:(
    Опции темы
moloto4ek
Дата 5.10.2010, 00:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 27.6.2010

Репутация: нет
Всего: нет



Здравствуйте, объясните зачем вообще эта очередь и как она влияет на производительность. listen - 2 аргумент.
Когда начинается эта самая очередь.

Как я понимаю:
Если 5 клиентов одноврмн. или почти одноврмн. шлют пакет (SYN) и в это время 6-ой пытается сделать тоже самое, сервер ему отвечает RST.  (если в аргументе стоит 5) Или все не так ?
спасибо.  Для наглядности

1 client --------SYN----------->     <------SYN, ACK-|
2 client--------SYN------------>     <-----SYN, ACK- |
3 client --------SYN------------>     <-----SYN, ACK-| SERVER
4 client--------SYN------------>      <----SYN, ACK- | 
5 client--------SYN------------>       <----SYN, ACK-|
6 client--------SYN------------>      <----RST-------- |

Правильно я понимаю, спасибо.
PM MAIL   Вверх
icecrashldr
Дата 5.10.2010, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 5.7.2010

Репутация: нет
Всего: нет




[MSDN]
    The maximum length of the queue of pending connections. If set to SOMAXCONN, the underlying service provider responsible for socket s will set the backlog to a maximum reasonable value. There is no standard provision to obtain the actual backlog value.

POSIX Linux
The behaviour of the backlog parameter on TCP sockets changed with Linux 2.2. Now it specifies the queue length for completely established sockets waiting to be accepted, instead of the number of incomplete connection requests. The maximum length of the queue for incomplete sockets can be set using the tcp_max_syn_backlog sysctl. When syncookies are enabled there is no logical maximum length and this sysctl setting is ignored. See tcp(7) for more information. 


Цитата

Здравствуйте, объясните зачем вообще эта очередь и как она влияет на производительность.

На производительность не влияет, но серсер должен успевать делать accept для клиентов.
Но следует понимать, если очередь будет бесконечной , то клиент может провоцировать сервер на выделения память что может привести в dDos -атаки. Отказ от обслуживании.
PM MAIL WWW   Вверх
moloto4ek
Дата 5.10.2010, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 27.6.2010

Репутация: нет
Всего: нет



Подскажите как это всё будет на уровне TCP.
PM MAIL   Вверх
Олег2005
Дата 5.10.2010, 23:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 421
Регистрация: 26.5.2005
Где: Рига Латвия

Репутация: 6
Всего: 11



Не все так непонятно....
int listen(int sd, int backlog);
Для истинной картины в большинстве юниксовых стеков имеется формула

backlog * 3 / 2 + 1

Те для
listen(sd, 0); будет 1

для
listen(sd, 5); будет 8

Для TCP-сервера функция listen() формирует в ядре системы два вида буферов:
·    Буфер-очередь не полностью установленных соединений (т.е. тех, для которых идет и еще полностью не завершен трехсторонний handshake);
·    Буфер-очередь полностью установленных соединений (т.е. тех, для которых трехсторонний handshake успешно завершен и сервер принимает конкретный запрос на обслуживание).
·    Сумма длин обеих очередей не может превышать значение backlog

Если же очередь переполняется - то тогда и может быть RST - или просто игнорирование - и то и другое  плохо для клиентов.
Надо ставить больше backlog - скажем 10-20
Может и больше - для мощных серверов.....

Это сообщение отредактировал(а) Олег2005 - 5.10.2010, 23:49
PM MAIL WWW MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0399 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.