EECS122 Communications Networks Socket Programming January 30th, 2003 Jörn Altmann.

35
EECS122 Communications Networks Socket Programming January 30th, 2003 Jörn Altmann
  • date post

    21-Dec-2015
  • Category

    Documents

  • view

    214
  • download

    1

Transcript of EECS122 Communications Networks Socket Programming January 30th, 2003 Jörn Altmann.

EECS122Communications Networks

Socket Programming

January 30th, 2003

Jörn Altmann

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 11

Network Programming Tips

Byte Ordering NamingAddressing

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 15

Network Programming Tips

Byte Ordering NamingAddressing

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 30

The End

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