Topic 5: Sockets *Ευχαριστίες στους Jim Kurose, Keith Ross, Τάκη Σταµατόπουλο, Αλέξη ελή, και Αντώνη ελιγιαννάκη
Επικοινωνία διεργασιών σε διαφορετικούς υπολογιστές Έχουµε δει(ή θαδούµε) διαδιεργασιακή επικοινωνία στο ίδιο µηχάνηµα Μέσω αρχείων Σήµατα Αγωγοί Κοινόχρηστη µνήµη... Τι γίνεται αν ενδιάµεσα υπάρχει ένα δίκτυο; 2
Επικοινωνία διεργασιών σε διαφορετικούς υπολογιστές Συνήθως µοντέλο πελάτη- ( client-server ) εξυπηρετητή Ο εξυπηρετητής παρέχει κάποια υπηρεσία Ο εξυπηρετητής περιµένει να δεχτεί συνδέσεις από πελάτες Πολλοί πελάτες συνδέονται για να χρησιµοποιήσουν την υπηρεσία Πελάτης-εξυπηρετητής µιλάνε απευθείας 3
Μερικές εφαρµογές/ υπηρεσίες δικτύου E-mail Web Instant messaging Remote login P2P file sharing Multi-user network games Streaming stored video clips Internet telephone Real-time video conference Massive parallel computing
Μοντέλα Επικοινωνίας Client-server Peer-to-peer (P2P) Hybrid of client-server and P2P
Client-server architecture server: always-on host permanent IP address server farms for scaling clients: communicate with server may be intermittently connected may have dynamic IP addresses do not communicate directly with each other
Pure P2P architecture no always-on server arbitrary end systems directly communicate peers are intermittently connected and change IP addresses example: Gnutella Highly scalable but difficult to manage
Hybrid of client-server and P2P Skype Internet telephony app Finding address of remote party: centralized server(s) Client-client connection is direct (not through server) Instant messaging Chatting between two users is P2P Presence detection/location centralized: User registers its IP address with central server when it comes online User contacts central server to find IP addresses of buddies
Processes communicating Process: program running within a host. within same host, two processes communicate using interprocess communication (defined by OS). processes in different hosts communicate by exchanging messages Client process: process that initiates communication Server process: process that waits to be contacted Note: applications with P2P architectures have client processes & server processes
Transport Services Offered by OS OS deals with host to host data transfer Did the data get there? What to do when the data gets there? Supplies the application layer with a socket API (connect, send, receive) When data arrives at a host from the net, determines which appl process is to get it Applications typically use one of TCP UDP
What transport service does an app need? Data loss some apps (e.g., audio) can tolerate some loss other apps (e.g., file transfer, telnet) require 100% reliable data transfer Timing some apps (e.g., Internet telephony, interactive games) require low delay to be effective Bandwidth some apps (e.g., multimedia) require minimum amount of bandwidth to be effective other apps ( elastic apps ) make use of whatever bandwidth they get
Internet transport protocols services TCP service: connection-oriented: setup required between client and server processes reliable transport between sending and receiving process flow control: sender won t overwhelm receiver congestion control: throttle sender when network overloaded does not provide: timing, minimum bandwidth guarantees UDP service: unreliable data transfer between sending and receiving process does not provide: connection setup, reliability, flow control, congestion control, timing, or bandwidth guarantee Q: why bother? Why is there a UDP?
TCP versus UDP Applications using TCP: HTTP (WWW), FTP (file transfer), Telnet (remote login), SMTP (email) Applications using UDP: streaming media, teleconferencing, DNS, Internet telephony Πως θα διαλέγατε ανάµεσα στο TCP & UDP?
Processes communicating Process: program running within a host. within same host, two processes communicate using interprocess communication (defined by OS). processes in different hosts communicate by exchanging messages Client process: process that initiates communication Server process: process that waits to be contacted Note: applications with P2P architectures have client processes & server processes
Sockets (Υποδοχές) process sends/receives messages to/from its socket socket analogous to door sending process shoves message out door sending process relies on transport infrastructure on other side of door which brings message to socket at receiving process host or server process socket TCP with buffers, variables controlled by app developer controlled by OS Internet host or server process socket TCP with buffers, variables API: (1) choice of transport protocol OS will use; (2) ability to fix a few parameters
Addressing processes to receive messages, process must have identifier host device has unique 32- bit IP address Q: does IP address of host on which process runs suffice for identifying the process?
Addressing processes to receive messages, process must have identifier host device has unique 32-bit IP address Q: does IP address of host on which process runs suffice for identifying the process? Answer: NO, many processes can be running on same host identifier includes both IP address and port numbers associated with process on host. Example port numbers: HTTP server: 80 Mail server: 25 to send HTTP message to www.di.uoa.gr web server: IP address: 147.52.17.2 Port number: 80
Application protocol defines Types of messages exchanged, e.g., request, response Message syntax: what fields in messages & how fields are delineated Message semantics meaning of information in fields Rules for when and how processes send & respond to messages Public-domain protocols: defined in RFCs allows for interoperability e.g., HTTP, SMTP Proprietary protocols: e.g., KaZaA
Socket programming Goal: learn how to build client/server application that communicate using sockets Socket API introduced in BSD4.1 UNIX, 1981 explicitly created, used, released by apps client/server paradigm two types of transport service via socket API: unreliable datagram reliable, byte stream-oriented socket a host-local, applicationcreated, OS-controlled interface (a door ) into which application process can both send and receive messages to/from another application process
Σύγκριση TCP-UDP TCP UDP ΑΠΑΙΤΗΣΗ ΣΥΝ ΕΣΗ ΝΑΙ ΌΧΙ ΑΞΙΟΠΙΣΤΙΑ ΝΑΙ ΌΧΙ ΟΡΙΑ ΜΗΝΥΜΑΤΩΝ ΌΧΙ ΝΑΙ ΙΑ ΟΧΙΚΟΤΗΤΑ ΜΗΝΥΜΑΤΩΝ ΝΑΙ ΌΧΙ ΕΙ ΟΣ ΥΠΟ ΟΧΗΣ SOCK_STREAM SOCK_DGRAM 20
Socket-programming using TCP Socket: a door between application process and end-end-transport protocol (UDP or TCP) TCP service: reliable transfer of bytes from one process to another controlled by application developer controlled by operating system process socket TCP with buffers, variables internet process socket TCP with buffers, variables controlled by application developer controlled by operating system host or server host or server
Socket programming with TCP Client must contact server server process must first be running server must have created socket (door) that welcomes client s contact Client contacts server by: creating client-local TCP socket specifying IP address, port number of server process When client creates socket: client TCP establishes connection to server TCP When contacted by client, server TCP creates new socket for server process to communicate with client allows server to talk with multiple clients source port numbers used to distinguish clients application viewpoint TCP provides reliable, in-order transfer of bytes ( pipe ) between client and server
Πρωτόκολλο TCP Αναµονή συνδέσεων (welcoming socket) Εδώ τελικά επικοινωνεί µε τον πελάτη 23
Πολλοί Πελάτες 24
Σειριακός Εξυπηρετητής ΠΑΝΤΑ ΜΕΙΟΝΕΚΤΗΜΑΤΑ 1) Ένα πελάτη τη φορά, µέχρι να τελειώσει ο πελάτης 2) Αιτήσεις άλλων πελατών περιµένουν και µπορεί να αποτύχουν 25
Πιο Σύνηθες Ο εξυπηρετητής γεννάει ένα παιδί για κάθε πελάτη ΜΕΙΟΝΕΚΤΗΜΑ Πάρα πολλά παιδιά αν πολλοί πελάτες 26
Λειτουργία Λειτουργία Πατέρα Λειτουργία Παιδιού ΠΑΝΤΑ 27
Ερωτήσεις Γιατί ο εξυπηρετητής να κλείνει τους περιγραφείς; Για να µηξεµείνει από περιγραφείς Για να µπορεί ο πελάτης να διαγνώσει EOF µε τηread (όπως στους σωλήνες, αν δεν υπάρχουν άλλα δεδοµένα και η άλλη πλευρά κλείσει το άκρο) 28
Εναλλακτικό Μοντέλο Το ίδιο γίνεται και µε νήµατα Αντί για µια καινούργια διεργασία ανά πελάτη, δηµιουργεί ένα καινούργιο νήµα. ΜΕΙΟΝΕΚΤΗΜΑ Συγχρονισµός νηµάτων για διάβασµα δεδοµένων πελατών (πχ από σωλήνα) 29
Χρήσιµες Γνώσεις Πχ, SUN (big-endian) vs Intel (little-endian) αρχιτεκτονικές 30
Χρήσιµες Γνώσεις (2) ήαf_inet (standard) 31
οµές για ορισµό διευθύνσεων υποδοχών #include <netinet/in.h> struct sockaddr_in { sa_family_t sin_family; /*AF_INET */ in_port sin_port; /* port number */ struct in_addr sin_addr; /* IPv4 address */ }; struct in_addr { in_addr_t s_addr; /* IPv4 unsigned 32 bit int */ };
Συνάρτηση bind 33
Συναρτήσεις connect, listen, accept 5 Συνδέσου εδώ 34
Συναρτήσεις bzero, bcopy Αντίθετα από memcpy 35
Πρακτικές λύσεις Αν ο εξυπηρετητής πάει να γράψει σε socket που έχει κλείσει ο πελάτης, τότε σήµα SIGPIPE Να βάζετε στην αρχή χειριστή του σήµατος SIGPIPE Για γρήγορη επαναχρησιµοποίηση των ports ενός socket, κάντε χρήση της συνάρτησης setsockopt (µε ενεργοποίηση της επιλογής SO_REUSEADDR δείτε το βιβλίο για λεπτοµέρειες) 36
TCP Επικοινωνία 37
Παράδειγµα int_str_server.c 38
Παράδειγµα int_str_server.c (2) 39
40
Αποτέλεσµα Εκτέλεσης 41
Χρήσιµες Γνώσεις INADDR_ANY (0.0.0.0) Αντιστοιχεί στο άκου σε «όλες οι διευθύνσεις» port = 0 Αφήνει το λειτουργικό να επιλέξει port. setsockopt() Θέτει ειδικές ιδιότητες του socket Θα δούµε χρήση παρακάτω shutdown(int socket_fd, int how) Κλείνει τη µια κατεύθυνση ενός αµφίδροµου socket how = SHUT_RD, SHUT_WR, or SHUT_RDWR Example: HTTP client sends request, then shutdown(shut_wr) to tell server I am done sending, but can still receive 42
Χρήσιµες Γνώσεις Που είναι συνδεδεµένο το socket; Τι θύρα επέλεξε το λειτουργικό; getsockname(int sock_fd, struct sockaddr *sa, int *sa_len) διεύθυνσηόπουέχειγίνειτο socket bind. getpeername(int sock_fd, struct sockaddr *sa, int *sa_len) διεύθυνση στο άλλο άκρο της σύνδεσης. 43
Πρωτόκολλο UDP User Datagram Protocol Επικοινωνία χωρίς σταθερή σύνδεση Ανταλλαγή απλών µηνυµάτων µεταξύ εξυπηρετητή-πελατών Μηνύµατα µπορούν να χαθούν, φτάσουν µε λάθος σειρά 44
UDP Επικοινωνία 45
Συναρτήσεις sendto, recvfrom UDP 46
Εκτέλεση Προγράµµατος 47
Παράδειγµα int_dgr_server.c Αυτόµατη επιλογή Βρες πραγµατικό port 48
Παράδειγµα int_dgr_client.c 49
Εκτέλεση Προγράµµατος 50
Εξέταση Ενεργών Sockets Εντολή netstat Πχ: netstat n l p είξε µενούµερα (-n) τα LISTEN-ing sockets (-l) και τις διεργασίες στις οποίες ανήκουν (-p) Ακόµα... -t / -u TCP/UDP -a socket σε όλα τα states TCP states LISTEN, ESTABLISHED, TIME_WAIT 51
Παράδειγµα rls.c 52
Παράδειγµα rlsd.c 53
(. συν ) Παράδειγµα rlsd.c Αντί για ανακατεύθυνση εντολής σε αρχείο, popen. Μπορώ να διαβάσω ή γράψω µε popen. ΌΧΙ και τα 2 µαζί 54
Εκτέλεση Προγράµµατος 55