Fórum Root.cz
Hlavní témata => Sítě => Téma založeno: elopin 20. 10. 2013, 21:35:42
-
Dobrý den,
mám problém s multicastem na svém notebooku s Ubuntu 12.04. Pokud není wifi nebo ethernet připojen k jakékoliv síti, nefunguje přeposílání multicastových paketů. Zjistil jsem to při praktickém cvičení ve třídě, při implementaci multicastové aplikace klient - server. Během cvičení vypadla školní wifi. Všem ostatním s Windows testování aplikace fungovalo na localhost, jen mě ne. Java aplikace, a později i ping, mě informovala NETWORK UNREACHABLE.
Už dva dny googlím a hledám, čím to je.
Zkoušel jsem přidat routu : sudo ip route add 224.0.0.0/4 dev eth0
ping na 224.0.0.1 sice posílá pakety, ale žádný se nevrátí, takže 100% lost
Hardware:
Dell Inspiron 1525
NIC - description: Ethernet interface
product: 88E8040 PCI-E Fast Ethernet Controller
vendor: Marvell Technology Group Ltd.
physical id: 0
bus info: pci@0000:09:00.0
logical name: eth0
version: 12
serial: 00:1d:09:43:c9:5f
capacity: 100Mbit/s
width: 64 bits
clock: 33MHz
capabilities: bus_master cap_list ethernet physical tp 10bt 10bt-fd 100bt 100bt-fd autonegotiation
configuration: autonegotiation=on broadcast=yes driver=sky2 driverversion=1.30 latency=0 link=no multicast=yes port=twisted pair
resources: irq:43 memory:fe8fc000-fe8fffff ioport:de00(size=256)
WIFI - description: Network controller
product: BCM4312 802.11b/g LP-PHY
vendor: Broadcom Corporation
physical id: 0
bus info: pci@0000:0b:00.0
version: 01
width: 64 bits
clock: 33MHz
capabilities: bus_master cap_list
configuration: driver=b43-pci-bridge latency=0
resources: irq:17 memory:fe7fc000-fe7fffff
aktivní rozhraní - eth0, wlan0, lo
Stav, kdy není zařízení v síti, kdy tedy vypadne wifi a ve třídě jsme bez sítě.
NETSTAT - G
IPv6/IPv4 Group Memberships
Interface RefCnt Group
--------------- ------ ---------------------
lo 1 224.0.0.1
eth0 1 224.0.0.1
wlan0 1 224.0.0.1
lo 1 ip6-allnodes
eth0 1 ip6-allnodes
wlan0 1 ip6-allnodes
Rozdíl vidím akorát ve výpisu netstat -g, kdy při připojené wifi (nebo eth0):
IPv6/IPv4 Group Memberships
Interface RefCnt Group
--------------- ------ ---------------------
lo 1 all-systems.mcast.net
eth0 1 all-systems.mcast.net
wlan0 1 224.0.0.251
wlan0 1 all-systems.mcast.net
lo 1 ip6-allnodes
eth0 1 ip6-allnodes
wlan0 1 ff02::fb
wlan0 1 ff02::1:ffa5:20a0
wlan0 1 ip6-allnodes
Aktivní network-manager v interfaces je tedy jen
auto lo
iface lo inet loopback
Soubor hosts jsem nijak neměnil, nikde jsem takovou radu nedostal, ale možná s tím souvisí, proto je zde:
127.0.0.1 localhost
127.0.1.1 elopbook
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
IFCONFIG při nedostupnosti sítě:
eth0 Link encap:Ethernet HWaddr 00:1d:09:43:c9:5f
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Interrupt:16
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:2162 errors:0 dropped:0 overruns:0 frame:0
TX packets:2162 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:188207 (188.2 KB) TX bytes:188207 (188.2 KB)
wlan0 Link encap:Ethernet HWaddr 00:16:44:a5:20:a0
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:37325 errors:0 dropped:0 overruns:0 frame:0
TX packets:23676 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:26397365 (26.3 MB) TX bytes:3665773 (3.6 MB)
Dále jsem podle vygooglených rad zkoušel nastavit soubor /etc/sysctl.conf, nefungovalo nic, takhle vypadá teď:
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.all.rp_filter=0
net.ipv4.ip_forward=1
net.ipv4.conf.all.accept_redirects = 0
Pokud je notebook připojen přes wifi nebo ethernet k nějaké síti, tak vše funguje normálně, netuším proč. Proč to na Windows funguje bez sítě a na Ubuntu ne?
Díky za rady,
elopin
-
2. řádka výstupu z ifconfig: v eth0 a wlan0 máš "MULTICAST", v lo tam není. Jinými slovy máš vypnutej multicast pro loopback. Ovšem neručím za to, že se tam dá zapnout :) . Zkus
ifconfig lo multicast
-
2. řádka výstupu z ifconfig: v eth0 a wlan0 máš "MULTICAST", v lo tam není. Jinými slovy máš vypnutej multicast pro loopback. Ovšem neručím za to, že se tam dá zapnout :) . Zkus ifconfig lo multicast
Zdravím,
ping 224.0.0.1 hlásí NETWORK UNREACHABLE
ping 224.0.0.1 -I lo posílá pakety, ale 100% lost
ale díky za radu,
elopin
-
Vidím, že problém je těžší, než jsem čekal. Zatím jsem si pomohl telefonem s Joiku Hot Spot, takže wifi je aktivní a ping na multicast odpovídá, ale i tak bych uvítal řešení bez telefonu, protože pro počáteční aktivaci Hot Spotu je potřeba na chvilku zapnout mobilní data.
-
echo "0" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
?
-
6.1 IP_MULTICAST_LOOP.
You have to decide, as the application writer, whether you want the data you send to be looped back to your host or not. If you plan to have more than one process or user "listening", loopback must be enabled. On the other hand, if you are sending the images your video camera is producing, you probably don't want loopback, even if you want to see yourself on the screen. In that latter case, your application will probably receive the images from a device attached to the computer and send them to the socket. As the application already "has" that data, it is improbable it wants to receive it again on the socket. Loopback is by default enabled.
Regard that optval is a pointer. You can't write:
setsockopt(socket, IPPROTO_IP, IP_MULTICAST_LOOP, 0, 1);
to disable loopback. Instead write:
u_char loop;
setsockopt(socket, IPPROTO_IP, IP_MULTICAST_LOOP, &loop, sizeof(loop));
and set loop to 1 to enable loopback or 0 to disable it.
To know whether a socket is currently looping-back or not use something like:
u_char loop;
int size;
getsockopt(socket, IPPROTO_IP, IP_MULTICAST_LOOP, &loop, &size)
-
Ted jsem to na Debianu zkusil a multicast mi na stroji s odpojenou siti funguje. Ping 224.0.0.1 nejde, ale UDP packety na 224.1.1.1 mi prichazej pote co se na tuhle skupinu pripojim.
-
echo "0" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
?
bohužel nepomohlo, už jsem zkoušel dříve
-
Ted jsem to na Debianu zkusil a multicast mi na stroji s odpojenou siti funguje. Ping 224.0.0.1 nejde, ale UDP packety na 224.1.1.1 mi prichazej pote co se na tuhle skupinu pripojim.
tak tohle mi také nejde po poslání UDP packetu se stane toto
elopin@elopbook:$ echo “hello” > /dev/udp/224.1.1.1/4005
bash: connect: Network is unreachable
bash: /dev/udp/224.1.1.1/4005: Network is unreachable
pokud je wifi aktivní, můj klient tento packet normálně zachytí
-
6.1 IP_MULTICAST_LOOP.
You have to decide, as the application writer, whether you want the data you send to be looped back to your host or not. If you plan to have more than one process or user "listening", loopback must be enabled. On the other hand, if you are sending the images your video camera is producing, you probably don't want loopback, even if you want to see yourself on the screen. In that latter case, your application will probably receive the images from a device attached to the computer and send them to the socket. As the application already "has" that data, it is improbable it wants to receive it again on the socket. Loopback is by default enabled.
Regard that optval is a pointer. You can't write:
setsockopt(socket, IPPROTO_IP, IP_MULTICAST_LOOP, 0, 1);
to disable loopback. Instead write:
u_char loop;
setsockopt(socket, IPPROTO_IP, IP_MULTICAST_LOOP, &loop, sizeof(loop));
and set loop to 1 to enable loopback or 0 to disable it.
To know whether a socket is currently looping-back or not use something like:
u_char loop;
int size;
getsockopt(socket, IPPROTO_IP, IP_MULTICAST_LOOP, &loop, &size)
tondo_ díky za radu, ale jsem víceméně linuxová lama :-), C-čko mi sice úplně cizí není, ale ještě radši chvíli počkám, zda se neobjeví nějaké řešení bez nutnosti šťourat se v kódu. Pokud ne, počkám si na dlouhý zimní večer a zkusím to. :-)
-
Spravna cesta vedie asi smerom, ktory radil Tadeas...
tu
http://lcm.googlecode.com/svn-history/r522/www/reference/lcm/multicast-setup.html
radia tieto kroky (Remember, you must always do this ... if your machine is not connected to any external network.)
sudo ifconfig lo multicast
sudo route add -net 224.0.0.0 netmask 240.0.0.0 dev lo
-
Hmm, po restartu mi to fungovat přestalo, moc nechápu, proč to předtim fungovalo. Nějaká vmwarovina asi, nebo jsem tam tu routu spíš měl z minula (taky teďko řešim multicast...). Nicméně "ifconfig lo multicast" (btw jaká je syntaxe pro tohle přes příkaz ip?), přidat routu a funguje mi to. Opět ping nefunguje (proč by taky měl mimochodem? On snad posílá IGMP join?), ale UDP packety přijdou.
-
VYŘEŠENO
Spravna cesta vedie asi smerom, ktory radil Tadeas...
tu
http://lcm.googlecode.com/svn-history/r522/www/reference/lcm/multicast-setup.html
radia tieto kroky (Remember, you must always do this ... if your machine is not connected to any external network.)
sudo ifconfig lo multicast
sudo route add -net 224.0.0.0 netmask 240.0.0.0 dev lo
Děkuju monitorovi a Tadeasovi, teď to jede, tak jak má.
Inteligentně jsem se snažil směrovat multicastovou adresu přes eth0 :-), když jsem potřeboval localhost. Opět se potvrdilo, že příčina problému často vzniká mezi klávesnicí a židlí. :-)
-
Hmm, po restartu mi to fungovat přestalo, moc nechápu, proč to předtim fungovalo. Nějaká vmwarovina asi, nebo jsem tam tu routu spíš měl z minula (taky teďko řešim multicast...). Nicméně "ifconfig lo multicast" (btw jaká je syntaxe pro tohle přes příkaz ip?), přidat routu a funguje mi to. Opět ping nefunguje (proč by taky měl mimochodem? On snad posílá IGMP join?), ale UDP packety přijdou.
Asi na oplátku moc nepomůžu, jen vím, že routy, které jsem přidal ručně po restartu zmizely. Jak jsem psal, kolegům na Windows vše fungovalo od začátku. Proto jsem také zkoušel vmware s windows guestem, ale problém se projevil i na virtuálním stroji a to při jakémkoliv nastavení síťové komunikace na rozhraních vmnetX. Z toho jsem usoudil, že virtualizovaný stroj přebírá veškeré nastavení hosta a vrátil jsem se zpět k řešení problému u hosta.
Zdravím,
elopin