Sockets DNS September 23 25 2003 9232003 9252003
Sockets & DNS September 23 -25, 2003 9/23/2003 -9/25/2003
Assignments • Turn in Lab 1 • Project 1 – Get started ASAP • Finish reading chapter 2 • Start on chapter 3 for next week 9/23/2003 -9/25/2003
Socket Programming • How do you create a network application? – in Java – http: //java. sun. com/docs/books/tutorial/ • TCP or UDP controlled by application developer controlled by operating system 9/23/2003 -9/25/2003 process socket TCP with buffers, variables host or server internet socket TCP with buffers, variables host or server controlled by application developer controlled by operating system
Socket Programming with TCP • Client/Server 1. 2. 3. 4. Server starts Server creates a socket Client starts Client creates a socket (what must be specified? ) and initiates TCP connection 5. Server creates a new socket for the connection 9/23/2003 -9/25/2003
Stream Jargon • Stream – a sequence of characters that flow into or out of a process. • Input Stream – attached to some input source for the process – keyboard, socket, ? ? ? • Output Stream – attached to an output source – monitor, socket, ? ? ? 9/23/2003 -9/25/2003
TCP Client Architecture Example client-server app 1. client reads line from standard input (in. From. User stream) , sends to server via socket (out. To. Server stream) 2. server reads line from socket 3. server converts line to uppercase, sends back to client 4. client reads, prints modified line from socket (in. From. Server stream) 9/23/2003 -9/25/2003 Client process client TCP socket
TCP Client/Server Interaction Server Client (running on hostid) create socket, port=x, for incoming request: welcome. Socket = Server. Socket() TCP wait for incoming connection request connection. Socket = welcome. Socket. accept() read request from connection. Socket write reply to connection. Socket close connection. Socket 9/23/2003 -9/25/2003 setup create socket, connect to hostid, port=x client. Socket = Socket() send request using client. Socket read reply from client. Socket close client. Socket
TCPClient. java import java. io. *; import java. net. *; class TCPClient { public static void main(String argv[]) throws Exception { String sentence; String modified. Sentence; Create input stream Create client socket, connect to server Create output stream attached to socket 9/23/2003 -9/25/2003 Buffered. Reader in. From. User = new Buffered. Reader(new Input. Stream. Reader(System. in)); Socket client. Socket = new Socket("hostname", 6789); Data. Output. Stream out. To. Server = new Data. Output. Stream(client. Socket. get. Output. Stream());
TCPClient. java Create input stream attached to socket Buffered. Reader in. From. Server = new Buffered. Reader(new Input. Stream. Reader(client. Socket. get. Input. Stream())); sentence = in. From. User. read. Line(); Send line to server out. To. Server. write. Bytes(sentence + 'n'); Read line from server modified. Sentence = in. From. Server. read. Line(); System. out. println("FROM SERVER: " + modified. Sentence); client. Socket. close(); } } 9/23/2003 -9/25/2003
TCPServer. java import java. io. *; import java. net. *; class TCPServer { Create welcoming socket at port 6789 Wait, on welcoming socket for contact by client Create input stream, attached to socket 9/23/2003 -9/25/2003 public static void main(String argv[]) throws Exception { String client. Sentence; String capitalized. Sentence; Server. Socket welcome. Socket = new Server. Socket(6789); while(true) { Socket connection. Socket = welcome. Socket. accept(); Buffered. Reader in. From. Client = new Buffered. Reader(new Input. Stream. Reader(connection. Socket. get. Input. Stream()));
TCPServer. java Create output stream, attached to socket Data. Output. Stream out. To. Client = new Data. Output. Stream(connection. Socket. get. Output. Stream()); Read in line from socket client. Sentence = in. From. Client. read. Line(); capitalized. Sentence = client. Sentence. to. Upper. Case() + 'n'; Write out line to socket out. To. Client. write. Bytes(capitalized. Sentence); } } } 9/23/2003 -9/25/2003 End of while loop, loop back and wait for another client connection
Java API • http: //java. sun. com/j 2 se/1. 4. 2/docs/api/ 9/23/2003 -9/25/2003
TCP Client/Server Interaction Server Client (running on hostid) create socket, port=x, for incoming request: welcome. Socket = Server. Socket() TCP wait for incoming connection request connection. Socket = welcome. Socket. accept() read request from connection. Socket write reply to connection. Socket close connection. Socket 9/23/2003 -9/25/2003 setup create socket, connect to hostid, port=x client. Socket = Socket() send request using client. Socket read reply from client. Socket close client. Socket
Socket programming with 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 • Transmitted data may be received out of order, or lost 9/23/2003 -9/25/2003
UDP Client/Server Interaction Server (running on hostid) create socket, port=x, for incoming request: server. Socket = Datagram. Socket() read request from server. Socket write reply to server. Socket specifying client host address, port number 9/23/2003 -9/25/2003 Client create socket, client. Socket = Datagram. Socket() Create, address (hostid, port=x, send datagram request using client. Socket read reply from client. Socket close client. Socket
UDP Client Architecture Client process Input: receives packet (TCP received “byte stream”) Output: sends packet (TCP sent “byte stream”) client UDP socket 9/23/2003 -9/25/2003
UDPClient. java import java. io. *; import java. net. *; Create input stream Create client socket Translate hostname to IP address using DNS class UDPClient { public static void main(String args[]) throws Exception { Buffered. Reader in. From. User = new Buffered. Reader(new Input. Stream. Reader(System. in)); Datagram. Socket client. Socket = new Datagram. Socket(); Inet. Address IPAddress = Inet. Address. get. By. Name("hostname"); byte[] send. Data = new byte[1024]; byte[] receive. Data = new byte[1024]; String sentence = in. From. User. read. Line(); 9/23/2003 -9/25/2003 send. Data = sentence. get. Bytes();
UDPClient. java Create datagram with data-to-send, length, IP addr, port Send datagram to server Datagram. Packet send. Packet = new Datagram. Packet(send. Data, send. Data. length, IPAddress, 9876); client. Socket. send(send. Packet); Datagram. Packet receive. Packet = new Datagram. Packet(receive. Data, receive. Data. length); Read datagram from server client. Socket. receive(receive. Packet); String modified. Sentence = new String(receive. Packet. get. Data()); System. out. println("FROM SERVER: " + modified. Sentence); client. Socket. close(); } } 9/23/2003 -9/25/2003
UDPServer. java import java. io. *; import java. net. *; Create datagram socket at port 9876 class UDPServer { public static void main(String args[]) throws Exception { Datagram. Socket server. Socket = new Datagram. Socket(9876); byte[] receive. Data = new byte[1024]; byte[] send. Data = new byte[1024]; while(true) { Create space for received datagram Receive datagram 9/23/2003 -9/25/2003 Datagram. Packet receive. Packet = new Datagram. Packet(receive. Data, receive. Data. length); server. Socket. receive(receive. Packet);
UDPServer. java String sentence = new String(receive. Packet. get. Data()); Get IP addr port #, of sender Inet. Address IPAddress = receive. Packet. get. Address(); int port = receive. Packet. get. Port(); String capitalized. Sentence = sentence. to. Upper. Case(); send. Data = capitalized. Sentence. get. Bytes(); Create datagram to send to client Write out datagram to socket Datagram. Packet send. Packet = new Datagram. Packet(send. Data, send. Data. length, IPAddress, port); server. Socket. send(send. Packet); } } } 9/23/2003 -9/25/2003 End of while loop, loop back and wait for another datagram
Building a Simple Web Server • http: //www. mtholyoke. edu/courses/srollins/cs 325/web/code/Web. Server. java • Handles one HTTP request – accepts the request – parses header – obtains requested file from server’s file system – creates HTTP response message: • header lines + file – sends response to client 9/23/2003 -9/25/2003
Exceptions • What happens when errors occur? • Java throws exceptions – but it’s up to you to deal with them • http: //java. sun. com/docs/books/tutorial/essential/exceptions/index. html 9/23/2003 -9/25/2003
Threads • We would like to be able to service more than one request at a time • Create a new thread for each request received • http: //java. sun. com/docs/books/tutorial/essential/threads/index. html 9/23/2003 -9/25/2003
Assignments • Turn in Homework 2 • Read chapter 3 – sections 3. 1 -3. 4 for next week • Get started on the review questions 9/23/2003 -9/25/2003
DNS: Domain Name System • How do I identify a computer? • Hostname – ID for a computer – Examples? • IP Address – Why is an IP needed? – Examples? • Mapping from hostname to IP address? 9/23/2003 -9/25/2003
DNS: Domain Name System • Name servers – Store hostname to IP mapping – Organized in a hierarchy – Act as a distributed database • Application-layer protocol – Defines communication between hosts and name servers 9/23/2003 -9/25/2003
Usage Scenario • Which apps use DNS? • HTTP – Browser extracts hostname – Sends hostname to DNS – DNS does lookup and returns IP address – Browser sends HTTP GET to IP address 9/23/2003 -9/25/2003
Name Servers • Why not have one master name server? – – single point of failure traffic volume distant centralized database maintenance • 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 host’s IP address, name – can perform name/address translation for that host’s name 9/23/2003 -9/25/2003
Root Name Servers • • contacted by local name server that can not resolve name contacts authoritative name server if name mapping not known gets mapping returns mapping to local name server a NSI Herndon, VA c PSInet Herndon, VA d U Maryland College Park, MD g DISA Vienna, VA h ARL Aberdeen, MD j NSI (TBD) Herndon, VA k RIPE London i NORDUnet Stockholm m WIDE Tokyo e NASA Mt View, CA f Internet Software C. Palo Alto, CA b USC-ISI Marina del Rey, CA l ICANN Marina del Rey, CA 9/23/2003 -9/25/2003 13 root name servers worldwide
Simple DNS Example root name server • Host surf. eurecom. fr wants IP address of gaia. cs. umass. edu 2 5 1. contacts its local DNS server, dns. eurecom. fr 2. dns. eurecom. fr contacts root local name server, if necessary dns. eurecom. fr 3. root name server contacts 1 6 authoritative name server, dns. umass. edu, if necessary requesting host surf. eurecom. fr 9/23/2003 -9/25/2003 3 4 authorititive name server dns. umass. edu gaia. cs. umass. edu
DNS Example root name server • Root name server may not know authoritative name server 6 2 7 • May know intermediate name server who to local name server contact to find dns. eurecom. fr authoritative name server 1 8 requesting host 3 intermediate name server dns. umass. edu 4 5 authoritative name server dns. cs. umass. edu surf. eurecom. fr 9/23/2003 -9/25/2003 gaia. cs. umass. edu
Iterated Queries root name server • Recursive Query – puts burden of name resolution on contacted name server – heavy load? • Iterated Query 2 iterated query 3 4 7 local name server – contacted server replies dns. eurecom. fr with name of server to 1 8 contact – “I don’t know this name, but ask this server” requesting host intermediate name server dns. umass. edu 5 6 authoritative name server dns. cs. umass. edu surf. eurecom. fr 9/23/2003 -9/25/2003 gaia. cs. umass. edu
Caching and Updating • Once (any) name server learns mapping, it caches mapping – cache entries timeout (disappear) after some time • Why is a timeout period needed? • UPDATE – Use DNS messages to update entries – Compare to static updates? 9/23/2003 -9/25/2003
DNS Records RR format: (name, value, type, ttl) • Type=A – 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 9/23/2003 -9/25/2003 • Type=CNAME – name is alias name for some “canonical” (the real) name www. ibm. com is really servereast. backup 2. ibm. com – value is canonical name • Type=MX – value is name of mailserver associated with name
Java Review/Project 1 • Questions about Java and/or Project 1? 9/23/2003 -9/25/2003
- Slides: 35