Network Programming in C. Networked Systems 3 Laboratory Sessions and Problem Sets

Similar documents
The Berkeley Sockets API. Networked Systems Architecture 3 Lecture 4

Network Programming in C: The Berkeley Sockets API. Networked Systems 3 Laboratory Sessions

CSE 333 SECTION 7. Client-Side Network Programming

CSE 333 SECTION 8. Sockets, Network Programming

CSE 333 SECTION 6. Networking and sockets

CSE 333 SECTION 7. C++ Virtual Functions and Client-Side Network Programming

CSE 333 SECTION 7. Client-Side Network Programming

TCP. Networked Systems (H) Lecture 13

IP Addresses, DNS. CSE 333 Spring Instructor: Justin Hsia

IP Addresses, DNS. CSE 333 Summer Teaching Assistants: Renshu Gu William Kim Soumya Vasisht

CSE 333 Section 3. Thursday 12 April Thursday, April 12, 12

Sockets. Jin-Soo Kim Computer Systems Laboratory Sungkyunkwan University

Hyo-bong Son Computer Systems Laboratory Sungkyunkwan University

CSE 333 Section 8 - Client-Side Networking

CSE 333 Lecture 16 - network programming intro

UNIX System Programming Lecture 19: IP Sockets

PA #2 Reviews. set_name, get_name, del_name. Questions? Will be modified after PA #4 ~

CSE 333 Lecture network programming intro

Network programming(i) Lenuta Alboaie

CS 3516: Computer Networks

last time redo logging copy-on-write filesystems / snapshots distributed systems motivation, etc.

Network Programming Worksheet 2. Simple TCP Clients and Servers on *nix with C.

Client-side Networking

UNIX Network Programming. Overview of Socket API Network Programming Basics

Lecture 7. Followup. Review. Communication Interface. Socket Communication. Client-Server Model. Socket Programming January 28, 2005

ECE 435 Network Engineering Lecture 2

CSC209H Lecture 9. Dan Zingaro. March 11, 2015

CS 43: Computer Networks. 05: Socket Programming September 12-14, 2018

Computer Network Programming

System Programming. Sockets

CSE 124 Discussion Section Sockets Programming 10/10/17

Context. Distributed Systems: Sockets Programming. Alberto Bosio, Associate Professor UM Microelectronic Departement

Sockets. Dong-kun Shin Embedded Software Laboratory Sungkyunkwan University Embedded Software Lab.

Tutorial on Socket Programming

Oral. Total. Dated Sign (2) (5) (3) (2)

Introduction to Lab 2 and Socket Programming. -Vengatanathan Krishnamoorthi

Category: Informational J. Bound J. McCann Hewlett-Packard W. Stevens February 2003

Socket Programming. #In the name of Allah. Computer Engineering Department Sharif University of Technology CE443- Computer Networks

CLIENT-SIDE PROGRAMMING

Elementary TCP Sockets

Ports under 1024 are often considered special, and usually require special OS privileges to use.

UNIX Sockets. Developed for the Azera Group By: Joseph D. Fournier B.Sc.E.E., M.Sc.E.E.

CSE 333 Lecture 8 - file and network I/O

Sockets and Parallel Computing. CS439: Principles of Computer Systems April 11, 2018

Hybrid of client-server and P2P. Pure P2P Architecture. App-layer Protocols. Communicating Processes. Transport Service Requirements

Sockets. Dong-kun Shin Embedded Software Laboratory Sungkyunkwan University Embedded Software Lab.

CS118 Discussion 1B, Week 1. Taqi Raza BUNCHE 1209B, Fridays 12:00pm to 1:50pm

Programming with TCP/IP. Ram Dantu

Socket Programming TCP UDP

Unix Network Programming

Lab 0. Yvan Petillot. Networks - Lab 0 1

Lecture 3 Overview! Last Lecture! TCP/UDP and Sockets introduction!

IPv6 Porting Applications

A Client-Server Exchange

Socket Programming for TCP and UDP

Outline. Option Types. Socket Options SWE 545. Socket Options. Out-of-Band Data. Advanced Socket. Many socket options are Boolean flags

The BSD UNIX Socket Interface (CS 640 Lecture) Assignment 1. Interprocess Communication (IPC) Work Individually (no groups)

Server-side Programming

Socket Programming. CSIS0234A Computer and Communication Networks. Socket Programming in C

Azblink API for Sending XMPP Messages via HTTP POST

sottotitolo Socket Programming Milano, XX mese 20XX A.A. 2016/17 Federico Reghenzani

TCP: Three-way handshake

