lab manual ds

37
Sr No Title of Experiment Page No 1 Inter-process communication using socket programming: implementing multithreaded echo server. 2 Implementation of RPC mechanism 3 Implementation of Remote Method Invocation. 4 Clock synchronization: NTP / Lamports clock. 5 Simulation of election algorithms (Ring and Bus Topology) a. Bully b. Ring 6 Study of Distributed File System: NFS – CODA 7 Study of DNS 8 Study of distributed architecture CORBA, Grid and clusters.

Upload: nikita-mundada

Post on 26-Dec-2014

1.775 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: LAB Manual DS

SrNo Title of Experiment Page No

1 Inter-process communication using socket programming: implementing multithreaded echo server.

2 Implementation of RPC mechanism

3 Implementation of Remote Method Invocation.

4 Clock synchronization: NTP / Lamports clock.

5 Simulation of election algorithms (Ring and Bus Topology)a. Bullyb. Ring

6 Study of Distributed File System: NFS – CODA

7 Study of DNS

8 Study of distributed architecture CORBA, Grid and clusters.

Page 2: LAB Manual DS

Experiment No 1

TITLE: Inter-process communication using socket programming: implementing Multithreaded echo server.

Objective: To understand system calls for client server communication using socket programming.

Aim: Implementing multithreaded echo server program.

The working of the program can be as below.

1. Multiple clients at a time read string from its standard input and write the line to the server.

2. The server read a line from its network input and echoes the line back to the clients.

3. The clients read the echoed line and print it on its standard output.

Theory:

The standard model for network applications is the client-server model. A server is process that is waiting to be contacted by a client process sot that the server can do something for the client. A typical scenario is as follows:

The server process is started on some computer system. It initializes itself, and then goes to sleep waiting for a client process to contact it requesting some service.

A client process is started, either on the same system or on another system that is connected to the server’s system with a network. Client processes are often initiated by an interactive user entering a command to a time-sharing system. The client process sends a request across the network to the server requesting service of some form. Some examples of the type of server that a server can provide are

e.g. Return the time of day to the client. Print a file on printer for the client Read or write a file on the server’s system for the client Allow the client to login to server’s system. Execute a command for the client on the server’s

system.

Page 3: LAB Manual DS

When the server process has finished providing its service to the client, server goes back to sleep, waiting for the next client request to arrive.

Sockets is a method for communication between a client program and a server program in a network, A socket is defined as "the endpoint in a connection." Sockets are created and used with a set of programming requests or "function calls" sometimes called the sockets application-programming interface (API). The most common sockets API is the Berkeley Unix C interface for sockets. Sockets can also be used for communication between processes within the same computer.

System calls allow you to access the network functionality of a Unix. When you call one of these functions, the kernel takes over and does all the work for you automatically.

1. Socket () System call –

#include <sys/types.h>#include <sys/socket.h>int socket(int family, int type, int protocol);

The family is one of

AF_UNIX Unix internal protocolsAF_INET Internet protocolsAF_NS Xerox NS protocolsAF_IMPLINK IMP link layer

The AF_ prefix stands for “address family”.

The socket type is one of the following.

SOCK_STREAM stream socketSOCK_DGRAM datagram socket

The protocol argument to the socket system call is typically set to 0 for most user applications.

2.bind System call bind system call assigns a name to an unnamed socket.

#include <sys/types.h>#include <sys/socket.h>

int bind(int sockfd, struct sockaddr *myaddr,int addrlen);

Page 4: LAB Manual DS

The second argument is a pointer to a protocol-specific address and the third argument is the size of this address structure .

3. connect System callA client process connects a socket descriptor following the socket

system call to establish a connection with a server.

#include <sys/types.h>#include <sys/socket.h>

int connect (int sockfd, struct sockaddr *servaddr,int addrlen);

The sockfd is a socket descriptor that returned by the socket system call.The second and third arguments are a pointer to a socket address and its size.

4.listen System call

This system call is used by a connection-oriented server to indicate that is willing to receive connections.

int listen(int sockfd, int backlog);

The backlog argument specifies how many connection requests can be queued by the system while it waits for the server to execute the accept system call. This argument is usually specified as 5, the maximum value currently allowed.

