• Non ci sono risultati.

Avviare la piattaforma JXTA

0 200 400 600 800 1000 1200 1400 1600 1800 2000 2200 2400 2600 2800 3000 1 301 601 901 1201 1501 1801

Figura 6.2: Dettaglio dei tempi rilevati per l'invio di messaggi di Heartbeat dal peer2

dal 150-esimo messaggio inviato no alla ne della prova.

(WirePipe e RendezvousService). Il binding diretto tra i peer endpoint comporta maggiore velocità nella consegna dei messaggi; inoltre l'eliminazione di due elementi nei messaggi (header dovuti ai protocolli wire e rendezvous) comporta un minore overhead per la gestione.

6.2 Avviare la piattaforma JXTA

Il codice Java riportato di seguito mostra come avviare la piattaforma JXTA: ˆ Congurazione del peer attraverso i metodi della classe net.jxta.platform

.NetworkConfigurator.

ˆ Inizializzazione del gruppo di default netPeerGroup. ˆ Utilizzo dei servizi relativi al gruppo netPeerGroup.

0 500 1000 1500 2000 2500 3000 3500 4000 4500 5000 1 301 601 901 1201 1501 1801 2101 2401

Figura 6.3: Tempi rilevati per l'invio di messaggi di Heartbeat dal peer3 per tutta

la durata del test.

import java.util.Enumeration; import java.io.File; import java.io.IOException; import java.net.URI; import net.jxta.endpoint.EndpointAddress; import net.jxta.exception.PeerGroupException; import net.jxta.platform.NetworkConfigurator; import net.jxta.peer.PeerID; import net.jxta.peergroup.PeerGroup; import net.jxta.peergroup.NetPeerGroupFactory; import net.jxta.protocol.ConfigParams; import net.jxta.rendezvous.RendezvousEvent; import net.jxta.rendezvous.RendezvousListener; import net.jxta.rendezvous.RendezVousService; /**

6.2. AVVIARE LA PIATTAFORMA JXTA 141 *

* @author Mohamed Abdelaziz (hamada)

* JXTA tutorial http://jxta.org modified by Silvia Ciotti *

*/

public class NetworkManager implements RendezvousListener { /**

* Gruppo di default di JXTA */

private PeerGroup netPeerGroup = null;

// flags to indicate the state of the jxta platform private boolean started = false;

private boolean stopped = false; private RendezVousService rendezvous; private Enumeration connRVP;

private final String connectLock = new String("connectLock"); private String instanceName = "NA";

/**

* Posizione del file system della cache JXTA ottenuta leggendo la property "JXTA_HOME" */

private final File home = new File(System.getProperty("JXTA_HOME", ".cache")); /**

*

* @param instanceName Node name

* @param home Cache storage home directory

*/

public NetworkManager(String instanceName) { this.instanceName = instanceName; // cancella la cache

clearCache(home); }

public void setAutoRendezvous(RendezVousService rendezvous) {

rendezvous.setAutoStart(true, 100); // wait a bit before go on

try{ Thread.sleep(4000); }catch(Exception e){ e.printStackTrace(); } } /**

* Stampa a video alcune informazione rigurdanti il rendezvous service passato come argomento *

* @param rendezvous Il Rendezvous Serivice del gruppo di cui di vogliono ottenere info */

public void stat(RendezVousService rendezvous){ System.out.println();

System.out.println(" -- Statistiche -- "); System.out.println("Stato del peer");

System.out.println(" Peer Mode: "+rendezvous.getRendezVousStatus().toString());

System.out.println(" E' connesso a un rendez-vous?: "+ rendezvous.isConnectedToRendezVous()); System.out.println(" Il peer e' un nodo Rendezvous? " + rendezvous.isRendezVous());

System.out.println("Lista dei rendezvous a cui e' connesso il peer:"); PeerID peerid= null;

connRVP = rendezvous.getConnectedRendezVous(); if (connRVP != null) {

System.out.println("--inzio--"); while (connRVP.hasMoreElements()) {

peerid = (PeerID) connRVP.nextElement(); System.out.println(" -- peer id: " +peerid); }

System.out.println("--fine--"); }

System.out.println(" -- Fine Statistiche -- "); System.out.println();

} /**

* Creates and starts the JXTA NetPeerGroup using a platform configuration * template. This class also registers a listener for rendezvous events *

* @param principal principal used the generate the self signed peer root cert * @param password the root cert password

6.2. AVVIARE LA PIATTAFORMA JXTA 143 * @param rvp if true the peer is Rendezvous, else id edge

*/

public synchronized void start(String principal, String password, boolean rvp, String ip) { if (started) {

return; }

try {

//clearCache(home);

File instanceHome = new File(home, instanceName); NetworkConfigurator config = new NetworkConfigurator(); config.setHome(instanceHome); if (!config.exists()) { //config.setPeerID(IDFactory.newPeerID(PeerGroupID.defaultNetPeerGroupID)); config.setName(instanceName); config.setDescription(" "); if (rvp){ config.setMode(NetworkConfigurator.RDV_NODE); } config.setPrincipal(principal); config.setPassword(password); try {

// rendezvous pubblici messi a disposizione dalla Sun

config.addRdvSeedingURI(new URI("http://rdv.jxtahosts.net/cgi-bin/rendezvous.cgi?2")); config.addRelaySeedingURI(new URI("http://rdv.jxtahosts.net/cgi-bin/relays.cgi?2")); // è possibile aggiungere altri seed rendezvous e relay

// config.addRdvSeedingURI(new URI(new URI("131.114...."))); // config.addRelaySeedingURI(new URI("131.114...."));

} catch (java.net.URISyntaxException use) { use.printStackTrace();

} try {

config.save();

} catch (IOException io) { io.printStackTrace(); }

}

NetPeerGroupFactory factory = new NetPeerGroupFactory((ConfigParams) config.getPlatformConfig(), instanceHome.toURI());

netPeerGroup = factory.getInterface();

System.out.println("Node PeerID : "+netPeerGroup.getPeerID().getUniqueValue().toString()); // estraggo il servizio RendezVous da netpeergroup

rendezvous = netPeerGroup.getRendezVousService(); // registra il listener per eventi rendezvous rendezvous.addListener(this);

started = true;

} catch (PeerGroupException e) {

// could not instantiate the group, print the stack and exit System.out.println("fatal error : group creation failure"); e.printStackTrace();

System.exit(1); }

} /**

* Stops and unrefrences the NetPeerGroup */