Project 3. Reliable Data Transfer over UDP. NTU CSIE Computer Networks 2011 Spring

Lecture 24. Thursday, November 19 CS 375 UNIX System Programming - Lecture 24 1

Unix Network Programming Chapter 4. Elementary TCP Sockets 광운대학교컴퓨터과학과 정보통신연구실 석사과정안중현

A Socket Example. Haris Andrianakis & Angelos Stavrou George Mason University

Introduction to Computer Networks

Introduction to Client-Server Model

Session NM056. Programming TCP/IP with Sockets. Geoff Bryant Process software

Network Socket Programming - 3 BUPT/QMUL

Types (Protocols) Associated functions Styles We will look at using sockets in C Java sockets are conceptually quite similar

TCP Network Programming in C

Introduction to Berkeley Sockets

ECE 435 Network Engineering Lecture 2

Network Socket Programming - 3 BUPT/QMUL

CS 640: Computer Networking

Networks class. CS144 Introduction to Computer Networking. Administrivia. Administrivia 2. Grading. Labs. Goal: Teach the concepts underlying networks

Client-server model The course that gives CMU its Zip! Network programming Nov 27, Using ports to identify services.

Socket Programming. Sungkyunkwan University. Hyunseung Choo Copyright Networking Laboratory

WinSock. What Is Sockets What Is Windows Sockets What Are Its Benefits Architecture of Windows Sockets Network Application Mechanics

C Structures in Practice

Outline. Distributed Computing Systems. Socket Basics (1 of 2) Socket Basics (2 of 2) 3/28/2014

CSCI 4061: Sockets and Network Programming

NETWORK PROGRAMMING. Instructor: Junaid Tariq, Lecturer, Department of Computer Science

Introduction to Berkeley Sockets

Socket Programming. Dr. -Ing. Abdalkarim Awad. Informatik 7 Rechnernetze und Kommunikationssysteme

Review. Preview. Closing a TCP Connection. Closing a TCP Connection. Port Numbers 11/27/2017. Packet Exchange for TCP Connection

Lecture 7 Overview. IPv6 Source: Chapter 12 of Stevens book Chapter 31 of Comer s book

Outline. Distributed Computer Systems. Socket Basics An end-point for a IP network connection. Ports. Sockets and the OS. Transport Layer.

Outline. Operating Systems. Socket Basics An end-point for a IP network connection. Ports. Network Communication. Sockets and the OS

SOCKET PROGRAMMING. What is a socket? Using sockets Types (Protocols) Associated functions Styles

Introduction to Berkeley Sockets

2007 Microsoft Corporation. All rights reserved.

Christian Tschudin (basierend auf einem Foliensatz von C. Jelger und T. Meyer) Departement Mathematik und Informatik, Universität Basel

Application Programming Interfaces

CPSC 213. Introduction to Computer Systems. Inter-Process Communication. Unit 2f

CS321: Computer Networks Introduction to Application Layer

CS321: Computer Networks Socket Programming

Network Programming and Protocl Design. Nixu Ltd.

목포해양대해양컴퓨터공학과. IPv6 적용

Transcription:

Network Programming in C Networked Systems 3 Laboratory Sessions and Problem Sets

Lab Timetable, Aims, and Objectives Teaching Week Activity 14 Introduction 15 Warm-up exercise 16 17 Web client 18 19 20 Web server 21 22 23 - Aims and objectives To demonstrate how the world-wide web works, at a protocol level To teach concurrent network programming in C 2

Relation Between Labs and Lectures Layer 7 Lab 6 5 4 3 2 1 14 15 16 17 18 19 20 21 22 23 Lecture Week 3

Network Programming in C: The Berkeley Sockets API 4

The Berkeley Sockets API Widely used low-level C networking API First introduced in 4.3BSD Unix Now available on most platforms: Linux, MacOS X, Windows, FreeBSD, Solaris, etc. Largely compatible cross-platform Recommended reading: Stevens, Fenner, and Rudoff, Unix Network Programming volume 1: The Sockets Networking API, 3rd Edition, Addison-Wesley, 2003. 5

Concepts Application Socket Network Sockets provide a standard interface between network and application Two types of socket: Stream provides a virtual circuit service Datagram delivers individual packets Independent of network type: Commonly used with TCP/IP and UDP/IP, but not specific to the Internet protocols Only discuss TCP/IP sockets today 6

