Ethernet Bridge

Home Forums Discussions Support Portal Ethernet Bridge

This topic contains 26 replies, has 2 voices, and was last updated by  Vadim Smirnov 6 months, 3 weeks ago.

Viewing 12 posts - 16 through 27 (of 27 total)
  • Author
    Posts
  • #9705

    Vadim Smirnov
    Moderator

    NDISAPI в сборке собрана с поддержкой UNICODE, так что, на выбор, надо или включить UNICODE для вашего приложения или пересобрать NDISAPI без UNICODE.

    И второе, для 64-битной системы стоит все-таки использовать 64-битное приложение (и соответственно 64-битную сборку DLL). Не будет потерь производительности при конверсии структур для 64-битного драйвера.

    #9749

    alexander
    Participant

    1) Не знаю почему, но если установить событие через SetHwPacketFilterEvent, то мост перестает работать или работает так медленно, что связь нестабильная (не знаю точно).
    2) Иногда сбивается режим фильтра с NDIS_PACKET_TYPE_PROMISCUOUS на значение 0, но мост все равно работает: пинг до интернета и до локальных компьютеров идет норм.

    #9750

    Vadim Smirnov
    Moderator

    1) Не знаю почему, но если установить событие через SetHwPacketFilterEvent, то мост перестает работать или работает так медленно, что связь нестабильная (не знаю точно).

    Ага, ну тут ошибка в NDISAPI закралась, хотя я же советовал не использовать WOW64… Но, есть и плюс, нашлась опечатка (IOCTL_NDISRD_SET_EVENT вместо IOCTL_NDISRD_SET_ADAPTER_HWFILTER_EVENT для WOW64). Неверный IOCTL сбрасывал событие для адаптера…

    Обновил DLL: https://1drv.ms/u/s!AqMWR3uDO7eagZU81aJhHgoGudFVbg

    #ifndef _WIN64
    	if (m_bIsWow64Process)
    	{
    		ADAPTER_EVENT_WOW64 AdapterEvent64;
    		AdapterEvent64.hAdapterHandle.QuadPart = m_Handle32to64[(unsigned)AdapterEvent.hAdapterHandle].QuadPart;
    		AdapterEvent64.hEvent.HighPart = 0;
    		AdapterEvent64.hEvent.LowPart = (ULONG_PTR)AdapterEvent.hEvent;
    
    		bIOResult = DeviceIoControl(
    			IOCTL_NDISRD_SET_EVENT,
    			&AdapterEvent64,
    			sizeof(ADAPTER_EVENT_WOW64),
    			NULL,
    			0,
    			NULL,   // Bytes Returned
    			NULL
    		);
    	}
    	else
    #endif //_WIN64
    	{
    		bIOResult = DeviceIoControl(
    			IOCTL_NDISRD_SET_ADAPTER_HWFILTER_EVENT,
    			&AdapterEvent,
    			sizeof(ADAPTER_EVENT),
    			NULL,
    			0,
    			NULL,   // Bytes Returned
    			NULL
    		);
    	}

    2) Иногда сбивается режим фильтра с NDIS_PACKET_TYPE_PROMISCUOUS на значение 0, но мост все равно работает: пинг до интернета и до локальных компьютеров идет норм.

    Ноль – это не валидный фильтр, скорей всего получить фильтр не удалось.

    #9756

    alexander
    Participant

    Здравствуйте! Есть вопрос по bandwidth при организации моста через ваш программу Ethernet Bridge. Использую такую тестовую систему из 2 компов Test.
    Тестировал скорость моста через утилиту iperf3:
    1) Сервер на адресе 192.168.хх.113, клиент забинден на адресе 192.168.хх.3
    – трафик сервер <– клиент 548-612 Мбит/сек
    – трафик сервер –> клиент 18-90 Мбит/сек
    2) Сервер на адресе 192.168.хх.3, клиент забинден на адресе 192.168.хх.113
    – трафик сервер <– клиент 471 Мбит/сек
    – трафик сервер –> клиент 462 Мбит/сек
    3) Сервер на адресе 192.168.хх.113, клиент забинден на адресе 192.168.хх.36
    – трафик сервер <– клиент 600 Мбит/сек
    – трафик сервер –> клиент 2,5 Мбит/сек
    4) Сервер на адресе 192.168.хх.36, клиент забинден на адресе 192.168.хх.113
    – трафик сервер <– клиент 2,5 Мбит/сек
    – трафик сервер –> клиент 485 Мбит/сек

    Беспокоят ситуации 3 и 4: почему скорость трафика от хх.113 до хх.36 такая низкая, всего 2,5 Мбит/сек, а в обратную сторону на 2 порядка больше? Также интересно, почему ситуации 1 и 2 не симметричные? В чем может быть причина этих феноменов?

    #9757

    alexander
    Participant

    Схема системы здесь

    #9758

    Vadim Smirnov
    Moderator

    Возможно возникает эффект циклического рероутинга, когда один и тот же пакет рероутится на одном и том же интерфейсе пока не истечет TTL. Это несложно проверить посмотрев снифером трафик на проседающем интерфейсе. Обычно для того чтобы избавиться от этого эффекта достаточно отключить IP forwarding. Стандартный инсталлятор для WinpkFilter включает IP forwarding в реестре если при установке выбран Internet Gateway. Попробуйте отключить (если включен), перезагрузиться и протестировать еще раз. Если не поможет то хотелось бы взглянуть на то что покажет сетевой сниффер.

    IPEnableRouter

    HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
    Data type Range Default value
    REG_DWORD 0 | 1 0
    Description

    Determines whether the system routes IP packets to the networks to which it is connected.
    Value Meaning
    0 The system routes IP packets.
    1 IP packets are not routed.

    #9760

    alexander
    Participant

    Переключение IPEnableRouter в 0 и последующая перезагрузка компа (на котором 2 сетех карты) не помогли. Вот дампы сниффера хх.3 и хх.36

    #9761

    alexander
    Participant

    До переключения IPEnableRouter был равен 1.

    #9762

    Vadim Smirnov
    Moderator

    В дампах я проблем не вижу, TCP сессия идет вполне успешно, значит дело скорей всего в самом приложении моста. Ethernet Bridge был написан для демонстрации, я не тестировал его производительность, но 2.5 Mbps выглядит слабовато. Поскольку на производительность может влиять множество факторов, несколько вопросов:

    1. Это полностью оригинальный Ethernet Bridge или в него добавлен какой-то еще код? Даже одна строка может иметь значение…
    2. На 64-битной системе используется 64-битная сборка Ethernet Bridge? Использование 32-битной сборки на 64 битной системе не лучшим образом сказывается на производительности.
    3. Используется Release build?
    4. Хотелось бы увидеть загрузку ядер CPU и загрузку сети по обоим хостам.
    #9764

    alexander
    Participant

    1) Оригинальная
    2) На ОС 64 бит используется 64 битная сборка Ethernet Bridge
    3) Брал с гитхаба (файл у меня называется “ethernet_bridge-master.zip”) 16.10.2017 числа.
    4) загрузка ЦП (1-3 %) и сети (0,25 %).

    #9766

    Vadim Smirnov
    Moderator

    У меня под рукой была чистая Windows 10 x64 с тестовой сборкой драйвера 3.2.10.2 (доступна по ссылке выше). Готовый бинарник ebridge.exe взял с github. Так как это laptop, то гигабитный порт всего один, в качестве второго сетевого интерфейса использовался USB Ethernet адаптер ‘ASIX AX88772B USB2.0 to Fast Ethernet’. Соответственно пропускная способность моста ограничена 100 Mbps, в остальном все аналогично:

    LAN <-1Gbps-> [192.168.1.238 | EBRIDGE | 192.168.1.247] <-100Mbps-> [192.168.1.220]

    Сервер на 192.168.1.220, клиент поочередно с 192.168.1.238 и 192.168.1.247 в прямом и обратном порядке:

    PS C:\Users\vadim\Desktop\iperf3> ./iperf3.exe -c 192.168.1.220
    Connecting to host 192.168.1.220, port 5201
    [ 4] local 192.168.1.238 port 50273 connected to 192.168.1.220 port 5201
    [ ID] Interval Transfer Bandwidth
    [ 4] 0.00-1.00 sec 11.5 MBytes 96.4 Mbits/sec
    [ 4] 1.00-2.01 sec 11.4 MBytes 94.9 Mbits/sec
    [ 4] 2.01-3.00 sec 11.2 MBytes 94.9 Mbits/sec
    [ 4] 3.00-4.01 sec 11.4 MBytes 94.8 Mbits/sec
    [ 4] 4.01-5.00 sec 11.2 MBytes 95.0 Mbits/sec
    [ 4] 5.00-6.01 sec 11.4 MBytes 94.8 Mbits/sec
    [ 4] 6.01-7.01 sec 11.4 MBytes 95.0 Mbits/sec
    [ 4] 7.01-8.00 sec 11.2 MBytes 95.0 Mbits/sec
    [ 4] 8.00-9.00 sec 11.2 MBytes 94.8 Mbits/sec
    [ 4] 9.00-10.01 sec 11.4 MBytes 94.9 Mbits/sec
    – – – – – – – – – – – – – – – – – – – – – – – – –
    [ ID] Interval Transfer Bandwidth
    [ 4] 0.00-10.01 sec 113 MBytes 95.1 Mbits/sec sender
    [ 4] 0.00-10.01 sec 113 MBytes 95.0 Mbits/sec receiver

    iperf Done.
    PS C:\Users\vadim\Desktop\iperf3> ./iperf3.exe -c 192.168.1.220 -R
    Connecting to host 192.168.1.220, port 5201
    Reverse mode, remote host 192.168.1.220 is sending
    [ 4] local 192.168.1.238 port 50276 connected to 192.168.1.220 port 5201
    [ ID] Interval Transfer Bandwidth
    [ 4] 0.00-1.00 sec 11.7 MBytes 97.9 Mbits/sec
    [ 4] 1.00-2.00 sec 11.3 MBytes 94.7 Mbits/sec
    [ 4] 2.00-3.00 sec 11.3 MBytes 94.6 Mbits/sec
    [ 4] 3.00-4.00 sec 11.3 MBytes 94.8 Mbits/sec
    [ 4] 4.00-5.00 sec 11.3 MBytes 94.7 Mbits/sec
    [ 4] 5.00-6.00 sec 11.3 MBytes 94.7 Mbits/sec
    [ 4] 6.00-7.00 sec 11.3 MBytes 94.7 Mbits/sec
    [ 4] 7.00-8.00 sec 11.3 MBytes 94.7 Mbits/sec
    [ 4] 8.00-9.00 sec 11.3 MBytes 94.7 Mbits/sec
    [ 4] 9.00-10.00 sec 11.3 MBytes 94.7 Mbits/sec
    – – – – – – – – – – – – – – – – – – – – – – – – –
    [ ID] Interval Transfer Bandwidth
    [ 4] 0.00-10.00 sec 114 MBytes 95.2 Mbits/sec sender
    [ 4] 0.00-10.00 sec 114 MBytes 95.2 Mbits/sec receiver

    iperf Done.
    PS C:\Users\vadim\Desktop\iperf3> ./iperf3.exe -c 192.168.1.220 -B 192.168.1.247
    Connecting to host 192.168.1.220, port 5201
    [ 4] local 192.168.1.247 port 50281 connected to 192.168.1.220 port 5201
    [ ID] Interval Transfer Bandwidth
    [ 4] 0.00-1.01 sec 11.6 MBytes 96.6 Mbits/sec
    [ 4] 1.01-2.00 sec 11.2 MBytes 95.0 Mbits/sec
    [ 4] 2.00-3.01 sec 11.4 MBytes 94.7 Mbits/sec
    [ 4] 3.01-4.00 sec 11.2 MBytes 95.1 Mbits/sec
    [ 4] 4.00-5.01 sec 11.4 MBytes 94.8 Mbits/sec
    [ 4] 5.01-6.00 sec 11.2 MBytes 95.0 Mbits/sec
    [ 4] 6.00-7.01 sec 11.4 MBytes 94.8 Mbits/sec
    [ 4] 7.01-8.00 sec 11.2 MBytes 94.9 Mbits/sec
    [ 4] 8.00-9.01 sec 11.4 MBytes 95.0 Mbits/sec
    [ 4] 9.01-10.00 sec 11.2 MBytes 95.0 Mbits/sec
    – – – – – – – – – – – – – – – – – – – – – – – – –
    [ ID] Interval Transfer Bandwidth
    [ 4] 0.00-10.00 sec 113 MBytes 95.1 Mbits/sec sender
    [ 4] 0.00-10.00 sec 113 MBytes 95.0 Mbits/sec receiver

    iperf Done.
    PS C:\Users\vadim\Desktop\iperf3> ./iperf3.exe -c 192.168.1.220 -B 192.168.1.247 -R
    Connecting to host 192.168.1.220, port 5201
    Reverse mode, remote host 192.168.1.220 is sending
    [ 4] local 192.168.1.247 port 50283 connected to 192.168.1.220 port 5201
    [ ID] Interval Transfer Bandwidth
    [ 4] 0.00-1.00 sec 11.7 MBytes 98.0 Mbits/sec
    [ 4] 1.00-2.00 sec 11.3 MBytes 94.7 Mbits/sec
    [ 4] 2.00-3.00 sec 11.3 MBytes 94.7 Mbits/sec
    [ 4] 3.00-4.00 sec 11.3 MBytes 94.7 Mbits/sec
    [ 4] 4.00-5.00 sec 11.3 MBytes 94.7 Mbits/sec
    [ 4] 5.00-6.00 sec 11.3 MBytes 94.7 Mbits/sec
    [ 4] 6.00-7.00 sec 11.3 MBytes 94.7 Mbits/sec
    [ 4] 7.00-8.00 sec 11.3 MBytes 94.7 Mbits/sec
    [ 4] 8.00-9.00 sec 11.3 MBytes 94.7 Mbits/sec
    [ 4] 9.00-10.00 sec 11.3 MBytes 94.6 Mbits/sec
    – – – – – – – – – – – – – – – – – – – – – – – – –
    [ ID] Interval Transfer Bandwidth
    [ 4] 0.00-10.00 sec 114 MBytes 95.2 Mbits/sec sender
    [ 4] 0.00-10.00 sec 114 MBytes 95.2 Mbits/sec receiver

    iperf Done.

    Сервер на 192.168.1.238 и 192.168.1.247, клиент поочередно на каждый из адресов сервера в прямом и обратном порядке:

    PS D:\iperf3> ./iperf3.exe -c 192.168.1.238
    Connecting to host 192.168.1.238, port 5201
    [ 4] local 192.168.1.220 port 2182 connected to 192.168.1.238 port 5201
    [ ID] Interval Transfer Bandwidth
    [ 4] 0.00-1.00 sec 11.5 MBytes 96.3 Mbits/sec
    [ 4] 1.00-2.01 sec 11.4 MBytes 94.7 Mbits/sec
    [ 4] 2.01-3.01 sec 11.2 MBytes 94.7 Mbits/sec
    [ 4] 3.01-4.00 sec 11.2 MBytes 94.7 Mbits/sec
    [ 4] 4.00-5.01 sec 11.4 MBytes 94.7 Mbits/sec
    [ 4] 5.01-6.00 sec 11.1 MBytes 94.0 Mbits/sec
    [ 4] 6.00-7.00 sec 11.4 MBytes 95.4 Mbits/sec
    [ 4] 7.00-8.01 sec 11.4 MBytes 94.7 Mbits/sec
    [ 4] 8.01-9.00 sec 11.1 MBytes 93.9 Mbits/sec
    [ 4] 9.00-10.00 sec 11.2 MBytes 94.5 Mbits/sec
    – – – – – – – – – – – – – – – – – – – – – – – – –
    [ ID] Interval Transfer Bandwidth
    [ 4] 0.00-10.00 sec 113 MBytes 94.8 Mbits/sec sender
    [ 4] 0.00-10.00 sec 113 MBytes 94.7 Mbits/sec receiver

    iperf Done.
    PS D:\iperf3> ./iperf3.exe -c 192.168.1.247
    Connecting to host 192.168.1.247, port 5201
    [ 4] local 192.168.1.220 port 2185 connected to 192.168.1.247 port 5201
    [ ID] Interval Transfer Bandwidth
    [ 4] 0.00-1.00 sec 11.5 MBytes 96.4 Mbits/sec
    [ 4] 1.00-2.01 sec 11.4 MBytes 94.6 Mbits/sec
    [ 4] 2.01-3.00 sec 11.1 MBytes 94.1 Mbits/sec
    [ 4] 3.00-4.00 sec 11.2 MBytes 94.3 Mbits/sec
    [ 4] 4.00-5.01 sec 11.5 MBytes 95.7 Mbits/sec
    [ 4] 5.01-6.01 sec 11.2 MBytes 94.7 Mbits/sec
    [ 4] 6.01-7.00 sec 11.2 MBytes 94.7 Mbits/sec
    [ 4] 7.00-8.01 sec 11.4 MBytes 94.7 Mbits/sec
    [ 4] 8.01-9.01 sec 11.1 MBytes 93.8 Mbits/sec
    [ 4] 9.01-10.00 sec 11.4 MBytes 95.6 Mbits/sec
    – – – – – – – – – – – – – – – – – – – – – – – – –
    [ ID] Interval Transfer Bandwidth
    [ 4] 0.00-10.00 sec 113 MBytes 94.9 Mbits/sec sender
    [ 4] 0.00-10.00 sec 113 MBytes 94.7 Mbits/sec receiver

    iperf Done.
    PS D:\iperf3> ./iperf3.exe -c 192.168.1.238 -R
    Connecting to host 192.168.1.238, port 5201
    Reverse mode, remote host 192.168.1.238 is sending
    [ 4] local 192.168.1.220 port 2187 connected to 192.168.1.238 port 5201
    [ ID] Interval Transfer Bandwidth
    [ 4] 0.00-1.00 sec 11.7 MBytes 98.0 Mbits/sec
    [ 4] 1.00-2.00 sec 11.3 MBytes 94.9 Mbits/sec
    [ 4] 2.00-3.00 sec 11.3 MBytes 94.9 Mbits/sec
    [ 4] 3.00-4.00 sec 11.3 MBytes 94.9 Mbits/sec
    [ 4] 4.00-5.00 sec 11.3 MBytes 94.9 Mbits/sec
    [ 4] 5.00-6.00 sec 11.3 MBytes 94.9 Mbits/sec
    [ 4] 6.00-7.00 sec 11.3 MBytes 94.9 Mbits/sec
    [ 4] 7.00-8.00 sec 11.3 MBytes 94.9 Mbits/sec
    [ 4] 8.00-9.00 sec 11.3 MBytes 94.9 Mbits/sec
    [ 4] 9.00-10.00 sec 11.3 MBytes 94.9 Mbits/sec
    – – – – – – – – – – – – – – – – – – – – – – – – –
    [ ID] Interval Transfer Bandwidth
    [ 4] 0.00-10.00 sec 114 MBytes 95.3 Mbits/sec sender
    [ 4] 0.00-10.00 sec 114 MBytes 95.3 Mbits/sec receiver

    iperf Done.
    PS D:\iperf3> ./iperf3.exe -c 192.168.1.247 -R
    Connecting to host 192.168.1.247, port 5201
    Reverse mode, remote host 192.168.1.247 is sending
    [ 4] local 192.168.1.220 port 2189 connected to 192.168.1.247 port 5201
    [ ID] Interval Transfer Bandwidth
    [ 4] 0.00-1.00 sec 11.7 MBytes 98.1 Mbits/sec
    [ 4] 1.00-2.00 sec 11.3 MBytes 94.9 Mbits/sec
    [ 4] 2.00-3.00 sec 11.3 MBytes 94.9 Mbits/sec
    [ 4] 3.00-4.00 sec 11.3 MBytes 94.9 Mbits/sec
    [ 4] 4.00-5.00 sec 11.3 MBytes 94.9 Mbits/sec
    [ 4] 5.00-6.00 sec 11.3 MBytes 94.9 Mbits/sec
    [ 4] 6.00-7.00 sec 11.3 MBytes 94.9 Mbits/sec
    [ 4] 7.00-8.00 sec 11.3 MBytes 94.9 Mbits/sec
    [ 4] 8.00-9.00 sec 11.3 MBytes 94.9 Mbits/sec
    [ 4] 9.00-10.00 sec 11.3 MBytes 94.9 Mbits/sec
    – – – – – – – – – – – – – – – – – – – – – – – – –
    [ ID] Interval Transfer Bandwidth
    [ 4] 0.00-10.00 sec 114 MBytes 95.4 Mbits/sec sender
    [ 4] 0.00-10.00 sec 114 MBytes 95.4 Mbits/sec receiver

    iperf Done.

    И еще одна конфигурация, iperf сервер на 192.168.1.220, мост только перекладывает пакеты:

    [192.168.1.25] <-1Gbps-> [192.168.1.238 | EBRIDGE | 192.168.1.247] <-100Mbps-> [192.168.1.220]

    PS D:\tools\iperf3> ./iperf3 -c 192.168.1.220
    Connecting to host 192.168.1.220, port 5201
    [ 4] local 192.168.1.25 port 18031 connected to 192.168.1.220 port 5201
    [ ID] Interval Transfer Bandwidth
    [ 4] 0.00-1.01 sec 11.6 MBytes 96.4 Mbits/sec
    [ 4] 1.01-2.00 sec 11.2 MBytes 95.1 Mbits/sec
    [ 4] 2.00-3.00 sec 11.2 MBytes 94.8 Mbits/sec
    [ 4] 3.00-4.01 sec 11.4 MBytes 94.9 Mbits/sec
    [ 4] 4.01-5.00 sec 11.2 MBytes 94.9 Mbits/sec
    [ 4] 5.00-6.01 sec 11.4 MBytes 94.9 Mbits/sec
    [ 4] 6.01-7.01 sec 11.4 MBytes 94.9 Mbits/sec
    [ 4] 7.01-8.00 sec 11.2 MBytes 95.0 Mbits/sec
    [ 4] 8.00-9.00 sec 11.2 MBytes 94.8 Mbits/sec
    [ 4] 9.00-10.00 sec 11.2 MBytes 94.4 Mbits/sec
    – – – – – – – – – – – – – – – – – – – – – – – – –
    [ ID] Interval Transfer Bandwidth
    [ 4] 0.00-10.00 sec 113 MBytes 95.0 Mbits/sec sender
    [ 4] 0.00-10.00 sec 113 MBytes 95.0 Mbits/sec receiver

    iperf Done.
    PS D:\tools\iperf3> ./iperf3 -c 192.168.1.220 -R
    Connecting to host 192.168.1.220, port 5201
    Reverse mode, remote host 192.168.1.220 is sending
    [ 4] local 192.168.1.25 port 18042 connected to 192.168.1.220 port 5201
    [ ID] Interval Transfer Bandwidth
    [ 4] 0.00-1.00 sec 11.7 MBytes 98.0 Mbits/sec
    [ 4] 1.00-2.00 sec 11.3 MBytes 94.7 Mbits/sec
    [ 4] 2.00-3.00 sec 11.3 MBytes 94.8 Mbits/sec
    [ 4] 3.00-4.00 sec 11.3 MBytes 94.7 Mbits/sec
    [ 4] 4.00-5.00 sec 11.3 MBytes 94.7 Mbits/sec
    [ 4] 5.00-6.00 sec 11.3 MBytes 94.7 Mbits/sec
    [ 4] 6.00-7.00 sec 11.3 MBytes 94.7 Mbits/sec
    [ 4] 7.00-8.00 sec 11.3 MBytes 94.6 Mbits/sec
    [ 4] 8.00-9.00 sec 11.3 MBytes 94.7 Mbits/sec
    [ 4] 9.00-10.00 sec 11.3 MBytes 94.7 Mbits/sec
    – – – – – – – – – – – – – – – – – – – – – – – – –
    [ ID] Interval Transfer Bandwidth
    [ 4] 0.00-10.00 sec 114 MBytes 95.2 Mbits/sec sender
    [ 4] 0.00-10.00 sec 114 MBytes 95.2 Mbits/sec receiver

    iperf Done.

    Во всех случая производительность одинаковая и упирается в пропускную способность Fast Ethernet адаптера.

    Похоже на то что проблема специфична для вашего стенда, сложно сказать в железе ли дело или в установленном софте, стоит попробовать собрать еще один и все перепроверить.

    #10045

    Vadim Smirnov
    Moderator

    Попробуйте свежую сборку 3.2.14. Возможно проблема с пропускной способностью имеет отношение к Receive Segment Coalescing (RSC).

Viewing 12 posts - 16 through 27 (of 27 total)

You must be logged in to reply to this topic.