Существует широко используемый пример, касающийся PF и приоритезации пустых пакетов ACK, так что нисходящий поток асинхронных соединений не теряет производительность, если восходящий поток засорен.
Пример можно найти в разных местах, например:
http://www.benzedrine.cx/ackpri.html
pass out on $ext_if proto tcp from $ext_if to any flags S/SA \
keep state queue (q_def, q_pri)
pass in on $ext_if proto tcp from any to $ext_if flags S/SA \
keep state queue (q_def, q_pri)
Я не понимаю, почему это правило работает так:
Второй параметр очереди помещает пустые ACK в приоритетную очередь. Это я получаю. Но соответствующий флаг соответствует, только если это первый пакет в соединении. Со страницы руководства pf.conf:
Because flags S/SA is applied by default (unless no state is
specified), only the initial SYN packet of a TCP handshake will
create a state for a TCP connection.
Итак, как это влияет на пустые ACK? Не утверждая, что все делают это неправильно, я просто хотел бы понять механику.