public synchronized void stop() { if (stopped && !started) {

return; } rendezvous.removeListener(this); netPeerGroup.stopApp(); netPeerGroup.unref(); netPeerGroup = null; stopped = true; return; } /**

* Gets the netPeerGroup object *

* @return The netPeerGroup value */

public PeerGroup getNetPeerGroup() { return netPeerGroup;

6.2. AVVIARE LA PIATTAFORMA JXTA 145 /**

* Metodo che restituisce i RendezVous peer a cui il peer e' connesso * @return

*/

public Enumeration getRVP(){ return connRVP;

} /**

* Blocks if not connected to a rendezvous, or * until a connection to rendezvous node occurs *

* @param rendezvous Il rendezvous service del gruppo per cui si vuole * attende la connesione a un peer RV

* @param timeout timeout in milliseconds di attesa della connessione a un RVP * @param block attesa infinita oppure no

* @param ipAddress indirizzo ip del rendezvous peer a cui il peer vuole connettersi * nella forma http://131.114.111.111:9700 (indicare la porta)

*/

public void waitForRendezvousConnection(RendezVousService rendezvous, long timeout, boolean block, String ipAddress ){

if (ipAddress != null){ try {

rendezvous.connectToRendezVous(new EndpointAddress(new URI(ipAddress))); } catch (Exception e) {

// TODO Auto-generated catch block e.printStackTrace();

} }

// se non e' connesso a nessun rendezvous OPPURE se lui stesso non e' Rendezvous if (!rendezvous.isConnectedToRendezVous() || !rendezvous.isRendezVous()) {

System.out.println("Waiting for Rendezvous Connection"); try { if (!rendezvous.isConnectedToRendezVous()) { synchronized (connectLock) { if (block) connectLock.wait(); else connectLock.wait(timeout);

} }

if (block)

System.out.println("Connesso a un Rendezvous Peer"); else {

// Se scade il timeout, il metodo prosegue stampando la riga sotto // quindi va avanti anche se non e' connesso a nessun rendez vous System.out.println("Timeout expired");

System.out.println("Vedere gli eventuali eventi RendezvousEvent ricevuti"); }

} catch (InterruptedException e) {} }

} /**

* RendezvousEvent che si riceve *

* @param event rendezvousEvent */

