Как использовать DPDK в UDP-связи между удаленными серверами?

Я немного поиграл с официальным dpdk , настроив среду и запустив несколько примеров приложений. Потом я узнал о UDPDK, который объединил DPDK со стеком UDP.

Я уже настроил среду для UDPDK в соответствии с документацией, а затем запустил пример приложения pktgen (как на локальной виртуальной машине, так и на общедоступном сервере). Насколько я понимаю, целью этого проекта была отправка чистых UDP-пакетов между подключенными устройствами. Я попытался отправить пакеты UDP с VM1 (используя DPRK) на VM2 (обычный) и попытался получить пакеты через обычный приемник UDP (приложение Java) и преуспел, также смог отправить с одного сервера (используя DPDK) на другой сервер ( нормально, и оба сервера подключены к одному и тому же коммутатору, как я мог бы подключиться между ними)

Редактировать : Моя следующая цель/основная цель – отправлять/получать пакеты UDP с/на 1 общедоступный сервер (используя DPDK) на другой общедоступный сервер (обычный, они не подключены и не имеют контроля над коммутатором). Затем я узнал об Open vSwitch, и мне сказали, что это может быть так, хотя я видел, что DPDK-OVS используется в основном между виртуальными машинами. Действительно ли возможно отправлять/получать UDP-пакеты с/на удаленный общедоступный сервер с помощью DPDK-OVS, и если да, то как? Заранее благодарю за любую помощь.

Как создать страницу входа в систему с помощью HTML с использованием CSS
Как создать страницу входа в систему с помощью HTML с использованием CSS
Создание страницы входа в систему является важной частью создания веб-сайта или приложения, требующего аутентификации пользователя. Простую страницу...
0
0
134
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

DPDK-OVS предоставляет порт типа DPDK vhostuser/vhostuserclient в качестве виртуального (virtio) устройства для виртуальной машины. для виртуальной машины устройство virtio в виртуальной машине такое же, как и любое другое обычное сетевое устройство, приложения UDP работают на виртуальной машине, не заботясь о том, какие базовые сетевые устройства запускает виртуальная машина, UDP получает/отправляет пакет через сетевой стек Linux. вы можете запустить другой стек пользовательского пространства на виртуальной машине, а приложения UDP запускаются поверх стека пользовательского пространства, чтобы обойти стек виртуальной машины Linux.

Спасибо за ответ. Итак, на сервере, поэтому я должен сначала запустить виртуальную машину и установить там ovs-dpdk, или мне нужно установить ovs-dpdk на сервере, а затем подключить виртуальную машину к ее порту? И тогда я могу просто запустить приложение udp в vm, которое может отправлять / получать пакеты с / на любой общедоступный сервер, который я хочу, который будет иметь скорость линии NIC sercer?

Nafiul Alam Fuji 13.12.2022 19:52
Ответ принят как подходящий

На вопрос can one send UDP packets between 2 servers which are remotely connected (not connected directly or through the switch); ответ yes, one can do the same without any external or 3rd party switching applciation

Причина:

  1. пакеты проходят через локальную сеть с использованием Ethernet и VLAN
  2. пакеты проходят через удаленную сеть с использованием MPLS, IP-адреса или туннельных протоколов.

Таким образом, пока создается действительный пакет с ethernet, vlan, IP, UDP, отправка его локально или удаленно возможна.

Как это сделать:

  1. Убедитесь, что используемый порт поддерживает VF
  2. создать экземпляр VF и привязать к DPDK
  3. используйте API DPDK, например pktmbuf_alloc, mtod, eth, IP, udp, чтобы создать нужный пакет.
  4. отправить пакет на интерфейс VF, используя tx_buffer или tx_burst.
  5. Пока правильный MAC-адрес, VLAN и/или MPLS являются правильными, внешняя маршрутизация позаботится.

Если пакеты проходят через туннелирование через NAT, ip-in-ip или GRE|Geneve, то у нас есть 2 варианта

  1. Подготовка NAT, туннелирование в DPDK и отправка через физический интерфейс
  2. отправьте пользовательский пакет из приложения DPDK с помощью TAP PMD в ядро, используя таблицы сетевых IP-маршрутов, пакеты будут перенаправлены с соответствующим туннелированием.

Вышеупомянутый второй подход заботится об обнаружении соседей и накладных расходах на туннелирование.

следовательно, использование DPDK-OVS или OVS или любого виртуального коммутатора не решает основной проблемы.

Это было много и трудно понять (позже мы планируем изучить код), и спасибо за ответ! в настоящее время я не могу позаботиться о реализации udp, поскольку dpdk-testpmd и UDPDK (библиотека, которую я использовал) уже позаботились об этом. Я просто указал адрес своего сетевого шлюза в качестве целевого MAC-адреса (eth-peer) и создал пакет с IP-адресом src/dst, который автоматически маршрутизируется в режиме txonly. Теперь предположим, что я хочу использовать testpmd только для захвата UDP-пакетов, предназначенных для него, как сделать так? и для этого я должен установить eth-peer в качестве шлюза в интерактивном режиме testpmd? Можете ли вы пролить свет на это, пожалуйста?

Nafiul Alam Fuji 19.12.2022 10:22
That was lot and hard to grasp (we have later plan to explore code) непонятно, что трудно уловить. udp implementations as dpdk-testpmd нет DPDK-testpmd просто создает фиктивный пакет. вы можете точно настроить vlan, mpls, vxlan и т. д. Но полезная нагрузка является случайной или фиксированной. Now lets say I want to use testpmd only for capturing UDP packets destined for it, how to do so DPDk test-pmd может принимать пакеты, он не захватывает и не хранит пакеты.
Vipin Varghese 19.12.2022 11:20

в настоящее время, когда я отправляю некоторые пакеты udp с другого общедоступного сервера на IP-адрес, привязанный к dpdk, и запускаю там testpmd в режиме rxonly, почему я их не получаю? Я должен видеть эти udp-пакеты в консоли, установив verbose при запуске testpmd в режиме rxonly?

Nafiul Alam Fuji 20.12.2022 04:52

@NafiulAlamFuji Я полагаю, что уже ответил на то же самое в ответе, поскольку вы используете общедоступное соединение (NAT, туннель, vlan, mpls, vxlan). в вашей нынешней работе я не вижу об этом заботы. Поэтому я рекомендовал для пути 2 использовать TAP PMD и внедрить в ядро.

Vipin Varghese 20.12.2022 05:44

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