Networking S04, Recitation, Section A

Slides:



Advertisements
Similar presentations
Introduction to Sockets Jan Why do we need sockets? Provides an abstraction for interprocess communication.
Advertisements

Network Programming Topics Peeking at Internet traffic Programmer’s view of the Internet (review) Sockets interface Writing clients and servers Understanding.
Chris Riesbeck, Fall 2007 Network Programming Topics –Sockets interface –Writing clients and servers.
Socket Programming Application Programming Interface.
Sockets Programming CS144 Review Session 1 April 4, 2008 Ben Nham.
Carnegie Mellon 1 Network Programming : Introduction to Computer Systems 20 th Lecture, Nov. 2, 2010 Instructors: Randy Bryant and Dave O’Hallaron.
Network Programming Topics Sockets interface Writing clients and servers CS 105 “Tour of the Black Holes of Computing!”
Networks: TCP/IP Socket Calls1 Elementary TCP Sockets Chapter 4 UNIX Network Programming Vol. 1, Second Ed. Stevens.
Quick Overview. 2 ISO/OSI Reference Model Application Application Presentation Presentation Session Session Transport Transport Network Network Data Link.
Networks and Network Programming May 24, 2006 Topics Client-server programming model Networks A programmer’s view of the Internet Sockets interface Writing.
– 1 – CS213, S’08 Network Programming June 4, 2008 Topics Sockets interface Writing clients and servers.
תקשורת באינטרנט Tutorial 8. 2 n Socket programming u What is socket ? u Sockets architecture u Types of Sockets u The Socket system calls u Data Transfer.
Network Programming November 19, 2007 Topics Peeking at Internet traffic Programmer’s view of the Internet (review) Sockets interface Writing clients and.
Network Programming Nov. 6, 2008 Topics Peeking at Internet traffic Programmer’s view of the Internet (review) Sockets interface Writing clients and servers.
Network Programming Nov 21, 2002 Topics Programmer’s view of the Internet (review) Sockets interface Writing clients and servers class26.ppt “The.
CS 311 – Lecture 18 Outline IPC via Sockets – Server side socket() bind() accept() listen() – Client side connect() Lecture 181CS Operating Systems.
Internetworking II: Network programming April 20, 2000 Topics client/server model Berkeley sockets –TCP client and server examples –UDP client and server.
1. Networks and the Internet 2. Network programming.
Recitation 12: 11/25/02 Outline Socket Interface –Echo Client/Server Http Protocol Evaluation Annie Luo Office Hours: Thursday.
CS345 Operating Systems Φροντιστήριο Άσκησης 2. Inter-process communication Exchange data among processes Methods –Signal –Pipe –Sockets.
University of Amsterdam Computer Systems – Iterative server Arnoud Visser 1 Computer Systems Iterative server.
Computer Systems II CSC 2405 Network Programming.
INTERNET L4: Internet. Last Lecture Re-cap: IP Internet  Based on the TCP/IP protocol family  IP (Internet protocol) : Provides basic naming scheme.
Network Programming Topics Programmer’s view of the Internet Sockets interface Writing clients and servers CS 105 “Tour of the Black Holes of Computing!”
The Application Layer Application Services (Telnet, FTP, , WWW) Reliable Stream Transport (TCP) Connectionless Packet Delivery Service (IP) Unreliable.
Recitation 12 (Nov. 29) Outline Socket programming Lab 7: part 1 Reminder Lab 7: Due next Thursday Minglong Shao Office hours: Thursdays.
Carnegie Mellon 1 Network Programming / : Introduction to Computer Systems 21 st Lecture, Nov. 7, 2013 Instructors: Randy Bryant, Dave O’Hallaron,
Socket Programming Lec 2 Rishi Kant. Review of Socket programming Decide which type of socket – stream or datagram. Based on type create socket using.
Network Programming September 6, 2005 Topics Programmer’s view of the Internet Sockets interface Writing clients and servers Concurrency with I/O multiplexing.
Network programming Nov 16, 2000 Topics Client-server model Sockets interface Echo client and server class24.ppt “The course that gives CMU its.
Carnegie Mellon Introduction to Computer Systems /18-243, spring th Lecture, Nov. 5 th Instructors: Roger Dannenberg and Greg Ganger.
Introduction to Socket
Socket Programming Tutorial Department of Computer Science Southern Illinois University Edwardsville Fall, 2015 Dr. Hiroshi Fujinoki
Socket Programming Lab 1 1CS Computer Networks.
Sockets Socket = abstraction of the port concept: –Application programs request that the operating system create a socket when one is needed –O.S. returns.
Carnegie Mellon 1 Network Programming / : Introduction to Computer Systems 21 st Lecture, Nov. 8, 2012 Instructors: Dave O’Hallaron, Greg.
Network Programming Topics Sockets interface Writing clients and servers CS 105 “Tour of the Black Holes of Computing!”
– 1 – , Spring 2006 Network Programming Introduction Jan. 25, 2006 Topics Programmer's view of the Internet Sockets interface Writing clients and.
Intro to Socket Programming CS 360. Page 2 CS 360, WSU Vancouver Two views: Server vs. Client Servers LISTEN for a connection and respond when one is.
2: Application Layer 1 Socket Programming UNIX Network Programming, Socket Programming Tutorial:
Carnegie Mellon Introduction to Computer Systems /18-243, spring rd Lecture, Apr. 14 th Instructors: Gregory Kesden and Markus Püschel.
CSCI 330 UNIX and Network Programming Unit XIV: User Datagram Protocol.
回到第一頁 Client/sever model n Client asks (request) – server provides (response) n Typically: single server - multiple clients n The server does not need.
Networking Programming A Tiny Web Server 1. Outline Review of Web Server The Tiny Web Server Some Practical Issues Suggested Reading: –11.5~
1 Networking Programming (I). A Client-Server Transaction Client process Server process 1. Client sends request 2. Server handles request 3. Server sends.
1 Spring Semester 2008, Dept. of Computer Science, Technion Internet Networking recitation #7 Socket Programming.
1 Networking Programming. 2 Outline Connection & Socket Sockets Interface –Functions –Echo Client and Server Suggested Reading: –11.4.
Networking Alan L. Cox Some slides adapted from CMU slides.
Carnegie Mellon 1 Network Programming / : Introduction to Computer Systems 21 st Lecture, April 2, 2015 Instructors: Franz Franchetti, Seth.
– 1 – , Fall 2003 Network Programming Introduction Sept. 1, 2004 Topics Programmer's view of the Internet Sockets interface Writing clients and servers.
CS 1652 Jack Lange University of Pittsburgh
Extending echo server HTTP Broken pipe error Feedback and evaluation
Instructors: Anthony Rowe, Seth Goldstein and Greg Kesden
Network Programming /18-243: Introduction to Computer Systems
CS 105 “Tour of the Black Holes of Computing!”
Network Programming April 11, 2008
Network Programming Jan 13, 2005
Internet Topics Client-server programming model Networks in general
Network programming Nov 27, 2001
Recitation 11 – 4/29/01 Outline Sockets Interface
Web Services Topics Proxies Sockets interface
Network Programming Chapter 12
Networking Programming
Network Programming: Part II CSCI 380: Operating Systems Lecture #13
Networking Programming
Network Programming: Part I CSCI 380: Operating Systems
Network Programming: Part II CSCI 380: Operating Systems
Network Programming November 3, 2008
Internet Networking recitation #8
Presentation transcript:

