OpenBSD: Priorisierung leerer ACKs

682
Laurel Wolf

Es gibt ein häufig verwendetes Beispiel für PF und die Priorisierung von leeren ACK-Paketen, so dass ein Downstream einer asynchronen Verbindung nicht an Leistung verliert, wenn der Upstream verstopft ist.

Das Beispiel kann an verschiedenen Stellen gefunden werden, zB:

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) 

Ich verstehe nicht, warum diese Regel so funktioniert:

Der zweite Warteschlangenparameter fügt leere ACKs in die Prioritätswarteschlange ein. Das bekomme ich. Die übereinstimmende Markierung stimmt jedoch nur überein, wenn es sich um das erste Paket in der Verbindung handelt. Auf der Manpage 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. 

Wie wirkt sich das also auf leere ACKs aus? Ich behaupte nicht, dass jeder es falsch macht, ich möchte nur die Mechanismen verstehen.

0

1 Antwort auf die Frage

0
denisvm

Wenn Sie auf PF setzen, wenn Sie den Keep-Status einstellen, erstellen Sie einen Status für die statusbezogene Verfolgung, sodass Sie anschließend keine weiteren Pakete für diese Verbindung zulassen müssen.

Wenn Sie die Warteschlange einstellen, wird sie auf alle Pakete angewendet, die sich auf diese Verbindung beziehen. Wenn Sie den zweiten Parameter für die Warteschlange festlegen, werden alle Pakete, für die ToS mit niedriger Verzögerung festgelegt ist, oder ACK-Pakete ohne Nutzdaten mit dem zweiten verbunden Warteschlange und nicht die erste.