5.accept System call

After a connection-oriented server executes the listen system call, an actual connection from some client process is waited for by having the server execute the accept system call.

#include <sys/types.h> #include <sys/socket.h>

int accept(int sockfd, struct sockaddr *peer,int *addrlen);

accept takes the first connection request on the queue and creates another socket with the same properties as sockfd. If there are no connection request pending, this call blocks the caller until on arrives.

The peer and addrlen arguments are used to return the address of the connected peer process (the client). The system call returns up to three values : an integer return code that is either an error indication or a new socket descriptor, the address of the client process(peer), and the size of this address(addrlen).

Page 5: LAB Manual DS

6.read System callData is read from buffer

int read(int sockfd,char *buff,unsigned int nbytes);If the read is successful , the number of bytes read is returned- this can be less than the nbytes that was requested. If the end of buffer is encountered, zero is returned. If an error is encountered, -1 is returned.

7.write System callData is written to buffer

int write(int sockfd, char *buff,unsigned int nbytes);

The actual number of bytes written is returned by the system call. This is usually equal to nbytes argument. If an error occurs , -1 returned.

8.send ,sendto, recv and recvfrom system calls:

#include <sys/types.h> #include <sys/socket.h>

int send(int sockfd, char *buff, int nbytes,int flags);

int sendto(int sockfd, char *buff, int nbytes,int flags,struct sockaddr *to,int addrlen);

int recv(int sockfd, char *buff, int nbytes,int flags);

int sendto(int sockfd, char *buff, int nbytes,int flags,struct sockaddr *from,int addrlen);

The first three argument,sockfd,buff, and nbytes , to the four system call are similar to the first three arguments for read and write.The flags argument is zero.The to argument for sendto specifies the protocol-sepcific address

of where the data is to be sent. Since this address is protocol specific, its length must be specified by addrlen. The recvfrom system call fills in the protocol-specific address of who sent the data into from.The length of this address is also returned to the caller in addrlen. Final argument to sendto is an integer value, while the final argument to recvfrom is a pointer to an integer value. All four system calls return the length of the data that was written or read as the value of the function.

Page 6: LAB Manual DS

9.close system callThe normal Unix close system call is also used to close a socket.int close(int fd);

References:1.Unix Network Programming by W. Richard Stevens. Published by Prentice Hall.

2.Beej's Guide to Network Programming

http:/beej.us/guide/bgnet/

Page 7: LAB Manual DS

Experiment No 2

Title: Implementation of RPC mechanism using RPCGEN utility.

Objective: Study of RPC mechanism.

Aim: Implementing average no. calculation using rpcgen utility.

Theory:RPCGEN is an interface generator pre-compiler for Sun Microsystems RPC. It

uses an interface definition file to create client and server stubs in C.RPCGEN creates stubs based on information contained within an IDL file. This

file is written in a language called RPCL - remote procedure call language. This language closely mimics C in style.

An RPC specification contains a number of definitions. These definitions are used by RPCGEN to create a header file for use by both the client and server, and client and server stubs. RCPL Definitions: Constant, Enumeration, Struct, Union, and TypeDef, Program.

Remote Procedure Call (RPC) is a protocol that one program can use to request a service from a program located in another computer in a network without having to understand network details. (A procedure call is also sometimes known as a function call or a subroutine call.) RPC uses the client/server model. The requesting program is a client and the service-providing program is the server. Like a regular or local procedure call, an RPC is a synchronous operation requiring the requesting program to be suspended until the results of the remote procedure are returned.

When program statements that use RPC are compiled into an executable program, a stub is included in the compiled code that acts as the representative of the remote procedure code. When the program is run and the procedure call is issued, the stub receives the request and forwards it to a client runtime program in the local computer. The client runtime program has the knowledge of how to address the remote computer and server application and sends the message across the network that requests the remote procedure. Similarly, the server includes a runtime program and stub that interface with the remote procedure itself. Results are returned the same way.

Remote procedure calls (RPC) extend the capabilities of conventional procedure calls across a network and are essential in the development of distributed systems.

They can be used both for data exchange in distributed file and database systems and for harnessing the power of multiple processors.

