Персональный | |
Что показывает netstat -Lan
06.06.2004
Во FreeBSD команда В этом примере максимальный размер очереди на 80-ом порту 3000 соединений. Это размер задаётся параметром backlog в вызове listen(2) и не может быть больше, чем задано в sysctl kern.ipc.somaxconn. На самом деле, максимальный размер всегда больше указанного в полтора раза, то есть, в данном случае это 4500 соединений. В очереди присутствует 40 соединений, из которых только два готовы для accept(2), а остальные 38 находятся в состоянии установления соединения (например, получен SYN от клиента).Current listen queue sizes (qlen/incqlen/maxqlen) Listen Local Address 40/38/3000 *.80 0/0/5 *.22
Во FreeBSD 4.1-STABLE появились accept-фильтры
и это отразилось на выводе Обратите внимание, что из двух готовых соединений из первого примера фильтр прошло только одно. Вы спросите, где же находятся 50 не прошедших фильтр соединений в первом примере ? Ответ они уже приняты сервером, часть из них может быть уже даже давно закрыта. Дело в том, что в современных accept-фильтрах (dataready и httpready) не предусмотрены никакие таймауты и соединение может находиться в очереди несколько часов, пока не будет удалено по истечении keepalive-таймаута в TCP (если он включён).Current listen queue sizes (qlen/incqlen/maxqlen) Listen Local Address 90/89/3000 *.80 0/0/5 *.22 Во FreeBSD 4.4-STABLE появились syncache и syncookie, и в очереди остались только установленные соединения. Если accept-фильтр не используется, то наш пример выглядит так: а с использованием accept-фильтра вот так:Current listen queue sizes (qlen/incqlen/maxqlen) Listen Local Address 2/0/3000 *.80 0/0/5 *.22 Таким образом, в современных версиях FreeBSD qlen показывает число соединений, готовых для accept(), а incqlen число принятых, но не прошедших фильтр, соединений.Current listen queue sizes (qlen/incqlen/maxqlen) Listen Local Address 1/51/3000 *.80 0/0/5 *.22 (C) Игорь Сысоев |