1 / 19

CSS490 Message Passing Textbook Ch2 - 3

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. OSI 7 Layers. Site A. Site B. Application protocol. 7. Application. rsh, ftp, Telnet. Application.

primo
Download Presentation

CSS490 Message Passing Textbook Ch2 - 3

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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. CSS490 Message Passing

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

  3. Physical/Data Link LayerExample: CSMA/CD and Token Ring • IEEE802.3: CSMA/CD (Carrier sense multiple access with collision detection) • Listening to the shared medium • Transmitting a data packet • Detecting collision on the medium • Deferring and retransmitting a packet in 2k–time base collision window • IEEE802.5: Token Ring • Receiving a free token from my (left) neighbor • Attaching a data packet to the token • Forwarding the token to my (right) neighbor • Detaching a packet from the token if it is addressed here 1 listen 3. detect 2 transmit Ⅹ 1. Free token 2. Attach 4. Detach 3. busy token CSS490 Message Passing

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

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

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

  7. Application LayerExample: RSH Client Server inetd shell TCP connection request Command rsh ls- l rshd shell TCP connection Inherited all the way To a child Command ls -l CSS490 Message Passing

  8. Socket Programming: Socket.h #include <iostream> extern "C" { #include <sys/types.h> // for sockets #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netdb.h> // for gethostbyname( ) #include <unistd.h> // for close( ) #include <string.h> // 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; }; CSS490 Message Passing

  9. Socket Programming: Socket.cpp (Client) // 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; } #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; } CSS490 Message Passing

  10. 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; } CSS490 Message Passing

  11. 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; } CSS490 Message Passing

  12. 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. CSS490 Message Passing

  13. 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 } CSS490 Message Passing

  14. 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 message message message message message CSS490 Message Passing

  15. 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 CSS490 Message Passing

  16. server client client server request request request 2 ack timeout response timeout response response 2 request request ack ack response request 2 timeout Failure Handling • Loss of request message • Loss of response message • Unsuccessful execution of request • Do we really need acknowledgment messages? CSS490 Message Passing

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

  18. 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 Withdraw995 $100 $1000-$100 = $900 $1000-$100 = $900 for Trans995 Not received Not received Withdraw $100 Withdraw995 $100 Trans995 completed No subtraction $900-$100 =$800! $100 received $100 received CSS490 Message Passing

  19. Exercises (No turn-in) • 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? • cin >> data; • ifstream infile(“input.txt”); infile.seek( ); • cout << data; • int a = 1, b = 2, c; c = a + b; • int c = 1; c++; CSS490 Message Passing

More Related