IMPORTANT: Per accedir als fitxer de subversion: http://acacha.org/svn (sense password). Poc a poc s'aniran migrant els enllaços. Encara però funciona el subversion de la farga però no se sap fins quan... (usuari: prova i la paraula de pas 123456)

Instal·lació

$ sudo apt-get install udpcast

Els fitxers instal·lats són:

$ dpkg -L udpcast
/.
/usr
/usr/bin
/usr/bin/udp-sender
/usr/bin/udp-receiver
/usr/share
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/udp-sender.1.gz
/usr/share/man/man1/udp-receiver.1.gz
/usr/share/doc
/usr/share/doc/udpcast
/usr/share/doc/udpcast/copyright
/usr/share/doc/udpcast/changelog.Debian.gz

Tunning

Tuning hints:

  • Chose the proper duplex mode: if your network has a Hub, use --half-duplex, if it has a switch, use --full-duplex. If the network is mixed (central switch, hubs around), use --half-duplex
  • If you have a switch:
  • enable "IGMP snooping".
  • If hubs are connected to your switch, disable flow control on the ports to which the hubs are connected. Disable flow control is also necessary (on all ports where udp-senders site) if IGMP snooping is not available or not working correctly.
  • Disable Broadcast Storm Control (or else the switch might consider the udpcast session as a broadcast storm, and slow it down...)
  • If too many retransmissions happen in full-duplex mode, consider lowering the slice size using the --slice-size option (default is 112).

Undulatus Asperatus Clouds Nothing is impossible

Considering these, change parameters as follows:

  • If you observe long stretches of lost packets, increase interleave
  • If you observe that transfer is slowed down by CPU saturation, decrease redundancy and stripesize proportionnally.
  • If you observe big variations in packet loss rate, increase redundancy and stripesize proportionnally.
  • If you just observe high loss, but not necessarily clustered in any special way, increase redundancy or decrease stripesize
  • Be aware that network equipment or the receiver may be dropping packets because of a bandwidth which is too high. Try limiting it using max-bitrate
  • The receiver may also be dropping packets because it cannot write the data to disk fast enough. Use hdparm to optimize disk access on the receiver. Try playing with the settings in /proc/sys/net/core/rmem_default and /proc/sys/net/core/rmem_max, i.e. setting them to a higher value.


udp-sender

