Voice
over IP in Wireless Mesh Networks
Moderne Internet-Anwendungen wie VoIP und Streaming
A&V (vgl. YouTube, Skype, ShoutCast, …) stehen mit ihren Anforderungen
an das zugrunde liegende Netzwerk im starken Kontrast zu auf TCP
aufbauenden Anwendungen, die wir im 2. Praktikum gestreift haben.
Beispielsweise kann ein VoIP-Strom durchaus einen moderaten Paketverlust
(ohne Kompensation) verkraften, allerdings mindern größere
Netzwerk-Verzögerungen abrupt die Zufriedenheit der Benutzer. In diesem
Praktikum untersuchen wir, wo die Grenzen des Berlin RoofNet (als ein
konkretes WMN) im Bezug auf VoIP-Traffic liegen, und mit welchen
Ansätzen man diese Grenzen verschieben kann.
Das Praktikum soll das Verständnis von folgenden Verfahren, Methoden,
Protokollen und Werkzeugen vertiefen:
- RTP (VoIP)
- Wireless Medium Access in WMNs, IEEE 802.11 &
IEEE 802.11e
- Routing in WMNs, Dynamic Source Routing (DSR)
- Leistungsbewertung mittels Netzwerksimulatoren
auf Paket-Basis
- Router-Design mit dem Click Modular Router
- Brn.Sim, Berlin RoofNet
Voraussetzungen
- Brn.Sim incl. Brn.Gui (Trunk, in VMWare Image
schon enthalten, sonst hier)
- Berlin RoofNet (Trunk, in VMWare Image schon
enthalten, sonst
http://sartrac.informatik.hu-berlin.de/brn)
- MySQL, Java, Ant
- Python & Java IDE (Empfehlung: Eclipse oder
Netbeans)
Der Brn.Sim Netzwerksimulator
Der Brn.Sim Simulator ist eine
Weiterentwicklung von JiST/SWANS (siehe Literatur) und erweitert diesen
in den folgenden Punkten:
-
Physical Layer Model vergleichbar zu
YANS / ns-3, weitere Fading- und Shadowing-Modelle.
-
Unterstützung von IEEE 802.11abge.
-
Unterstützung von IEEE 802.15.4 (Zigbee)
aus dem Sidnet-Projekt.
-
Weitere Routing-Protokolle, bspw. die
im BRN eingesetzte Variante des DSR
-
Mobilitätsmodelle aus STRAW und SWANS++.
-
RTP Implementation vergleichbar zu
MMSim für OMNet++
-
Integration des Click Modular Routers
-
Deklarative Definition von
Simulationen mittels Builder
-
Framework zur Erfassung und
Speicherung von Messwerten
-
Framework zur automatisierten und
verteilten Ausführung von Simulationen
-
Visualisierung von Messwerten durch
die Brn.Gui
Der Simulator ist in mehrere Pakete
gegliedert, die Sie im Verzeichnis „~/Projects/brn.sim“ einsehen können.
Die Pakete „brn.distsim.*“ und „brn.gui.*“ gehören zum
Verteilungs-Framework bzw. zur Visualisierung. Die GUI ist eine Eclipse
RCP Anwendung. Eine ausführbare Instanz der GUI finden Sie unter
„~/Projects/brn.gui.“ Für uns interessant sind die Pakete „jist.swans“
und „brn.jist.*“, die den Simulator-Kern und die Erweiterungen der
Simulationsmodelle enthalten.
Starten von
Simulationen, Benutzen der GUI
Starten Sie die Brn.Gui und
vergewissern Sie sich, dass unter „Data Source“ der Eintrag „Simulation“
auftaucht, d.h. die GUI soll sich mit einer aktuell laufenden Simulation
verbinden. Die Kommunikation zwischen Simulator und GUI erfolgt über RMI.
Betätigen Sie den Button „Listen“ in der Toolbar, sodass die GUI auf
kommende Simulationen wartet. Öffnen Sie eine Shell im Verzeichnis „brn.sim/brn.jist.“
Zum Übersetzen und Starten des Simulationscodes wird das Tool „Ant“
verwendet, ggf. müssen Sie die Umgebungsvariablen ANT_HOME und JAVA_HOME
exportieren. Ein Aufruf „ant -p“ zeigt die verfügbaren Targets an.
Starten Sie die in der Datei „SimTcpTest.py“ definierte Simulation
mittels „ant run-jpy -Drun.class=res/test/SimTcpTest.py -Drun.args='--local'“.
Wechseln Sie zur GUI und warten Sie, bis die Verbindung zwischen GUI und
Simulation steht (Zu erkennen an den aktivierten Buttons „Run“ und „Stop“.
Starten Sie die Simulation mit dem Button „Run.“ Ist die Simulation
beendet, springt das Feld „Time“ von „running“ auf „end.“
Die Simulation definiert
ein WMN mit 50 Knoten und dem BRN DSR Routing-Protokoll. Zwischen den
Knoten 6 und 45 wird zum Zeitpunkt 100 ein TCP Fluss aufgesetzt.
Erkunden Sie die Messwerte. Interessant sind insbesondere die Link-Table
(„Nodes 1..25/Node 1/Links/Link Table“, Anm.: Es gibt in der Simulation
nur eine Link-Table, die von allen Knoten geteilt wird. Durch diesen
Trick entfällt die reaktive Route Discovery). Öffnen Sie die Link-Table
per Doppelklick und wählen sie unter „Diagram Services“ den Punkt
„Simulation Node Placement“, um die Knoten entsprechend ihrer Position
anzuordnen. Sie sehen jetzt die 50 Knoten mit entsprechenden ETT
Link-Metrik (in us) zum Zeitpunkt des Simulationsendes (Zur ETT Metrik
siehe Literatur; Beachten Sie, dass die Link-Table immer eine
Momentaufnahme zu einem Zeitpunkt ist!). Öffnen Sie den Forward Graph
(„Global/Forward Graph“) und positionieren Sie die Knoten wie oben. Sie
sehen den Fluss der Datenpakete durch das Netzwerk. Unter „Flow
0/Transport/troughput (avg’d)“ und „Flow 0/Transport/packet delay (avg’d)“
können Sie den Durchsatz und Delay auf Transport Layer einsehen. Das
Werkzeug TcpTrace haben wir im vorangegangenen Praktikum kennengelernt.
Unter „Flow 0/TcpTrace/Node 6/0.0.0.6…/*“ können Sie die Ausgaben von
TcpTrace finden. Die Konfiguration ist unter „Global/Config“ einsehbar.
Machen Sie sich mit der
Spezifikation der Simulation in „SimTcpTest.py“ vertraut. Es wird ein
Objekt der Klasse SimTcpTest angelegt und die Methode „run“ gerufen, die
in der (Java)-Basisklasse „AbstractDriver“ definiert ist. Die
Basisklasse stellt die Funktionalität zum Erzeugen und Ausführen von
Simulationen bereit. Durch das Argument „--local“ wird die Methode „runLocal“
in der Test-Klasse gerufen, die ein Parameter-Objekt (der Klasse „AbstractParams“)
anlegt und mittels „run“ dem Treiber zur Ausführung übergibt. Aktivieren
Sie die TimeBar auf Radio-Ebene (handlerRadioTimeBarLevel=ALL in der
Methode runLocal) und
führen Sie die Simulation erneut mit GUI aus. In der GUI erscheint
zusätzlich ein Item „Global/Radio/Packet Timebar“, dass Sie per Doppelklick
öffnen können. Es wird die zeitliche Abfolge des Paketaustauschs
sichtbar (Siehe dazu auch die zugehörige Wiki-Seite). Mit einem JMX
Klienten (jconsole, visualvm, Eclipse Plugin) können Sie auch 'live' in
einen Simulationsprozess hineinschauen.
Definitionen von
Szenarios mittels Paramtern und Buildern
Im originalen JiST/SWANS
werden Simulationen programmatisch zusammengebaut, indem einzelne
Komponenten instanziiert und verbunden werden. Alternativ dazu haben wir
im Brn.Sim eine deklarative Variante bereitgestellt, mit der Sie schon
im vorangegangenen Beispiel in Kontakt gekommen sind. Ausgangspunkt ist
der zentrale Simulationstreiber (AbstractDriver), der aus einem
Parameter-Objekt das Szenario erzeugt („run“). Das Parameter-Objekt
besteht dabei rekursiv aus weiteren Parametern, die jeweils einen fest
zugeordneten Builder besitzen. Der Builder erzeugt zum Simulationsbeginn
aus den gegebenen Parametern die Instanzen der Simulationskomponenten.
Die Parameter können per Bean XML-Serialisierung in eine textuelle
Darstellung gebracht werden, die dann beispielsweise in einer Datenbank
bis zur Ausführung konserviert werden kann (Hinweis: JavaBeans
Persistence setzt Bean-Konforme getter/setter voraus, siehe
http://openbook.galileocomputing.de/javainsel8/javainsel_14_012.htm#mj959bf4fd5b6793fae188bfdb4278f659). Die Definition eines
Simulationsszenarios besteht in der Regel in der Zusammenstellung eines
Parameter-Objekts. Reicht dazu die Darstellbarkeit der Parameter nicht
aus, kann auch auf einen abgeleiteten Simulationstreiber bzw.
abgeleitete Parameter ausgewichen werden. Sie finden die Builder im
Package „brn.sim.builder“.
Erfassung und
Speicherung der Simulationsergebnisse
Um Datenerfassung und
Simulationsmodelle nicht unnötig zu verflechten, benutzen wir eine
zusätzliche Indirektion in Form von Events. Geschieht im Simulationscode
etwas bemerkenswertes, dann wird ein bezeichnendes Event ausgelöst:
Empfängt beispielsweise der IEEE 802.11 MAC ein Paket, dann wird das „AbstractMac.receiveEvent“
ausgelöst. Zur Auswertung können Handler für die verschiedenen Events
installiert werden. Im Package „brn.sim.handler“ finden Sie die bereits
existierenden Handler. In den Parametern können sie Handler individuell
aktivieren (siehe „AbstractParams.handler*“).
Zur strukturierten
Speicherung von Ergebnissen steht der zentrale DataManger zur Verfügung.
Dieser unterstützt die Speicherung in Dateien (Ascii oder Binary) oder
in einer Datenbank (Binary oder mit Hibernate-Mapping), von der die
favorisierte Variante „Binary Database“ ist. Mit dem DataManager können
verschiedene DataContributions verwaltet werden. Es existiert eine
Unterstützung für Properties, Diagramme (Wertpaare), Parameter und
verschiedene Graphen. Aktivieren Sie die Speicherung in der Datenbank in
„SimTcpTest.py“ („params.db = True“), und passen Sie ggf. die
Zugangsinformationen in den Parametern an. Richten Sie die
Simulations-Datenbank ein: Starten Sie den MySQL Datenbankserver und
legen Sie einen Simulations-Nutzer an (Bspw. „create user 'distsim'@’localhost’
identified by 'distsim'; grant all on *.* to 'distsim’@’localhost’;“).
Erstellen Sie eine Simulations-Datenbank (“ant db-init -Ddb.name=’simulation’”).
Starten Sie jetzt die Simulation. Öffnen Sie nach deren Ende die Brn.Gui
und wählen Sie als „Data Source“ den Eintrag „Database“. Füllen Sie die
Felder „Database“, „Db Host“, „Db User“ und „Db Password“ aus. Die „Job
Id“ wird selbstständig von der Datenbank vergeben. Betätigen Sie den
Butten „Open Database Browser“ in der Toolbar und navigieren Sie zur
Studie „test“ (Falls der MySQL Treiber nicht gefunden wurde, müssen Sie
diesen unter „plugins/org.eclipse.birt.report.data.oda.jdbc*/drivers“
ergänzen). Wählen Sie die passende „Job Id“ aus und klicken Sie auf
„Listen“, um die Simulationsergebnisse zu öffnen. Die Bedienung ist nun
analog zu dem bereits oben Beschriebenen.
Automatisierte
Ausführung von Simulationen mittels Brn.Distsim
Die automatisierte
Ausführung von Simulationen ist besonders hilfreich, wenn man viele
Simulationen mit verschiedenen Parametern ausführen will. Zusätzlich
kann man dabei mehrere Prozessoren oder Rechner benutzen, um di e
Gesamt-Simulationszeit zu verkürzen. Wir wollen uns in dem folgenden
Beispiel auf das erstgenannte Feature beschränken. In diesem Fall wird
nur ein einziger Simulationsrechner benutzt, daher können wir das
Simulations-Archiv „distsim.zip“ mit allen Quellen im lokalen
Dateisystem hinterlegen (Im Falle der Verteilung bräuchten wir
zusätzlich einen FTP-Server). Mit dem Aufruf „ant distsim-local-jpy -Ddriver.class=res/test/SimDiversityThroughput.py
-Ddriver.version=Single01.4” hinterlegen Sie die Simulationsdefinitionen
in der Datenbank. Sie können die generierten Simulationen und den
Bearbeitungsstand der Simulation mit dem „Database Browser“ in der
Brn.Gui einsehen. Öffnen Sie das Programm „SimDiversityThroughput.py.“
Die Klasse „SimDiversityThroughput“ ist wieder von „AbstractDriver“
abgeleitet und überschreibt die Methode „getSimulationSuite“. Diese
Methode generiert in Abhängigkeit der angegebenen Version eine Liste von
Parameter-Objekten, die für eine spätere Bearbeitung in der Datenbank
hinterlegt werden.
Zum Ausführen der
gespeicherten Simulationen steht der Wrapper bereit. Wechseln Sie in das
Verzeichnis „brn.distsim.wrapper“ und starten Sie „ant run-jmx -Dbrn.distsim.jmxremote.http.port=8080“.
Auf Port 8080 öffnet der Wrapper ein Administrationsinterface. Rufen Sie
über dieses die Funktion „startWrapperAll“ mit den Parametern „hostname
1:1“ und den Datenbank-Zugangsdaten auf, wobei für hostname der
entsprechende Hostname anzugeben ist. Dadurch wird eine Wrapper-Instanz
auf dem lokalen System gestartet, die Simulationen aus der angegebenen
Datenbank bearbeitet. Analog kann über „stopWrapperAll“ der Wrapper
gestoppt werden. Im „Database Browser“ sollte nun der veränderte
Bearbeitungsstatus angezeigt werden. Es stehen weitere Ant Targets zur
Maintenance der Datenbank zur Verfügung („ant db-*“), beispielsweise um eine noch aktive Studie komplett als abgebrochen zu markieren. Wollen
Sie eine gespeicherte Simulation reproduzieren (beispielsweise weil
diese zu einem Fehler führte), dann reicht es, die XML-Konfiguration aus
dem „Database Browser“ in eine Datei zu speichern und dem
Simulationstreiber per „runFile“ bzw. über die Kommandozeile per „--file“
zu übergeben. Zur Auswertung kann die Methode „AbstractDriver.
evalSimulationResults“ überschrieben werden, die über das Ant Target „distsim-eval-jpy“
aufgerufen wird. Ein Beispiel dazu ist auch in „SimDiversityThroughput.py“
zu finden. Beachten Sie, dass in dem Beispiel binär aus der Datenbank
gelesen wird („DbBinaryLoader“), geschrieben wird aber mit Hilfe eines
dynamischen Hibernate-Mappings („DbSaver“). Die zu ladenden Objekte
werden über ihren Namen und Pfad (so wie in der GUI ersichtlich)
referenziert. Die Speicherung per Hibernate Mapping hat den Vorteil,
dass man die erzeugten Daten einfach in Office-Tools weiterverarbeiten
kann (nach entsprechenden Joins). Weitere Einzelheiten zum
Distsim-Framework können Sie der entsprechenden Studienarbeit
entnehmen.
Integration des Click
Modular Router mittels brn.jist.click
In Click ist ein
zwei-stufiger Ansatz vergleichbar mit GnuRadio umgesetzt: Die
Basisblöcke sind Paket-orientierte Elemente, die in C++ implementiert
sind. Diese können mit Hilfe der Click-Sprache in Form von
Datenflussgraphen zusammengesetzt werden. Weitere Informationen und
Tutorials sind auf der Website des Projekts zu finden. Die
Click-Konfiguration des BRN liegt unter „click/configurations/main“ und
ist in mehrere Teile gegliedert. Die Konfigurationen für die Simulation
und die reale Hardware unterscheiden sich leicht: Die Elemente „ToDevice“,
„FromDevice“, etc. sind nur auf realer Hardware verfügbar, in der
Simulation weichen wir auf die Elemente „ToSimDevice“, etc. aus. Dazu
reicht es, in der Konfiguration die Includes auszutauschen. In der
Simulation benutzen wir eine bereits expandierte Konfiguration, in der
die nötigen Änderungen schon enthalten sind (siehe dazu „brn.jist.rtp/res/click/meshnode.click“).
Der Click Router in Brn.Sim ersetzt den Net und Routing Layer des
Simulators. Zusätzlich muss ein angepasster Mac verwendet werden, der
die Konvertierung der Pakete in das von Click erwartete Format vornimmt.
Das Paket nsclick
kombiniert Click und den Netzwerksimulator ns-2 (siehe Literatur).
Analog dazu macht es das Projekt „brn.jist.click“ möglich, einen in
Click verfassten Router in Brn.Sim zu simulieren. Übersetzen Sie dazu
die Quellen des BRN mit den Optionen „--disable-userlevel --disable-linuxmodule
--enable-nsclick --enable-jistclick --enable-gateway --enable-dhcp --enable-analysis“
(in VMWare schon vorbereitet). Betrachten wir zum Einstieg ein Beispiel:
Wechseln Sie in das Verzeichnis „brn.jist.rtp“ und führen Sie die
Simulation RtpTest mittels „ant run-jpy -Drun.class=res/test/RtpTest.py
-Drun.args='--local'“ aus. Der Simulator erwartet, dass die
Umgebungsvariable „CLICK_HOME“ auf das BRN-Verzeichnis zeigt (in unserem
Fall auf „~/Projects/click/click-core), um den Click Router dynamisch
laden zu können. In der Simulation wird ein bidirektionaler RTP Fluss
zwischen zwei Knoten aufgesetzt, der mit Hilfe der Berlin RoofNet
Software im Click geroutet wird. Die GUI kann den „Forward Graph“ nicht
mehr anzeigen, da das Routing komplett in Click geschieht. Es gibt aber
eine ClickGui (Parameter „clickGui“), mit der man live in den laufenden
Router schauen kann, um beispielsweise die Link Table auszulesen.
Zusätzlich kann man im Click Flussgraphen Debug-Elemente einbringen
(bspw. Print oder ToDump, siehe dazu die Element-Übersicht auf der
Click-Website), um die Vorgänge im Click nachzuvollziehen. Aktivieren
Sie in der Simulation die Parameter „dumpNet“, „dumpMac“ und „handlerRadioTimeBar“,
um Pcap-Dateien und die RadioTimebar zu generieren (Vorsicht: Die
RadioTimebar hält alle gesendeten Pakete im Speicher; sie ist daher nur
für 'kleine' Simulationen anwendbar). Versuchen Sie, die Aktivitäten in
der RadioTimebar nachzuvollziehen. Der Inhalt der Pakete kann mittels
Wireshark aus den Mac-Pcaps entnommen werden. Analysieren Sie die
erzeugten Net-Pcap-Dateien im Wireshark („Statistics->RTP“, evtl. vorher
als RTP kennzeichnen mittels Kontextmenü und „Decode as“).
Aufgaben
-
Machen Sie sich mit dem Simulator
vertraut: Vollziehen Sie den Abschnitt „Der Brn.Sim
Netzwerksimulator“ nach.
-
In diesem Praktikum sollen Sie
ermitteln, wie viele gleichzeitige VoIP Gespräche im Berlin RoofNet
mit akzeptabler Qualität möglich sind. Eine verbreitete Variante von
VoIP ist die Kombination von SIP und RTP (Bspw. bei SipGate im
Einsatz). Das Session Initiation Protocol (SIP) dient dabei der
Signalisierung des Anrufs. Der Datentransport ist davon losgelöst
mittels dem Real-time Transport Protocol (RTP) realisiert. Wir
beschränken uns in unserer Betrachtung auf den Datentransport und
ignorieren die Signalisierung. In unserem Fall ist eine Sitzung eine
bidirektionale Kommunikation zweier Knoten. Beide Teilnehmer nutzen
dabei den G.711 Standard ohne Silence Supression und einem
Paketisierungsinterval von 20 ms. Als Routing-Protokoll soll das BRN
DSR (in der Simulator- und Click-Variante) zum Einsatz kommen.
Bedenken Sie, dass das Routing-Protokoll einige Zeit zum
Stabilisieren der Routingtabellen braucht. Es soll keine
Bitraten-Adaption stattfinden (24 Mbps). Verwenden Sie das
BER-basierte Radiomodell und Achten Sie darauf, dass auf MAC Ebene
kein RTS/CTS Austausch stattfindet. Verwenden Sie kein Shadowing-
oder Fading-Modell. Analysieren Sie die Ausgaben mit dem Werkzeug
Wireshark. Entscheiden Sie, welche Größen für Aussagen über die
Performance aussagekräftig sind. Ab welchem Punkt ist die
Gesprächsqualität nicht mehr akzeptabel?
Szenarios:
-
AP Szenario: Ein ausgewählter Knoten
(AP) stellt die Verbindung zum Internet her (In unserem Fall
terminiert dieser die Verbindungen). Um diesen herum sind Klienten
angeordnet, die direkt mit dem AP kommunizieren und jeweils eine
Verbindung ins Internet starten.
-
AP Mixed Workload: Analog zu a),
allerdings ist zeitgleich ein TCP Fluss zwischen AP und einer STA
aktiv.
-
Multi-Hop Internet Gateway Szenario:
Analog zu a), allerdings bedient der Internet Gateway (AP) auch
Klienten, die mehrere Hops entfernt sind.
-
Messen Sie die VoIP-Performance des
BRN (mit Routing im Simulator und anschließend mit Click-Routing) in
allen Szenarios in Abhängigkeit der Parameter und stellen Sie die
Ergebnisse grafisch dar. Welche Probleme im Zusammenhang mit der
Leistung von VoIP können Sie in Ihren Ergebnissen ausmachen, und wo
liegen deren Ursachen?
Zusatz
Mit dem Berlin RoofNet steht uns ein
reales Maschennetzwerk auf IEEE 802.11 Basis zur Verfügung. Sie können
Ihre Simulationsergebnisse zusätzlich im Berlin RoofNet validieren.
Nehmen Sie dazu Kontakt mit Ihrem Praktikumsleiter auf, der Ihnen einen
Zugang bereitstellt.
Abzugeben sind
-
Ein Bericht, der die
durchzuführenden Messungen protokolliert und auswertet (HTML oder PDF). Der Versuchsaufbau und die Durchführung soll reproduzierbar
beschrieben werden (Topologie, Parameter, etc.).
-
Den finalen Quellcode aus Aufgabe 3
als ein ZIP-Archiv.
Literatur
|
Niculescu.
Performance of VoIP in a 802.11 Wireless Mesh Network. 2006. |
|
Zhang. Wireless
mesh networking, 2006. |
|
Brn.Sim.
http://sarwiki.informatik.hu-berlin.de/Brn.Sim
|
|
JiST/SWANS.
http://jist.ece.cornell.edu/ |
|
SidNet.
http://www.ece.northwestern.edu/~ocg474/SIDnet.html
|
|
STRAW.
http://www.aqualab.cs.northwestern.edu/projects/STRAW/index.php
|
|
SWANS++.
http://www.aqualab.cs.northwestern.edu/projects/swans++/
|
|
Barr. JiST: An
efficient approach to simulation using virtual machines, 2004. |
|
Berlin RoofNet.
http://sarwiki.informatik.hu-berlin.de/BerlinRoofNet
|
|
Click Modular
Router.
http://www.read.cs.ucla.edu/click/ |
|
Neufeld. Nsclick::
bridging network simulation and deployment, 2002. |
|
Johnson, Maltz.
Dynamic source routing in ad hoc wireless networks. |
|
DeCouto. A
high-throughput path metric for multi-hop wireless routing,
2005. |
|
Awerbuch. High
throughput route selection in multi-rate ad hoc wireless
networks, 2003. |
|
MMSim - Simulation
of Multimedia Protocols using OMNeT++.
http://www.ibr.cs.tu-bs.de/projects/mmsim/
|
|
RFC 3550: “RTP: A
Transport Protocol for Real-Time Applications.”
http://www.ietf.org/rfc/rfc3550.txt
|
|
IEEE 802.11e
Standard. |
|
Beilke. QoS in JiST/SWANS,
2009. |
|
Matthew Gast.
802.11 Wireless Networks: The Definitive Guide, Second Edition.
O'Reilly, 2005. |
|
Walke. IEEE 802
Wireless Systems: Protocols, Multi-Hop Mesh/Relaying,
Performance and Spectrum Coexistence. Wiley & Sons, 2006. |
|
Hermann. DistSim -
Eine verteilte Umgebung zur Durchführung von parametrisierten
Simulationen, 2007. |
|
Müller. Auswahl von
Internet-Gateways und VLANs im Berlin RoofNet, 2007. |
|
Jeschke.
Softwareentwicklung für drahtlose Maschennetzwerke –
Fallbeispiel: BerlinRoofNet, 2007. |
|
|