An Introduction to Internetworking Topics on Distributed Systems
Algorithm for client-server communication with UDP (connectionless) A SERVER A CLIENT Create a server-socket (listener)and bound it to a port (higher than 1024) Start listening for UDP packages comming Receive the UDP package and extract Message, Host Address & Port from seder Build a new UDP package with thesender´s Address & Port and the reply message Send message Build a UDP package with the request message, server´s address & port numbre Create socket Send package Listen to answer Receive package Extract answer
Algorithm for client-server communication with TCP (connection-oriented) A SERVER A CLIENT Create a server-socket (listener)and bound it to a port (higher than 1024) Start listening for request Create another (normal) socket and build a TCP connection when a request arrives Open IO streams for this connection read-write Create socket and try a redezvous with a server (given address and port) If the redezvous occurs, build a TCP connection Open IO streams for this connection write-read THIS IS THE APPLICATION’S PROTOCOLL
Every layer has the illusion to be talking to the correspondent one in the other application A CLIENT A SERVER The UDP: User Defined Package: like writing a letter Read write sequence 4444 UDP or TCP communication A CLIENT Internet frames and addresses A CLIENT electric pulses
Attending more than a client: The sequential server: The problem A SERVER ? A CLIENT 4444 A CLIENT
During the conversation the server is not listening at the port 444 A CLIENT A SERVER X A CLIENT 4444 A CLIENT
Only after the server is ready with the first client it can listen to the port 4444 again A CLIENT A SERVER ? A CLIENT 4444 A CLIENT
The service may be to transfer a file The service may be to transfer a file. The user at the client may have first to type and send the filename A CLIENT A SERVER X A CLIENT 4444 A CLIENT
What if the server has to wait too much for a client to type in a file name ? (or the file is too big) A CLIENT A SERVER Timeout X A CLIENT 4444 A CLIENT
Concurrent Servers: there are separate processes to attend the port and to transfer the file A CLIENT A SERVER ? 4444 A CLIENT A CLIENT
After the client contacts the server, the server creates another process to attend the client and keeps listening to the port 4444 for another A CLIENT A SERVER ? 4444 A CLIENT A CLIENT This is a “slave” process or thread It is executed paralell to the “master”
While the new process is serving the first client, the second client can contact the server at the port 4444 A CLIENT A SERVER ? 4444 A CLIENT A CLIENT
And the server creates another process A CLIENT A SERVER ? 4444 A CLIENT A CLIENT
Now the third client contacts the server A CLIENT A SERVER ? 4444 A CLIENT A CLIENT
And a third slave process or thread is created A CLIENT A SERVER ? 4444 A CLIENT A CLIENT
When should I use iterative or concurrent server ? When the answer to a request is small and speedy it is better to have an iterative server When the server should “talk” to the client and wait for actions of the client´s user it is better to use a concurrent server Iterative servers often use UDP connections while concurrent servers use TCP connections
Stateless vs. Stateful servers: the problem of reading a remote file by steps. File reading requests arrive with dealy Request open file XYZ A CLIENT A SERVER ? Answer file XYZ exists and ready Open file XYZ read first 50 bytes while (not end of file XYZ) read next 50 bytes close file
A stateless server means it does not remember previous requests Request read bytes 0 to 49 from file XYZ A CLIENT A SERVER ? Answer the content of the bytes Open file XYZ read first 50 bytes while (not end of file XYZ) read next 50 bytes close file
The client must provide all the information again ! Request read bytes 50 to 99 from file XYZ A CLIENT A SERVER ? Answer the content of the bytes Open file XYZ read first 50 bytes while (not end of file XYZ) read next 50 bytes close file
This may cause a lot of network traffic, especially if there are many clients Request read bytes X to X+50 from file XYZ A CLIENT A SERVER ? Answer the content of the bytes Open file XYZ read first 50 bytes while (not end of file XYZ) read next 50 bytes close file
Stateful Server: it mantains some information abut what clients did Pointer File Position Open file XYZ read first 50 bytes while (not end of file XYZ) read next 50 bytes close file 0 XYZ 0 1 FILE ZXY 50 Request open file XYZ A CLIENT A SERVER ? Answer: file pointer to file XYZ
The information the client has to pass to the server is much smaller Pointer File Position Open file XYZ read first 50 bytes while (not end of file XYZ) read next 50 bytes close file 0 XYZ 50 1 FILE ZXY 50 Request 0, read 50 A CLIENT A SERVER ? Answer: the content
The information at the server should be updated with every request Pointer File Position Open file XYZ read first 50 bytes while (not end of file XYZ) read next 50 bytes close file 0 XYZ 100 1 FILE ZXY 50 Request 0, read 50 A CLIENT A SERVER ? Answer: the content
It is important to close the file !!! Pointer File Position Open file XYZ read first 50 bytes while (not end of file XYZ) read next 50 bytes close file 0 XYZ 100 1 FILE ZXY 50 Request 0, read 50 A CLIENT A SERVER ? Answer: the content
Problems with stateful servers They are more efficient but they are more sensitive to errors, especially with UDP connections What if a request does not arrive to the server? What if the client collapses without telling it?
New products between the application and transport layer make distributed programming much easier Libraries for distributed programming (middleware) RPC, CORBA, RMI
RPC: remote procedure call Remote process 1. Obtain reference 2. Call procedure & Receive results as the procedure were in the calling computer
RMI in JAVA (similar to CORBA) server Other applications use and share this object (data) Creates and publishes a Remote Object
Problems to solve How does the client which are the name of the procedures that can be invoked (interface file) How can a client know where to find a remote object? (server) How is communication implemented? (http protocols)