Я немного поиграл с официальным dpdk , настроив среду и запустив несколько примеров приложений. Потом я узнал о UDPDK, который объединил DPDK со стеком UDP.
Я уже настроил среду для UDPDK в соответствии с документацией, а затем запустил пример приложения pktgen (как на локальной виртуальной машине, так и на общедоступном сервере). Насколько я понимаю, целью этого проекта была отправка чистых UDP-пакетов между подключенными устройствами. Я попытался отправить пакеты UDP с VM1 (используя DPRK) на VM2 (обычный) и попытался получить пакеты через обычный приемник UDP (приложение Java) и преуспел, также смог отправить с одного сервера (используя DPDK) на другой сервер ( нормально, и оба сервера подключены к одному и тому же коммутатору, как я мог бы подключиться между ними)
Редактировать : Моя следующая цель/основная цель – отправлять/получать пакеты UDP с/на 1 общедоступный сервер (используя DPDK) на другой общедоступный сервер (обычный, они не подключены и не имеют контроля над коммутатором). Затем я узнал об Open vSwitch, и мне сказали, что это может быть так, хотя я видел, что DPDK-OVS используется в основном между виртуальными машинами. Действительно ли возможно отправлять/получать UDP-пакеты с/на удаленный общедоступный сервер с помощью DPDK-OVS, и если да, то как? Заранее благодарю за любую помощь.
DPDK-OVS предоставляет порт типа DPDK vhostuser/vhostuserclient в качестве виртуального (virtio) устройства для виртуальной машины. для виртуальной машины устройство virtio в виртуальной машине такое же, как и любое другое обычное сетевое устройство, приложения UDP работают на виртуальной машине, не заботясь о том, какие базовые сетевые устройства запускает виртуальная машина, UDP получает/отправляет пакет через сетевой стек Linux. вы можете запустить другой стек пользовательского пространства на виртуальной машине, а приложения UDP запускаются поверх стека пользовательского пространства, чтобы обойти стек виртуальной машины Linux.
На вопрос 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
Причина:
Таким образом, пока создается действительный пакет с ethernet, vlan, IP, UDP, отправка его локально или удаленно возможна.
Как это сделать:
pktmbuf_alloc, mtod, eth, IP, udp
, чтобы создать нужный пакет.Если пакеты проходят через туннелирование через NAT, ip-in-ip или GRE|Geneve, то у нас есть 2 варианта
Вышеупомянутый второй подход заботится об обнаружении соседей и накладных расходах на туннелирование.
следовательно, использование DPDK-OVS или OVS или любого виртуального коммутатора не решает основной проблемы.
Это было много и трудно понять (позже мы планируем изучить код), и спасибо за ответ! в настоящее время я не могу позаботиться о реализации udp, поскольку dpdk-testpmd и UDPDK (библиотека, которую я использовал) уже позаботились об этом. Я просто указал адрес своего сетевого шлюза в качестве целевого MAC-адреса (eth-peer) и создал пакет с IP-адресом src/dst, который автоматически маршрутизируется в режиме txonly. Теперь предположим, что я хочу использовать testpmd только для захвата UDP-пакетов, предназначенных для него, как сделать так? и для этого я должен установить eth-peer в качестве шлюза в интерактивном режиме testpmd? Можете ли вы пролить свет на это, пожалуйста?
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 может принимать пакеты, он не захватывает и не хранит пакеты.
в настоящее время, когда я отправляю некоторые пакеты udp с другого общедоступного сервера на IP-адрес, привязанный к dpdk, и запускаю там testpmd в режиме rxonly, почему я их не получаю? Я должен видеть эти udp-пакеты в консоли, установив verbose при запуске testpmd в режиме rxonly?
@NafiulAlamFuji Я полагаю, что уже ответил на то же самое в ответе, поскольку вы используете общедоступное соединение (NAT, туннель, vlan, mpls, vxlan). в вашей нынешней работе я не вижу об этом заботы. Поэтому я рекомендовал для пути 2 использовать TAP PMD и внедрить в ядро.
Спасибо за ответ. Итак, на сервере, поэтому я должен сначала запустить виртуальную машину и установить там ovs-dpdk, или мне нужно установить ovs-dpdk на сервере, а затем подключить виртуальную машину к ее порту? И тогда я могу просто запустить приложение udp в vm, которое может отправлять / получать пакеты с / на любой общедоступный сервер, который я хочу, который будет иметь скорость линии NIC sercer?