Intro Sock
Intro Sock
Intro to Sockets
Dr. Sam Hsu
Computer Science & Engineering
Florida Atlantic University
Intro to Sockets
The Client/Server Model
Layered Network Structure
Sockets
Internet Addressing
Protocol Port Numbers
Socket Programming
Network Byte Order
Connectionless/Connection-oriented Examples
2
The Client/Server Model
request Client
Server Client
response
3
Client/Server on an LAN
4
Client/Server via a WAN
5
OSI vs. Internet Protocol Layers
6
Protocol Data and Headers
7
What Is A Socket? (1/2)
A socket is a communication end
point.
Is equivalent to a computer's network
(hardware) interface.
Allows a network application to "plug
into" the network (not physically, but
metaphorically).
8
What Is A Socket? (2/2)
Is a network programming interface.
It is used for interprocess communication
over the network.
It is used by a process to communicate
with a remote system via a transport
protocol.
It needs an IP address and a port number.
9
Sockets Came From Berkeley UNIX
Sockets were first introduced in
Berkeley UNIX.
An extension of the UNIX abstraction of file
I/O concepts.
10
Popular in Client/Server Computing
Sockets are popularly used in
client/server computing.
Provides two major types of services:
Connection-oriented
Connectionless
11
Connection-Oriented Services (1/2)
Implemented on TCP
Short for Transmission Control Protocol.
A connection-oriented protocol.
Data transfer unit is known as segment.
An end-to-end connection is established
before data exchange can happen.
Similar to our phone system.
12
Connection-Oriented Services (2/2)
Data bytes are delivered in sequence.
Delivery of data is guaranteed.
Connection is terminated when finished.
There are two modes:
Iterative (synchronous)
Concurrent (asynchronous)
13
Connectionless Services (1/2)
Implemented on UDP
Short for User Datagram Protocol.
A connectionless protocol.
Data transfer unit is known as datagram.
No connection is required before data
transfer.
Similar to our postal system.
14
Connectionless Services (2/2)
Data bytes may be missing or delivered
out-of-order.
There are also two modes:
Iterative (synchronous)
Concurrent (asynchronous)
15
Sockets Are Bi-directional
A socket provides a bi-directional
communication mechanism.
Two way simultaneously.
Also know as full duplex (FDX)
communication.
16
Internet Addressing
A means to identify hosts on the
Internet.
There are two popular ways:
Using IP addresses.
Using the domain name system
(DNS).
17
IP Addresses (1/2)
IP is short for Internet Protocol.
Each host on the Internet is assigned a
32-bit unique address (in current IPv4).
An IP address is assigned to a single host
only.
A host may have more than one IP address
(multi-homed host).
18
IP Addresses (2/2)
Dotted representation
Internet addresses are represented in the
form of four integers separated by decimal
points known as dotted representation.
Examples:
131.91.96.108
131.91.128.73
Examples:
earth.cse.fau.edu
www.fau.edu
20
The Domain Name System (2/2)
The DNS naming convention is
hierarchical.
Written in the local-most level first and the
top-most level last fashion.
21
Mapping DNS to IP Addresses
Delivery of information across the
Internet is done by using IP addresses.
Need to map DNS names to IP addresses
before delivery.
Three ways:
Done at system startup.
Via a local table lookup.
Going through a nameserver
22
Port Numbers
A (protocol) port is an abstraction used by
TCP/UDP to distinguish applications on a
given host.
A port is identified by a 16-bit integer known
as the port number.
Three ranges of port numbers:
Well-known ports
Registered ports
Dynamic ports
23
Well-known Ports
Port numbers ranging from 0 to 1,023.
A set of pre-assigned port numbers for specific
uses.
24
Some Well-known Ports
Port Keyword Description
0 Reserved
7 ECHO Echoes a received datagram to the sender
13 DAYTIME Returns the date and the time
20 FTP-DATA File Transfer Protocol (data)
21 FTP File Transfer Protocol (control)
22 SSH Secure Shell
23 TELNET Terminal Connection
25 SMTP Simple Mail Transport Protocol
53 DNS Domain Name Server
67 BOOTP Bootstrap Protocol
79 FINGER Finger
80 HTTP HyperText Transfer Protocol
101 HOSTNAME NIC Host Name Server
103 X400 X.400 Mail Service
110 POP3 Post Office Protocol Vers. 3 25
Registered Ports
Port numbers ranging from 1,024 to
49,151.
26
Dynamic Ports
Port numbers ranging from 49,152 to
65,535.
27
Socket Programming
To use a socket, one needs a structure
to hold address and its associated port
number information.
A generic socket format:
(address family, address in the family)
28
Generic Socket Address Structure
struct sockaddr {
sa_family_t sa_family; /* address family */
char sa_data[14]; /* socket address */
}
29
A Popular BSD-derived Socket
Implementation (1/3)
struct sockaddr_in {
sa_family_t sin_family; /* address family: AF_XXX */
in_port_t sin_port; /* 16-bit protocol port number */
struct in_addr sin_addr; /* IP addr in NW byte order */
char sin_zero[8]; /* unused, set to zero */
}
Note: One may encounter PF_XXX occasionally. It is the same as
AF_XXX at present, but is expected to be phased out later.
30
A Popular BSD-derived Socket
Implementation (2/3)
Where
sa_family_t sin_family usually holds the value
either AF_INET or AF_UNIX.
in_port_t sin_port is a 16-bit TCP or UDP port
number.
In need of htons() to convert to network byte
order.
31
A Popular BSD-derived Socket
Implementation (3/3)
in_addr sin_addr contains a 32-bit IPv4
address.
Structure for in_addr:
struct in_addr {
in_addr_t s_addr; /* 32-bit IPv4 address */
/* in network byte order */
}
In need of htonl() to convert to network byte
order.
32
Network Byte Order
Different systems may store numbers in
different byte orders internally.
For example, Sparc machines is big-endian, and
i386 is little-endian. Taking 1 as an example,
MSB LSB
33
Socket Types
Family Description
SOCK_STREAM stream socket (TCP)
SOCK_DGRAM datagram socket (UDP)
SOCK_SEQPACKET sequenced packet socket (SCTP)
SOCK_RAW raw socket (talk to IP directly)
34
Two Examples
A connectionless example
Algorithms for server and client.
An implementation in C.
A connection-oriented example
Algorithms for server and client.
An implementation in C.
35
Example 1: Connectionless
To illustrate a simple connectionless
client/server example.
One server (iterative), multiple clients.
The server echoes back requests from clients, one
client request at a time.
A client sends user request to server and displays
response received from server.
Programs: echo_seru.c & echo_cliu.c
It is implemented on UDP.
36
Server Algorithm (connectionless)
a) Create a socket.
b) Bind to a predefined address for the
service desired.
c) Wait for a datagram to arrive from a
client.
d) Send response back to originating client.
e) Return to c) for next client.
37
Client Algorithm (connectionless)
a) Create a socket.
b) Send a datagram to server.
c) Wait for response from server.
d) Return to b) for more datagrams.
e) Close the socket when no more
datagram to send.
38
Example 2: Connection-oriented
To illustrate a simple connection-oriented
client/server example.
Similar to the previous one: The server echoes
back requests from clients, and a client displays
server response.
However, a connection is established before data
exchange can happen.
Programs: echo_ser.c & echo_cli.c
It is implemented on TCP.
39
Server Algorithm
(connection-oriented)
a) Create a socket.
b) Bind to a predefined address for the service desired.
c) Place the socket in passive mode.
d) Accept the next connection request from a client.
e) Read a request, process the request, and send back
the results.
f) Close the connection when done with a client.
g) Return to d) for next client.
40
Client Algorithm
(connection-oriented)
a) Create a socket.
b) Connect the socket to the desired server.
c) Send a request, and wait for the response.
d) Repeat c) until done.
e) Notify server of intention to terminate.
May close R/W end either separately or together
at the same time.
f) Close the socket (connection) when done.
41
Connectionless: Functions Used
request Client
Server Client
response
socket() socket()
bind() bind()
Æ optional
recvfrom() sendto()
Æ blocks
sendto() recvfrom()
Æ blocks
42
Connection-oriented: Functions Used
request Client
Server Client
response
socket() socket()
bind() connect()
listen() Æ blocks
accept()
Æ blocks
read() write()
write() read()
close() close()
43
R&W on a Closed TCP Socket
In a TCP connection, a write to a
disconnected socket will generate
SIGPIPE.
This can be dealt with a proper signal
handler.
44
A close() Call for TCP/UDP
If the socket is for SOCK_STREAM
The kernel will deliver all data received before
terminating the connection.
close() will block until all outstanding data
delivered to the receiving process.
45
TCP Client/Server Socket Functions
TCP Server
Create a socket socket()
accept()
TCP Client
socket() Blocks until a connection request from client
Initiate a connection
connect() Get a connection from the queue
Connection establishment (may fork a child)
(TCP 3-way handshake)
write()
Data (request) read()
read() write()
Data (reply)
close()
EOF notification read()
close()
Ref: UNP, Stevens et al, vol1, ed 3, 2004, AW, p. 96
Connection closed for one client
46
UDP Client/Server Socket Functions
UDP Server
Create a socket socket()
<sys/socket.h>
<netinet/in.h>
<netdb.h>
48
Some References
To download textbook source code
http://www.unpbook.com/src.html
49
Reading Assignment
Scan Chapters 1, 4, and 8
50