Linux distributions provide an RPC version derived from the RPC facility developed by the Open Network Computing (ONC) group at Sun Microsystems.

RPC and the Client/Server Model: Caller: a program which calls a subroutine Callee: a subroutine or procedure which is called by the caller Client: a program which requests a connection to and service from a network

server

Page 8: LAB Manual DS

Server: a program which accepts connections from and provides services to a client

There is a direct parallel between the caller/callee relationship and the client/server relationship. With ONC RPC (and with every other form of RPC that I know), the caller always executes as a client process, and the callee always executes as a server process.

The Remote Procedure Call MechanismIn order for an RPC to execute successfully, several steps must take place:

1. The caller program must prepare any input parameters to be passed to the RPC. Note that the caller and the callee may be running completely different hardware, and that certain data types may be represented differently from one machine architecture to the next. Because of this, the caller cannot simply feed raw data to the remote procedure.

2. The calling program must somehow pass its data to the remote host which will execute the RPC. In local procedure calls, the target address is simply a machine address on the local processor. With RPC, the target procedure has a machine address combined with a network address.

3. The RPC receives and operates on any input parameters and passes the result back to the caller.

4. The calling program receives the RPC result and continues execution.

External Data RepresentationAs was pointed out earlier, an RPC can be executed between two hosts that run

completely different processor hardware. Data types, such as integer and floating-point numbers, can have different physical representations on different machines. For example, some machines store integers (C ints) with the low order byte first while some machines place the low order byte last. Similar problems occur with floating-point numeric data. The solution to this problem involves the adoption of a standard for data interchange.

One such standard is the ONC external data representation (XDR). XDR is essentially a collection of C functions and macros that enable conversion from machine specific data representations to the corresponding standard representations and vice versa. It contains primitives for simple data types such as int, float and string and provides the capability to define and transport more complex ones such as records, arrays of arbitrary element type and pointer bound structures such as linked lists.

Most of the XDR functions require the passing of a pointer to a structure of ``XDR'' type. One of the elements of this structure is an enumerated field called x_op. It's possible values are XDR_ENCODE, XDR_DECODE, or XDR_FREE. The XDR_ENCODE operation instructs the XDR routine to convert the passed data to XDR format. The XDR_DECODE operation indicates the conversion of XDR represented

Page 9: LAB Manual DS

data back to its local representation. XDR_FREE provides a means to deallocate memory that was dynamically allocated for use by a variable that is no longer needed.

RPC Data FlowThe flow of data from caller to callee and back again is illustrated in Figure 1.

The calling program executes as a client process and the RPC runs on a remote server. All data movement between the client and the network and between the server and the network pass through XDR filter routines. In principle, any type of network transport can be used, but our discussion of implementation specifics centers on ONC RPC which typically uses either Transmission Control Protocol routed by Internet Protocol (the familiar TCP/IP) or User Datagram Protocol also routed by Internet Protocol (the possibly not so familiar UDP/IP). Similarly, any type of data representation could be used, but our discussion focuses on XDR since it is the method used by ONC RPC.

Client program Server program

Figure 1. RPC Data Flow1.Client encodes data through XDR filter.2.Client passes XDR encoded data across network to remote host.3.Server decodes data through XDR Filter.4.Server encodes function call result through XDR Filter.5.Server pass XDR encoded data across network back to client.6.Client decodes RPC result through XDR Filter and continues processing.

Review of Network Programming TheoryIn order to complete our picture of RPC processing, we'll need to review some

network programming theory.

In order for two processes running on separate computers to exchange data, an association needs to be formed on each host. An association is defined as the following 5-tuple: {protocol, local-address, local-process, foreign-address, foreign-process}

The protocol is the transport mechanism (typically TCP or UDP) which is used to move the data between hosts. This, of course, is the part that needs to be common to both host computers. For either host computer, the local-address/process pair defines the

XDR Filter

ClientCode

XDR Filter

Client Data

XDR Filter

ServerCode

XDR Filter

Server Data

12 3

46 6

Page 10: LAB Manual DS

endpoint on the host computer running that process. The foreign-address/process pair refers to the endpoint at the opposite end of the connection.

