[FreeBSD] Альтернативний TCP-стек на прикладі RACK

Дана стаття є вільним перекладом цієї .

Якщо вас якимось чином не влаштовує стандартний стек 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

Review

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься.