$ 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
Tuning hints:
Undulatus Asperatus Clouds Nothing is impossible
Considering these, change parameters as follows:
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
# 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
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
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 ...
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:
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
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:
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.
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).
Udpcast és utilitzat per DRBL i clonezilla.