Breaking this down further, the term address refers to the network address assigned to the host. This would typically be an Internet Protocol (IP) address. The term process refers not to an actual process identifier (such as a Unix PID) but to some integer identifier required to transport the data to the correct process once it has arrived at the correct host computer. This is generally referred to as a port. The reason port numbers are used is that it is not practical for a process running on a remote host to know the PID of a particular server. Standard port numbers are assigned to well known services such as TELNET (port 23) and FTP (port 21).

RPC Call BindingNow we have the necessary theory to complete our picture of the RPC binding process. An RPC application is formally packaged into a program with one or more procedure calls. In a manner similar to the port assignments described above, the RPC program is assigned an integer identifier known to the programs which will call its procedures. Each procedure is also assigned a number that is also known by its caller. ONC RPC uses a program called portmap to allocate port numbers for RPC programs. It's operation is illustrated in Figure 2. When an RPC program is started, it registers itself with the portmap process running on the same host. The portmap process then assigns the TCP and/or UDP port numbers to be used by that application.

Figure 2. Portmap Operation

The RPC application then waits for and accepts connections at that port number. Prior to calling the remote procedure, the caller also contacts portmap in order to obtain the corresponding port number being used by the application whose procedures it needs to

Client Process

Portmapper

ServerProcess

Procedure Call Dataflow

Registration Data Flow

Program no.

Program no. Port no

Page 11: LAB Manual DS

call. The network connection provides the means for the caller to reach the correct program on the remote host. The correct procedure is reached through the use of a dispatch table in the RPC program. The same registration process that establishes the port number also creates the dispatch table. The dispatch table is indexed by procedure number and contains the addresses of all the XDR filter routines as well as the addresses of the actual procedures.

References: 1.http://docs.freebsd.org 2.http://h30097.www3.hp.com

Page 12: LAB Manual DS

Experiment No. 3

Title: Implementation of Remote Method Invocation

Objective: Study of RMI mechanism.

Aim: ATM Banking Transaction: Application should have facility to withdraw, deposit money, transfer money from one account to other account and check the balance of account

Theory: What is RMI?

RMI - The Java Remote Method Invocation (RMI) system allows an object running in one Java virtual machine to invoke methods on an object running in another Java virtual machine. RMI provides for remote communication between programs written in the Java programming language.RMI is a mechanism for communicating (only) between two machines running Java Virtual Machines. When Java code on machine A needs a service or a method, respectively, of  (remote Java object) objB on machine B it starts a remote method invocation. It does this the same way as invoking a local (Java) object's method.The whole communication behind the remote invocation is done by the RMI mechanism.

How RMI works ? When referencing a remote object residing on machine B from code being on

machine A there are always two intermediate objects actually handling the communication: a stub object and a skeleton object. When a remote method invocation comes up the following tasks are handled by these two objects (see also figure):

The stub object (on machine A) has to

1)build an information block thats consists of 2)an identifier of the remote object to be used, 3)an operation number describing the method to be called and 4) the marshalled parameters (method parameters have to be encoded into a format suitable for transporting them across the net) send this information to the server

The tasks of the skeleton object (on machine B) are 1) to unmarshal the parameters, 2) to call the desired method on the real object lying on the server, 3) to capture the return value or exception of the call on the server, 4) to marshal this value, 5 ) to send a package consisting of the value in the marshalled form back to the

stub on the client, machine A.

Page 13: LAB Manual DS

The stub object unmarshals the return value or exception from the server. This value becomes the return value of the remote method invocation. Or, if the remote method threw an exception, the stub (object) rethrows it in the process space of the caller.

Example To get a better feeling how to deal with RMI, let's give a little example:

Let's assume there is a remote object belonging to the class Product offering the method getDescription(), whose return value is a String object. Let's further assume this method is invoked by a remote machine (not very surprising). The following figure shows what is going on in order to handle this situation, on client side as well as on server side.

Page 14: LAB Manual DS

Simple Client/Server Application using RMI:

In Remote Calculator Service server receives a request from client, processes it, and returns a result. The request specifies two numbers. The server adds these together and returns the sum. Below are the steps to implement Remote Calculator Service (Addition).

Step 1: Enter and Compile Source code

