DNS: Domain Names
DNS: Domain Name System
People: many identifiers:
SSN, name, Passport #
Internet hosts, routers:
Always: IP address (32
bit) - used for
addressing datagrams
Often: name, e.g., nifc14.wsu.edu - used by
humans
A: Domain Name System
(DNS):
Q: How do we map
between names and IP
addresses?
distributed database
implemented in hierarchy of
many name servers
application-layer protocol
hosts, name servers
communicate to resolve names
(name/address translation)
note: this is a core
Internet function
implemented as
application-layer protocol
complexity at networks
edge
2: Application Layer
no server has all nameto-IP address mappings
local name servers:
each ISP, company has
host DNS query first goes
to local name server
local (default) name server
authoritative name server:
for a host: stores that
hosts IP address, name
can perform name to
address translation for
that hosts name
www.eecs.wsu.edu.
Each suffix
corresponds to a zone
.
edu.
wsu.edu.
eecs.wsu.edu.
Top-level domains
edu.
com.
mil.
us.
uk.
fr.
Each zone has at least
two authoritative
servers
DNS name servers
Names are
hierarchical
2: Application Layer
2: Application Layer
DNS: Root name servers
Why not centralize DNS?
single point of failure
traffic volume
distant centralized
database
maintenance
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
~ dozen root name
servers worldwide
doesnt scale!
2: Application Layer
Simple DNS example
DNS example
root name server
host surf.eurecom.fr
wants IP address of
gaia.cs.umass.edu
1. Contacts its local DNS
server, dns.eurecom.fr
2. dns.eurecom.fr contacts local name server
root name server, if
dns.eurecom.fr
necessary
1
6
3. root name server contacts
authoritative name server,
dns.umass.edu, if
necessary
requesting host
surf.eurecom.fr
root name server
Root name server:
authoratiative name
server
may know
intermediate name
server: who to
authorititive name server
dns.umass.edu
contact to find
authoritative name
server
may not know
local name server
dns.eurecom.fr
requesting host
intermediate name server
dns.umass.edu
authoritative name server
dns.cs.umass.edu
surf.eurecom.fr
gaia.cs.umass.edu
gaia.cs.umass.edu
2: Application Layer
DNS: iterated queries
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
3
7
dns.eurecom.fr
requesting host
intermediate name server
dns.umass.edu
once (any) name server learns mapping, it caches
mapping
cache entries timeout (disappear) after some
time
update/notify mechanisms under design by IETF
local name server
DNS: caching and updating records
root name server
2: Application Layer
RFC 2136
http://www.ietf.org/html.charters/dnsind-charter.html
authoritative name server
dns.cs.umass.edu
surf.eurecom.fr
gaia.cs.umass.edu
2: Application Layer
2: Application Layer
DNS records
DNS protocol, messages
DNS: distributed db storing resource records (RR)
DNS protocol : query and reply messages, both with
same message format
RR format: (name,
Type=A
value, type,ttl)
name is hostname
value is IP address
Type=NS
name is domain (e.g.
foo.com)
value is IP address of
authoritative name
server for this domain
msg header
Type=CNAME
identification: 16 bit # for
name is an alias name
for some cannonical
(the real) name
value is cannonical
name
Type=MX
value is hostname of
mailserver associated with
name
2: Application Layer
query, reply to query uses
same #
flags:
query or reply
recursion desired
recursion available
reply is authoritative
2: Application Layer
DNS protocol, messages
10
Example: Java client (TCP)
import java.io.*;
import java.net.*;
class TCPClient {
Name, type fields
for a query
public static void main(String argv[]) throws Exception
{
String sentence;
String modifiedSentence;
RRs in reponse
to query
records for
authoritative servers
Create
input stream
additional helpful
info that may be used
Create
client socket,
connect to server
Create
output stream
attached to socket
2: Application Layer
11
BufferedReader inFromUser =
new BufferedReader(new InputStreamReader(System.in));
Socket clientSocket = new Socket("hostname", 6789);
DataOutputStream outToServer =
new DataOutputStream(clientSocket.getOutputStream());
2: Application Layer
12
Example: Java client (TCP), cont.
Example: Java server (TCP)
import java.io.*;
import java.net.*;
Create
input stream
attached to socket
BufferedReader inFromServer =
new BufferedReader(new
InputStreamReader(clientSocket.getInputStream()));
sentence = inFromUser.readLine();
Send line
to server
Create
welcoming socket
at port 6789
outToServer.writeBytes(sentence + '\n');
Read line
from server
modifiedSentence = inFromServer.readLine();
System.out.println("FROM SERVER: " + modifiedSentence);
clientSocket.close();
Wait, on welcoming
socket for contact
by client
Create input
stream, attached
to socket
}
}
2: Application Layer
public static void main(String argv[]) throws Exception
{
String clientSentence;
String capitalizedSentence;
ServerSocket welcomeSocket = new ServerSocket(6789);
while(true) {
Socket connectionSocket = welcomeSocket.accept();
BufferedReader inFromClient =
new BufferedReader(new
InputStreamReader(connectionSocket.getInputStream()));
2: Application Layer
13
Example: Java server (TCP), cont
14
Example: Java client (UDP)
import java.io.*;
import java.net.*;
Create output
stream, attached
to socket
DataOutputStream outToClient =
new DataOutputStream(connectionSocket.getOutputStream());
Read in line
from socket
Create
input stream
clientSentence = inFromClient.readLine();
capitalizedSentence = clientSentence.toUpperCase() + '\n';
Write out line
to socket
outToClient.writeBytes(capitalizedSentence);
Create
client socket
Translate
hostname to IP
address using DNS
}
}
class TCPServer {
End of while loop,
loop back and wait for
another client connection
class UDPClient {
public static void main(String args[]) throws Exception
{
BufferedReader inFromUser =
new BufferedReader(new InputStreamReader(System.in));
DatagramSocket clientSocket = new DatagramSocket();
InetAddress IPAddress = InetAddress.getByName("hostname");
byte[] sendData = new byte[1024];
byte[] receiveData = new byte[1024];
String sentence = inFromUser.readLine();
sendData = sentence.getBytes();
2: Application Layer
15
2: Application Layer
16
Example: Java client (UDP), cont.
Create datagram
with data-to-send,
length, IP addr, port
Example: Java server (UDP)
import java.io.*;
import java.net.*;
DatagramPacket sendPacket =
new DatagramPacket(sendData, sendData.length, IPAddress, 9876);
Send datagram
to server
clientSocket.send(sendPacket);
Create
datagram socket
at port 9876
DatagramPacket receivePacket =
new DatagramPacket(receiveData, receiveData.length);
Read datagram
from server
clientSocket.receive(receivePacket);
class UDPServer {
public static void main(String args[]) throws Exception
{
DatagramSocket serverSocket = new DatagramSocket(9876);
byte[] receiveData = new byte[1024];
byte[] sendData = new byte[1024];
String modifiedSentence =
new String(receivePacket.getData());
while(true)
{
System.out.println("FROM SERVER:" + modifiedSentence);
clientSocket.close();
}
Create space for
received datagram
Receive
datagram
}
2: Application Layer
DatagramPacket receivePacket =
new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(receivePacket);
2: Application Layer
17
18
Chapter 2: Summary
Example: Java server (UDP), cont
String sentence = new String(receivePacket.getData());
Get IP addr
port #, of
sender
InetAddress IPAddress = receivePacket.getAddress();
int port = receivePacket.getPort();
String capitalizedSentence = sentence.toUpperCase();
sendData = capitalizedSentence.getBytes();
Create datagram
to send to client
serverSocket.send(sendPacket);
}
End of while loop,
loop back and wait for
another datagram
2: Application Layer
19
connection-oriented,
reliable: TCP
unreliable, datagrams:
UDP
specific protocols:
reliability, bandwidth,
delay
client-server paradigm
Internet transport
service model
}
}
DatagramPacket sendPacket =
new DatagramPacket(sendData, sendData.length, IPAddress,
port);
Write out
datagram
to socket
application service
requirements:
http
ftp
smtp, pop3
dns
socket programming
client/server
implementation
using tcp, udp sockets
2: Application Layer
20
Chapter 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-based, out-of-band
centralized vs. decentralized
stateless vs. stateful
reliable vs. unreliable msg
transfer
complexity at network
edge
security: authentication
2: Application Layer
21