Download Message Passing

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
CSS490 Message Passing
Textbook Ch2 - 3
Instructor: Munehiro Fukuda
These slides were compiled from the course textbook, the reference books, and the
instructor’s original materials.
Winter, 2004
CSS490 Message Passing
1
OSI 7 Layers
Site
A
7
Application
6
Presentation
5
Session
4
Transport
3
Network
2
1
Data link
Physical
Site
B
Application protocol
Presentation protocol
Session protocol
Transport protocol
Network protocol
Data link protocol
Physical protocol
Application
Presentation
Session
rsh, ftp, Telnet
Dealing with heterogeneity
And cryptography
Dialog control
(rarely supported)
Transport
UDP, TCP
Network
IP
Data link
IEEE802.2
connection or connectionless
Ethernet
Physical
Network
Winter, 2004
CSS490 Message Passing
2
Physical/Data Link Layer
Example: CSMA/CD and Token Ring

1 listen
3. detect
Ⅹ
2 transmit

1. Free token
2. Attach
3. busy token
Winter, 2004
IEEE802.3: CSMA/CD (Carrier sense
multiple access with collision detection)
1.
Listening to the shared medium
2.
Transmitting a data packet
3.
Detecting collision on the medium
4.
Deferring and retransmitting a packet
in 2k–time base collision window
IEEE802.5: Token Ring
1.
Receiving a free token from my (left)
neighbor
2.
Attaching a data packet to the token
3.
Forwarding the token to my (right)
neighbor
4.
Detaching a packet from the token if it
is addressed here
4. Detach
CSS490 Message Passing
3
Network Layer
Example: IP
Transportation layer
Datagram
Class A
fragmentation
SDL
reassembly
SDL
IP packet ID and size
Destination IP address
Source IP address
IP packet ID and size
Destination IP address
Source IP address
0 Net #
Host #
Octet 2 – 4
(1,677,716)
Octet 1
0-127
Class B
10
Octet 1
128-191
Net #
Host #
Octet 2
Octet 3 – 4
(65,536)
Net #
Host#
Class C
110
Data link layer
Best-effort deliver semantics
Octet 1
128-191
Octet 2 – 3
Octet 4
(256)
Class D: for broadcasting
Winter, 2004
CSS490 Message Passing
4
Transport Layer:
Example1: UDP
client
server
socket()
Create a sock descriptor
socket()
bind()
Bind it to an IP address
bind()
recvfrom()
sendto()
Blocks until data received
recvfrom()
Winter, 2004

User Datagram Protocol
 Connectionless
 May be lost
 No FIFO order
 Multicast feature
 Unix datagram
 Example: TFTP, rwho
sendto()
CSS490 Message Passing
5
Transport Layer:
Example2: TCP
client
server
Transport Control Protocol
 Connection-oriented
Bind it to an IP address
 Reliable
bind()
 FIFO order
Declare this is connection-oriented liseten()
 No Multicast feature
 Unix stream socket
Wait for a connection
accept()
 Example: ftp, http, rsh all
Connection established
connect()
Blocks until connection established major applications
socket()
Create a sock descriptor
socket()
write()
read()
read()
wrte()
Winter, 2004