Un exemple de udp-sender (cas extret d'una execució de DRBL):

$ cat /home/partimag/2009-04-29-19-img-FestaUbuntuAula5/sda1 | udp-sender --full-duplex --min-clients 5 --max-wait 300 --interface eth0 --nokbd 
--mcast-all-addr 224.0.0.1 --portbase 2232 --ttl 1
Udp-sender 2008-12-13
Using mcast address 232.168.0.8
UDP sender for (stdin) at 192.168.0.8 on eth0 
Broadcasting control to 224.0.0.1
NOTA: Si el paquet multicast ha de passar per encaminadors, aleshores cal augmentar el TTL

La màquina que executa udp-sender envia un paquet multicast a l'adreça 224.0.0.1 (totes les màquines multicast):

$ sudo tcpdump -i eth0 -n ip multicast
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
13:22:05.203830 IP 192.168.0.8.2233 > 224.0.0.1.2232: UDP, length 28
13:32:47.335759 IP 192.168.0.7.2232 > 224.0.0.1.2233: UDP, length 12
13:32:47.335838 IP 192.168.0.7.2232 > 224.0.0.1.2233: UDP, length 12
13:32:47.351201 IP 192.168.0.7 > 232.168.0.8: igmp v1 report 232.168.0.8
13:32:50.791182 IP 192.168.0.7 > 232.168.0.8: igmp v1 report 232.168.0.8
13:32:51.381170 IP 192.168.0.7 > 232.168.0.8: igmp v1 report 232.168.0.8


Recursos

Exemple amb broadcast

# cat /home/partimag/2009-04-29-19-img-FestaUbuntuAula5/sda1 | udp-sender --full-duplex --min-clients 5 --max-wait 300 --interface eth0 --nokbd 
Udp-sender 2008-12-13
Using mcast address 232.168.0.8
UDP sender for (stdin) at 192.168.0.8 on eth0 
Broadcasting control to 192.168.0.255

La màquina que executa udp-sender envia un paquet de broadcast a la xarxa:

# tcpdump -i eth0 host 192.168.0.255
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
13:16:43.150553 IP 192.168.0.8.9001 > 192.168.0.255.9000: UDP, length 

udp-receiver

Un exemple de udp-sender (cas extret d'una execució de DRBL):

$ udp-receiver $udp_receiver_extra_opt_default --nokbd --mcast-all-addr $MULTICAST_ALL_ADDR --portbase $port $TIME_TO_LIVE_OPT

És a dir

$ udp-receiver --nokbd --mcast-all-addr 224.0.0.1 --portbase 2232 --ttl 1

Recursos

Adreça multicast

Udpcast utilitza per defecte una adreça multicast que es genera a partir de la IP de l'emissor. Es treu el primer octet de la IP de l'emisor i la resta de la IP s'afegeix a 232.

Per exemple si l'emissor té la IP:

192.168.0.8

L'adreça de multicast per defecte de udpcast serà:

232.168.0.8

Ho podeu comprovar a l'executar udp-sender:

$ cat /home/partimag/2009-04-29-19-img-FestaUbuntuAula5/sda1 | udp-sender --full-duplex --min-clients 5 --max-wait 300 --interface eth0 --nokbd 
--mcast-all-addr 224.0.0.1 --portbase 2232
Udp-sender 2008-12-13
Using mcast address 232.168.0.8
UDP sender for (stdin) at 192.168.0.8 on eth0
...

Exemple

Vegem un exemple de com enviar un fitxer amb udpcast.

La màquina emissora del fitxer ha d'enviar el fitxer amb la comanda udp-sender. Per exemple, suposem que volem enviar una imatge ISO d'Ubuntu, a múltiples màquines al mateix temps. Amb multicast podem estalviar molt ample de banda i temps:

$ udp-sender --file=/home/sergi/downloads/ubuntu-8.04.1-desktop-i386.iso 
Udp-sender 2008-12-13
Using full duplex mode
Using mcast address 232.168.1.33
UDP sender for /home/sergi/downloads/ubuntu-8.04.1-desktop-i386.iso at 192.168.1.33 on eth0 
Broadcasting control to 192.168.1.255

(No cal ser superusuari per utilitzar udpcast).

Hem executat aquest exemple a una xarxa privada de classe C 192.168.1.0/24. Com podeu veure amb ipcalc:

$ ipcalc 192.168.1.0/24
Address:   192.168.1.0          11000000.10101000.00000001. 00000000
Netmask:   255.255.255.0 = 24   11111111.11111111.11111111. 00000000
Wildcard:  0.0.0.255            00000000.00000000.00000000. 11111111
=>
Network:   192.168.1.0/24       11000000.10101000.00000001. 00000000
HostMin:   192.168.1.1          11000000.10101000.00000001. 00000001
HostMax:   192.168.1.254        11000000.10101000.00000001. 11111110
Broadcast: 192.168.1.255        11000000.10101000.00000001. 11111111
Hosts/Net: 254                   Class C, Private Internet

L'adreça de broadcast és 192.168.1.255. Com podeu veure s'envia un paquet a tota la xarxa. Aquest paquet és de tipus UDP i indicat a tots els possibles clients (receptors) que s'ha iniciat els servei multicast.

Si en un client executem:

$ sudo tcpdump -n -i eth0 
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes

09:15:17.352831 IP 192.168.1.33.9001 > 192.168.1.255.9000: UDP, length 28

Veurem com l'emissor (que té la IP 192.168.1.33) ha enviat el paquet HELLO a tota xarxa. Udpcast, per defecte, utilitza els ports 9000 i 9001.

Els clients que vulguin rebre aquest fitxer, han d'executar:

$ udp-receiver --file=/tmp/test
Udp-receiver 2004-05-31
UDP receiver for /tmp/test at 192.168.1.38 on eth0
received message, cap=00000009
Connected as #0 to 192.168.1.33
Listening to multicast on 232.168.1.33
Press any key to start receiving data!

Com podeu veure amb ipcalc, l'adreça 232.168.1.33 és de multicast

$ ipcalc 232.168.1.33
Address:   232.168.1.33         11101000.10101000.00000001. 00100001
Netmask:   255.255.255.0 = 24   11111111.11111111.11111111. 00000000
Wildcard:  0.0.0.255            00000000.00000000.00000000. 11111111
=>
Network:   232.168.1.0/24       11101000.10101000.00000001. 00000000
HostMin:   232.168.1.1          11101000.10101000.00000001. 00000001
HostMax:   232.168.1.254        11101000.10101000.00000001. 11111110
Broadcast: 232.168.1.255        11101000.10101000.00000001. 11111111
Hosts/Net: 254                   Class D, Multicast

El receptor enviarà un paquet a tota la xarxa per indicar que està preparat:

$ sudo tcpdump -n -i eth0 
09:19:18.839434 IP 192.168.1.38.9000 > 192.168.1.255.9001: UDP, length 12
09:19:18.839906 IP 192.168.1.38.9000 > 192.168.1.255.9001: UDP, length 12
09:19:18.840489 IP 192.168.1.33.9001 > 192.168.1.38.9000: UDP, length 32
09:19:18.845993 IP 192.168.1.38 > 224.0.0.22: igmp v3 report, 1 group record(s)
09:19:28.161997 IP 192.168.1.38 > 224.0.0.22: igmp v3 report, 1 group record(s)

Abans de premer qualsevol tecla, s'inicien la resta de clients. Un cop tingueu tots els clients en espera, un d'ells inicia la transmissió i tots comencen a rebre paquets UDP:

09:21:50.753165 IP 192.168.1.33.9001 > 192.168.1.38.9000: UDP, length 1472
09:21:50.753171 IP 192.168.1.33.9001 > 192.168.1.38.9000: UDP, length 1472
09:21:50.753177 IP 192.168.1.33.9001 > 192.168.1.38.9000: UDP, length 1472
09:21:50.753183 IP 192.168.1.33.9001 > 192.168.1.38.9000: UDP, length 1472
09:21:50.753190 IP 192.168.1.33.9001 > 192.168.1.38.9000: UDP, length 1472

Recursos:

Fitxers de log

Es pot consultar el fitxer /var/log/messages o el fitxer /var/log/syslog:

$ tail -f /var/log/messages
May  4 09:09:30 SistemaFitxers udpcast[27925]: New connection from 192.168.0.7  (#0) 
May  4 09:09:32 SistemaFitxers udpcast[27925]: max wait[300] passed: starting
May  4 09:09:32 SistemaFitxers udpcast[27925]: Starting transfer: file[] pipe[] port[2232] if[eth0] participants[1]
May  4 09:10:50 SistemaFitxers udpcast[27925]: Transfer complete.
May  4 09:10:50 SistemaFitxers udpcast[27925]: Disconnecting #0 (192.168.0.7)


Aquest exemple correspon a les següents execucions de udp-sender i udp-receiver:

$ cat /home/partimag/2009-04-29-19-img-FestaUbuntuAula5/sda1 | udp-sender --full-duplex --min-clients 5 --max-wait 300 --interface eth0 --nokbd 
--mcast-all-addr 224.0.0.1 --portbase 2232 --ttl 1

i

$ sudo udp-receiver --file=/tmp/test --mcast-all-addr 224.0.0.1 --portbase 2232
Udp-receiver 2004-05-31
UDP receiver for /tmp/test at 192.168.0.7 on eth0
received message, cap=00000009
Connected as #0 to 192.168.0.8
Listening to multicast on 232.168.0.8
Press any key to start receiving data!
bytes=    481 472 992  ( 89.71 Mbps)    481 308 672
bytes=    851 687 443  ( 86.67 Mbps)    851 687 443

Resolució de problemes

Que cal mirar si no funciona?

Si es treballa amb un concentrador (HUB) cal indicar la opció:

--half-duplex

Si és un commutador (switch) aleshores cal utilitzar:

--full-duplex

Si la xarxa és mixta, aleshores cal utilitzar --half-duplex

Al commutador cal:

  • Que permeti "IGMP snooping"
  • Desactivar Broadcast Storm Control (sinó udpcast serà ralentitzat pel commutador )
  • Si hi han massa retransmission baixeu el valor de --slice-size option (per defecte 112).

Com descomprimir un fitxer en recepció?

Utilitzant una pipe o indicant el paràmetre:

$ udp-receiver --pipe "gzip -dc"

O

$ udp-receiver -p "gzip -dc" 

es pot utilitzar gzip o altres sistemes de compressió com lzop.

Enviar una imatge de disc

Es pot enviar tot un disc dur amb:

$ udp-sender –file /dev/sda -pipe "lzop"

O una partició amb:

$ udp-sender –file /dev/sda1 -pipe "lzop"

És millor que la partició no estigui en ús (estigui desmuntada).

Vegeu també

Udpcast és utilitzat per DRBL i clonezilla.

Enllaços externs