Post on 21-Dec-2015
EECS122 - UCB 2
Questions that will be Addressed During the Lecture
What mechanisms are available for a programmer who writes network applications?How to write a network application that sends packets between hosts (client and server) across an IP network?
Client ServerIP Network
EECS122 - UCB 3
EE122 Projects – S03
First assignment:– Implement the client side of an client-
server architecture (C programming)– Handle exceptions in the
communication– Measure performance of the network
and the server
EECS122 - UCB 4
Socket ProgrammingTable of Contents1. Network Application Programming
Interface: Sockets and Internet Sockets2. Network Programming Tips3. Client-Server Architecture4. Example: Client Programming5. Example: Server Programming6. Network Programmer’s Mistakes
EECS122 - UCB 5
Layers of the IP Protocol Suite
Link Layer
Transport Layer
Network Layer
Application Layer
Link Layer
Transport Layer
Network Layer
Application Layer
Ethernet
e.g. ftp
e.g. TCP, UDP
e.g. IP
EECS122 - UCB 6
Protocol Suite Location Internet Protocol Layer
Link Layer
Transport Layer (TCP, UDP)
Network Layer (IP)
Application Layer
Network Card &Device Driver
(e.g. Ethernet card)
Operating System(e.g. Unix)
Applications(e.g. browser, game, ftp)
Application ProgrammingInterface (API)
(e.g. network API)
Interface to the Network Card
Location
EECS122 - UCB 7
Network APIOperating system provides Application Programming Interface (API) for network applicationAPI is defined by a set of function types, data structures, and constantsDesirable characteristics of the network interface
Simple to use Flexible
independent from any application allows program to use all functionality of the network
Standardized allows programmer to learn once, write anywhere
Application Programming Interface for networks is called socket
EECS122 - UCB 8
Sockets
Sockets provide mechanisms to communicate between computers across a network
There are different kind of sockets DARPA Internet addresses (Internet Sockets) Unix interprocess communication (Unix Sockets) CCITT X.25 addresses and many others
Berkeley sockets is the most popular Internet Socket
runs on Linux, FreeBSD, OS X, Windows fed by the popularity of TCP/IP
EECS122 - UCB 9
Internet Sockets
Support stream and datagram packets (e.g. TCP, UDP, IP)
Is Similar to UNIX file I/O API (provides a file descriptor)
Based on C, single thread model does not require multiple threads
EECS122 - UCB 10
Types of Internet Sockets
Different types of sockets implement different communication types (stream vs. datagram)Type of socket: stream socket connection-oriented two way communication reliable (error free), in order delivery can use the Transmission Control Protocol (TCP) e.g. telnet, ssh, http
Type of socket: datagram socket connectionless, does not maintain an open
connection, each packet is independent can use the User Datagram Protocol (UDP) e.g. IP telephony
Other types exist: similar to the one above
EECS122 - UCB 12
Byte Ordering of Integers
Different CPU architectures have different byte ordering
D3
high-order byte low-order byte
memoryaddress A
memoryaddress A
+1
Stored at little-endian computer
Stored at big-endian computer
low-order byte high-order byte
F2Integer representation (2 byte)
EECS122 - UCB 13
Message in Memory ofof big-endian Computer
Message is sent across Network 48 45 4C 4C 6F 00
01
Byte Ordering Problem
Question: What would happen if two computers with different integer byte ordering communicate?
Message is: [Hello,1]
Message is: [Hello,512]
Pro
cess
ing
48 45 4C 4C 6F 00 01
Message in Memory oflittle-endian Computer P
roce
ssin
g
Answer:Nothing if they do not exchange integers!But: If they exchange integers, they would get the wrong order of bytes, therefore, the wrong value!
Example:
EECS122 - UCB 14
Byte Ordering SolutionThere are two solutions if computers with different byte ordering system want to communicate
They must know the kind of architecture of the sending computer(bad solution, it has not been implemented)
Introduction of a network byte order. The functions are:
uint16_t htons(uint16_t host16bitvalue)uint32_t htonl(uint32_t host32bitvalue)uint16_t ntohs(uint16_t net16bitvalue)uint32_t ntohs(uint32_t net32bitvalue)
Note: use for all integers (short and long), which are sent across the network
Including port numbers But not for IP addresses
EECS122 - UCB 16
Naming and Addressing
Host name identifies a single host (see Domain Name
System slides) variable length string (e.g. www.berkeley.edu) is mapped to one or more IP addresses
IP Address 32 bits (not a number!) written as dotted octets (e.g. 10.0.0.1)
Port number identifies an application on a host 16 bit number
EECS122 - UCB 17
Client-Server Architecture
Client requests service from serverServer responds with sending service or error message to clientExample: Remote Procedure Call
Client Server
request
response
EECS122 - UCB 18
Simple Client-Server Example
Client Serverrequest
response
socket()connect()send()
recv()close()
socket()bind()listen()accept()
recv()
send()
recv()close()
Connectionestablishment
Data response
Data request
End-of-file notification
EECS122 - UCB 19
Example: Client Programming
Create stream socket (socket() )Connect to server (connect() )While still connected: send message to server (send() ) receive (recv() ) data from server and
process it
EECS122 - UCB 20
Initializing SocketGetting the file descriptor
int chat_sock;if ((chat_sock = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) { perror("socket"); printf("Failed to create socket\n"); abort ();}
1.parameter specifies protocol/address family2.parameter specifies the communication type3.parameter specifies the protocol
EECS122 - UCB 21
Connecting to Serverstruct sockaddr_in sin;
struct hostent *host = gethostbyname (argv[1]);unsigned int server_address =
*(unsigned long *) host->h_addr_list[0];unsigned short server_port = atoi (argv[2]);
memset (&sin, 0, sizeof (sin));sin.sin_family = AF_INET;sin.sin_addr.s_addr = server_address;sin.sin_port = htons (server_port);
if (connect(chat_sock, (struct sockaddr *) &sin, sizeof (sin)) < 0) { perror("connect"); printf("Cannot connect to server\n"); abort();}
EECS122 - UCB 22
Sending Packets
int send_packets(char *buffer, int buffer_len)
{
sent_bytes = send(chat_sock, buffer, buffer_len, 0);
if (send_bytes < 0) {
perror (“send");
}
return 0;
}
Needs socket descriptor,Buffer containing the message, andLength of the message
EECS122 - UCB 23
Receiving Packets:Separating Data in a Stream
Use records (data structures) to partition the data stream
B
Fixed length record
Fixed length record
0 1 3
C3
2 94 6 87
Variable length record
C2
Variable length record
5
D
96 87
Variable length record
D 0
Variable length record
5
0
A
EECS122 - UCB 24
Receiving Packetsint receive_packets(char *buffer, int buffer_len, int *bytes_read){ int left = buffer_len - *bytes_read; received = recv(chat_sock, buffer + *bytes_read, left, 0); if (received < 0) { perror (“recv"); } if (received <= 0) { return close_connection(); } *bytes_read += received; while (*bytes_read > RECORD_LEN) { process_packet(buffer, RECORD_LEN); *bytes_read -= RECORD_LEN; memmove(buffer, buffer + RECORD_LEN, *bytes_read); } return 0;}
EECS122 - UCB 25
Example: Server Programming
create stream socket (socket() )Bind port to socket (bind() )Listen for new client (listen() )Wait (select() ) until user connects (accept() ) data arrives from client (recv() ) data has to be send to client (send() ) timeout (select() )
EECS122 - UCB 26
I/O Multiplexing using select()
waits on multiple file descriptors and timeoutreturns when any file descriptor is ready to be read or written or indicate an error, or timeout exceeded
advantages simple application does not consume CPU cycles while
waiting
disadvantages does not scale to large number of file
descriptors
EECS122 - UCB 27
Network Programmer’s Mistakes
byte orderingseparating records in streamsuse of select()misinterpreting the project specificationnot knowing all available system calls
EECS122 - UCB 28
There are more System Calls
Depends on communication type Datagram sockets use recvfrom() and
sendto() for receiving and sending data
Closing connection: close(), shutdown()Getting information about a host: gethostbyname()
EECS122 - UCB 29
LiteratureUnix Network Programming, volumes 1 and 2 by W. Richard Stevens. Published by Prentice Hall; ISBNs for volumes 1 and 2: 013490012X, 0130810819. Advanced Programming in the Unix Environment by W. Richard Stevens. Published by Addison Wesley. ISBN 0201563177.
man pages on a Unix computer
EECS122 - UCB 31
EECS 122 - Syllabus1. Logistics; Goals; Themes; Outline; Introduction2. Examples of Network Applications/Design3. Internet Architecture4. Socket Programming5. Network Performance Metrics; ns6. DNS and WWW7. Transport Protocols: UDP and TCP8. Congestion Control and Avoidance9. Congestion Control and Avoidance(cont)10. Intradomain Routing: Distance Vector; Link State11. Interdomain Routing: BGP12. Switching and Forwarding; Router Architecture13. Packet Scheduling and Classification14. Router Support for Congestion Control: RED and FQ15. Midterm Exam
EECS122 - UCB 32
I/O Multiplexing (1)while (1) {
if (receive_packets(buffer, buffer_len, &bytes_read) != 0) {
break;
}
if (read_user(user_buffer, user_buffer_len,
&user_bytes_read) != 0) {
break;
}
}
EECS122 - UCB 33
I/O Multiplexing (2): Non-blockingint opts = fcntl (chat_sock, F_GETFL);if (opts < 0) { perror ("fcntl(F_GETFL)"); abort ();}opts = (opts | O_NONBLOCK);if (fcntl (chat_sock, F_SETFL, opts) < 0) { perror ("fcntl(F_SETFL)"); abort ();}while (1) { if (receive_packets(buffer, buffer_len, &bytes_read) != 0)
{ break; } if (read_user(user_buffer, user_buffer_len, &user_bytes_read) != 0) { break; }}
EECS122 - UCB 34
I/O Multiplexing (3): select()
// already set descriptors non-blockingfd_set read_set;while (1) { FD_ZERO (read_set); FD_SET (stdin, read_set); FD_SET (chat_sock, read_set); select_retval = select(MAX(stdin, chat_sock) + 1, &read_set, NULL, NULL, &time_out); if (select_retval < 0) { perror ("select"); abort (); } if (select_retval > 0) { if (FD_ISSET(chat_sock, read_set)) { if (receive_packets(buffer, buffer_len, &bytes_read) != 0) { break; } if (FD_ISSET(stdin, read_set)) { if (read_user(user_buffer, user_buffer_len, &user_bytes_read) != 0) { break; } } }}
EECS122 - UCB 35
Other I/O ModelsSignal driven application notified when I/O operation can be
initiated achieves similar CPU efficiency as select()
Asynchronous application notified when I/O operation is completed can achieve higher CPU efficiency than select()/signals
on architectures that have DMA and available system bus bandwidth
mainly useful for very high bandwidth I/O
Both add significant complexity relative to select()
must use locks to deal with being interrupted at arbitrary code locations
sample complexity cost as threads