Вопрос или проблема
У меня есть сеть с сервером на Linux (Ubuntu 22.04), коммутатором (MikroTik CRS328-24P-4S+RM) и несколькими камерами, подключенными по Ethernet. Я хотел увеличить MTU на всех системах, чтобы передавать Jumbo-фреймы, чтобы снизить нагрузку на ЦП сервера при получении HD-потоков от множества камер.
Но теперь я заметил, что даже при настройках MTU по умолчанию (т.е. 1500 байт) камеры, похоже, уже отправляют Jumbo-фреймы!
Подробности:
- на сервере
ip l
показывает для сетевого интерфейса:2: eno2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
; т.е. MTU 1500. - на коммутаторе в веб-интерфейсе управления я проверил MTU для интерфейса к серверу и для интерфейсов к камерам; они установлены на MTU = 1500 и L2 MTU = 1592.
- для камер я не совсем знаю, как проверить MTU (они для меня что-то вроде черного ящика).
Затем я проверил размер передаваемых пакетов:
-
на сервере я посмотрел на пакеты с помощью tcpdump.
tcpdump -i eno2 -s 100 -e | less
показывает пакеты, подобные этому:
16:25:06.315612 <MAC удалён> (oui Unknown) > <MAC удалён> (oui Unknown), ethertype IPv4 (0x0800), length 9014: camera1.3957 > server.46179: UDP, length 8972
.
Таким образом, похоже, что Ethernet-пакеты имеют размер 9014 байт. -
Я также отключил “offloading” на сервере с помощью
ethtool --offload eno2 rx off tx off
(как описано на https://wiki.wireshark.org/CaptureSetup/Offloading). -
на коммутаторе я вижу, что интерфейс к камере имеет скорость RX ~500 Мбит/с и скорость пакетов RX ~7000 пакетов/с. Это получается
((500/8)*1024*1024)/7000
= ~9362 байт/пакет.
Вопрос:
- допустил ли я какие-либо ошибки в своем анализе, приведенном выше?
- возможно ли для сетевых устройств отправлять UDP-пакеты, значительно превышающие настроенный MTU промежуточных устройств?
Приложение:
Результаты ethtool --show-offload eno2
:
Features for eno2:
rx-checksumming: off
tx-checksumming: off
tx-checksum-ipv4: off [fixed]
tx-checksum-ip-generic: off
tx-checksum-ipv6: off [fixed]
tx-checksum-fcoe-crc: off [fixed]
tx-checksum-sctp: off [fixed]
scatter-gather: on
tx-scatter-gather: on
tx-scatter-gather-fraglist: off [fixed]
tcp-segmentation-offload: off
tx-tcp-segmentation: off [requested on]
tx-tcp-ecn-segmentation: off [fixed]
tx-tcp-mangleid-segmentation: off
tx-tcp6-segmentation: off [requested on]
generic-segmentation-offload: on
generic-receive-offload: on
large-receive-offload: off
rx-vlan-offload: on
tx-vlan-offload: on
ntuple-filters: on
receive-hashing: on
highdma: off [fixed]
rx-vlan-filter: on
vlan-challenged: off [fixed]
tx-lockless: off [fixed]
netns-local: off [fixed]
tx-gso-robust: off [fixed]
tx-fcoe-segmentation: off [fixed]
tx-gre-segmentation: off [fixed]
tx-gre-csum-segmentation: off [fixed]
tx-ipxip4-segmentation: off [fixed]
tx-ipxip6-segmentation: off [fixed]
tx-udp_tnl-segmentation: off [fixed]
tx-udp_tnl-csum-segmentation: off [fixed]
tx-gso-partial: on
tx-tunnel-remcsum-segmentation: off [fixed]
tx-sctp-segmentation: off [fixed]
tx-esp-segmentation: off [fixed]
tx-udp-segmentation: on
tx-gso-list: off [fixed]
fcoe-mtu: off [fixed]
tx-nocache-copy: off
loopback: off [fixed]
rx-fcs: off [fixed]
rx-all: off [fixed]
tx-vlan-stag-hw-insert: off [fixed]
rx-vlan-stag-hw-parse: off [fixed]
rx-vlan-stag-filter: off [fixed]
l2-fwd-offload: off [fixed]
hw-tc-offload: on
esp-hw-offload: off [fixed]
esp-tx-csum-hw-offload: off [fixed]
rx-udp_tunnel-port-offload: off [fixed]
tls-hw-tx-offload: off [fixed]
tls-hw-rx-offload: off [fixed]
rx-gro-hw: off [fixed]
tls-hw-record: off [fixed]
rx-gro-list: off
macsec-hw-offload: off [fixed]
rx-udp-gro-forwarding: off
hsr-tag-ins-offload: off [fixed]
hsr-tag-rm-offload: off [fixed]
hsr-fwd-offload: off [fixed]
hsr-dup-offload: off [fixed]
Ответ или решение
Ответ на вопрос о передаче Jumbo Frames в сетевом окружении
Введение
В вашем сетевом окружении, состоящем из сервера на базе Linux (Ubuntu 22.04), коммутатора MikroTik CRS328-24P-4S+RM и IP-камер, наблюдается явление, при котором Jumbo Frames передаются даже при установленных стандартных настройках MTU (Maximum Transmission Unit), равных 1500 байт. В данной статье мы постараемся разобраться в причинах данного явления и ответить на ваши вопросы.
Ошибки в анализе
На первый взгляд, ваш анализ ситуаций достаточно подробный и хорошо структурированный. Тем не менее, есть несколько моментов, которые следует уточнить:
-
Отсутствие конфигурации MTU на камерах: Вы правильно отмечаете, что камеры являются «черным ящиком», и хотя MTU на сервере и коммутаторе составляет 1500, возможно, что сами камеры настроены на более высокий MTU. Многие сетевые устройства, включая IP-камеры, могут автоматически использовать Jumbo Frames, если это поддерживается их внутренней архитектурой.
-
Данные, полученные через TCPDUMP: Ваша команда
tcpdump
показывает пакеты длиной 9014 байт — это очевидный признак того, что Jumbo Frames действительно используются. Однако важно помнить о том, что, если MTU на сервере и коммутаторе настроено на 1500 байт, большие пакеты могут быть фрагментированы на уровне IP. -
Выводы на уровне коммутатора: Кроме того, ваши расчеты по RX-скорости и RX-частоте тоже поддерживают возможность использования Jumbo Frames. Если ваш коммутаторы и камеры настроены на превышение стандартного MTU, это также может объяснять наблюдаемую ситуацию.
Возможность передачи UDP-пакетов больше, чем установленный MTU
Ваш вопрос о возможности передачи UDP-пакетов размером больше, чем установленный MTU на промежуточных устройствах имеет несколько аспектов:
-
Фрагментация пакетов: Если устройство отправляет пакет, превышающий установленный MTU, пакеты могут быть фрагментированы на уровне IP (то есть на сетевом слое). Это означает, что пакеты будут разбиваться на более мелкие, соответствующие установленному MTU для их безопасной передачи. После достижения конечного узла, такие фрагменты будут собраны обратно в исходный пакет. Однако, в результате фрагментации увеличить нагрузку на процессор, так как придется обрабатывать большее количество меньших пакетов.
-
Jumbo Frames: Если любой элемент вашей сети (коммутатор, сервер или камера) поддерживает Jumbo Frames и конфигурирован так, что позволяет более крупные пакеты, они могут быть переданы без фрагментации, что и снижает нагрузку на процессор при обработке больших объемов сетевого трафика.
Заключение
Ваши наблюдения соответствуют действительности, и, судя по предоставленным данным, возможно, что некоторые устройства вашего сетевого окружения фактически могут использовать Jumbo Frames, несмотря на то, что стандартный MTU установлен на 1500. Я рекомендую проверить документацию камер и протестировать их конфигурацию на предмет MTU. Также полезно будет изучить настройки вашего коммутатора для подтверждения поддержки Jumbo Frames.
Эти шаги помогут вам лучше понять, насколько эффективно ваше сетевое оборудование и какая конфигурация будет наилучшей для достижения желаемой производительности в обработке HD стримов от камер.