Application contains four source files. First file, IMath.java , defines remote interface that is provided by the server. It contains one method that accepts two integer arguments and returns their sum.

All remote interfaces must extend the Remote Interface , which is part of java.rmi. Remote defines no members. Its purpose is simply to indicate that an interfaces uses remote methods. All Remote methods can throw a RemoteException.

Page 15: LAB Manual DS

import java.rmi.Remote;

import java.rmi.RemoteException;

public interface IMath extends Remote

{

int add(int arg1, int arg2) throws RemoteException;

}

The second source file , ServerImpl.java, implements the remote interface.The implementation of add() method is straightforward.All remote objects must extend the UniCastRemoteObject, which provides the functionality that is needed to make objects available from remote machines.

import java.rmi.RemoteException;

import java.rmi.server.UnicastRemoteObject;

public class ServerImpl extends UnicastRemoteObject implements IMath

{

public ServerImpl () throws RemoteException

{ }

public int add (int arg1, int arg2) throws RemoteException

{ return arg1+arg2; }

}

Third source file, Server.java , contains main program for the server machine.Iits primary function is to update the RMI registry on that machine.This is done by using the rebind() method of Naming class(found in java.rmi). That method associates a name with an object reference. The first argument to the rebind() method is a string that names the server as “rmimathcalc”.Its second arguemtn is a reference to an instance of AddServerImpl.

Page 16: LAB Manual DS

import java.rmi.Naming;

public class Server

{

public static void main (String[] args) throws Exception

{

ServerImpl svr = new ServerImpl();

Naming.rebind ("rmimathcalc",svr);

System.out.println ("Math server is ready for request.");

}

}

The fourth source file, Client.java , implements the client side of this distributed application. Client.java requires three command line arguments. The first is IP address or name of server machine.The second and third arguments are the two numbers that are to be summed.

The program then invokes the lookup() method of the Naming class.This method accepts one argument, the rmi URL which includes rmi protocol,IP address or name of server will be given by the client in command line argument and the string “rmimathcalc”.It returns reference to Imath.

import java.rmi.Naming;

public class Client

{

public static void main(String args[]) throws Exception

{

IMath mathSrv = (IMath) Naming.lookup ("rmi://"+args[0]+"/rmimathcalc");

int firstnumber=Integer.parseInt(args[1]);

Page 17: LAB Manual DS

int secondnumber=Integer.parseInt(args[2]);

System.out.println (" addition of two numbers:" + mathSrv.add (firstnumber,secondnumber));

}

}

Step Two: Generate Stubs and Skeltons.

The stub object (on machine A) has

1) to build an information block thats consists of an identifier of the remote object to be used, an operation number describing the method to be called andthe marshalled parameters (method parameters have to be encoded into a format suitable for transporting them across the net) send this information to the server

•The tasks of the skeleton object (on machine B) are 1)to unmarshal the parameters,

2)to call the desired method on the real object lying on the server, 3)to capture the return value or exception of the call on the server, 4)to marshal this value, 5)to send a package consisting of the value in the marshalled form back to the stub on the client, machine A.

To generate stubs and skeletons, you use tool called the RMI compiler,which is invoked from the command line, as shown here

rmic ServerImpl

This command generates two new files: ServerImpl_Skel.class(skelton) and ServerImpl_Stub.class(stub).

Step three : Install Files on the Client and Server Machines

Copy Client.class, ServerImpl_Stub.class and Imath.class to a directory on the client machine.

Copy Imath.class , ServerImpl.class,ServerImpl_Skel.class,Server.class to a directory on the server machine.

Page 18: LAB Manual DS

Step four: Start RMI Registry on the Server Machine.

The Java SDK provides a program called rmiregistry, which executes on the server machine. It maps names to object references.Then start the RMI Registry from command line , as shown here.

start rmiregistry

When this command returns, you should see that a new window has been created. You need to leave this window open until you are done experimenting with RMI example.

Step Five:

The server code is started from the command line , as shown here

java Server

Step Six:

Client program requires three arguments :the name or IP address of the server machine and two numbers that are to be summed together.

java Client 127.0.0.1 8 9

Java RMI Internals