public void rendezvousEvent(RendezvousEvent event) { System.out.println(" --> EVENTO rendezvous ricevuto"); if (event.getType() == event.RDVCONNECT ||

event.getType() == event.RDVRECONNECT || event.getType() == event.BECAMERDV) { switch(event.getType()) {

case RendezvousEvent.RDVCONNECT :

System.out.println("Tipo evento: Connected to rendezvous peer :"+event.getPeerID()); break;

case RendezvousEvent.RDVRECONNECT :

System.out.println("Tipo evento: Reconnected to rendezvous peer :"+event.getPeerID()); break;

case RendezvousEvent.BECAMERDV :

System.out.println("Tipo evento: Became a Rendezvous"); break; } synchronized (connectLock) { connectLock.notify(); } } }

6.2. AVVIARE LA PIATTAFORMA JXTA 147

/**

* Svuota la cache di JXTA */

public void clearCache(){ clearCache(home); }

private void clearCache(final File rootDir) { try {

if (rootDir.exists()) {

File[] list = rootDir.listFiles(); for (File aList : list) {

if (aList.isDirectory()) { clearCache(aList); } else { aList.delete(); } } } rootDir.delete();

System.out.println("Cache component " + rootDir.toString() + " cleared."); }

catch (Throwable t) {

System.out.println("Unable to clear " + rootDir.toString()); t.printStackTrace();

} } /**

* Main method per alcune prove *

* @param args */

public static void main(String args[]) {

NetworkManager manager = new NetworkManager("Network Manager"); System.out.println("Starting Peer Configuration ....");

// nel metodo start ottengo il servizio rendezvous da netpeergroup //boolean isRVP = Boolean.parseBoolean(args[0]);

PeerGroup netPG = manager.getNetPeerGroup(); String ipAdd = null;

// aspetto la connessione al RVP per 10 secondi

System.out.println("Waiting for RVP connection for 10 seconds...");

manager.waitForRendezvousConnection(netPG.getRendezVousService(), 10000, false, ipAdd); System.out.println("Print out some statistics");

manager.stat(netPG.getRendezVousService());

System.out.println("Prova metodo setAutoStart per diventare dinamicamente RendezvousPeer"); manager.setAutoRendezvous(netPG.getRendezVousService()); manager.stat(netPG.getRendezVousService()); System.out.println("Stopping JXTA...."); manager.stop(); } }

Capitolo 7

Conclusioni

Numerose scelte che hanno determinato lo sviluppo del supporto JaDE sono state guidate dal necessità di trovare un compromesso tra consistenza e grado di distri- buzione: negli ambienti virtuali distribuiti possiamo aermare che più lo stato è replicato tra i peer e più sarà alta la probabilità che si verichino inconsistenze.

In contesti molto dinamici la manutenzione della overlay network si realizza attraverso la collaborazione reciproca dei peer del sistema: la loro coordinazione richiede di sostenere un numero elevato di messaggi, che quindi va a aumentare il traco di rete, contribuendo alla congestione della stessa.

L'architettura proposta in JaDE risponde proprio a questa esigenza introducendo però delle situazioni particolari, e a nostro avviso rare, in cui possono vericarsi inconsistenze oppure perdita parziale dello stato, inevitabili in questo contesto.

La scelta di utilizzare aree di interesse sse per l'invio dei messaggi di posizione è stata guidata dalla semplicità di gestione che questo metodo comporta e anche da- gli strumenti forniti dalla piattaforma JXTA che ci ha permesso l'implementazione del supporto. Tuttavia abbiamo dimostrato che è possibile introdurre aree di inte- resse dinamiche con una delle soluzioni proposte per il recupero di oggetti passivi. Un possibile sviluppo futuro potrebbe indagare l'estensione di questa soluzione per implementare aree mobili anche per le posizioni dei peer.

L'utilizzo di JXTA ci ha permesso di sviluppare il supporto avendo a disposizione molti servizi base ed ha fornito un insieme di protocolli per gestire gli aspetti di coor- dinazione tra peer (peer group e servizi associati, pipe come canali di comunicazione,

etc.).

Un ulteriore sviluppo futuro riguarda la possibilità di ottimizzare le comunicazioni sulla overlay network utilizzando l'approccio basato sui diagrammi di Voronoi. L'uso di questi permette di stabilire dinamicamente connessioni di tipo uno a uno tra i peer che si trovano sicamente vicini. Una soluzione possibile è anche quella di combinare il modello ibrido di JXTA con l'uso dei diagrammi di Voronoi.

