Title: Chapter 2: Application layer
1Chapter 2 Application layer
- 2.1 Principles of network applications
- 2.2 Web and HTTP
- Internet gaming
- 2.3 FTP
- 2.4 Electronic Mail
- SMTP, POP3, IMAP
- 2.5 DNS
- 2.6 P2P file sharing
- VOIP
- 2.8 Socket programming with TCP
- 2.9 Socket programming with UDP
- 2.10 Building a Web server
2Definition
- also called IP Telephony, Internet telephony,
Broadband telephony, Broadband Phone and Voice
over Broadband - the routing of voice conversations over the
Internet or through any other IP-based network
Cisco IP Phone 7941G
3Big Picture
- Modes of operation
- PC to PC
- PC to phone
- Phone to PC
- Phone to Phone
- Traffic go through Packet Switched Network
instead of Public Switched Telephone Network
(PSTN)
From Wikipedia, the free encyclopedia
4Challenges
- Quality of Service (QoS)
- Internet provides best of service
- No guarantee for latency, jitter
- Need Internet connection
- Home broadband is not reliable
- Power issue
- VOIP phone, Cable Modem/DSL, Computer
- Primary reason for not using VOIP for emergency
calls - Second reason is location identification is hard
for VOIP
5Challenges
- Security
- Most unencrypted
- VOIP spam challenges
- Integration into global telephone number system
- Emergency call availability functionality
- Power, Internet connection
- Call routing, location service
6QoS
- Deal with Jitter
- Smoothed by playback buffer
- Will cause more delay in playback
- Too much delayed packets will be discard
(dropped) - Bandwidth
- 64 kbps or less
- Depends on codec and use of silence suppression
7Chapter 2 Application layer
- 2.1 Principles of network applications
- 2.2 Web and HTTP
- Internet gaming
- 2.3 FTP
- 2.4 Electronic Mail
- SMTP, POP3, IMAP
- 2.5 DNS
- 2.6 P2P file sharing
- VOIP
- 2.7 Socket programming with TCP
- 2.8 Socket programming with UDP
8Socket programming
Goal learn how to build client/server
application that communicate using sockets
- Socket API
- introduced in BSD4.1 UNIX, 1981
- explicitly created, used, released by apps
- client/server paradigm
- two types of transport service via socket API
- unreliable datagram (UDP)
- reliable, byte stream-oriented (TCP)
9Socket-programming using TCP
- Socket an interface between application process
and end-end-transport protocol (UCP or TCP) - Why socket? A Layer seen by application, OS
transparent
controlled by application developer
controlled by operating system
internet
host or server
host or server
10Socket programming with TCP
- Client must contact server
- server process must first be running
- server must have created socket (door) that
accepts clients contact - Client contacts server by
- creating client-local TCP socket
- specifying IP address, port number of server
process - When client creates socket client TCP
establishes connection to server TCP
- When contacted by client, server TCP creates new
socket for server process to communicate with
client - allows server to talk with multiple clients
- source port numbers used to distinguish clients
(more in Chap 3)
11Many Versions of Socket APIs
- Unix socket (berkeley socket)
- Winsock
- MacTCP
- .
- We introduce Unix socket API here
- Can program under SUN OS, Linux, etc
- A good tutorial on socket programming
- http//beej.us/guide/bgnet/
12Socket Descriptor Data Structure
Descriptor Table
Family AF_INET Service SOCK_STREAM Local IP
111.22.3.4 Remote IP 123.45.6.78 Local Port
2249 Remote Port 3726
0
1
2
3
4
13TCP Client/Server Socket Overview
TCP Server
socket()
TCP Client
bind()
socket()
listen()
bind()
accept()
connection establishment
connect()
data request
recv()
send()
data reply
send()
recv()
recv()
end-of-file notification
close()
close()
14What is a Socket?
int sockfd / socket descriptor / if
((sockfd socket(AF_INET, SOCK_STREAM, 0)) lt 0)
perror(socket) exit(1)
- socket returns an integer (socket descriptor)
- sockfd lt 0 indicates that an error occurred
- socket descriptors are similar to file
descriptors - FILE fid fidfopen(test.txt, rt)
- AF_INET associates a socket with the Internet
protocol family - SOCK_STREAM selects the TCP protocol
- SOCK_DGRAM selects the UDP protocol
15Socket Structure (Client)
AF_INET
struct sockaddr_in short int sin_family //
Address family unsigned short int sin_port
// Port number struct in_addr sin_addr //
Internet address unsigned char sin_zero8
// all zero
// Internet address (Network Byte Order) // (a
structure for historical reasons) struct in_addr
unsigned long s_addr // that's a 32-bit
long, or 4 bytes
IP 1A.2D.3C.4B
101
103
100
102
4B
Big-Endian (Network Byte Order)
1A
3C
2D
16Bind (Client)
int sockfd struct sockaddr_in local_addr local_
addr.sin_family AF_INET local_addr.sin_port
0 // random assign a port local_addr.sin_addr.s_
addr INADDR_ANY // use my IP address
memset((local_addr.sin_zero), '\0', 8) //
zero the rest of the struct sockfd
socket(AF_INET, SOCK_STREAM, 0) // create an
empty socket bind(sockfd, (struct sockaddr
)local_addr, sizeof(struct sockaddr))
Local host info
17Remote Host Structure
Longwood.cs.ucf.edu
struct hostent char h_name / official
name / char h_aliases / alias list /
int h_addrtype / address type / int
h_length / address length / char
h_addr_list / address list / define
h_addr h_addr_list0 / backward compatibility
/
mail.cs.ucf.edu
132.170.108.1
hostent hp hp gethostbyname(mail.cs.ucf.edu)
struct sockaddr_in remote_addr remote_addr.sin_
family AF_INET remote_addr.sin_port
htons(80) // short, network byte order
(big-endian) remote_addr.sin_addr ((struct
in_addr )hp-gth_addr) memset((remote_addr.sin_ze
ro), '\0', 8) // zero the rest
Remote host info
18Connect(), send(), recv() by Client
connect(sockfd, (struct sockaddr )remote_addr,
sizeof(struct sockaddr)
Remote host info
Local host socket
Struct sockaddr ? sockaddr_in
After connecting to the remote sever.
Blocking call
char sendStr100, recvStr100 . send(sockfd,
sendStr, strlen(sendStr), 0) recvNumByte
recv(sockfd, recvStr, MaxDataSize,
0) close(sockfd)
19Partial Send() and recv()
- Due to multiple packets in transmission
- include ltsys/types.hgt
- include ltsys/socket.hgt
- int sendall(int sockfd, char buf, int len)
- int total 0 // how many bytes we've sent
- int bytesleft len // how many we have left
to send - int n
- while(total lt len)
- n send(sockfd, buftotal, bytesleft, 0)
- if (n -1) break
- total n bytesleft - n
-
- len total // return number actually sent
here - return n-1?-10 // return -1 on failure, 0 on
success -
20Socket Programming in Server
- No need to connect() a remote host
- Need to listen() on specified port
- Accept() a connection request
- Generate a new socket for one connection
- Support multiple connections
int sockfd, new_fd struct sockaddr_in
local_addr, remote_addr // assign local_addr
socket() bind() listen(sockfd, backLog)
// backLog is the max no. of connections in
queue new_fd accept(sockfd, (struct sockaddr
)remote_addr, sizeof(struct sockaddr_in))
New socket discriptor Following commun. through
this
21Socket Programming in Server fork() for
multi-connection service
while(1) // main accept() loop sin_size
sizeof(struct sockaddr_in) new_fd
accept(sockfd, (struct sockaddr )remote_addr,
sin_size) printf("server got connection from
s\n", inet_ntoa(remote_addr.sin_addr)) if
(!fork()) // this is the child process (fork()
returns 0 in child process) close(sockfd) //
child doesn't need the listener send(new_fd,
"Hello, world!\n", 14, 0) close(new_fd)
exit(0) close(new_fd) // parent doesn't
need this .
22Fork()
- Tuotrial on fork() http//www.erlenstar.demon.co
.uk/unix/faq_2.html - System call fork() is used to create child
process. It returns a process ID. After a new
child process is created, both processes will
execute the next instruction following the fork()
system call. - On success
- PID of the child process is returned in the
parent's thread of execution - 0 is returned in the child's thread of execution
23Chapter 2 Application layer
- 2.1 Principles of network applications
- 2.2 Web and HTTP
- 2.3 FTP
- 2.4 Electronic Mail
- SMTP, POP3, IMAP
- 2.5 DNS
- 2.6 P2P file sharing
- 2.7 VOIP
- 2.8 Socket programming with TCP
- 2.9 Socket programming with UDP
- 2.10 Building a Web server
24Socket programming with UDP
- UDP no connection between client and server
- no handshaking
- sender explicitly attaches IP address and port of
destination to each packet - server must extract IP address, port of sender
from received packet - UDP transmitted data may be received out of
order, or lost
25UDP Socket Programming
- sockfd socket(AF_INET, SOCK_DGRAM, 0)
- No connect(), accept()
- Send() ? sendto(), recv() ? recvfrom()
- Sendto() includes target address/port
SOCK_STREAM (tcp)
26Chapter 2 Summary
- Our study of network apps now complete!
- specific protocols
- HTTP
- FTP
- SMTP, POP, IMAP
- DNS
- Some applications
- Web
- Email
- DNS
- Internet gaming, VOIP
- P2P
- socket programming
- Application architectures
- client-server
- P2P
- hybrid
- application service requirements
- reliability, bandwidth, delay
- Internet transport service model
- connection-oriented, reliable TCP
- unreliable, datagrams UDP
27Chapter 2 Summary
- Most importantly learned about protocols
- typical request/reply message exchange
- client requests info or service
- server responds with data, status code
- message formats
- headers fields giving info about data
- data info being communicated
- control vs. data msgs
- in-band, out-of-band (ftp)
- centralized vs. decentralized
- stateless vs. stateful
- reliable vs. unreliable msg transfer
- complexity at network edge