1.The RMI Server creates an instance of the 'Server Object' which extends UnicastRemoteObject

2.The constructor for UnicastRemoteObject "exports" the Server Object - basically making it available to service incoming RMI calls. A TCP socket which is bound to an arbitrary port number is created and a thread is also created that listens for connections on that socket.

3.The server registers the server object with the registry. This operation actually hands the registry (Note: The RMI Registry is an RMI server itself) the client-side "stub" for that server object. This stub contains the information needed to "call back" to the server when it is invoked (such as the hostname/port of the server listening socket).

4.A client obtains this stub by calling the registry, which hands it the stub directly. (This is also where the "codebase" comes in: If the server specified a "codebase" to use for clients to obtain the classfile for the stub, this will be passed along to the client via the registry. The client can then use the codebase to resolve the stub class - that is, to load the

Page 19: LAB Manual DS

stub classfile itself). That is all that the RMIRegistry really does: It holds onto remote object stubs which it can hand off to clients when requested.

5.When the client issues a remote method invocation to the server, the stub class creates a "RemoteCall" which basically (a) opens a socket to the server on the port specified in the stub itself, and (b) Sends the RMI header information as described in the RMI spec.

6.The stub class marshalls the arguments over the connection by using methods on RemoteCall to obtain the output stream which basically returns a subclass of ObjectOutputStream which knows how to deal with passing objects which extend java.rmi.Remote, which serializes Java objects over the socket

7.The stub class calls RemoteCall.executeCall which causes the RMI to happen.

8.On the server side, when a client connects to the server socket, a new thread is forked to deal with the incoming call. The original thread can continue listening to the original socket so that additional calls from other clients can be made.

9.The server reads the header information and creates a RemoteCall of its own to deal with unmarshalling the RMI arguments from the socket.

10.The server calls the "dispatch" method of the skeleton class (the server-side "stub" generated by rmic), which calls the appropriate method on the object and pushes the result back down the wire (using the same 'RemoteCall' interface which the client used to marshall the arguments). If the server object threw an exception then the server catches this and marshalls that down the wire instead of the return value.

11.Back on the client side, the return value of the RMI is unmarshalled (using the RemoteCall created in step 5 above) and returned from the stub back to the client code itself. If an exception was thrown from the server that's unmarshalled and re-thrown from the stub.

Reference : 1.http://java.sun.com/j2se/1.5.0/docs/guide/rmi/index.html 2.The Complete Reference JAVA 2 –Herbert Schildt

Page 20: LAB Manual DS

Experiment No 4

Title: Clock synchronization: NTP / Lamports clock.

Objective: Study of clock synchronization

Aim: Synchronize clocks on hosts connected to the network with NTP server. Synchronization of Logical clocks using Lamports algorithm. Theory:

Most people assume that computer clocks in servers, workstations and network

devices are inherently accurate.  This is incorrect.  Most of these clocks are set by hand to within a minute or two of actual time and are rarely checked after that.  Many of these clocks are maintained by a battery-backed, clock-calendar device that may drift as much as a second per day.  Having any sort of meaningful time synchronization is impossible if such clocks are allowed to run on their own.

The Importance of Time Synchronization for Your Network In modern computer networks time synchronization is critical because every aspect of managing, securing, planning, and debugging a network involves determining when events happen.  Time also provides the only frame of reference between all devices on the network.  Without synchronized time, accurately correlating log files between these devices is difficult, even impossible.  Following are just a few specific reasons:

Tracking security breaches, network usage, or problems affecting a large number of components can be nearly impossible if timestamps in logs are inaccurate. Time is often the critical factor that allows an event on one network node to be mapped to a corresponding event on another.

To reduce confusion in shared filesystems, it is important for the modification times to be consistent, regardless of what machine the filesystems are on.

Billing services and similar applications must know the time accurately. Some financial services require highly accurate timekeeping by law.

NTP:

ntp is the Network Time Protocol suite.

To be able to install and configure NTP we require package as ntp-4.1.2-5.i386.rpm

NTP stands for Network Time Protocol, and it is an Internet protocol used to synchronize the clocks of computers to some time reference. NTP is an Internet standard protocol originally developed by Professor David L. Mills at the University of Delaware.