CSS490 Message Passing
6
Application Layer
Example: RSH
Client
shell
Server
TCP connection
request
Command
rsh ls- l
inetd
rshd
TCP connection
Inherited all the way
To a child
shell
Command
ls -l
Winter, 2004
CSS490 Message Passing
7
Socket Programming: Socket.h
#include <iostream>
extern "C"
{
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <unistd.h>
#include <string.h>
}
// for sockets
// for gethostbyname( )
// for close( )
// for bzero( )
#define NULL_FD -1
#define MAXSIZE 20
class Socket {
public:
Socket( int );
~Socket( );
int getClientSocket( char[] );
int getServerSocket( );
private:
int port;
int clientFd;
int serverFd;
};
Winter, 2004
CSS490 Message Passing
8
Socket Programming:
Socket.cpp (Client)
#include "Socket.h"
Socket::Socket( int port )
: port( port ), clientFd( NULL_FD ),
serverFd( NULL_FD ) {
}
Socket::~Socket( ) {
if ( clientFd != NULL_FD )
close( clientFd );
if ( serverFd != NULL_FD )
close( serverFd );
}
int Socket::getClientSocket( char ipName[] ) {
// Fill in the structure "sendSockAddr" with the server address.
sockaddr_in sendSockAddr;
bzero( (char*)&sendSockAddr, sizeof( sendSockAddr ) );
sendSockAddr.sin_family
= AF_INET; //Address Family Internet
sendSockAddr.sin_addr.s_addr =
inet_addr( inet_ntoa( *(struct in_addr*)*host->h_addr_list ) );
sendSockAddr.sin_port
= htons( port );
// Open a TCP socket (an Internet strem socket).
if( ( clientFd = socket( AF_INET, SOCK_STREAM, 0 ) ) < 0 ) {
cerr << "Cannot open a client TCP socket." << endl;
return NULL_FD;
}
// Connect to the server.
while ( connect( clientFd, (sockaddr*)&sendSockAddr,
sizeof( sendSockAddr ) ) < 0 );
// Get the host entry corresponding to ipName
struct hostent* host = gethostbyname( ipName );
// Connected
if( host == NULL ) {
return clientFd;
cerr << "Cannot find hostname." << endl;
}
return NULL_FD;
}
Winter, 2004
CSS490 Message Passing
9
Socket Programming:
Socket.cpp (Server)
int Socket::getServerSocket( ) {
if ( serverFd == NULL_FD ) { // Server not ready
sockaddr_in acceptSockAddr;
// Open a TCP socket (an internet stream socket).
if( ( serverFd = socket( AF_INET, SOCK_STREAM, 0 ) ) < 0 ) {
cerr << "Cannot open a server TCP socket." << endl;
return NULL_FD;
}
// Bind our local address so that the client can send to us
bzero( (char*)&acceptSockAddr, sizeof( acceptSockAddr ) );
acceptSockAddr.sin_family
= AF_INET; // Address Family Internet
acceptSockAddr.sin_addr.s_addr = htonl( INADDR_ANY );
acceptSockAddr.sin_port
= htons( port );
if( bind( serverFd, (sockaddr*)&acceptSockAddr,
sizeof( acceptSockAddr ) ) < 0 ) {
cerr << "Cannot bind the local address to the server socket." << endl;
return NULL_FD;
}
}
listen( serverFd, 5 );
// Read to accept new requests
int newFd = NULL_FD;
sockaddr_in newSockAddr;
socklen_t newSockAddrSize = sizeof( newSockAddr );
}
if( ( newFd =
accept( serverFd, (sockaddr*)&newSockAddr, &newSockAddrSize ) ) < 0 ) {
cerr << "Cannot accept from another host." << endl;
return NULL_FD;
}
return newFd;
Winter, 2004
CSS490 Message Passing
10
Socket Programming: Main
#include "Socket.h"
#define PORT 10000 // You are given a specific pot from the instructor
int main( int argc, char *argv[] ) {
Socket sock( PORT );
int fd;
if ( argc == 1 ) { // I'm a server
while ( true ) {
if ( ( fd = sock.getServerSocket( ) ) == NULL_FD )
return -1;
char recvMessage[MAXSIZE];
read( fd, recvMessage, MAXSIZE );
cout << recvMessage << endl;
close( fd );
}
}
if ( argc == 2 ) { // I'm a client
if ( ( fd = sock.getClientSocket( argv[1] ) ) == NULL_FD )
return -1;
char sendMessage[MAXSIZE];
cin >> sendMessage;
write( fd, sendMessage, MAXSIZE );
}
return 0;
}
Winter, 2004
CSS490 Message Passing
11
Blocking/Non-Blocking
Communication

Blocking communication

TCP, UDP, and other communication packages



Rendezvous



