Документация по ОС FreeBSD Четверг, 16.05.2024, 08:48
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
Apache [58]
DNS [25]
FTP [27]
Mail [74]
Samba [24]
Squid [46]
SSH [23]
VPN [35]
РРР [20]
Net [173]

Главная » Статьи » Сеть » Net

Что показывает netstat -Lan
Во FreeBSD команда netstat -Lan показывает размеры очередей на слушающих портах. До версии 4.1-STABLE эта команда выводит примерно следующее:

Current listen queue sizes (qlen/incqlen/maxqlen)
Listen Local Address
40/38/3000 *.80
0/0/5 *.22

В этом примере максимальный размер очереди на 80-ом порту — 3000 соединений. Это размер задаётся параметром backlog в вызове listen(2) и не может быть больше, чем задано в sysctl kern.ipc.somaxconn. На самом деле, максимальный размер всегда больше указанного в полтора раза, то есть, в данном случае это 4500 соединений. В очереди присутствует 40 соединений, из которых только два готовы для accept(2), а остальные 38 находятся в состоянии установления соединения (например, получен SYN от клиента).

Во FreeBSD 4.1-STABLE появились accept-фильтры и это отразилось на выводе netstat -Lan. Если слушающий порт использует accept-фильтр, то установленное соединение, не прошедшее фильтр, остаётся в очереди как неготовое. Если к предыдущим 40 соединениям в нашем примере добавить 50 соединений, не прошедших фильтр, то netstat -Lan покажет следующее:

Current listen queue sizes (qlen/incqlen/maxqlen)
Listen Local Address
90/89/3000 *.80
0/0/5 *.22

Обратите внимание, что из двух готовых соединения из первого примера фильтр прошло только одно. Вы спросите, где же находятся 50 не прошедших фильтр соединений в первом примере ? Ответ — они уже приняты сервером, часть из них может быть уже даже давно закрыта. Дело в том, что в современных accept-фильтрах (dataready и httpready) не предусмотрены никакие таймауты и соединение может находиться в очереди несколько часов, пока не будет удалено по истечении keepalive-таймаута в TCP (если он включён).

Во FreeBSD 4.4-STABLE появились syncache и syncookie, и в очереди остались только установленные соединения. Если accept-фильтр не используется, то наш пример выглядит так:

Current listen queue sizes (qlen/incqlen/maxqlen)
Listen Local Address
2/0/3000 *.80
0/0/5 *.22

а с использованием accept-фильтра — вот так:
Current listen queue sizes (qlen/incqlen/maxqlen)
Listen Local Address
1/51/3000 *.80
0/0/5 *.22

Таким образом, в современных версиях FreeBSD qlen показывает число соединений, готовых для accept(), а incqlen — число принятых, но не прошедших фильтр, соединений.

(C) Игорь Сысоев
Категория: Net | Добавил: oleg (19.11.2007)
Просмотров: 958 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Beastie

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
links

Copyright MyCorp © 2024