NTP is widely used to synchronize the time on computers on the internet. NTP provides the ability to access time services, organize the time synchronization subnet and

Page 21: LAB Manual DS

adjust the local clock in each participating subnet computer. Typically, NTP provides accuracies of between 1 and 50 milliseconds depending on the time source and network paths. Network Time Protocol can be utilized to synchronize the time on computers across a network. A time server is utilized to obtain the correct time from a time source and adjust the local time in each participating computer. The time source used by the time server is extremely important as this forms the basis of all time updates across the network.

SNTP:SNTP (Simple Network Time Protocol) is basically NTP, but lacks some internal

algorithms that are not needed for all types of servers.

What are the basic features of NTP?

NTP needs a reference clock that defines the true time. All clocks are set towards that true time. (It will not just make all systems agree on some time, but will make them agree upon the true time as defined by some standard.)

NTP uses UTC as reference time.

NTP is a fault-tolerant protocol that will automatically select the best of several available time sources to synchronize to. Multiple candidates can be combined to minimize the accumulated error. Temporarily or permanently insane time sources will be detected and avoided.

NTP is highly scalable: A synchronization network may consist of several reference clocks. Each node of such a network can exchange time information either bi-directional or unidirectional. Propagating time from one node to another form a hierarchical graph with reference clocks at the top.

Having available several time sources, NTP can select the best candidates to build its estimate of the current time. The protocol is highly accurate, using a resolution of less than a nanosecond (about 2^-32 seconds).

Even when a network connection is temporarily unavailable, NTP can use measurements from the past to estimate current time and error.

For formal reasons NTP will also maintain estimates for the accuracy of the local time

Which Operating Systems are supported?

NTP is readily available for most popular UNIX operating systems. Among these are: AIX, HP-UX, Irix, Linux, SCO UNIX, OSF/1, Solaris, System V.4.

There’s also a supported implementation for VMS: "UCX (the VMS TCP stack)

Page 22: LAB Manual DS

has a full implementation of NTP built-in. As of v5 it's pretty much vanilla NTP, prior to that the command syntax and control file formats were proprietary."

If you are worried with compatibility issues, older version clients can generally talk to newer version servers automatically, but the other direction requires manual interference.

Which Implementations are available for UNIX?

There is an implementation of an NTP client and server available for free. The software is available as C source and it runs on most UNIX compatible operating systems. The software consists of the following components:

ntpd A daemon process that is both, client and server.

ntpdateA utility to set the time once, similar to the popular rdate command.

ntpq, ntpdc Monitoring and control programs that communicate via UDP with ntpd.

ntptrace A utility to back-trace the current system time, starting from the local server.

Microsoft Windows

Windows/2000 includes a built-in SNTP client. Follow this procedure:

Select a NTP server, using net time /setsntp:ntp-server. However, only the domain controller that holds the PDC FSMO (Primary Domain Controller Flexible Single Master Operation) role can query an external time source to set the time.

Start the W32Time service with net start W32Time. You can also set the start option of the Windows Time Synchronization Service W32Time to automatic, so the service will start when Windows/2000/2003 starts.

NTP is a protocol designed to synchronize the clocks of computers over a network. NTP version 3 is an Internet draft standard, formalized in RFC 1305. NTP version 4 is a significant revision of the NTP standard, and is the current development version, but has not been formalized in an RFC. Simple NTP (SNTP) version 4 is described in RFC 2030.

Problem for NTP to go out on the Internet to get time from a public Internet Time Server.  But, this approach is prone to problems because:

Page 23: LAB Manual DS

The source of time is beyond your firewall.  This means there must be a "hole" left open in the firewall (UDP port 123) to allow packets containing the time information through.

Time accuracy degrades when using an Internet Time Server because of asymmetrical latency (delays between when the time packets leave the time source and when they arrive at your network).

External agencies (e.g. universities) who provide Public Domain Time Servers are not obliged to continue service or guarantee availability and accuracy.

Synchronization of Logical clocks using Lamport algorithm.

Theory:

