Установить MTU в C программно

Клиент запросил, чтобы ограничение MTU было 1492.

Есть ли способ сделать это в исходном коде (программа на C)?

Есть ли другой способ сделать это вообще? (IFCONFIG?)

Почему кто-то должен изменить MTU до определенного предела? В чем выгода? И самое главное: изменяя MTU, есть ли риск сломать код?

3 ответа

Решение

Дело не в скорости напрямую; Увеличивая MTU, вы уменьшаете накладные расходы, то есть данные, которые отвечают за правильную доставку пакета, но не могут быть использованы конечным пользователем; Это может иметь увеличение скорости, но только для интенсивного движения;

Кроме того, если вы увеличиваете MTU, вы склонны увеличивать количество отбрасываемых пакетов (поскольку у вас есть фиксированная вероятность ошибок по битам и больше битов в пакете), что в конечном итоге приводит к снижению производительности при повторном отправлении пакетов и т. Д. Таким образом, это компромисс между издержками и целостностью данных;

Я предполагаю, что это скорее конфигурация интерфейса, чем то, что вы контролируете с помощью программы; Поэтому лучше придерживаться команды 'ifconfig' или найти эквивалентное решение для Windows.

Программным способом с использованием C:

int sock = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
struct ifreq ifr;
strcpy(ifr.ifr_name, "eth0");
if(!ioctl(sock, SIOCGIFMTU, &ifr)) {
  ifr.ifr_mtu // Contains current mtu value
}
ifr.ifr_mtu = ... // Change value if it needed
if(!ioctl(sock, SIOCSIFMTU, &ifr)) {
  // Mtu changed successfully
}

Это работает по крайней мере на Ubuntu, смотрите man netdevice,

MTU - это число, которое определяет максимальную единицу передачи на пакет. Чем оно больше, тем быстрее будут отправлены ваши данные. Предполагая, что вы можете отправить nпакетов / с mразмер, если m растет, m*n тоже растет.

Я думаю, что ваш клиент хочет этот MTU из-за его сетевого оборудования (может быть, Ethernet 802.3). У некоторых аппаратов гендель самые большие рамки, чем у других.

Вы можете использовать ifconfig с опцией mtuизменить его значение: ifconfig eth0 mtu 1492,

Современный способ установки параметров интерфейса - через sysfs

sudo sh -c 'echo 1492 > /sys/class/net/tun/mtu'

C, просто откройте и напишите как файлы

Другие вопросы по тегам