Client: blocked only when the destination buffer is full
Server: blocked if no message has arrived from the client.
Client: blocked for a server to receive a message
Server: blocked if no message has arrived from the client.
Non-blocking communication

Server does not want to be blocked when



It may receive a message from a different client.
It has another jobs to be done such as computation or
message transmission.
Some synchronization is necessary later.
Winter, 2004
CSS490 Message Passing
12
Synchronization in NonBlocking Communication


Polling

Periodically check if a socket is ready to read data:

Example:
 sd = socket( AF_INET, SOCKET_STREAM, 0);
 set_fl(sd, O_NONBLOCK);
// set the socket as non-blocking
 struct pollfd pfd;
 pfd.fd = sd;
 poll( &pfd, 1, timeout )
// poll the socket status
Interrupt

Notified from the system when a socket is ready to read data;

Example:
 sd = socket(AF_INET, SOCKET_STREAM, 0);
 signal(SIGIO, sigio_func);
// set a future interrupt to call sigio_func( )
 fcntl(sd, F_SETOWN, getpid( ));
// ask OS to deliver this fd interrupt to me
 fcntl(sd, F_SETFL, FASYNC);
// set this fd asynchronous
 int sigio_func( ) { // invoked upon an interrupt }
Winter, 2004
CSS490 Message Passing
13
Buffering

message

message

message
message
message
message
Winter, 2004
No Buffering

A message remains on the sender until the
receiver issues receive( ).

Rendezvous

Performance drawback
Single Message Buffer

The sender can send at most one message
even if the receiver has not issued receive( ).

Stop-and-wait protocol

A message can be kept read in advance.

What if the sender has multiple messages?
Finite-Bound Buffer

Unsuccessful communication
Go-Back-N Technique

Flow-controlled communication - sliding
window in TCP

Socket: capable of changing its buffer size with
setsockopt( )
CSS490 Message Passing
14
Process Addressing


Explicit address
 machine id + local id
 Example: TCP/IP and UDP/IP use IP + port
 Demerit: No process migration allowed
 machine id + local id + the last machine id
 Process migration allowed
 Messages forwarded along links to the final destination
 Receiver informing sender of its last machine id
 Sender using this info from the following messages
Implicit addressing
 System-wide id (function name)
 Example: RPC
 Name server required
Winter, 2004
CSS490 Message Passing
15
Failure Handling
client
server
request
ack
server
client
request
timeout
request 2
response
response
response 2
request
request
ack
response
Winter, 2004

ack
timeout
request 2

timeout


Loss of request
message
Loss of response
message
Unsuccessful
execution of request
Do we really need
acknowledgment
messages?
CSS490 Message Passing
16
Idempotency
server
client
request
server
request
client

Timeout
request 2
response

Timeout
request 3
A pair of request and
response is enough to
handle faults
Idempotency assumed:


Timeout
At-least one semantics
Last-one semantics
response
request 4
reesponse 2
Winter, 2004
CSS490 Message Passing
17
Exactly-One Semantics

Withdraw $100
Withdraw995 $100
$1000-$100
= $900
Not received
Withdraw $100
$1000-$100

= $900 for Trans995
Not received
Withdraw995 $100
Trans995 completed
No subtraction
$900-$100
=$800!
$100 received
Winter, 2004
$100 received
CSS490 Message Passing
What if errors in
the banking
system
New semantics
required:
 Exactly-one
semantics
 Server must
keep track of
the request
sequence
18
Exercises (No turn-in)
1.
2.
3.
4.
5.
Why do we need layered network protocols?
When implementing TCP with datagram, what do we have to take care
of?
Consider the pros and cons of polling and interrupt in non-blocking
communication.
Consider an example inducing an accidental system hang-up (named a
deadlock) in no-buffering communication.
Which of the following operations are idempotent?
1.
cin >> data;
2.
ifstream infile(“input.txt”); infile.seek( );
3.
cout << data;
4.
int a = 1, b = 2, c; c = a + b;
5.
int c = 1; c++;
Winter, 2004
CSS490 Message Passing
19
Related documents