Ringraziamenti

I miei ringraziamenti vanno in primo luogo alla Prof.ssa Laura Ricci per i preziosi suggerimenti e per il costante supporto durante lo svolgimento della tesi. Ringrazio inoltre il Dott. Luca Genovali che ha fornito spunti e consigli nell'arontare i vari problemi incontrati nella realizzazione del mio lavoro.

Ringrazio tutta la mia famiglia e in modo particolare i miei genitori per avermi sempre supportato in tutte scelte di questi anni di università. Inne ringrazio tutti gli amici con cui ho condiviso tante dicoltà ma anche tanti momenti felici della vita universitaria.

Bibliograa

[1] Keller, J., Simon, G., Towards a peer-to-peer shared virtual reality in Proc. 22nd Int. Conf. Distributed Computing Systems (Workshops), July 2002. pp. 695-700. http://solipsis.netofpeers.net/

[2] Keller, J., Simon, G., Solipsis: A massevly Multi-Partecipant Virtual World in Proc. Int. Conf. Parallel & Distributed Techniques & Ap- plications (PDPTA 2003), CSREA Press, 2003, vol. 1, pp. 262–268 http://www.irisa.fr/adept/membres/gwendal/pdpta03-kellerSimon.pdf [3] Shun-Yun Hu, Guan-Ming Liao, Scalable Peer-to-Peer Networked Virtual En-

vironment, in Proc. ACM SIGCOMM 2004 workshops on NetGames '04, Aug. 2004, pp. 129-133

[4] Tsu-Han Chen, Jui-Fa Chen, Shun-Yun Hu, A Forwarding Model for Voronoi- based Overlay Network, VAST Technical Report (VAST-TR-2005-01), 2005. [5] Jiun-Shiang Chiou, On Neighbor Consistency for Voronoi-Diagram-Based P2P

Networked Virtual Environments, Master's thesis, National Central Univ., Taiwan, Jul. 2006.

[6] Goldin, A., Gotsman, C., Geometric Message-Filtering Protocols for Di- stributed Multiagent Environments Presence, vol. 13, no. 3, pp. 279 - 295, 2004.

[7] Steed, A., Angus, C., Supporting Scalable Peer to Peer Virtual Environments Using Frontier Sets inProc. IEEE Virtual Reality, Mar. 2005, pp. 27-34. [8] Knutsson, B., et al., Peer-to-peer support for massively multiplayer games, in

Proc. INFOCOM, Mar. 2004, pp. 96 - 107. 153

[9] Kawahara, Y., Aoyama, T., Morikawa, H., A peer-to-peer message exchange scheme for large-scale networked virtual environments, Telecomm. Sys., vol. 25, no. 3-4, pp. 353 - 370, 2004.

[10] Rooney, S., Bauer, D., Deydier, R., A federated peer-to-peer network game architecture, IEEE Commun. Mag., vol. 42, no. 5, pp. 114 - 122, 2004.

[11] Yu, A., Vuong, S. T., MOPAR: a mobile peer-to-peer overlay architectu- re for interest management of massively multiplayer online games, in Proc. NOSSDAV, Jun. 2005, pp. 99 - 104.

[12] Project JXTA 2.3: Java Programmers Guide, April 2005. http://www.jxta.org/Tutorials.html

[13] Traversat, B., Arora, A., Abdelaziz, M., et al., Project JXTA 2.0 Super-Peer Virtual Network, May 2003. http://www.jxta.org

