OpenBSD: расстановка приоритетов пустых ACK

601
Laurel Wolf

Существует широко используемый пример, касающийся 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? Не утверждая, что все делают это неправильно, я просто хотел бы понять механику.

0

1 ответ на вопрос

0
denisvm

На PF, когда вы устанавливаете Keep State, вы создадите состояние для отслеживания с отслеживанием состояния, поэтому вам не нужно будет впоследствии разрешать другие пакеты, связанные с этим соединением.

Кроме того, когда вы устанавливаете очередь, она будет применяться ко всем пакетам, связанным с этим соединением, когда вы устанавливаете второй параметр очереди, она будет связывать все пакеты, которые имеют низкую задержку ToS или пакеты ACK без полезной нагрузки. очередь и не первая.