Как я могу диагностировать наше многоадресное приложение java IP? - PullRequest
0 голосов
/ 06 декабря 2011

По какой-то причине все примеры многоадресной рассылки, которые я запускаю (на компьютере работает OpenSUSE Linux), будут работать.Все клиенты просто сидят молча.Как мне выяснить, почему многоадресная передача блокируется / игнорируется?

Некоторые примеры:

ПРИМЕР 1

http://www.roseindia.net/java/example/java/net/udp/UDPMulticastServer.java

Пример 2

http://docs.oracle.com/javase/tutorial/networking/datagrams/broadcasting.html (использует эти файлы :) http://docs.oracle.com/javase/tutorial/networking/datagrams/examples/MulticastServer.java http://docs.oracle.com/javase/tutorial/networking/datagrams/examples/MulticastServerThread.java http://docs.oracle.com/javase/tutorial/networking/datagrams/examples/MulticastClient.java http://docs.oracle.com/javase/tutorial/networking/datagrams/examples/one-liners.txt

Ответы [ 3 ]

10 голосов
/ 06 декабря 2011

При устранении неполадок многоадресной IP-рассылки можно сделать несколько общих снимков, чтобы определить, является ли это проблемой хоста, программным обеспечением или проблемой сети:

  • Шаг 1. Убедитесь, что приемник работает.отправка соединений IGMP на правильный интерфейс.Найдите трафик источника многоадресной рассылки на интерфейсе получателя.
  • Шаг 2: Убедитесь, что сервер отправляет трафик в соответствующую группу многоадресной рассылки из правильного интерфейса
  • Шаг 3: Выполните что-то вроде ping тест для IP многоадресной рассылки (с использованием инструмента socat linux)

Подробности для каждого шага описаны ниже ...

Шаг 1

Сначала убедитесь, чточто многоадресные получатели linux правильно рекламируют свои отчеты о членстве в группах;имейте в виду, что много вещей в многоадресной рассылке работают в обратном направлении от одноадресной рассылки.Например, многоадресная рассылка требует, чтобы вы отправили пакет соединения IGMP, содержащий группу многоадресной рассылки, которую вы хотите получить.

Используйте tcpdump или tshark для проверки рассматриваемого интерфейса ... В приведенном ниже примереУ меня есть машина на 192.168.12.238, которая объявляет (через igmp), что она хочет получать многоадресный трафик от 239.255.0.1

[mpenning@Finger ~]$ sudo tshark -n -V -i eth0 igmp
Running as user "root" and group "root". This could be dangerous.
Capturing on eth0
Frame 1 (54 bytes on wire, 54 bytes captured)
    Arrival Time: Dec  6, 2011 09:08:45.156782000
    ... >snip< ...
