Дана стаття є вільним перекладом цієї .
Якщо вас якимось чином не влаштовує стандартний стек TCP, то, починаючи з 13.0, можна використовувати свій власний. В даній статті ми розглянемо RACK-TLP TCP стек. Основна суть якого, в передачі timestamps, і при втраті пакету за рахунок цього швидше відновлюється передача даних. Тобто, даний стек буде біль ефективним в мережах з частими обривами звʼязку. У стабільних мережах, його немає сенсу застосовувати.
За замовчуванням, використовуюється стандартний TCP стек:
root@freebsd # sysctl net.inet.tcp.functions_available net.inet.tcp.functions_available: Stack D Alias PCB count freebsd * freebsd 3
Для використання RACK TCP требе зібрати нове ядро з опціями:
options RATELIMIT
options TCPHPTS
Перша опція включає високоточні мітки часу, а друга – власне RACK TCP. Для задіяння extra stack треба додати ще таке у src.conf:
WITH_EXTRA_TCP_STACKS=1
Зберемо ядро і завантажимо модуль:
# make -j 16 KERNCONF=RACK buildkernel
# make installkernel KERNCONF=RACK KODIR=/boot/kernel.rack
# reboot -k kernel.rack
# kldload /boot/kernel.rack/tcp_rack.ko
Подивимося ще раз список доступних стеків і змінимо на RACK
root@freebsd:~ # sysctl net.inet.tcp.functions_available net.inet.tcp.functions_available: Stack D Alias PCB count freebsd * freebsd 3 rack rack 0 root@freebsd # sysctl net.inet.tcp.functions_default=rack net.inet.tcp.functions_default: freebsd -> rack root@freebsd # sysctl net.inet.tcp.functions_available net.inet.tcp.functions_available: Stack D Alias PCB count freebsd freebsd 3 rack * rack 0
Щоб зафіксувати це на постійній основі, робимо так:
echo "tcp_rack_load=\"YES\"" >> /boot/loader.conf echo "net.inet.tcp.functions_default=rack" >> /etc/sysctl.conf
Також, можна керувати лімітами через ifconfig, якщо це підтримує відповідний драйвер мережевої карти (txrtlmt)