Networking 15213-S04, Recitation, Section A Socket Echo Client-Server Extend to Echo Proxy Broken Pipe

Networking Bibles UNIX Network Programming, Volume 1, Second Edition: Networking APIs: Sockets and XTI, Prentice Hall, 1998. UNIX Network Programming, Volume 2, Second Edition: Interprocess Communications, Prentice Hall, 1999. TCP/IP Illustrated, Volume 1: The Protocols, Addison-Wesley, 1994. TCP/IP Illustrated, Volume 2: The Implementation, Addison-Wesley, 1995. TCP/IP Illustrated, Volume 3: TCP for Transactions, HTTP, NNTP, and the UNIX Domain Protocols, Addison-Wesley, 1996.

Connection Clients and servers communicate by sending streams of bytes over connections: point-to-point, full-duplex, and reliable A socket is an endpoint of a connection Socket address is an IPaddress:port pair A port is a 16-bit integer that identifies a process: well-known port: associated with some service provided by a server (e.g., port 80 is associated with Web servers) /etc/services.global ephemeral port: assigned automatically on client when client makes a connection request A connection is uniquely identified by the socket addresses of its endpoints (socket pair) (cliaddr:cliport, servaddr:servport)

Socket A socket is a descriptor that lets an application read/write from/to the network Key idea: Unix uses the same abstraction for both file I/O and network I/O Using regular Unix read and write I/O functions Can also be used for IPC (inter-process communication) The main difference between file I/O and socket I/O is socket family value

