Я изучаю утилиту QOS Linux - TC - недавно, и сегодня я обнаружил ниже два статуса из скрипта ограничения пропускной способности в Linux:
tc filter add dev eth0 parent 1: prio 1 protocol ip u32 \
match ip tos 0x68 0xff match ip protocol 0x11 0xff flowid 1:1
tc filter add dev eth0 parent 1: prio 1 protocol ip u32 \
match ip tos 0xb8 0xff match ip protocol 0x11 0xff flowid 1:1
Что означает фраза «сопоставить ip tos 0x68 0xff, сопоставить протокол ip 0x11 0xff»?
С помощью универсального селектора u32 вы определяете шаблон для сопоставления с заголовком IP-пакета и маску для сопоставления определенных битов только при определенном смещении.
u32 match ip PATTERN MASK at OFFSET
Множественные совпадения логически «складываются», поэтому фильтр будет успешным, если все его совпадения будут успешными. Попробуем «расшифровать» ваш фильтр и его селекторы:
ip tos 0x68 0xff
Это можно прочитать как проверку, имеет ли поле TOS IP-заголовка значение 0x68 (маска равна 0xff, поэтому 0x68 И 0xff = 0x68). Я бы сказал, что это как-то связано с DSCP (подробнее о значении 0x68).
ip protocol 0x11 0xff
Это проверяет, имеет ли поле протокола значение 0x11, которое является протоколом UDP. Вы можете найти номера протоколов в /etc/protocols
(для UDP 17 = 0x11)
ip tos
и ip protocol
это так называемые специальные селекторы, но вы можете переписать их в общей форме
u8 0x68 0xff at 1
u8 0x11 0xff at 9
Селектор u8 определяет длину шаблона для сопоставления в битах (другие - u32, u16). Затем используйте ту же логику, что и выше. Соответствует значению 0x68 в байте 1 в IP-заголовке, которое является полем TOS, и значением 0x11 в байте 9, которое является полем протокола.
Наконец, я бы добавил еще один пример, как сопоставить IP-пакеты с исходным IP-адресом из конкретной сети (192.168.123.0/24):
u32 u32 0xc0a87b00 0xffffff00 at 12
Это соответствует только первым 3 байтам (0xc0 = 192, 0xa8 = 168, 0x7b = 123) поля в байте 12 из-за значения маски (0xc0 AND 0xff = 0xc0, ..., 0xXX AND 0x00 = 0x00). Это можно записать с помощью специального селектора как
ip src 192.168.123/24
Если вы можете использовать определенные селекторы, так как их легче понять. В заключение. это изображение может помочь в выборе правильных смещений, если вам нужно использовать общие.