What is a TCP/IP Connection? A reliable byte-stream connection between two computers Most commonly used in a client-server fashion: The server listens on a well-known port The port is a 16-bit number used to distinguish servers E.g. web server listens on port 80, email server on port 25 The client connects to that port Once connection is established, either side can write data into the connection, where it becomes available for the other side to read The Sockets API represents the connection using a file descriptor 7

TCP/IP Connection Client Server fd fd connfd Socket Network? Socket int fd = socket() int fd = socket() bind(fd,, ) listen(fd, ) connect(fd,, ) connfd = accept(fd, ) write(fd, data, datalen) read(connfd, buffer, buflen) read(fd, buffer, buflen) write(connfd, data, datalen) close(fd) 8 close(connfd)

TCP/IP Connection Client Server fd = socket( ); bind(fd, ); Specify well-known port fd = socket( ); listen(fd, ); Begin listening connect(fd, ); write(fd, ); read(fd, ); TCP/IP connection established Send request Wait for response connfd = accept(fd, ); read(connfd, ); write(connfd, ); Block until connection established close(fd, ); TCP/IP connection shutdown read(connfd, ); EOF read 9 close(connfd, );

Creating a socket #include <sys/socket.h> <sys/types.h> #include <sys/socket.h> int fd; fd = socket(family, type, protocol); if (fd == -1) { // Error: unable to create socket } AF_INET for IPv4 AF_INET6 for IPv6 SOCK_STREAM for TCP SOCK_DGRAM for UDP 0 (not used for Internet sockets) Create an unbound socket, not connected to network; can be used as either a client or a server 10

