Udpcast

Aus xinux wiki
Wechseln zu: Navigation, Suche

UDPcast ist ein Datenübertragungsprogramm, welches Dateien über Ethernet an viele Clients gleichzeitig ausliefern kann. Dazu benutzt es Ethernet multicast oder broadcast.

Installation aus den Paketquellen

UDPcast ist in den Paketquellen von Ubuntu enthalten.

root@zero:~# apt-get install udpcast

Es werden 2 Programme mitgeliefert. udp-sender: sendet einen Datenstrom über Broadcast/Multicast an das Netzwerk. udp-receiver: empfängt den Datenstrom von einem Sender.

Anwendung

Einfache Übertragung

Sender:

root@sender:~# udp-sender --interface eth0 --file ubuntu-9.04-desktop-i386.iso
Udp-sender 2004-05-31
Using mcast address 232.168.250.102
UDP sender for ubuntu-9.04-desktop-i386.iso at 192.168.250.102 on eth0 
Broadcasting control to 192.168.255.255
New connection from 192.168.241.1  (#0) 00000019
Ready. Press any key to start sending data.
Ready. Press any key to start sending data.
New connection from 192.168.250.1  (#1) 00000019
Ready. Press any key to start sending data.

Empfänger1:

root@empfaenger1:~# udp-receiver --interface eth0 --file ubuntu-9.04-desktop-i386.iso
Udp-receiver 2004-05-31
UDP receiver for ubuntu-9.04-desktop-i386.iso at 192.168.241.1 on eth0
received message, cap=00000019
Connected as #0 to 192.168.250.102
Listening to multicast on 232.168.250.102
Press any key to start receiving data!

Empfänger2:

root@empfaenger2:~# udp-receiver --interface eth0 --file ubuntu-9.04-desktop-i386.iso
Udp-receiver 2004-05-31
UDP receiver for ubuntu-9.04-desktop-i386.iso at 192.168.250.1 on eth0
received message, cap=00000019
Connected as #1 to 192.168.250.102
Listening to multicast on 232.168.250.102
Press any key to start receiving data!

Hier sieht man eine einfache Form udpcast zu verwenden. Der Sender startet udp-sender mit den Optionen --interface und --file. Die Datenübertragung läuft hier standardmäßig über Multicast. Dies hat gegenüber Broadcast den Vorteil, dass nicht alle Clients im gleichen Subnetz den Datenstring erhalten, sondern nur die, welche sich der Multicast-Gruppe des Senders angeschlossen haben. Sobald ein Empfänger udp-receiver startet, schließt er sich der Multicast-Gruppe an und lauscht auf seiner Multicast-Adresse.

Sobald alle Empfänger das Programm gestartet haben, kann der Sender oder einer der Empfänger das Signal zum Starten der Übertragung geben.

Sender:

Starting transfer: 00000019
bytes=        458 640 re-xmits=000074 ( 23.4%) slice=0060       6 332 416 -   1
Timeout notAnswered=[1] notReady=[1] nrAns=1 nrRead=1 nrPart=2 avg=4152
bytes=      2 205 840 re-xmits=000074 (  4.8%) slice=0060       8 081 408 -   1
Timeout notAnswered=[1] notReady=[1] nrAns=1 nrRead=1 nrPart=2 avg=1693
Timeout notAnswered=[1] notReady=[1] nrAns=1 nrRead=1 nrPart=2 avg=1693
bytes=      2 380 560 re-xmits=000074 (  4.5%) slice=0060       8 253 440 -   1
...
Timeout notAnswered=[1] notReady=[1] nrAns=1 nrRead=1 nrPart=2 avg=1207
bytes=      9 159 696 re-xmits=000075 (  1.1%) slice=0058       9 651 340 -   1 
Timeout notAnswered=[1] notReady=[1] nrAns=1 nrRead=1 nrPart=2 avg=1507
bytes=      9 651 340 re-xmits=000075 (  1.1%) slice=0058       9 651 340 -   1
Transfer complete.
Disconnecting #0 (192.168.250.1)
Disconnecting #1 (192.168.241.1)
root@sender:~# 

Empfänger2:

bytes=      9 651 340  ( 61.23 Mbps)      9 651 340 
Transfer complete.
root@empfaenger2:~#


Bandbreitenregulierung

Will man die Bandbreite manuell herabsetzen, kann die Option --max-bitrate n angegeben werden.

Automatischer Start

Man kann das Starten der Übertragung auch automatisch geschehen lassen. Hierfür gibt es 3 Optionen:

--min-wait n : Der Sender wartet n Sekunden, bis er mit der Übertragung beginnt.

--min-client p : Mit dieser Option wartet der Sender, bis sich p Clients angemeldet haben. Ist zusätzlich die Option --min-wait angegeben, wartet der Sender trotzdem die angegebene Anzahl an Sekunden bevor er mit der Übertragung beginnt, auch wenn schon n Sekunden vergangen sind.

--max-wait q: Diese Option wird zusammen mit --min-client angegeben. Wird die angegebene Anzahl an Sekunden überschritten und haben sich noch nicht genug Clients angemeldet, startet der Sender trotzdem mit der Übertragung.

Pipe

Man kann die Ausgabe von udp-receiver auch anstatt in eine Datei zu speichern nach stdout schicken, um sie dann in einer Pipe weiterzuverarbeiten. Hierzu gibt es die Option --pipe Kommando.

Sender:

udp-sender --interface eth0 --file firefox-3.5.tar.bz2

Empfänger:

root@empfaenger2:~# udp-receiver --interface eth0  --pipe "tar -xj"
Udp-receiver 2004-05-31
Compressed UDP receiver for (stdout) at 192.168.250.1 on eth0

Ohne die Option --file wird nun alles was übertragen wird nach stdout geschrieben. Die Pipe fängt diese Ausgabe auf und entpackt das komprimierte tar-Archiv.

Genauso kann der Sender seine Daten durch eine Pipe schicken, bevor diese mit udp-sender verschickt werden.

Sender:

root@sender:~# udp-sender --interface eth0 --pipe "tar -cj datei"

Empfänger:

root@empfaenger2:~# udp-receiver --interface eth0  --pipe "tar -xj"

Hier wird beim Sender die datei erst mittels tar verpackt. Beim Empfänger wird dieses Archiv wieder entpackt.

Full-Duplex

In Full-Duplex-Netzen (Standard in T-base-10 or 100 mit Switch und Gigabit-Ethernet) kann die Option --full-duplex angegeben werden. Dies kann zu einer Steigerung der Performance führen.

udp-sender --interface eth0 --file firefox-3.5.tar.bz2 --full-duplex

Ports

Standardmäßig werden zum Übertragen die Ports 9000 auf der Sender-Seite und 9001 auf der Empfänger-Seite benutzt. Dies kann man mit der Option --portbase portbase ändern. Damit werden die Ports portbase und portbase+1 benutzt. Portbase sollte gerade gewählt werden und muss jeweils auf der Sender und Empfängerseite gleich eingestellt sein.

Sender:

udp-sender --interface eth0 --file firefox-3.5.tar.bz2 --portbase 5000

Empfänger:

root@empfaenger2:~# udp-receiver --interface eth0 --file firefox-3.5.tar.bz2 --portbase 5000

Broadcast

Gibt man die Option --broadcast an werden die Pakete nicht über Multi- sonder über Broadcast verschickt und so an alle Teilnehmer des Netzwerks versendet. Diese Option sollte nur benutzt werden, wenn Switches oder Receiver im Netzwerk keine Multicast-Fähigkeit besitzen, denn sonst werden alle anderen Clients im Netz, die nicht die Daten empfangen wollen mit unnötigem Traffic belastet.

einstellungen wie oft ein Übertragungsversuche ohne REQACK gemacht sollte.

  • --retriesUntilDrop

Begrenzen der maximalen Übertragungsrate.

  • --max-bitrate

Feste einstellung der Multicastadresse. (wird normal dynmaisch vergeben)

  • --mcast-addr

Setz die TTL für die UDP Pakete fest wenn über einen Multicast Router übetragen.

  • --ttl