UNIX Network Programming
1
UNIX Network Programming
2nd Edition
UNIX Network Programming
2
Chapter 1. Introduction
•
Contents
–
Introduction
–
A Simple Daytime Client
–
Error Handling: Wrapper Functions
–
A Simple Daytime Server
–
OSI Model
–
Unix Standards
UNIX Network Programming
3
1.1 Introduction
•
Client / Server
Client
Server
Communication link
Figure 1.1
Network application : client and server
Client
Client
Client
Server
...
...
Figure 1.2
Server handling multiple clients at the same time.
UNIX Network Programming
4
1.1 Introduction
(continued)
•
Example : Client and Server on the same Ethernet
communication using TCP
Web
Client
TCP
IP
Ethernet
driver
Web
server
TCP
IP
Ethernet
driver
TCP protocol
Application protocol
IP protocol
Ethernet protocol
Actual flow between client and server
Ethernet
Application layer
transport layer
network layer
datalink layer
User
process
Protocol stack
within kernel
Figure 1.3
Client and server on the same Ethernet communicating using TCP
UNIX Network Programming
5
1.1 Introduction
(continued)
•
Example : Client and Server on different LANs connected
through WAN.
client
application
Host
with
TCP/IP
server
application
Host
with
TCP/IP
router
router
router
router
router
router
LAN
LAN
WAN
Figure 1.4
Client and server on different LANs connected through a WAN
UNIX Network Programming
6
1.2 A Simple Daytime Client
#include “unp.h”
int
main (int argc, char **argv)
{
int
sockfd, n;
char
recvline[MAXLINE+1];
struct sockaddr_in servaddr;
if ( argc != 2) err_quit(“usage: a.out <IPaddress>”);
if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
err_sys(“socket error”);
bzero( &servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(13);
/* daytime server */
if (inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0)
err_quit(“inet_pton error for %s”,argv[1]);
if (connect(sockfd, (SA *) &servaddr, sizeof(servaddr)) < 0)
err_sys(“connect error”);
while ( (n = read(sockfd, recvline, MAXLINE)) > 0 ) {
recvline[n] = 0;
/* null termicate */
if ( fputs(recvline, stdout) == EOF)
err_sys(“fputs error”);
}
if ( n < 0 ) err_sys ( “read error “);
exit(0);
}
1
2
3
4
5
UNIX Network Programming
7
•
#include
"unp.h"
•
int main(int argc, char **argv)
•
{
•
int
sockfd, n;
•
struct sockaddr_in6
servaddr;
•
char
recvline[MAXLINE + 1];
•
if (argc != 2)
err_quit("usage: a.out <IPaddress>");
•
if ( (sockfd = socket(AF_INET6, SOCK_STREAM, 0)) < 0)
•
err_sys("socket error");
•
bzero(&servaddr, sizeof(servaddr));
•
servaddr.sin6_family = AF_INET6;
•
servaddr.sin6_port = htons(13);
/* daytime server */
•
if (inet_pton(AF_INET6, argv[1], &servaddr.sin6_addr) <= 0)
•
err_quit("inet_pton error for %s", argv[1]);
•
if (connect(sockfd, (SA *) &servaddr, sizeof(servaddr)) < 0)
•
err_sys("connect error");
•
while ( (n = read(sockfd, recvline, MAXLINE)) > 0) {
•
recvline[n] = 0;
/* null terminate */
•
if (fputs(recvline, stdout) == EOF)
•
err_sys("fputs error");
•
}
•
if (n < 0)
•
err_sys("read error");
•
exit(0);
•
}
1.3 protocol Independence
UNIX Network Programming
8
1.4 Error Handling: Wrapper Functions
•
Since terminating on an error is the common case, we can shorten our program
by defining a
wrapper function
that performs the actual function call, tests the
return value, and terminates on an error.
•
sockfd = Socket(AF_INET, SOCK_STREAM, 0);
int
Socket(int family, int type, int protocol)
{
int n;
if( (n = socket( family, type, protocol)) < 0 )
err_sys(“socket error”);
return (n);
}
•
Unix
errno
Value
Figure 1.7
Our wrapper function for the
socket
function
UNIX Network Programming
9
1.5 A Simple Daytime Server
#include “unp.h”
#include <time.h>
int
main(int argc, char **argv)
{
int
listenfd, connfd;
struct sockaddr_in servaddr;
char
buff[MAXLINE];
time_t
ticks;
listenfd = Socket(AF_INET, SOCK_STREAM, 0);
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(13);
/* daytime server */
Bind(listenfd, (SA *) *servaddr, sizeof(servaddr) );
Listen(listenfd, LISTENQ);
for( ; ; ) {
connfd = Accept(listenfd, (SA *) NULL, NULL) ;
ticks = time(NULL);
snprintf(buff, sizeof(buff), “%.24s
\
r
\
n”, ctime(&ticks) );
Write(connfd, buff, strlen(buff) );
Close(connfd);
}
}
1
2
3
4
UNIX Network Programming
10
1.7 OSI Model
–
Why do both sockets and XTI provide the interface from the upper three layers of
the OSI model into the transport layer?
•
First, the upper three layers handle all the details of the application and The lower four
layers handle all the communication details.
•
Second, the upper three layers is called a user process while the lower four layers are
provided as part of the operating system kernel.
Application
Session
Presentation
Transport
Network
Datalink
Physical
7
6
5
4
3
2
1
OSI Model
Application
TCP | | UDP
IPv4, IPv6
Device driver
and Hardware
Internet protocol
suite
Sockets
XTI
user
process
kernel
application
details
communication
details
Figure 1.14
Layers on OSI model and Internet protocol suite
UNIX Network Programming
11
1.10 Unix Standards
•
POSIX
–
Potable Operating System Interface
–
a family of standards being developed by IEEE
•
The Open Group
–
an international consortium of vendors and end
-
user
customers from industry, government, and academia.
•
IETF (Internet Engineering Task Force)
–
a large open international community of network designers,
operators, vendors, and researchers concerned with the
evolution of the Internet architecture and the smooth
operation of the internet.
UNIX Network Programming
12
Chapter 2. The Transport Layer :
TCP and UDP
•
Contents
–
Introduction
–
The Big Picture
–
UDP: User Datagram Protocol
–
TCP: Transmission Control Protocol
–
TCP Connection Establishment and Termination
–
TIME_WAIT State
–
Port Numbers
–
TCP Port Numbers and Concurrent Servers
–
Buffer Sizes and Limitations
UNIX Network Programming
13
2.1 Introduction
•
Overview of the TCP / IP protocol
•
Transport layer : TCP & UDP
UNIX Network Programming
14
2.2 The Big Picture
UNIX Network Programming
15
2.3 UDP : User Datagram Protocol
•
The application writes a
datagram
to a UDP socket, which is
encapsulated as either a IPv4 of a IPv6 datagram, which is sent to
its destination.
•
UDP provides a
connectionless
service.
•
Each UDP datagram has a length and we can consider a datagram
as a
record
.
•
RFC 768[Postel 1980]
UNIX Network Programming
16
2.4 TCP: Transmission Control Protocol
•
Provides
connections
between clients and servers.
•
Provides
reliability
.
–
RTT (
round
-
trip
-
time
)
•
TCP also
sequences
the data by associating a sequence number
with every byte that it sends.
•
TCP provides
flow control
.
–
window
•
A TCP connection is also
full
-
duplex
.
UNIX Network Programming
17
2.5 TCP
Connection Establishment and Termination
•
Three
-
Way Handshake
•
SYN segment
•
ACK
UNIX Network Programming
18
TCP Header
UNIX Network Programming
19
Encapsulation
UNIX Network Programming
20
2.5 TCP
Connection Establishment and Termination
(cont)
•
TCP Options
–
MSS option
•
With this option the TCP sending the SYN announces its
maximum segment
size
, the maximum amount of data that it is willing to accept in each TCP
segment, on this connection.
–
Window Scale option
–
Timestamp option
UNIX Network Programming
21
•
TCP Connection Termination
•
half
-
close
: Between steps 2 and 3 it is possible for data to flow from the end
doing the passive close to the end doing active close.
2.5 TCP
Connection Establishment and Termination
(cont)
UNIX Network Programming
22
2.5 TCP
Connection
Establishment
and
Termination
(cont)
-
State
transition
diagram
UNIX Network Programming
23
•
Watching the Packets
2.5 TCP
Connection Establishment and Termination
(cont)
UNIX Network Programming
24
2.6
TIME_WAIT
State
•
The end that performs the active close is the end that remains in
the TIME_WAIT state=>because that end is the one that might
have to retransmit the final ACK.
•
There are two reason for TIME_WAIT state
–
to implement TCP’s full
-
duplex connection termination
reliably
–
to allow old duplicate segments to expire in the network
UNIX Network Programming
25
2.7 Port Numbers
UNIX Network Programming
26
2.8
TCP port Numbers
and Concurrent Servers
UNIX Network Programming
27
2.8
TCP port Numbers
and Concurrent Servers
UNIX Network Programming
28
2.9 Buffer Sizes and Limitations
•
Maximum size of IPv4 => 65535 byte
•
Maximum size of IPv6 => 65575 byte
•
MTU(maximum transmit unit) => fragmentation
•
DF (don’t fragment)
•
IPv4 and IPv6 define a minimum reassembly buffer size.
•
TCP has MSS(maximum segment size)
UNIX Network Programming
29
TCP output
UNIX Network Programming
30
UDP output
UNIX Network Programming
31
2.10 standard internet service
Notice:
TCP and UDP port number is same.
UNIX Network Programming
32
2.11protocol usage by common internet Application
Enter the password to open this PDF file:
File name:
-
File size:
-
Title:
-
Author:
-
Subject:
-
Keywords:
-
Creation Date:
-
Modification Date:
-
Creator:
-
PDF Producer:
-
PDF Version:
-
Page Count:
-
Preparing document for printing…
0%
Comments 0
Log in to post a comment