Конференция "Сети" » UDPv4-бродкаст на 127.0.0.1
 
  • ProgRAMmer Dimonych © (13.08.12 16:39) [0]
    Есть несколько процессов, слушающих датаграммы на некотором порту (SO_REUSEADDR). Обычно датаграмм приходят из сети. Принято решение о расширении протокола: введён новый тип датаграмм, совместимый со старым, но отправляемый всегда только с локального узла "самому себе".

    Если при отправке новых датаграмм в качестве адреса назначения указан 127.0.0.1 или один из IP-адресов локального узла, - на локальном узле ни один из процессов датаграмму не получает. Если бродкастить на 255.255.255.255 - датаграммы приходят всем процессам (как и должно быть), но уходят также и в сеть (чего быть не должно).

    Вопрос: есть ли возможность заставить WinSock отправлять копию датаграммы всем процессам на localhost? Или придётся фильтровать входящие датаграммы по отправителю?
  • brother © (13.08.12 17:43) [1]
    > но уходят также и в сеть (чего быть не должно).

    я чего то не знаю? можно ссылочку для ознакомления?
  • ProgRAMmer Dimonych © (13.08.12 18:56) [2]
    > [1] brother ©   (13.08.12 17:43)
    > > но уходят также и в сеть (чего быть не должно).
    > я чего то не знаю? можно ссылочку для ознакомления?

    Не-не-не, не должно быть по задумке протокола. Т.е. это та причина, по которой такой вариант решения не устраивает и требует допиливания.
  • brother © (13.08.12 19:48) [3]
    а понял...
  • Anatoly Podgoretsky © (13.08.12 19:55) [4]
    На какой адрес посылаешь?
    И приведи ipconfig /all
  • ProgRAMmer Dimonych © (13.08.12 20:36) [5]
    > [4] Anatoly Podgoretsky ©   (13.08.12 19:55)


    Настройка протокола IP для Windows

      Имя компьютера  . . . . . . . . . : SURNAME-N
      Основной DNS-суффикс  . . . . . . : company-name.local
      Тип узла. . . . . . . . . . . . . : Гибридный
      IP-маршрутизация включена . . . . : Нет
      WINS-прокси включен . . . . . . . : Нет
      Порядок просмотра суффиксов DNS . : company-name.local

    Ethernet adapter Подключение по локальной сети:

      DNS-суффикс подключения . . . . . : company-name.local
      Описание. . . . . . . . . . . . . : Realtek PCIe GBE Family Controller
      Физический адрес. . . . . . . . . : 00-1D-7D-A9-28-17
      DHCP включен. . . . . . . . . . . : Да
      Автонастройка включена. . . . . . : Да
      Локальный IPv6-адрес канала . . . : fe80::319f:d7ed:7a78:d4fa%10(Основной)
      IPv4-адрес. . . . . . . . . . . . : 192.168.0.97(Основной)
      Маска подсети . . . . . . . . . . : 255.255.255.0
      Аренда получена. . . . . . . . . . : 9 августа 2012 г. 7:30:23
      Срок аренды истекает. . . . . . . . . . : 17 августа 2012 г. 14:10:50
      Основной шлюз. . . . . . . . . : 192.168.0.3
      DHCP-сервер. . . . . . . . . . . : 192.168.0.1
      IAID DHCPv6 . . . . . . . . . . . : 234888573
      DUID клиента DHCPv6 . . . . . . . : 00-01-00-01-14-F7-B3-B9-00-1D-7D-A9-28-17

      DNS-серверы. . . . . . . . . . . : 192.168.0.1
                                          192.168.0.2
      Основной WINS-сервер. . . . . . . : 192.168.0.1
      Дополнительный WINS-сервер. . . . . . : 192.168.0.2
      NetBios через TCP/IP. . . . . . . . : Включен

    Ethernet adapter VMware Network Adapter VMnet1:

      DNS-суффикс подключения . . . . . :
      Описание. . . . . . . . . . . . . : VMware Virtual Ethernet Adapter for VMnet1
      Физический адрес. . . . . . . . . : 00-50-56-C0-00-01
      DHCP включен. . . . . . . . . . . : Нет
      Автонастройка включена. . . . . . : Да
      Локальный IPv6-адрес канала . . . : fe80::b96a:4b78:662b:997b%15(Основной)
      IPv4-адрес. . . . . . . . . . . . : 10.0.0.1(Основной)
      Маска подсети . . . . . . . . . . : 255.255.255.0
      Основной шлюз. . . . . . . . . :
      IAID DHCPv6 . . . . . . . . . . . : 402673750
      DUID клиента DHCPv6 . . . . . . . : 00-01-00-01-14-F7-B3-B9-00-1D-7D-A9-28-17

      DNS-серверы. . . . . . . . . . . : fec0:0:0:ffff::1%1
                                          fec0:0:0:ffff::2%1
                                          fec0:0:0:ffff::3%1
      NetBios через TCP/IP. . . . . . . . : Включен

    Туннельный адаптер isatap.company-name.local:

      Состояние среды. . . . . . . . : Среда передачи недоступна.
      DNS-суффикс подключения . . . . . : company-name.local
      Описание. . . . . . . . . . . . . : Адаптер Microsoft ISATAP
      Физический адрес. . . . . . . . . : 00-00-00-00-00-00-00-E0
      DHCP включен. . . . . . . . . . . : Нет
      Автонастройка включена. . . . . . : Да

    Туннельный адаптер isatap.{0BB0C601-1549-4080-B437-FDBEDCAB650A}:

      Состояние среды. . . . . . . . : Среда передачи недоступна.
      DNS-суффикс подключения . . . . . :
      Описание. . . . . . . . . . . . . : Адаптер Microsoft ISATAP #2
      Физический адрес. . . . . . . . . : 00-00-00-00-00-00-00-E0
      DHCP включен. . . . . . . . . . . : Нет
      Автонастройка включена. . . . . . : Да



    Поведение такое:

    1. Посылаю на 255.255.255.255 - датараммы приходят ко всем процессам на локальном компьютере плюс уходят в сеть.
    2. Посылаю на 192.168.0.97 - датаграммы приходят только к одному процессу на локальном компьютере и в сеть, разумеется, не идут.
    3. Посылаю на 127.0.0.1 - sendto() возвращает ошибку 10049, что логично.
  • Anatoly Podgoretsky © (13.08.12 21:37) [6]
    > ProgRAMmer Dimonych  (13.08.2012 20:36:05)  [5]

    Я вообще то хотел route print, но ошибся.
    Но и так ясно, ты посылаешь бродкаст не тому адресу, у сети 127.0.0.x он
    совсем другой, вероятнее всего 127.255.255.255
  • ProgRAMmer Dimonych © (13.08.12 21:46) [7]
    > [6] Anatoly Podgoretsky ©   (13.08.12 21:37)
    > > ProgRAMmer Dimonych  (13.08.2012 20:36:05)  [5]
    > Я вообще то хотел route print, но ошибся.
    > Но и так ясно, ты посылаешь бродкаст не тому адресу, у сети
    > 127.0.0.x он
    > совсем другой, вероятнее всего 127.255.255.255

    10049. Есть подозрение, что loopback-адреса WinSock не считает подходящими для broadcast'ов.
  • Сергей М. © (14.08.12 10:31) [8]

    > loopback-адреса WinSock не считает подходящими для broadcast'ов


    Они ничем не хуже других адресов.
    Просто в таблице маршрутов нет подходящего маршрута для 127.255.255.255.
    Зато есть "неподходящие" для 255.255.255.255, потому и уходят бродкасты в другие сети.
  • brother © (14.08.12 10:32) [9]
    а кому их там посылать?)
  • Сергей М. © (14.08.12 10:39) [10]

    > brother ©   (14.08.12 10:32) [9]


    Ну как кому ?
    Вестимо - интерфейсам в подсети 127.0.0.0/8
  • ProgRAMmer Dimonych © (14.08.12 11:38) [11]
    > [8] Сергей М. ©   (14.08.12 10:31)
    > > loopback-адреса WinSock не считает подходящими для broadcast'ов
    > Они ничем не хуже других адресов.
    > Просто в таблице маршрутов нет подходящего маршрута для
    > 127.255.255.255.
    > Зато есть "неподходящие" для 255.255.255.255, потому и уходят
    > бродкасты в другие сети.

    Правильно ли я понимаю, что без дополнительной настройки со стороны администратора сети отправить датаграмму только процессам на localhost не удастся?
  • Anatoly Podgoretsky © (14.08.12 11:59) [12]
    > ProgRAMmer Dimonych  (14.08.2012 11:38:11)  [11]

    Приведи route print и скажи, ты попробовал 127.255.255.255 - это типовой
    бродкаст адрес для данной сети?
  • Сергей М. © (14.08.12 12:02) [13]

    > ProgRAMmer Dimonych ©   (14.08.12 11:38) [11]


    Разумеется процессу, модифицирующему таблицу маршрутов, требуются административные привелегии
  • ProgRAMmer Dimonych © (14.08.12 12:27) [14]
    > [12] Anatoly Podgoretsky ©   (14.08.12 11:59)
    > > ProgRAMmer Dimonych  (14.08.2012 11:38:11)  [11]
    > Приведи route print и скажи, ты попробовал 127.255.255.255
    > - это типовой
    > бродкаст адрес для данной сети?


    ========================================================================== =
    Список интерфейсов
    10...00 1d 7d a9 28 17 ......Realtek PCIe GBE Family Controller
    15...00 50 56 c0 00 01 ......VMware Virtual Ethernet Adapter for VMnet1
     1...........................Software Loopback Interface 1
    11...00 00 00 00 00 00 00 e0 Адаптер Microsoft ISATAP
    12...00 00 00 00 00 00 00 e0 Адаптер Microsoft ISATAP #2
    ===========================================================================

    IPv4 таблица маршрута
    ===========================================================================
    Активные маршруты:
    Сетевой адрес           Маска сети      Адрес шлюза       Интерфейс  Метрика
             0.0.0.0          0.0.0.0      192.168.0.3     192.168.0.97     20
            10.0.0.0    255.255.255.0         On-link          10.0.0.1    276
            10.0.0.1  255.255.255.255         On-link          10.0.0.1    276
          10.0.0.255  255.255.255.255         On-link          10.0.0.1    276
           127.0.0.0        255.0.0.0         On-link         127.0.0.1    306
           127.0.0.1  255.255.255.255         On-link         127.0.0.1    306
     127.255.255.255  255.255.255.255         On-link         127.0.0.1    306
         192.168.0.0    255.255.255.0         On-link      192.168.0.97    276
        192.168.0.97  255.255.255.255         On-link      192.168.0.97    276
       192.168.0.255  255.255.255.255         On-link      192.168.0.97    276
           224.0.0.0        240.0.0.0         On-link         127.0.0.1    306
           224.0.0.0        240.0.0.0         On-link      192.168.0.97    276
           224.0.0.0        240.0.0.0         On-link          10.0.0.1    276
     255.255.255.255  255.255.255.255         On-link         127.0.0.1    306
     255.255.255.255  255.255.255.255         On-link      192.168.0.97    276
     255.255.255.255  255.255.255.255         On-link          10.0.0.1    276
    ===========================================================================
    Постоянные маршруты:
     Отсутствует

    IPv6 таблица маршрута
    ===========================================================================
    Активные маршруты:
    Метрика   Сетевой адрес            Шлюз
     1    306 ::1/128                  On-link
    10    276 fe80::/64                On-link
    15    276 fe80::/64                On-link
    10    276 fe80::319f:d7ed:7a78:d4fa/128
                                       On-link
    15    276 fe80::b96a:4b78:662b:997b/128
                                       On-link
     1    306 ff00::/8                 On-link
    10    276 ff00::/8                 On-link
    15    276 ff00::/8                 On-link
    ===========================================================================
    Постоянные маршруты:
     Отсутствует

  • ProgRAMmer Dimonych © (14.08.12 12:29) [15]
    > [12] Anatoly Podgoretsky ©   (14.08.12 11:59)

    P.S. При отправке на 127.255.255.255 - ошибка 10049, как и на 127.0.0.1 (что, судя по роутам, закономерно).
  • Anatoly Podgoretsky © (14.08.12 12:31) [16]
    > ProgRAMmer Dimonych  (14.08.2012 12:27:14)  [14]

    Вот видишь маршрут до lo
    127.255.255.255  255.255.255.255         On-link         127.0.0.1    306
  • ProgRAMmer Dimonych © (14.08.12 12:36) [17]
    > [16] Anatoly Podgoretsky ©   (14.08.12 12:31)
    > > ProgRAMmer Dimonych  (14.08.2012 12:27:14)  [14]
    > Вот видишь маршрут до lo
    > 127.255.255.255  255.255.255.255         On-link        
    > 127.0.0.1    306

    Т.е. пакеты вместо 127.255.255.255 "уходят" на 127.0.0.1, правильно?

    С гугловой помощью натыкался на упоминания о том, что бродкасты на loopback-адреса не проходят (по крайней мере, в Windows). Так ли это?
  • brother © (14.08.12 12:51) [18]
    судя по: 127.255.255.255  255.255.255.255         On-link         127.0.0.1    306
    Сергей в [10] был не прав. Как я и ожидал, вся подсеть не ловит бродкаст ибо 127.0.0.1 должен быть единственным в этой подсети, имхо!
  • Anatoly Podgoretsky © (14.08.12 13:08) [19]
    > ProgRAMmer Dimonych  (14.08.2012 12:36:17)  [17]

    Правильно, именно это следует из маршрута.
    Сомневаюсь, что бродкаст не работает для loopback-адресов, не зря же они
    сделали маршрут?
  • Anatoly Podgoretsky © (14.08.12 13:09) [20]
    > brother  (14.08.2012 12:51:18)  [18]

    Этого не может быть по теории, минимум три адреса - network, broadcast и 1/2
    клиентских адреса
  • ProgRAMmer Dimonych © (14.08.12 13:25) [21]
    > [19] Anatoly Podgoretsky ©   (14.08.12 13:08)
    > > ProgRAMmer Dimonych  (14.08.2012 12:36:17)  [17]
    > Правильно, именно это следует из маршрута.
    > Сомневаюсь, что бродкаст не работает для loopback-адресов,
    > не зря же они
    > сделали маршрут?

    Логично. Но как тогда можно интерпретировать ошибку 10049 на sendto()? Меняется только IP-адрес, на 255.255.255.255 всё работает.
  • brother © (14.08.12 13:26) [22]
    > минимум три адреса - network, broadcast и 1/2

    чуть погорячился, но

    > Сомневаюсь, что бродкаст не работает для loopback-адресов

    у меня как раз вызывает сомнения, ибо

    > не зря же они
    > сделали маршрут?

    вот именно, это заглушка, чтобы других отсечь!
  • brother © (14.08.12 13:29) [23]
    Дмитрий, может не стоит использовать лупбэк интерфейс, и попробовать заморочиться с виртуальным? я так понимаю, это надо, для того, чтобы процессы смогли общаться меж собой и только?
  • brother © (14.08.12 13:31) [24]
    один интерфейс может иметь айпи нескольких разных подсетей...
  • ProgRAMmer Dimonych © (14.08.12 13:46) [25]
    > [23] brother ©   (14.08.12 13:29)
    > Дмитрий, может не стоит использовать лупбэк интерфейс, и
    > попробовать заморочиться с виртуальным? я так понимаю, это
    > надо, для того, чтобы процессы смогли общаться меж собой
    > и только?

    Да, в принципе, только для этого. Можно подробнее про идею с виртуальным интерфейсом? Ссылки по теме, если таковые будут, приветствуются.
  • Anatoly Podgoretsky © (14.08.12 13:57) [26]
    > ProgRAMmer Dimonych  (14.08.2012 13:46:25)  [25]

    Поиск говорит это

    Question/Problem: WSAEADDRNOTAVAIL (10049) Cannot assign requested address.

    Answer/Solution:  Normally results from an attempt to create a socket with
    an address not on this machine.

    WinSock description:  The "address" it refers to is the remote socket name
    (protocol, port and address). This error occurs when the sin_port value is
    zero in a sockaddr_in structure for connect or sendto.

    This error also occurs when you are trying to name the local socket (assign
    local address and port number) with bind, but Windows Sockets doesn't
    ascribe this error to bind, for some unknown reason.
  • brother © (14.08.12 14:20) [27]
    я имел ввиду задать в настройках TCP/IP второй IP-адрес (из якобы другой подсети)
  • Anatoly Podgoretsky © (14.08.12 14:40) [28]
    И не надо ставить вторую плату. К тому же поток не пойдет в сетью
  • ProgRAMmer Dimonych © (14.08.12 14:48) [29]
    > [26] Anatoly Podgoretsky ©   (14.08.12 13:57)

    Отсюда можно предположить, что эта ошибка связана только с номером порта, но не с адресом. Между тем, ошибка проявляется при изменении только IP-адреса, передаваемого sendto(). Откуда и вопрос о совместимости бродкаста и loopback'а. Вот, кстати, похожая история:

    http://stackoverflow.com/questions/2143531/problem-recieving-udp-packets-send-to-127-0-0-1-when-using-so-reuseaddr
  • ProgRAMmer Dimonych © (14.08.12 14:49) [30]
    > [27] brother ©   (14.08.12 14:20)
    > я имел ввиду задать в настройках TCP/IP второй IP-адрес
    > (из якобы другой подсети)

    Менять настройки пользователя - моветон :(
  • brother © (14.08.12 14:52) [31]
    вообще - дополнять, он и не узнает ;)
  • Сергей М. © (14.08.12 15:14) [32]

    > 1. Посылаю на 255.255.255.255 - датараммы приходят ко всем
    > процессам на локальном компьютере плюс уходят в сеть.


    Не всем, а только тем которые забиндили свои сокеты хотя бы на один из [127.0.0.1, 192.168.0.97, 10.0.0.1], судя по конфигу и маршрутам.

    А уходят в сеть потому что метрика у бродкаст-маршрута для лупбеков больше чем метрика у остальных одноуровневых бродкаст-маршрутов. Метрика - это же приоритет, чем она меньше, тем маршрут приоритетнее
  • ProgRAMmer Dimonych © (14.08.12 15:20) [33]
    > [32] Сергей М. ©   (14.08.12 15:14)
    > > 1. Посылаю на 255.255.255.255 - датараммы приходят ко всем
    > > процессам на локальном компьютере плюс уходят в сеть.
    > Не всем, а только тем которые забиндили свои сокеты хотя
    > бы на один из [127.0.0.1, 192.168.0.97, 10.0.0.1], судя
    > по конфигу и маршрутам.
    >
    > А уходят в сеть потому что метрика у бродкаст-маршрута для
    > лупбеков больше чем метрика у остальных одноуровневых бродкаст-
    > маршрутов. Метрика - это же приоритет, чем она меньше, тем
    > маршрут приоритетнее

    Суть в том, что любой желающий получит. А желающих - на каждом компе. Пока сделал отсев по адресу отправителя, но как-то некрасиво, кажется.
  • Anatoly Podgoretsky © (14.08.12 15:36) [34]
    > ProgRAMmer Dimonych  (14.08.2012 14:49:30)  [30]

    Это не настройка пользователся, а администратора, пользователь не админ не
    имеет прав на это.
  • ProgRAMmer Dimonych © (14.08.12 15:55) [35]
    > [34] Anatoly Podgoretsky ©   (14.08.12 15:36)

    Тем, соответственно, веселее.
  • Сергей М. © (14.08.12 20:46) [36]

    > любой желающий получит


    Не любой желающий, а только тот маршрут до которого фигурирует (и фактически использован) в таблице маршрутов хоста-отправителя.
 
Конференция "Сети" » UDPv4-бродкаст на 127.0.0.1
Есть новые Нет новых   [134436   +22][b:0][p:0.014]