Introduction to Unix Network Programming
Reference: Stevens Unix Network Programming
CS 241
Copyright : University of Illinois CS 241 Staff
Network Programming
Key Components:
Internet protocols
IP, TCP, UDP, etc API - application programming interface
Sockets
Why focus on the Internet?
Internet Protocol (IP)
IP is standard allows a common namespace across most of Internet reduces number of translations, which incur overhead reasonably simple and elegant, Unix interface
Copyright : University of Illinois CS 241 Staff 2
Sockets
CS 241
Network Programming with Sockets
Socket
Host-local, application-created, OS-controlled Application process can both send and receive messages to/from another application process A transport layer service interface
Sockets API
Introduced in 1981 by BSD 4.1 Implemented as library and/or system calls Similar interfaces to TCP and UDP Also interface to IP (for super-user); raw sockets
Copyright : University of Illinois CS 241 Staff 3
CS 241
Beejs Guide
How-to guide on network programming using Internet sockets, or "sockets programming" http://beej.us/guide/bgnet/
CS 241
Copyright : University of Illinois CS 241 Staff
Outline
Client-Sever Model TCP Connection UDP Services Sockets API Example
CS 241
Copyright : University of Illinois CS 241 Staff
Client-Server Model
Client
Asymmetric Communication
Client sends requests Server sends replies Well-known name Waits for contact Processes requests, sends replies Initiates contact Waits for response
6
Client Server Client
Server/Daemon
Client
Client
CS 241
Copyright : University of Illinois CS 241 Staff
TCP Connections
Transmission Control Protocol (TCP) Service
OSI Transport Layer
process socket TCP with buffers, variables
controlled by application developer controlled by operating system
controlled by application developer controlled by operating system
process socket TCP with buffers, variables
internet
host or server
CS 241
host or server
Copyright : University of Illinois CS 241 Staff 7
TCP Connections
Transmission Control Protocol (TCP) Service
OSI Transport Layer Service Model
Byte stream (interpreted by application) 16-bit port space allows multiple connections on a single host Connection-oriented
Set up connection before communicating Tear down connection when done
CS 241
Copyright : University of Illinois CS 241 Staff
TCP Service
Reliable Data Transfer
Telephone Call
Guaranteed delivery Exactly once if no catastrophic failures In-order delivery Monitors network and adjusts transmission appropriately Full-Duplex byte stream
Sequenced Data Transfer
Guaranteed delivery In-order delivery Connection-oriented Setup connection followed by conversation
Regulated Data Flow
Data Transmission
CS 241
Copyright : University of Illinois CS 241 Staff
UDP Services
User Datagram Protocol Service
OSI Transport Layer Provides a thin layer over IP 16-bit port space (distinct from TCP ports) allows multiple recipients on a single host
CS 241
Copyright : University of Illinois CS 241 Staff
10
UDP Services
Unit of Transfer
Postal Mail
Datagram (variable length packet) No guaranteed delivery Drops packets silently No guarantee of maintained order of delivery No flow control
Unreliable
Unordered
Single mailbox to receive all letters Unreliable Not necessarily in-order Letters sent independently Must address each reply
Unlimited Transmission
CS 241
Copyright : University of Illinois CS 241 Staff
11
Choose between TCP and UDP for each of these apps
File downloads (e.g., Web) Sensor readings Robot control Nanny cam Peer-to-peer video distribution
CS 241
Copyright : University of Illinois CS 241 Staff
12
Addresses and Data
Goal: naming for machines on the Internet Internet domain names
Human readable Variable length Ex: sal.cs.uiuc.edu Each attachment point on Internet is given unique address Easily handled by routers/computers Fixed length Somewhat geographical Ex: 128.174.252.217
Copyright : University of Illinois CS 241 Staff 13
IP addresses
CS 241
Byte Ordering
Big Endian vs. Little Endian
Little Endian (Intel, Arm):
Least significant byte of word is stored in the lowest memory address Most significant byte of word is stored in the lowest memory address
Big Endian (Sun, SGI, HP):
Example: 128.2.194.95 Big Endian Little Endian
128 95 2 194 194 2 95 128
14
CS 241
Copyright : University of Illinois CS 241 Staff
Byte Ordering
Big Endian vs. Little Endian
Little Endian (Intel, Arm):
Least significant byte of word is stored in the lowest memory address Most significant byte of word is stored in the lowest memory address Must be used for some data (i.e. IP Addresses) Key to transmitting binary data
Copyright : University of Illinois CS 241 Staff 15
Big Endian (Sun, SGI, HP):
Network Byte Order = Big Endian
For your app, be consistent
CS 241
Byte Ordering Functions
16- and 32-bit conversion functions (for platform independence) Examples:
int m, n; short int s,t; m s n t = = = = ntohl ntohs htonl htons (n) (t) (m) (s) // // // // net-to-host net-to-host host-to-net host-to-net long (32-bit) translation short (16-bit) translation long (32-bit) translation short (16-bit) translation
CS 241
Copyright : University of Illinois CS 241 Staff
16
Reserved Ports
Keyword ------tcpmux tcpmux echo echo systat systat daytime daytime qotd qotd chargen chargen ftp-data ftp-data ftp ftp ssh ssh telnet telnet smtp smtp Decimal ------0/tcp 0/udp 1/tcp 1/udp 7/tcp 7/udp 11/tcp 11/udp 13/tcp 13/udp 17/tcp 17/udp 19/tcp 19/udp 20/tcp 20/udp 21/tcp 21/udp 22/tcp 22/udp 23/tcp 23/udp 25/tcp 25/udp Description ----------Reserved Reserved TCP Port Service TCP Port Service Echo Echo Active Users Active Users Daytime (RFC 867) Daytime (RFC 867) Quote of the Day Quote of the Day Character Generator Character Generator File Transfer Data File Transfer Data File Transfer Ctl File Transfer Ctl SSH Remote Login SSH Remote Login Telnet Telnet Simple Mail Transfer Simple Mail Transfer Keyword ------time time name name nameserver nameserver nicname nicname domain domain whois++ whois++ gopher gopher finger finger http http www www www-http www-http kerberos kerberos Decimal ------37/tcp 37/udp 42/tcp 42/udp 42/tcp 42/udp 43/tcp 43/udp 53/tcp 53/udp 63/tcp 63/udp 70/tcp 70/udp 79/tcp 79/udp 80/tcp 80/udp 80/tcp 80/udp 80/tcp 80/udp 88/tcp 88/udp Description ----------Time Time Host Name Server Host Name Server Host Name Server Host Name Server Who Is Who Is Domain Name Server Domain Name Server whois++ whois++ Gopher Gopher Finger Finger World Wide Web HTTP World Wide Web HTTP World Wide Web HTTP World Wide Web HTTP World Wide Web HTTP World Wide Web HTTP Kerberos Kerberos
CS 241
Copyright : University of Illinois CS 241 Staff
17
Socket interface
A simplified API for accessing sockets
Similar to the interface from Java sockets Function calls not found in Unix systems
But do convey concepts
Will go over the gory details in disc. Programming questions on final will be at this level of abstraction
Copyright : University of Illinois CS 241 Staff 19
CS 241
Basic Unix Concepts
Input/Output I/O
Per-process table of I/O channels Table entries describe files, sockets, devices, pipes, etc. Unifies I/O interface Table entry/index into table called file descriptor Return value
Error Model
0 on success, num bytes for file descriptors -1 on failure NULL on failure for routines returning pointers
errno variable
CS 241
Copyright : University of Illinois CS 241 Staff
20
TCP Connection Example
client
socket connect socket bind listen accept read write close
server
write read close
CS 241
Copyright : University of Illinois CS 241 Staff
21
TCP Connection Example
client
socket connect socket bind listen accept read write close
server
write read close
CS 241
Copyright : University of Illinois CS 241 Staff
22
Socket TCP client
int NewConnection(char *inetAddr, ! int port)!
inetAddr DNS name (google.com)! port TCP port of server (e.g., 80)! Returns a file descriptor for new socket!
CS 241
Copyright : University of Illinois CS 241 Staff
23
NewConnection behind the scenes
Create a new socket file descriptor Resolve hostname into IP addr Connect to server
CS 241
Copyright : University of Illinois CS 241 Staff
24
Read/write
int read(int sock, uchar *buf, uint len) int write(int sock, uchar *buf, uint len) buf where data is stored len max bytes to read/write returns num bytes read/write, 0 when socket closed, -1 on error
CS 241 Copyright : University of Illinois CS 241 Staff 25
Read/write
You should assume that read/write will process less data than you give it for sockets
Can play a little fast and loose with files, not with sockets
CS 241
Copyright : University of Illinois CS 241 Staff
26
Closing connection
close(int sock) sends any buffered bytes disables further reads/writes on socket notifies remote host
CS 241 Copyright : University of Illinois CS 241 Staff 27
Socket TCP server
int NewServerSocket(int port)
Port local port to use for server Returns socket file descriptor
CS 241
Copyright : University of Illinois CS 241 Staff
28
NewServerSocket
Create a new socket fd Bind to a local port Setup a listen queue
Way of queuing up new client connections
CS 241
Copyright : University of Illinois CS 241 Staff
29
Accept
int accept(int serverSockFd)
Accept new connections on server sock Returns a new sock fd when client makes new connection That new sock fd is different from serverSockFd and used for client comm.
CS 241
Copyright : University of Illinois CS 241 Staff
30
TCP Connection Example
client
socket connect socket bind listen accept read write close
server
write read close
CS 241
Copyright : University of Illinois CS 241 Staff
31
Client
#define BUF_SIZE 4096! char msg[] = hello;! char buffer[BUF_SIZE];! int ret, bytesWritten, bytesRead;! int len = strlen(msg) + 1;! int sock;! int bufSize = BUF_SIZE;! sock = NewConnection(localhost, 8080);! assert(sock >= 0);!
CS 241
Copyright : University of Illinois CS 241 Staff
32
Client
while(bytesWritten < len) {! ret = write(sock, msg + bytesWritten, ! len bytesWritten);! assert(ret > 0);! bytesWritten += ret;! }! while((ret = read(sock, buffer+bytesRead, ! bufSize bytesRead)) > 0) {! bytesRead += ret;! }! assert(ret == 0);!
CS 241
Copyright : University of Illinois CS 241 Staff
33
Server
#define BUF_SIZE 4096! char msg[] = world;! char buffer[BUF_SIZE];! int ret, bytesWritten, bytesRead;! int len = strlen(msg) + 1;! int servSock, cliSock;! int bufSize = BUF_SIZE;! servSock = NewServerSocket(8080);! assert(servSock >= 0);! cliSock = accept(servSock);!
CS 241
Copyright : University of Illinois CS 241 Staff
34
Server
while((ret = read(cliSock, buffer+bytesRead, ! bufSize bytesRead)) > 0) {! bytesRead += ret;! ! if(buffer[bytesRead-1] == \0) break;! }! assert(ret > 0);! while(bytesWritten < len) {! ret = write(cliSock, msg + bytesWritten, ! len bytesWritten);! assert(ret > 0);! bytesWritten += ret;! }!
CS 241 Copyright : University of Illinois CS 241 Staff 35
UDP Connection Example
client server
socket sendto
socket bind recvfrom sendto
recvfrom close
CS 241
Copyright : University of Illinois CS 241 Staff
36