Presentation is loading. Please wait.

Presentation is loading. Please wait.

Winter, 2004CSS490 Message Passing1 Textbook Ch2 - 3 Instructor: Munehiro Fukuda These slides were compiled from the course textbook, the reference books,

Similar presentations


Presentation on theme: "Winter, 2004CSS490 Message Passing1 Textbook Ch2 - 3 Instructor: Munehiro Fukuda These slides were compiled from the course textbook, the reference books,"— Presentation transcript:

1 Winter, 2004CSS490 Message Passing1 Textbook Ch2 - 3 Instructor: Munehiro Fukuda These slides were compiled from the course textbook, the reference books, and the instructor’s original materials.

2 Winter, 2004CSS490 Message Passing2 OSI 7 Layers Site A Application Presentation Session Transport Network Data link Physical Site B Application Presentation Session Transport Network Data link Physical Application protocol Presentation protocol Session protocol Transport protocol Network protocol Data link protocol Physical protocol 7 6 5 4 3 2 1 Network Ethernet IP UDP, TCP rsh, ftp, Telnet Dialog control (rarely supported) Dealing with heterogeneity And cryptography IEEE802.2 connection or connectionless

3 Winter, 2004CSS490 Message Passing3 Physical/Data Link Layer Example: CSMA/CD and Token Ring 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 2 k – 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 1 listen 2 transmit 3. detect Ⅹ 1. Free token 3. busy token 2. Attach 4. Detach

4 Winter, 2004CSS490 Message Passing4 Network Layer Example: IP Datagram LDS Source IP address Destination IP address IP packet ID and size LDS Source IP address Destination IP address IP packet ID and size fragmentation reassembly Best-effort deliver semantics Transportation layer Data link layer Class A Net #Host #0 Octet 1 0-127 Octet 2 – 4 (1,677,716) Net #Host # 10 Class B Octet 1 128-191 Octet 2 Octet 3 – 4 (65,536) Net #Host#110 Class C Octet 1 128-191 Octet 2 – 3 Octet 4 (256) Class D: for broadcasting

5 Winter, 2004CSS490 Message Passing5 Transport Layer: Example1: UDP User Datagram Protocol Connectionless May be lost No FIFO order Multicast feature Unix datagram Example: TFTP, rwho socket() bind() sendto() recvfrom() sendto() client server Blocks until data received Create a sock descriptor Bind it to an IP address

6 Winter, 2004CSS490 Message Passing6 Transport Layer: Example2: TCP Transport Control Protocol Connection-oriented Reliable FIFO order No Multicast feature Unix stream socket Example: ftp, http, rsh all major applications socket() connect() bind() read() liseten() write() wrte() clientserver Blocks until connection established Create a sock descriptor Bind it to an IP address accept() read() Connection established Declare this is connection-oriented Wait for a connection

7 Winter, 2004CSS490 Message Passing7 Application Layer Example: RSH inetd rshd shell Command ls -l shell Command rsh ls- l TCP connection request TCP connection Inherited all the way To a child ClientServer

8 Winter, 2004CSS490 Message Passing8 Socket Programming: Socket.h #include extern "C" { #include // for sockets #include #include // for gethostbyname( ) #include // for close( ) #include // 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; };

9 Winter, 2004CSS490 Message Passing9 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[] ) { // Get the host entry corresponding to ipName struct hostent* host = gethostbyname( ipName ); if( host == NULL ) { cerr << "Cannot find hostname." << endl; return NULL_FD; } // 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 ); // Connected return clientFd; }

10 Winter, 2004CSS490 Message Passing10 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; }

11 Winter, 2004CSS490 Message Passing11 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; }

12 Winter, 2004CSS490 Message Passing12 Blocking/Non-Blocking Communication Blocking communication TCP, UDP, and other communication packages Client: blocked only when the destination buffer is full Server: blocked if no message has arrived from the client. Rendezvous 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.

13 Winter, 2004CSS490 Message Passing13 Synchronization in Non- Blocking 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 }

14 Winter, 2004CSS490 Message Passing14 Buffering 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( ) message

15 Winter, 2004CSS490 Message Passing15 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

16 Winter, 2004CSS490 Message Passing16 Failure Handling Loss of request message Loss of response message Unsuccessful execution of request Do we really need acknowledgment messages? client server timeout request response ack response timeout request ack response request ack request 2 response 2 request 2 timeout

17 Winter, 2004CSS490 Message Passing17 Idempotency A pair of request and response is enough to handle faults Idempotency assumed: At-least one semantics Last-one semantics client server client server Timeout request request 2 request 3 request 4 response reesponse 2 request response

18 Winter, 2004CSS490 Message Passing18 Exactly-One Semantics What if errors in the banking system New semantics required: Exactly-one semantics Server must keep track of the request sequence Withdraw $100 $1000-$100 = $900 Not received Withdraw $100 $900-$100 =$800! $100 received Withdraw995 $100 $1000-$100 = $900 for Trans995 Not received Withdraw995 $100 $100 received Trans995 completed No subtraction

19 Winter, 2004CSS490 Message Passing19 Exercises (No turn-in) 1. Why do we need layered network protocols? 2. When implementing TCP with datagram, what do we have to take care of? 3. Consider the pros and cons of polling and interrupt in non-blocking communication. 4. Consider an example inducing an accidental system hang-up (named a deadlock) in no-buffering communication. 5. 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++;


Download ppt "Winter, 2004CSS490 Message Passing1 Textbook Ch2 - 3 Instructor: Munehiro Fukuda These slides were compiled from the course textbook, the reference books,"

Similar presentations


Ads by Google