eecs122 communications networks socket programming
Download
Skip this Video
Download Presentation
EECS122 Communications Networks Socket Programming

Loading in 2 Seconds...

play fullscreen
1 / 35

EECS122 Communications Networks Socket Programming - PowerPoint PPT Presentation


  • 115 Views
  • Uploaded on

EECS122 Communications Networks Socket Programming. January 30th, 2003 J örn Altmann. Questions that will be Addressed During the Lecture. What mechanisms are available for a programmer who writes network applications?

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'EECS122 Communications Networks Socket Programming' - cicely


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
questions that will be addressed during the lecture
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?

IP Network

Client

Server

ee122 projects s03
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
socket programming table of contents
Socket ProgrammingTable of Contents
  • Network Application Programming Interface: Sockets and Internet Sockets
  • Network Programming Tips
  • Client-Server Architecture
  • Example: Client Programming
  • Example: Server Programming
  • Network Programmer’s Mistakes
layers of the ip protocol suite

e.g. ftp

Application Layer

e.g. TCP, UDP

Transport Layer

e.g. IP

Network Layer

Ethernet

Link Layer

Layers of the IP Protocol Suite

Application Layer

Transport Layer

Network Layer

Link Layer

protocol suite location

Location

Applications(e.g. browser, game, ftp)

Application ProgrammingInterface (API)(e.g. network API)

Operating System(e.g. Unix)

Interface to the Network Card

Network Card &

Device Driver(e.g. Ethernet card)

Protocol Suite Location
  • Internet Protocol Layer

Application Layer

Transport Layer (TCP, UDP)

Network Layer (IP)

Link Layer

network api
Network API
  • Operating system provides Application Programming Interface (API) for network application
  • API is defined by a set of function types, data structures, and constants
  • Desirable 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
sockets
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
internet sockets
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
types of internet sockets
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
network programming tips
Network Programming Tips
  • Byte Ordering
  • Naming
  • Addressing
byte ordering of integers

memoryaddress A +1

memoryaddress A

Stored at little-endian computer

high-order byte

low-order byte

low-order byte

high-order byte

Stored at big-endian computer

Byte Ordering of Integers
  • Different CPU architectures have different byte ordering

Integer representation (2 byte)

D3

F2

byte ordering problem

Message is: [Hello,512]

Processing

Processing

Message in Memory ofof big-endian Computer

Message in Memory oflittle-endian Computer

Message is sent

across Network

48 45 4C 4C 6F 00 01

48 45 4C 4C 6F 00 01

Byte Ordering Problem
  • Question: What would happen if two computers with different integer byte ordering communicate?
  • 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:

Message is: [Hello,1]

byte ordering solution
Byte Ordering Solution
  • There 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
network programming tips15
Network Programming Tips
  • Byte Ordering
  • Naming
  • Addressing
naming and addressing
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
client server architecture
Client-Server Architecture
  • Client requests service from server
  • Server responds with sending service or error message to client
  • Example: Remote Procedure Call

response

Client

Server

request

simple client server example
Simple Client-Server Example

response

Client

Server

request

socket()connect()send()recv()close()

socket()bind()listen()accept()recv()send()recv()close()

Connectionestablishment

Data request

Data response

End-of-file notification

example client programming
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
initializing socket
Initializing Socket
  • Getting 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 family
  • 2.parameter specifies the communication type
  • 3.parameter specifies the protocol
connecting to server
Connecting to Server

struct 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();

}

sending packets
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, and
  • Length of the message
receiving packets separating data in a stream
Receiving Packets:Separating Data in a Stream
  • Use records (data structures) to partition the data stream

Fixed length record

Variable length record

Variable length record

Fixed length record

A

B

C3

C2

0

1

2

3

4

5

6

7

8

9

Variable length record

Variable length record

D

D

0

0

5

6

7

8

9

receiving packets
Receiving Packets

int 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;

}

example server programming
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() )
i o multiplexing using select
I/O Multiplexing using select()
  • waits on multiple file descriptors and timeout
  • returns 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
    • doesnot scale to large number of file descriptors
network programmer s mistakes
Network Programmer’s Mistakes
  • byte ordering
  • separating records in streams
  • use of select()
  • misinterpreting the project specification
  • not knowing all available system calls
there are more system calls
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()
literature
Literature
  • Unix 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
eecs 122 syllabus
EECS 122 - Syllabus
  • Logistics; Goals; Themes; Outline; Introduction
  • Examples of Network Applications/Design
  • Internet Architecture
  • Socket Programming
  • Network Performance Metrics; ns
  • DNS and WWW
  • Transport Protocols: UDP and TCP
  • Congestion Control and Avoidance
  • Congestion Control and Avoidance(cont)
  • Intradomain Routing: Distance Vector; Link State
  • Interdomain Routing: BGP
  • Switching and Forwarding; Router Architecture
  • Packet Scheduling and Classification
  • Router Support for Congestion Control: RED and FQ
  • Midterm Exam
i o multiplexing 1
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;

}

}

i o multiplexing 2 non blocking
I/O Multiplexing (2): Non-blocking

int 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;

}

}

i o multiplexing 3 select
I/O Multiplexing (3): select()

// already set descriptors non-blocking

fd_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;

}

}

}

}

other i o models
Other I/O Models
  • Signal 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
ad