Handling Errors Socket functions return -1 and set the global variable errno on failure fd = socket(family, type, protocol); if (fd == -1) { switch (errno) { case EPROTONOSUPPORT : // Protocol not supported case EACCES: // Permission denied case default: // Other error } The Unix man pages list possible errors that can occur for each function E.g. do man 2 socket in a terminal, and read the ERRORS section 11

Binding a Server Socket Bind a socket to a port on a network interface Needed to run servers on a well-known port - with addr specified as INADDR_ANY Not generally used on clients, since typically don t care which port used #include <sys/types.h> #include <sys/socket.h> if (bind(fd, addr, addrlen) == -1) { // Error: unable to bind } 12

Listening for Connections #include <sys/types.h> #include <sys/socket.h> if (listen(fd, backlog) == -1) { // Error } Tell the socket to listen for new connections The backlog is the maximum number of connections the socket will queue up, each waiting to be accept() ed 13

Connecting to a Server #include <sys/types.h> #include <sys/socket.h> if (connect(fd, addr, addrlen) == -1) { // Error: unable to open connection } Pointer to a struct sockaddr Size of the struct in bytes Tries to open a connection to the server Times out after 75 seconds if no response 14

Specifying Addresses & Ports Must specify the address and port when calling bind() or connect() The address can be either IPv4 or IPv6 Could be modelled in C as a union, but the designers of the sockets API chose to use a number of structs, and abuse casting instead 15

struct sockaddr Addresses specified via struct sockaddr Has a data field big enough to hold the largest address of any family Plus sa_len and sa_family to specify the length and type of the address Treats the address as an opaque binary string struct sockaddr { uint8_t sa_family_t char }; sa_len; sa_family; sa_data[22]; 16

struct sockaddr_in Two variations exist for IPv4 and IPv6 addresses Use struct sockaddr_in to hold an IPv4 address Has the same size and memory layout as struct sockaddr, but interprets the bits differently to give structure to the address struct in_addr { in_addr_t }; s_addr; struct sockaddr_in { uint8_t sin_len; sa_family_t sin_family; in_port_t sin_port; struct in_addr sin_addr; char sin_pad[16]; }; 17

struct sockaddr_in6 Two variations exist for IPv4 and IPv6 addresses Use struct sockaddr_in6 to hold an IPv6 address Has the same size and memory layout as struct sockaddr, but interprets the bits differently to give structure to the address struct in6_addr { uint8_t s6_addr[16]; }; struct sockaddr_in6 { uint8_t sin6_len; sa_family_t sin6_family; in_port_t sin6_port; uint32_t sin6_flowinfo; struct in6_addr sin6_addr; }; 18

Working with Addresses Work with either struct sockaddr_in or struct sockaddr_in6 Cast it to a struct sockaddr before calling the socket routines struct sockaddr_in addr; // Fill in addr here if (bind(fd, (struct sockaddr *) &addr, sizeof(addr)) == -1) { 19

Creating an Address: Manually (Client) #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> inet_pton() to convert address htons() to convert port struct sockaddr_in addr; inet_pton(af_inet, 130.209.240.1, &addr.sin_addr); addr.sin_family = AF_INET; addr.sin_port = htons(80); if (connect(fd, (struct sockaddr *)&addr, sizeof(addr)) == -1) { 20

Creating an Address: Manually (Server) #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> Usually specify INADDR_ANY htons() to convert port struct sockaddr_in addr; addr.sin_addr.s_addr = INADDR_ANY; addr.sin_family = AF_INET; addr.sin_port = htons(80); if (bind(fd, (struct sockaddr *)&addr, sizeof(addr)) == -1) { 21

Creating an Address: DNS Prefer using DNS names to raw IP addresses Use getaddrinfo() to look-up name in DNS Returns a linked list of struct addrinfo values, representing addresses of the host struct addrinfo { int ai_flags; // input flags int ai_family; // AF_INET, AF_INET6, int ai_socktype; // IPPROTO_TCP, IPPROTO_UDP int ai_protocol; // SOCK_STREAM, SOCK_DRAM, socklen_t ai_addrlen; // length of socket-address struct sockaddr *ai_addr; // socket-address for socket char *ai_canonname; // canonical name of host struct addrinfo *ai_next; // pointer to next in list }; 22

Connecting via a DNS Query struct addrinfo int i; hints, *ai, *ai0; memset(&hints, 0, sizeof(hints)); hints.ai_family = PF_UNSPEC; hints.ai_socktype = SOCK_STREAM; if ((i = getaddrinfo( www.google.com, "80", &hints, &ai0))!= 0) { printf("unable to look up IP address: %s", gai_strerror(i)); } for (ai = ai0; ai!= NULL; ai = ai->ai_next) { fd = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol); if (fd == -1) { perror("unable to create socket"); continue; } } if (connect(fd, ai->ai_addr, ai->ai_addrlen) == -1) { perror("unable to connect"); close(fd); continue; } 23

Accepting Connections #include <sys/types.h> #include <sys/socket.h> int connfd; struct sockaddr_in cliaddr; socklen_t cliaddrlen = sizeof(cliaddr); connfd = accept(fd, (struct sockaddr *) &cliaddr, &cliaddrlen); if (connfd == -1) { // Error } Accepts a connection, returns new file descriptor for the connection (connfd) and client address (cliaddr) 24

Accepting Connections A TCP/IP server may have multiple connections outstanding Can accept() connections one at a time, handling each request in series Can accept() connections and start a new thread for each, allowing it to process several in parallel Each call to accept() returns a new file descriptor 25

Reading and Writing Data #define BUFLEN 1500 ssize_t i; ssize_t rcount; char buf[buflen]; rcount = read(fd, buf, BUFLEN); if (rcount == -1) { // Error has occurred } for (i = 0; i < rcount; i++) { printf( %c, buf[i]); } Read up to BUFLEN bytes of data from connection; blocks until data available Returns actual number of bytes read, or -1 on error Data is not null terminated 26

Reading and Writing Data char data[] = Hello, world! ; int datalen = strlen(data); if (write(fd, data, datalen) == -1) { // Error has occurred } Send data on a TCP/IP connection; blocks until all data can be written Returns actual number of bytes written, or -1 on error 27

Reading and Writing Data #include <stdio.h> #include <stdlib.h> #include <string.h> What gets printed? int main() { char x[] = "Hello, world!"; char *y = malloc(14); sprintf(y, "Hello, world!"); printf("x = %s\n", x); printf("y = %s\n", y); printf("sizeof(x) = %d\n", sizeof(x)); printf("sizeof(y) = %d\n", sizeof(y)); Why? printf("strlen(x) = %d\n", strlen(x)); printf("strlen(y) = %d\n", strlen(y)); } return 0; 28

Closing a Socket #include <unistd.h> close(fd); Close and destroy a socket Close the file descriptor for each connection, then the file descriptor for the underlying socket 29

Programming Exercises 30

Assessment Laboratory work is assessed, total weighting 20% Exercise Date set Date due * Weighting Warm-up Web client Web server 13 January 27 January 17 February 26 January, 12:00pm 16 February, 12:00pm 12 March, 12:00pm * Note: these are hard deadlines; late submissions will receive a mark of zero unless accompanied by a valid special circumstances form. All students are required to attend Wednesday labs 4% 6% 10% 31

Warm-up Exercise Write two programs in C: hello_client and hello_server The server listens for, and accepts, a single TCP connection; it reads all the data it can from that connection, and prints it to the screen; then it closes the connection The client connects to the server, sends the string Hello, world!, then closes the connection Details on the handout 32

Questions? 33