[14] Parker, D.C., Collins,S.A., Cleary, D.C., Building near real-time P-2-P appli- cations with JXTA, ccgrid, pp. 338-345, 2004 IEEE International Symposium on Cluster Computing and the Grid (CCGrid'04), 2004.

[15] Halepovic, E., Deters, R., The JXTA performance model and evalua- tion. Future Gener. Comput. Syst. 21, 3 (Mar. 2005), 377-390. DOI= http://dx.doi.org/10.1016/j.future.2004.04.016

[16] Traversat, B., Abdelaziz, M., Pouyoul, E., JXTA: A Loosely-Consistent DHT Rendezvous Walker, May 2003. http://www.jxta.org

[17] Kaul, S., AbdelAziz, M., JXTA Technology Turns Five Years Old, April 2006, http://java.sun.com/developer/technicalArticles/JXTA/

[18] http://www.wow-europe.com/en/index.xml [19] http://secondlife.com/

[20] Stefan Saroiu, Krishna P. Gummadi, Steven D. Gribble, Measuring and ana- lyzing the characteristics of Napster and Gnutella hosts, Multimedia Systems archive Volume 9 , Issue 2 (August 2003), Pages: 170 - 184 Year of Publication: 2003

BIBLIOGRAFIA 155 [21] Venkita Subramonian, Liang-Jui Shen, Christopher Gill Nanbor Wang, The Design and Performance of Congurable Component Middleware for Distri- buted Real-Time and Embedded Systems, Proceedings of the 25th IEEE In- ternational Real-Time Systems Symposium (RTSS’04) - Volume 00 table of contents, Pages: 252 - 261 Year of Publication: 2004

[22] Shang-Wen Cheng, David Garlan, Bradley Schmerl, Peter Steenkiste, Ning- ning Hu, Software Architecture-based Adaptation for Grid Computing, Pro- ceedings of the 11 th IEEE International Symposium on High Performan- ce Distributed Computing HPDC-11 20002 (HPDC’02), Page: 389 Year of Publication: 2002 ISBN:0-7695-1686-6

[23] Joerg Eberspaecher, Ruediger Schollmeier, Stefan Zoels, Gerald Kunzmann, Structured P2P Networks in Mobile and Fixed Environments , AEU - International Journal of Electronics and Communications January 2006 [24] Ozalp Babaoglu, Hein Meling, Alberto Montresor, Anthill: A Framework

for the Development of Agent-Based Peer-to-Peer Systems, Proceedings: International Conference on Distributed Computing Systems

[25] David R. Karger, Matthias Ruhl, Diminished Chord: A Protocol for Hetero- geneous Subgroup Formation in Peer-to-Peer Networks, Congrcs Peer-to-peer systems III (La Jolla, 26-27 February 2004, revised selected papers) IPTPS 2004 : international workshop on peer-to-peer systems No3, La Jolla CA , ETATSUNIS (26/02/2004) 20041973, vol. 3279, pp. 288-297, [Note(s) : XI, 300 p.]

[26] Francisco J. Torres-Rojas, Mustaque Ahamad, Michel Raynal, Timed consi- stency for shared distributed objects, Annual ACM Symposium on Principles of Distributed Computing archive Proceedings of the eighteenth annual ACM symposium on Principles of distributed computing, Pages: 163 - 172 Year of Publication: 1999

[27] Francisco J. Torres-Rojas, Esteban Meneses, Convergence Through a Weak Consistency Model: Timed Causal Consistency, 30ma Conferencia Latinoamericana de Informatica (CLEI2004), pag.724-733.

[28] Michel Raynal, From Causal Consistency to Sequential Consistency in Shared Memory Systems, Lecture Notes In Computer Science; Vol. 1026, Proceedings of the 15th Conference on Foundations of Software Technology and Theoretical Computer Science, Pages: 180 - 194 Year of Publication: 1995

[29] Ralf Steinmetz, Klaus Wehrle, Peer-to-Peer Systems and applications, Lecture note in computer science N.3485, State of the art survey.

[30] Andreas Kemkes, JXTA Rendezvous Implementation

http://wiki.java.net/bin/view/Jxta/RendezvousServiceImplementation [31] Daniel Brookshier, JXTA Resolver Protocol

http://java.sun.com/features/2002/10/jxta_res.html

[32] Mohamed Abdelaziz, Demystifying Pipes, JxtaSocke- ts, JxtaMulticastSocket, and JxtaBiDiPipes, August 2005, http://weblogs.java.net/blog/hamada/archive/2005/08/demystifying_pi.html [33] JXTA Benchmarks and Test Repository, http://bench.jxta.org/

[34] Li Gong, Scott Oaks, Bernard Traversat, JXTA in a Nutshell, O'Reilly and Associates, Inc., 2002.

[35] Daniel Brookshier, Darren Govoni, Navaneeth Krishnan, Juan Carlos, JXTA: Java P2P Programming, Soto Publisher: Sams Publishing Pub Date: March 22, 2002.

[36] Antony Rowstron, Peter Drusche, Pastry: Scalable, decentralized object loca- tion and routing for large-scale peer-to-peer systems, In IFIP/ACM Internatio- nal Conference on Distributed Systems Platforms (Middleware), pp.329-350, Heidelberg, Germany, November 2001, springer.

[37] Andrew S. Tanenbaum, Maarten van Steen, Distributed Systems: Principles and Paradigms, Prentice Hall, 2002.

[38] Tristan Henderson, Latency and User Behaviour on a Multiplayer Game Server, Networked Group Communication: Third International COST264

BIBLIOGRAFIA 157 Workshop, NGC 2001, London, UK, November 7-9, 2001. Proceedings <http://www.springerlink.com/content/a7n8cfepjdb7/>, 2001

[39] Laurent Gautier, Christophe Diot, Jim Kurose, End to end Transmission Con- trol Mechanisms for Multiparty Interactive Applications on the Internet, Pro- ceedings of the Conference on Computer Communications (IEEE Infocom), (New York), Mar. 1999.

[40] Jesse Aronson, Dead reckoning: Latency hiding for networked games, September 1997.

[41] Wentong Cai, Francis B. S. Lee, and L. Chen, An auto-adaptive dead reckoning algorithm for distributed interactive simulation, In PADS ’99: Proceedings of the thirteenth workshop on Parallel and distributed simulation, pages 82–89, Washington, DC, USA, 1999. IEEE Computer Society.

[42] T.P. Duncan and D. Gracanin, Algorithms and analyses: pre-reckoning algo- rithm for distributed virtual environments, Proceedings of the 35th conference on Winter simulation: driving innovation, pages 1086–1093, 2003.

[43] Lothar Pantel and Lars C. Wolf, On the suitability of dead reckoning schemes for games, In NetGames ’02: Proceedings of the 1st workshop on Network and system support for games, pages 79–84, New York, NY, USA, 2002. ACM Press.

[44] S. Singhal and M. Zyda, Networked virtual environments: design and imple- mentation, ACM Press/Addison-Wesley Publishing Co. New York, NY, USA, 1999.

[45] S.K. Singhal and D.R. Cheriton, Using a Position History-based Protocol for Distributed Object Visualization, Stanford University, Dept. of Computer Science, 1994.

[46] Suiping Zhou, Wentong Cai, Stephen J. Turner, and Hanfeng Zhao, A con- sistency model for evaluating distributed virtual environments, In CW ’03: Proceedings of the 2003 International Conference on Cyberworlds, page 85, Washington, DC, USA, 2003. IEEE Computer Society.

[47] Nicolas Bouillot, Eric Gressier-Soudan, Consistency models for distributed in- teractive multimedia applications, ACM SIGOPS Operating Systems Review archive Volume 38, Issue 4 (October 2004), Pages: 20 - 32 Year of Publication: 2004

[48] Roger Smith, Synchronizing Distributed Virtual Worlds, (Volume 3, Simulation 2000 series) by Roger D. Smith eMatter, 3/00.

[49] David, J. Roberts and Paul M. Sharkey, Maximising Concurrency and Sca- lability in a Consistent, Causal, Distributed Virtual Reality System, Whilst Minimising the Eect of Network Delays, Proceedings of the 6th Workshop on Enabling Technologies on Infrastructure for Collaborative Enterprises, Pages: 161 - 166 Year of Publication: 1997 ISBN:0-8186- 7967-0.

[50] Ian Clarke, Oskar Sandberg, Brandon Wiley, and Theodore W. Hong, Freenet: A Distributed Anonymous Information Storage and Retrieval System, Lecture notes in computer science (Lect. notes comput. sci.)

[51] Ion Stoica, Robert Morris, David Karger, M. Frans Kaashoek, Hari Balakrish- nan, Chord: A Scalable Peer-to-peer Lookup Service for Internet Applications, Proceedings of ACM SIGCOMM 2001, San Deigo, CA, August 2001.

[52] David L. Mills, Network Time Protocol (Version 3) Specication, Implemen- tation and Analysis, Request for Comments: 1305, RFC 1305, March 1992 University of Delaware.

[53] David L. Mills, Simple Network Time Protocol (SNTP) Version 4 for IPv4, IPv6 and OSI, Request for Comments: 2030, RFC 2030, October 1996 University of Delaware.

[54] Li Zou, Mostafa H. Ammar and Christophe Diot, An Evaluation of Grouping Techniques for State Dissemination in Networked Multi-User Games, MA- SCOTS archive Proceedings of the Ninth International Symposium in Mode- ling, Analysis and Simulation of Computer and Telecommunication Systems (MASCOTS’01), page: 33, 2001.