sockaddr_in Defined in /usr/include/netinet/in.h Internet-style sockets are characterized by a 32-bit IP address and a port /* Internet address */ struct in_addr { unsigned int s_addr; /* 32-bit IP address */ }; /* Internet style socket address */ struct sockaddr_in { unsigned short int sin_family; /* Address family (AF_INET) */ unsigned short int sin_port; /* Port number */ struct in_addr sin_addr; /* IP address */ unsigned char sin_zero[...]; /* Pad to sizeof “struct sockaddr” */

Socket System Calls must socket() bind() listen() connect() accept() close() socket options ioctl() fcntl() setsockopt() getsockopt() gethostbyname() gethostbyaddr() getsockname() data related select() read() write() send() recv() sendto() recvfrom() misc shutdown() socketpair() sendmsg() recvmsg()

A Simple C/S Application -- Echo 1. Client sends an input line Echo Client process Echo Server process 3. Client displays the text it receives 2. Server sends the same text as it receives

Sequence of Socket System Calls Client Server socket socket connect bind open_listenfd open_clientfd listen Connection request accept rio_readlineb rio_writen close EOF rio_readlineb close

Echo Client Main Routine #include "csapp.h" /* usage: ./echoclient host port */ int main(int argc, char **argv) { int clientfd, port; char *host, buf[MAXLINE]; rio_t rio; host = argv[1]; port = atoi(argv[2]); clientfd = open_clientfd(host, port); Rio_readinitb(&rio, clientfd); while (Fgets(buf, MAXLINE, stdin) != NULL) { Rio_writen(clientfd, buf, strlen(buf)); Rio_readlineb(&rio, buf, MAXLINE); Fputs(buf, stdout); } Close(clientfd); exit(0);

Echo Client: open_clientfd int open_clientfd(char *hostname, int port) { int clientfd; struct hostent *hp; struct sockaddr_in serveraddr; if ((clientfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) return -1; /* check errno for cause of error */ /* Fill in the server's IP address and port */ if ((hp = gethostbyname(hostname)) == NULL) return -2; /* check h_errno for cause of error */ bzero((char *) &serveraddr, sizeof(serveraddr)); serveraddr.sin_family = AF_INET; bcopy((char *)hp->h_addr, (char *)&serveraddr.sin_addr.s_addr, hp->h_length); serveraddr.sin_port = htons(port); /* Establish a connection with the server */ if (connect(clientfd, (SA *)&serveraddr, sizeof(serveraddr))<0) return -1; return clientfd; } opens a connection from the client to the server at hostname:port

Echo Server: Main Routine int main(int argc, char **argv) { int listenfd, connfd, port, clientlen; struct sockaddr_in clientaddr; struct hostent *hp; char *haddrp; port = atoi(argv[1]); /* the server listens on a port passed on the command line */ listenfd = open_listenfd(port); while (1) { clientlen = sizeof(clientaddr); connfd = Accept(listenfd, (SA *)&clientaddr, &clientlen); hp = Gethostbyaddr((const char *)&clientaddr.sin_addr.s_addr, sizeof(clientaddr.sin_addr.s_addr), AF_INET); haddrp = inet_ntoa(clientaddr.sin_addr); printf("server connected to %s (%s)\n", hp->h_name, haddrp); echo(connfd); Close(connfd); }

Echo Server: open_listenfd int open_listenfd(int port) { int listenfd, optval=1; struct sockaddr_in serveraddr; /* Create a socket descriptor */ if ((listenfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) return -1; /* Eliminates "Address already in use" error from bind. */ if (setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, (const void *)&optval , sizeof(int)) < 0) ... (more)

Echo Server: open_listenfd (cont) ... /* Listenfd will be an endpoint for all requests to port on any IP address for this host */ bzero((char *) &serveraddr, sizeof(serveraddr)); serveraddr.sin_family = AF_INET; serveraddr.sin_addr.s_addr = htonl(INADDR_ANY); serveraddr.sin_port = htons((unsigned short)port); if (bind(listenfd,(SA *)&serveraddr,sizeof(serveraddr))<0) return -1; /* Make it a listening socket ready to accept connection requests */ if (listen(listenfd, LISTENQ) < 0) return listenfd; }

accept() listenfd(3) 1. Server blocks in accept, waiting for connection request on listening descriptor listenfd. client server clientfd connection request listenfd(3) client server 2. Client makes connection request by calling and blocking in connect. clientfd listenfd(3) 3. Server returns connfd from accept. Client returns from connect. Connection is now established between clientfd and connfd. client server clientfd connfd(4)

Echo Server: echo void echo(int connfd) { size_t n; char buf[MAXLINE]; rio_t rio; Rio_readinitb(&rio, connfd); while((n = Rio_readlineb(&rio, buf, MAXLINE)) != 0) { printf("server received %d bytes\n", n); Rio_writen(connfd, buf, n); }

Echo Proxy A proxy is an middle agent between a client and an origin server. To the client, the proxy acts like a server. To the server, the proxy acts like a client. Echo Client process Server Echo Client process Server Echo proxy process

Call Sequence in Echo Proxy Client proxy Server socket socket socket bind bind listen listen connect accept connect accept Web proxy’s benefit rio_writen rio_readlineb rio_writen rio_readlineb rio_readlineb rio_writen rio_readlineb rio_writen ... ... ...

Changing main int main(int argc, char **argv) { int listenfd, connfd, port, clientlen, server_port; struct sockaddr_in clientaddr; struct hostent *hp; char *haddrp, *server; port = atoi(argv[1]); server = argv[2]; server_port = atoi(argv[3]); listenfd = Open_listenfd(port); while (1) { clientlen = sizeof(clientaddr); connfd = Accept(listenfd, (SA *)&clientaddr, &clientlen); . . . echo_forward(connfd, server, server_port); Close(connfd); } exit(0);

echo_forward() void echo_forward(int connfd, char *server, int server_port) { int forwardfd; rio_t rio_conn, rio_forward; ssize_t n; char buf[MAXLINE]; /* connect to the server */ forwardfd = open_clientfd(server, server_port); Rio_readinitb(&rio_forward, forwardfd); Rio_readinitb(&rio_conn, connfd); while (1) { if ((n = Rio_readlineb(&rio_conn, buf, MAXLINE)) == 0) break; Rio_writen(forwardfd, buf, n); if ((n = Rio_readlineb(&rio_forward, buf, MAXLINE)) == 0) Rio_writen(connfd, buf, n); } Close(forwardfd);

L7 Proxy Different request and response (HTTP) Concurrency Echo Echo Client process Server Echo proxy process Web Browser process Web proxy process Web Server process

Broken Pipe Error When reading or writing to a socket, whose peer has already been closed e.g. click “stop” on web browser SIGPIPE signal and EPIPE errno For example, when writing to a broken socket For the first write, return -1 and set EPIPE For subsequent writes, Send SIGPIPE signal, which terminates process If the signal is blocked or handled, return -1 and set EPIPE

How to deal with broken pipe? Block SIGPIPE signal Ignore EPIPE error in Rio wrappers of csapp.c Example of how we handle broken pipe in echo server In server main(), block SIGPIPE signal In csapp.c, ignore EPIPE error in Rio wrappers In echo(), deal with cases when return value is -1

Summary Socket Echo Client-Server Extend to Echo Proxy Broken Pipe Connection, Socket address sockaddr_in, socket system calls Echo Client-Server Sequence of socket system calls Extend to Echo Proxy Combine the code from both server and client Broken Pipe Block SIGPIPE and ignore EPIPE