Title: Review of Previous Lecture
1Review of Previous Lecture
- Principles of app layer protocols
- clients and servers
- app requirements
- Web and HTTP
- FTP
2Announcement
- All got partners and IP addresses ?
- Should complete at least part I by the end of
this week - Networking research project available (preferably
with OS background)
3Outline
- Electronic Mail SMTP, POP3, IMAP
- DNS
- Socket programming with TCP
4Electronic Mail
- Three major components
- user agents
- mail servers
- simple mail transfer protocol SMTP
- User Agent
- a.k.a. mail reader
- composing, editing, reading mail messages
- e.g., Eudora, Outlook, elm, Netscape Messenger
- outgoing, incoming messages stored on server
5Electronic Mail mail servers
- Mail Servers
- mailbox contains incoming messages for user
- message queue of outgoing (to be sent) mail
messages - SMTP protocol between mail servers to send email
messages - client sending mail server
- server receiving mail server
6Electronic Mail SMTP RFC 2821
- uses TCP to reliably transfer email message from
client to server, port 25 - direct transfer sending server to receiving
server - three phases of transfer
- handshaking (greeting)
- transfer of messages
- closure
- command/response interaction
- commands ASCII text
- response status code and phrase
- messages must be in 7-bit ASCII
7Scenario Alice sends message to Bob
- 4) SMTP client sends Alices message over the TCP
connection - 5) Bobs mail server places the message in Bobs
mailbox - 6) Bob invokes his user agent to read message
- 1) Alice uses UA to compose message and to
bob_at_someschool.edu - 2) Alices UA sends message to her mail server
message placed in message queue - 3) Client side of SMTP opens TCP connection with
Bobs mail server
1
2
6
3
4
5
8SMTP final words
- Comparison with HTTP
- HTTP pull
- SMTP push
- both have ASCII command/response interaction,
status codes
- SMTP uses persistent connections
- SMTP requires message (header body) to be in
7-bit ASCII - SMTP server uses CRLF.CRLF to determine end of
message
9Mail message format
- SMTP protocol for exchanging email msgs
- RFC 822 standard for text message format
- header lines, e.g.,
- To
- From
- Subject
- different from SMTP commands!
- body
- the message, ASCII characters only
header
blank line
body
10Message format multimedia extensions
- MIME multimedia mail extension, RFC 2045, 2056
- additional lines in msg header declare MIME
content type
MIME version
method used to encode data
multimedia data type, subtype, parameter
declaration
encoded data
11MIME typesContent-Type type/subtype parameters
- Seven top-level types defined
- Text
- example subtypes plain, html
- Image
- example subtypes jpeg, gif
- Application
- other data that must be processed by reader
before viewable - example subtypes msword, octet-stream
12Mail access protocols
SMTP
access protocol
receivers mail server
- SMTP delivery/storage to receivers server
- Mail access protocol retrieval from server
- POP Post Office Protocol RFC 1939
- authorization (agent server) and download
- IMAP Internet Mail Access Protocol RFC 1730
- more features (more complex)
- manipulation of stored msgs on server
- HTTP Hotmail , Yahoo! Mail, etc.
13Outline
- Electronic Mail SMTP, POP3, IMAP
- DNS
- Socket programming with TCP
14DNS Domain Name System
- Domain Name System
- distributed database implemented in hierarchy of
many name servers - application-layer protocol host, routers, name
servers to communicate to resolve names
(address/name translation) - note core Internet function, implemented as
application-layer protocol - complexity at networks edge
- Run on UDP, port 53
- People many identifiers
- SSN, name, passport
- Internet hosts, routers
- IP address (32 bit) - used for addressing
datagrams - name, e.g., home1.cs.nwu.edu - used by humans
- Q map between IP addresses and name ?
15DNS name servers
- no server has all name-to-IP address mappings
- local name servers
- each ISP, company has local (default) name server
- host DNS query first goes to local name server
- authoritative name server
- for a host stores that hosts IP address, name
- can perform name/address translation for that
hosts name
- Why not centralize DNS?
- single point of failure
- traffic volume
- distant centralized database
- maintenance
- doesnt scale!
16DNS Root name servers
- contacted by local name server that can not
resolve name - root name server
- contacts authoritative name server if name
mapping not known - gets mapping
- returns mapping to local name server
13 root name servers worldwide
17Simple DNS example
root name server
- host surf.eurecom.fr wants IP address of
www.cs.nwu.edu - 1. contacts its local DNS server, dns.eurecom.fr
- 2. dns.eurecom.fr contacts root name server, if
necessary - 3. root name server contacts authoritative name
server, dns.umass.edu, if necessary
2
4
3
5
authorititive name server dns.nwu.edu
1
6
requesting host surf.eurecom.fr
www.cs.nwu.edu
18DNS example
root name server
- Root name server
- may not know authoritative name server
- may know intermediate name server who to contact
to find authoritative name server
6
2
3
7
5
4
1
8
authoritative name server dns.cs.nwu.edu
requesting host surf.eurecom.fr
www.cs.nwu.edu
19DNS iterated queries
root name server
- recursive query
- puts burden of name resolution on contacted name
server - heavy load?
- iterated query
- contacted server replies with name of server to
contact - I dont know this name, but ask this server
iterated query
2
3
4
7
5
6
1
8
authoritative name server dns.cs.umass.edu
requesting host surf.eurecom.fr
gaia.cs.umass.edu
20DNS caching and updating records
- once (any) name server learns mapping, it caches
mapping - cache entries timeout (disappear) after some time
- update/notify mechanisms under design by IETF
- RFC 2136
- http//www.ietf.org/html.charters/dnsind-charter.h
tml
21DNS records
- DNS distributed db storing resource records (RR)
- TypeA
- name is hostname
- value is IP address
- TypeCNAME
- name is alias name for some cannonical (the
real) name - www.ibm.com is really
- servereast.backup2.ibm.com
- value is cannonical name
- TypeNS
- name is domain (e.g. foo.com)
- value is IP address of authoritative name server
for this domain
- TypeMX
- value is name of mailserver associated with name
22Outline
- Electronic Mail SMTP, POP3, IMAP
- DNS
- Socket programming with TCP
23Socket 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
- two types of transport service via socket API
- unreliable datagram
- reliable, byte stream
24Socket-programming using TCP
- Socket a door between application process and
end-end-transport protocol (UCP or TCP) - TCP service reliable transfer of bytes from one
process to another
controlled by application developer
controlled by application developer
controlled by operating system
controlled by operating system
internet
host or server
host or server
25Socket programming with TCP
- Client must contact server
- server process must first be running
- server must have created socket (door) that
welcomes 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)
26TCP Server
socket()
bind()
Well-known port
TCP Client
listen()
Socket()
accept()
blocks until connection from client
connect()
Connection establishment
Data(request)
write()
read()
process request
Data(reply)
write()
read()
close()
End-of-file notification
read()
close()
27Client high level view
Create a socket
Setup the server address
Connect to the server
Read/write data
Shutdown connection
28Creating a Socket
- int socket(int family,int type,int proto)
- family specifies the protocol family (PF_INET for
TCP/IP). - type specifies the type of service (SOCK_STREAM,
SOCK_DGRAM). - protocol specifies the specific protocol (usually
0, which means the default).
29socket()
- The socket() system call returns a socket
descriptor (small integer) or -1 on error. - socket() allocates resources needed for a
communication endpoint - but it does not deal
with endpoint addressing. - Sockets API is generic.
- TCP/IP requires an IP address and a port number
for each endpoint address. - Other protocol suites (families) may use other
schemes.
30Necessary Background Information POSIX data
types
- int8_t signed 8bit int
- uint8_t unsigned 8 bit int
- int16_t signed 16 bit int
- uint16_t unsigned 16 bit int
- int32_t signed 32 bit int
- uint32_t unsigned 32 bit int
- u_char, u_short, u_int, u_long
31More POSIX data types
- sa_family_t address family
- socklen_t length of struct
- in_addr_t IPv4 address
- in_port_t IP port number
32Address and port byte-ordering
- Address and port are stored as integers
- u_short sin_port (16 bit)
- in_addr sin_addr (32 bit)
struct in_addr u_long s_addr
- Problem
- different machines / OSs use different word
orderings - little-endian lower bytes first
- big-endian higher bytes first
- these machines may communicate with one another
over the network
Big-Endian machine
Little-Endian machine
12.40.119.128
128.119.40.12
WRONG!!!
33Solution Network Byte-Ordering
- Defs
- Host Byte-Ordering the byte ordering used by a
host (big or little) - Network Byte-Ordering the byte ordering used by
the network always big-endian - Any words sent through the network should be
converted to Network Byte-Order prior to
transmission (and back to Host Byte-Order once
received) - Q should the socket perform the conversion
automatically?
- Q Given big-endian machines dont need
conversion routines and little-endian machines
do, how do we avoid writing two versions of code?
34Network Byte Order Functions
- u_long htonl(u_long x)
- u_short htons(u_short x)
- u_long ntohl(u_long x)
- u_short ntohs(u_short x)
- On big-endian machines, these routines do nothing
- On little-endian machines, they reverse the byte
order - Same code would have worked regardless of
endian-ness of the two machines
Big-Endian machine
Little-Endian machine
128.119.40.12
128.119.40.12
35Network Byte Order Functions
- h host byte order n network byte
order - s short (16bit) l long
(32bit) - uint16_t htons(uint16_t)
- uint16_t ntohs(uint_16_t)
- uint32_t htonl(uint32_t)
- uint32_t ntohl(uint32_t)
36connect()
- int connect( int sockfd,
- const struct sockaddr server,
- socklen_t addrlen)
- sockfd is an already created TCP socket.
- server contains the address of the server (IP
Address and TCP port number) - connect() returns 0 if OK, -1 on error
37- int connect_ socket( char hostname, int port)
- int sock
- struct sockaddr_in sin
- struct hostent host
- sock socket( AF_ INET, SOCK_ STREAM, 0)
- if (sock -1)
- return sock
- host gethostbyname( hostname)
- if (host NULL)
- close( sock)
- return -1
-
- memset ( sin, 0, sizeof( sin))
- sin. sin_ family AF_ INET
- sin. sin_ port htons( port)
- sin. sin_ addr. s_ addr ( unsigned long )
host- h_ addr_ list 0 - if (connect( sock, (struct sockaddr ) sin,
sizeof( sin)) ! 0) - close (sock)
- return -1