It is sufficient that all machines agree on the same time. It is not essential that this time also aggress with the real time as announced on the radio every house. Such clocks are considered as logical clocks. To synchronize logical clocks, Lamport defined a relation called happened before. The expression a->b is read “a happens before b” and means that all processes agree that first event first event a occurs, then afterward, event b occurs. The happens before relation can be observed directly in two situations.

1. If a and b are events in the same process, and a occurs before b , the a->b is true.

2. If a is the event of a message being sent by one process, and b is the event of the message being received by another process, then a->b is also true. A message cannot be received before it is sent or event at the same time it is sent, since it takes a finite, nonzero amount of time to arrive.

Programming Language: Any programming language. (Java, C++, VB). OR FADA simulation tool.

Page 24: LAB Manual DS

Experiment No 5Title: Simulation of election algorithms

a. Bully b. Ring

Objective: Deciding Coordinator for accessing shared resource.

Aim: Simulation of Bully and Ring election algorithms.

Theory:Many distributed algorithms require one process to act as coordinator, initiator, or

to perform some other special role. In the centralized mutual exclusion algorithm, one process is elected as the coordinator. For instance, the process running on the machine with the highest network address might be selected. Whenever a process wants to enter a critical region, it sends a request message to the coordinator stating which critical region it wants to enter and asking for permission. If no other process is currently in that region, the coordinator sends back a reply granting permission.

It does not matter which process takes on this special responsibility of coordinator, but one of them has to do it. In general, election algorithms attempt to locate the process with the highest process number and designate it as coordinator. It is assumed that every process knows the process number of every other process. What the processes do not know is which ones are currently up and which ones are currently down. The goal of election algorithm is to ensure that when an election starts, it concludes with all processes agreeing on who the new coordinator is to be.

Bully Election Algorithm The Bully Algorithm was devised by Garcia-Molina in 1982. When a process

notices that the coordinator is no longer responding to requests, it initiates an election. Process P, holds an election as follows:

1) P sends an ELECTION message to all processes with higher numbers. 2) If no one responds, P wins the election and becomes coordinator. 3) If one of the higher-ups answers, it takes over. P's job is done. At any moment, a process can get an ELECTION message from one of its lower-

numbered colleagues. When such a message arrives, the receiver sends an OK message back to the sender to indicate that it is alive and will take over. The receiver then holds an election, unless it is already holding one. Eventually, all processes give up but one, and that one is the new coordinator. It announces its victory by sending all processes a message telling them that starting immediately it is the new coordinator.

If a process that was previously down comes back up, it holds an election. If it happens to be the highest-numbered process currently running, it will win the election and will take over the coordinator's job. Thus the biggest guy in town always wins, hence the name "Bully Algorithm".

Page 25: LAB Manual DS

Ring Election Algorithm This election algorithm is based on the use of a ring. We assume that the

processes are physically or logically ordered, so that each process knows who its successor is. When any process notices that the coordinator is not functioning, it builds an ELECTION message containing its own process number and sends the message to its successor. If the successor is down, the sender skips over the successor and goes to the next number along the ring, or the one after that, until a running process is located. At each step, the sender adds its own process number to the list in the message.

Eventually, the message gets back to the process that started it all. That process recognizes this event when it receives an incoming message containing its own process number. At that point, the message type is changed to COORDINATOR and circulated once again, this time to inform everyone else who the coordinator is (designated by the list member with the highest number) and who the members of the new ring are. When this message has circulated once, it is removed and everyone goes back to work.

Simulation: FADA(Framework for Animations of Distributed Algorithms) Simulation Tool or simulate in any programming language.

References: Distributed Systems Principles and Paradigms – Low Price Edition Andrew S. Tanenbaum

Page 26: LAB Manual DS

Experiment No 6

Title: Study of Distributed File System: NFS – CODA

Theory: The Network File System (NFS) is a client/server application that lets a computer user view and optionally store and update file on a remote computer as though they were on the user's own computer. So CODA is advanced file system. So experiment should include basic architecture of NFS, introduction, features, architecture of CODA.

References: 1. http://www.coda.cs.cmu.edu 2.Distributed Systems Principles and Paradigms – Low Price Edition Andrew S. Tanenbaum

Page 27: LAB Manual DS

Experiment NO. 7

Title : Study of DNS.