Internet Protocol, Src: 192.168.12.238 (192.168.12.238), Dst: 224.0.0.22 (224.0.0.22)
    Version: 4
    Header length: 24 bytes
    Differentiated Services Field: 0xc0 (DSCP 0x30: Class Selector 6; ECN: 0x00)
        1100 00.. = Differentiated Services Codepoint: Class Selector 6 (0x30)
        .... ..0. = ECN-Capable Transport (ECT): 0
        .... ...0 = ECN-CE: 0
    Total Length: 40
    Identification: 0x0000 (0)
    Flags: 0x02 (Don't Fragment)
        0.. = Reserved bit: Not Set
        .1. = Don't fragment: Set
        ..0 = More fragments: Not Set
    Fragment offset: 0
    Time to live: 1
    Protocol: IGMP (0x02)
    Header checksum: 0x3663 [correct]
        [Good: True]
        [Bad : False]
    Source: 192.168.12.238 (192.168.12.238)
    Destination: 224.0.0.22 (224.0.0.22)
    Options: (4 bytes)
        Router Alert: Every router examines packet
Internet Group Management Protocol
    [IGMP Version: 3]
    Type: Membership Report (0x22)
    Header checksum: 0xe9fd [correct]
    Num Group Records: 1
    Group Record : 239.255.0.1  Change To Exclude Mode
        Record Type: Change To Exclude Mode (4)
        Aux Data Len: 0
        Num Src: 0
        Multicast Address: 239.255.0.1 (239.255.0.1)

^C1 packet captured

Теперь проверьте и посмотрите, попадает ли трафик источника многоадресной рассылки на этотинтерфейс (я предполагаю, что это был eth0, ниже):

sudo tshark -n -i eth0 ip and host 239.255.0.1

Если вы видите трафик, отправленный в соответствующую группу многоадресной рассылки, то перейдите непосредственно к шагу 3;в противном случае перейдите к шагу 2.

Шаг 2

Затем убедитесь, что сервер многоадресной рассылки отправляет трафик в правильную группу.В приведенном ниже примере я запускаю команду sniff eth0 для трафика, отправляемого на 239.255.0.1.

[mpenning@hotcoffee Models]$ sudo tshark -n -i eth0 ip and host 239.255.0.1

1.466991 192.168.12.236 -> 239.255.0.1  UDP Source port: 11111  Destination port: 11111

Если источник многоадресной рассылки отправляет трафик в нужную группу здесь, на шаге 2, вы увидели IGMPгруппа присоединяется на шаге 1, а на шаге 1 не отображается трафик на интерфейсе получателя многоадресной рассылки, затем обратитесь к сетевым администраторам об этой проблеме.

Шаг 3

Предполагая, что все работает, и вы по-прежнемухотите провести кислотный тест на случай, если программное обеспечение получателя многоадресной рассылки каким-либо образом откажется от многоадресной рассылки, полученной из стека IP-адресов ... убедитесь, что на вашем компьютере установлено socat и выполните следующие действия ...

на многоадресной рассылкеотправитель (сервер), используйте эту команду для отправки тестовых многоадресных пакетов на 239.255.0.1:

perl -e '$ii=0; while (1) { print "hi number $ii\n"; $ii++; }' | socat - UDP-SENDTO:239.255.0.1:11111,sp=11111

На многоадресном получателе (клиенте) используйте эту команду для прослушивания тестовых многоадресных пакетов, отправленных на 239.255.0.1 вeth0:

socat - UDP-DATAGRAM:239.255.0.1:11111,bind=:11111,ip-add-membership=239.255.0.1:eth0

Предполагая, что сетевые администраторы разрешают многоадресную рассылку на 239.255.0.1, вы увидите много трафика, подобного этому, в многоадресной рассылке.Окно терминала получателя:

hi number 212289
hi number 212290
hi number 212291
hi number 212292
hi number 212293
hi number 212294
hi number 212295
hi number 212296
hi number 212297
hi number 212298

ПРИМЕЧАНИЕ: не попробуйте это с адресом группы многоадресной рассылки, который уже используется в вашей сети.

Шаг 4

Если шаги 1, 2 и 3 показывают, что многоадресный трафик отправляется и принимается через вашу сеть, позвоните разработчику программного обеспечения и скажите, что, по вашему мнению, существует проблема с приложением, и объясните шаги, которые у вас есть.сделано до сих пор.

Если шаги 1, 2 или 3 не работают, перенастройте ваше программное обеспечение / хосты / сеть, пока они не сработают.Предупреждение: многоадресная рассылка в IP-сетях в 3 раза сложнее для правильной реализации, чем одноадресная IP-рассылка.

Удачи вам ...

2 голосов
/ 13 февраля 2014

Как проверить многоадресность?

Когда кластеризация прерывается, это может быть связано с рядом причин. Одним из них является многоадресная передача (когда приложения подписываются на определенный IP-адрес и прослушивают сообщения). Если пользователи периодически выходят из системы, это может указывать на такую ​​проблему.

Многоадресный IP-адрес будет в диапазоне от 224.0.0.0 до 239.255.255.255. Этот пост является напоминанием мне, что нужно делать на уровне Linux:

Запустите netstat -g, чтобы получить адреса многоадресной рассылки, на которые подписан этот хост.

[root@bruatwls001 ~]$ netstat -g
IPv6/IPv4 Group Memberships
Interface       RefCnt Group
--------------- ------ ---------------------
lo              1      all-systems.mcast.net
eth0            2      239.128.4.0
eth0            1      all-systems.mcast.net

Обратите внимание, что в столбце RefCnt показано, что 2 члена относятся к группе 239.128.4.0

Пинг этого многоадресного адреса показывает, какие участники подписаны на группу (или кластер):

[root@bruatwls001 ~]$ ping 239.128.4.0
PING 239.128.4.0 (239.128.4.0) 56(84) bytes of data.
64 bytes from 10.35.8.12: icmp_seq=0 ttl=64 time=0.032 ms
64 bytes from 10.35.8.13: icmp_seq=0 ttl=64 time=0.207 ms (DUP!)
64 bytes from 10.35.8.12: icmp_seq=1 ttl=64 time=0.029 ms
64 bytes from 10.35.8.13: icmp_seq=1 ttl=64 time=0.193 ms (DUP!)
64 bytes from 10.35.8.12: icmp_seq=2 ttl=64 time=0.028 ms
64 bytes from 10.35.8.13: icmp_seq=2 ttl=64 time=0.241 ms (DUP!)

JGroups

Хороший способ проверки многоадресной рассылки - использование jgroups. См http://www.jgroups.org/manual/html/ch02.html#ItDoesntWork Загрузить jgroups-3.3.3.Final.jar

  • Запустить приемник:

[quick@laptop]$ java -cp jgroups-3.3.3.Final.jar org.jgroups.tests.McastReceiverTest -mcast_addr 231.12.21.132 -port 45566
Socket=0.0.0.0/0.0.0.0:45566, bind interface=/fe80:0:0:0:201:4aff:fe5e:5331%2
Socket=0.0.0.0/0.0.0.0:45566, bind interface=/192.168.1.5
Socket=0.0.0.0/0.0.0.0:45566, bind interface=/0:0:0:0:0:0:0:1%1
Socket=0.0.0.0/0.0.0.0:45566, bind interface=/127.0.0.1

  • Запустите отправителя и наберите что-нибудь:

 [quick@centos ~]$ java -cp jgroups-3.3.3.Final.jar org.jgroups.tests.McastSenderTest -mcast_addr 231.12.21.132 -port 45566
Socket #1=0.0.0.0/0.0.0.0:45566, ttl=32, bind interface=/fe80:0:0:0:fc54:ff:fedc:d6da%7  
Socket #2=0.0.0.0/0.0.0.0:45566, ttl=32, bind interface=/fe80:0:0:0:21d:7dff:fe03:4cf5%2  
Socket #7=0.0.0.0/0.0.0.0:45566, ttl=32, bind interface=/192.168.122.1  
Socket #8=0.0.0.0/0.0.0.0:45566, ttl=32, bind interface=/fe80:0:0:0:21d:7dff:fe03:4cf5%2  
Socket #9=0.0.0.0/0.0.0.0:45566, ttl=32, bind interface=/fe80:0:0:0:21d:7dff:fe03:4cf5%3  
Socket #10=0.0.0.0/0.0.0.0:45566, ttl=32, bind interface=/0:0:0:0:0:0:0:1%1  
Socket #11=0.0.0.0/0.0.0.0:45566, ttl=32, bind interface=/127.0.0.1  
> helloworld  
> quit

Сообщение появляется в окне получателя и отображает отправителя:

helloworld [sender=192.168.1.20:45566]  
helloworld [sender=192.168.1.20:45566]  
helloworld [sender=192.168.1.20:45566]  
helloworld [sender=192.168.1.20:45566]  
helloworld [sender=192.168.1.20:45566]  

1 голос
/ 07 декабря 2011

Был межсетевой экран, блокирующий многоадресные рассылки. Открыл порт и все работает!

...