Динамическая настройка сетевого стека

Чтобы изменить параметры сетевого стека, заданные по умолчанию, нужно использовать функцию sysctl() или sysctlbyname(), объявленные в заголовочном файле sysroot-*-kos/include/sys/sysctl.h из состава KasperskyOS SDK. Параметры, которые можно изменить, приведены в таблице ниже.

Настраиваемые параметры сетевого стека

Название параметра

Описание параметра

net.inet.ip.ttl

Максимальное время жизни (англ. Time To Live, TTL) отправляемых IP-пакетов. Не влияет на протокол ICMP.

net.inet.ip.mtudisc

Если имеет значение 1, то задействован режим "Path MTU Discovery" (RFC 1191), влияющий на максимальный размер TCP-сегмента (англ. Maximum Segment Size, MSS). В этом режиме значение MSS определяется ограничениями узлов сети. Если режим "Path MTU Discovery" не задействован, то значение MSS не превышает заданного параметром net.inet.tcp.mssdflt.

net.inet.tcp.mssdflt

Значение MSS (в байтах), которое применяется, если только взаимодействующая сторона не сообщила это значение при открытии TCP-соединения, или не задействован режим "Path MTU Discovery" (RFC 1191). Также это значение MSS передается взаимодействующей стороне при открытии TCP-соединения.

net.inet.tcp.minmss

Минимальное значение MSS, в байтах.

net.inet.tcp.mss_ifmtu

Если имеет значение 1, то значение MSS при открытии TCP-соединения рассчитывается, исходя из максимального размера блока передаваемых данных (англ. Maximum Transmission Unit, MTU) задействованного сетевого интерфейса. Если имеет значение 0, то значение MSS при открытии TCP-соединения рассчитывается, исходя из MTU того сетевого интерфейса, который имеет наибольшее значение этого параметра среди всех имеющихся сетевых интерфейсов (кроме loopback-интерфейса).

net.inet.tcp.keepcnt

Число повторных отправок проверочных сообщений (англ. Keep-Alive Probes, KA) без ответа, после выполнения которых TCP-соединение считается закрытым. Если имеет значение 0, то число отправок KA не ограничено.

net.inet.tcp.keepidle

Время неактивности TCP-соединения, по истечении которого начинают отправляться KA. Задается в условных единицах, которые можно перевести в секунды, разделив на значение параметра net.inet.tcp.slowhz.

net.inet.tcp.keepintvl

Время между повторными отправками KA при отсутствии ответа. Задается в условных единицах, которые можно перевести в секунды, разделив на значение параметра net.inet.tcp.slowhz.

net.inet.tcp.recvspace

Размер буфера для принимаемых по протоколу TCP данных, в байтах.

net.inet.tcp.sendspace

Размер буфера для отправляемых по протоколу TCP данных, в байтах.

net.inet.udp.recvspace

Размер буфера для принимаемых по протоколу UDP данных, в байтах.

net.inet.udp.sendspace

Размер буфера для отправляемых по протоколу UDP данных, в байтах.

Пример настройки MSS:

static const int mss_max = 1460;

static const int mss_min = 100;

static const char* mss_max_opt_name = "net.inet.tcp.mssdflt";

static const char* mss_min_opt_name = "net.inet.tcp.minmss";

int main(void)

{

...

if ((sysctlbyname(mss_max_opt_name, NULL, NULL, &mss_max, sizeof(mss_max)) != 0) ||

(sysctlbyname(mss_min_opt_name, NULL, NULL, &mss_min, sizeof(mss_min)) != 0))

{

ERROR(START, "Can't set tcp default maximum/minimum MSS value.");

return EXIT_FAILURE;

}

}

В начало