Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Remote Desktop Services wikipedia , lookup
Deep packet inspection wikipedia , lookup
TCP congestion control wikipedia , lookup
Parallel port wikipedia , lookup
SIP extensions for the IP Multimedia Subsystem wikipedia , lookup
Recursive InterNetwork Architecture (RINA) wikipedia , lookup
Cracking of wireless networks wikipedia , lookup
Internet protocol suite wikipedia , lookup
UniPro protocol stack wikipedia , lookup
Networking with Java 1 Introduction to Networking 2 Protocols Hi Hi TCP connection request Client Got the time? TCP connection Server reply GET http://www.cs.huji.ac.il/~dbi 2:00 <file> time 3 Internet Architecture Model DATA Application (HTTP, FTP) HEADER DATA HEADER HEADER DATA HEADER HEADER DATA Transport (TCP,UDP) Network (IP) Link (LINK) HEADER 4 TCP (Transmission-Control Protocol) • Enables symmetric byte-stream transmission between two endpoints (applications) • Reliable communication channel • TCP perform these tasks: - connection establishment by handshake (relatively slow) - division to numbered packets (transferred by IP) - error correction of packets (checksum) - acknowledgement and retransmission of packets - connection termination by handshake 5 UDP (User Datagram Protocol) • Enables direct datagram (packet) transmission from one endpoint to another • No reliability (except for data correction) - sender does not wait for acknowledgements - arrival order is not guaranteed - arrival is not guaranteed • Used when speed is essential, even in cost of reliability - e.g., streaming media, games, Internet telephony, etc. 6 Ports • A computer may have several applications that communicate with applications on remote computers through the same physical connection to the network • When receiving a packet, how can the computer tell which application is the destination? • Solution: each channel endpoint is assigned a unique port that is known to both the computer and the other endpoint 7 Ports (cont) • Thus, an endpoint application on the Internet is identified by - A host name → 32 bits IP-address - A 16 bits port • Why don’t we specify the port in a Web browser? 8 Known Ports Client Application • Some known ports are - 20, 21: FTP mail client - 23: TELNET web browser - 25: SMTP - 110: POP3 21 23 25 110 80 119 - 80: HTTP - 119: NNTP 9 Sockets • A socket is a construct that represents one end-point of a two-way communication channel between two programs running on the network • Using sockets, the OS provides processes a file-like access to the channel - i.e., sockets are allocated a file descriptor, and processes can access (read/write) the socket by specifying that descriptor • A specific socket is identified by the machine's IP and a port within that machine 10 Sockets (cont) • A socket stores the IP and port number of the other end- point computer of the channel • When writing to a socket, the written bytes are sent to the other computer and port (e.g., over TCP/IP) - That is, remote IP and port are attached to the packets • When OS receives packets on the network, it uses their destination port to decide which socket should get the received bytes 11 Java Sockets Low-Level Networking 12 Java Sockets • Java wraps OS sockets (over TCP) by the objects of class java.net.Socket • new Socket(String remoteHost, int remotePort) creates a TCP socket and connects it to the remote host on the remote port (hand shake) • Write and read using streams: - InputStream getInputStream() - OutputStream getOutputStream() 13 A Socket Example import java.net.*; import java.io.*; public class SimpleSocket { public static void main(String[] args) throws IOException { ... next slide ... } } 14 Socket socket = new Socket("www.cs.huji.ac.il", 80); InputStream istream = socket.getInputStream(); OutputStream ostream = socket.getOutputStream(); String request = "GET /~dbi/admin.html HTTP/1.1\r\n" + "Host: www.cs.huji.ac.il\r\n" + "Connection: close\r\n\r\n"; ostream.write(request.getBytes()); Needed for forwarding for example byte[] response = new byte[4096]; int bytesRead = -1; while ((bytesRead = istream.read(response)) >= 0) { System.out.write(response, 0, bytesRead); } run the example socket.close(); 15 Timeout • You can set timeout values to blocking method read() of Socket • Use the method socket.setSoTimeout(milliseconds) • If timeout is reached before the method returns, java.net.SocketTimeoutException is thrown Read more about Socket Class 16 Java Sockets and HTTP 17 HTTP Message Structure • A HTTP message has the following structure: Request/Status-Line \r\n Header1: value1 \r\n Header2: value2 \r\n ... HeaderN: valueN \r\n \r\n Message-Body 18 Reading HTTP Messages • Several ways to interpret the bytes of the body - Binary: images, compressed files, class files, ... - Text: ASCII, Latin-1, UTF-8, ... • Commonly, applications parse the headers of the message, and process the body according to the information supplied by the headers - E.g., Content-Type, Content-Encoding, TransferEncoding 19 An Example 20 Parsing the Headers • So how are the headers themselves are represented? • The headers of a HTTP message must be in US-ASCII format (1 byte per character) 21 Example: Extracting the Headers Socket socket = new Socket(argv[0], 80); InputStream istream = socket.getInputStream(); OutputStream ostream = socket.getOutputStream(); String request = "GET / HTTP/1.1\r\n" + "Host: " + argv[0] + "\r\n" + "Connection: close\r\n\r\n"; ostream.write(request.getBytes()); StringBuffer headers = new StringBuffer(); int byteRead = 0; while ( !endOfHeaders(headers) && (byteRead = istream.read()) >= 0) { headers.append((char) byteRead); } System.out.print(headers); socket.close(); 22 Example: Extracting the Headers (cont) public static boolean endOfHeaders(StringBuffer headers) { int lastIndex = headers.length() - 1; if (lastIndex < 3 || headers.charAt(lastIndex) != '\n') return false; return ( headers.substring(lastIndex - 3, lastIndex + 1) .equals("\r\n\r\n")); } 23 Persistent Connections • According to HTTP/1.1, a server does not have to close the connection after fulfilling your request • One connection (socket) can be used for several requests and responses send more requests - even while earlier responses are being transferred (pipelining) - saves “slow start” time • how can the client know when one response ends and a new one begins? • To avoid persistency, require explicitly by the header: Connection: close 24 URL and URLConnection High-Level Networking 25 Working with URLs • URL (Uniform/Universal Resource Locator): a reference (an address) to a resource on the Internet http://www.cs.huji.ac.il:80/~dbi/main.html#notes Protocol Host Name Port Number File Name Reference 26 The Class URL • The class URL is used for parsing URLs • Constructing URLs: - URL w3c1 = new URL("http://www.w3.org/TR/"); - URL w3c2 = new URL("http","www.w3.org",80,"TR/"); - URL w3c3 = new URL(w3c2, "xhtml1/"); • If the string is not an absolute URL, then it is considered relative to the URL 27 Parsing URLs • The following methods of URL can be used for parsing URLs getProtocol(), getHost(), getPort(), getPath(), getFile(), getQuery(), getRef() Read more about URL Class 28 The class URLConnection • To establish the actual resource, we can use the object URLConnection obtained by url.openConnection() • If the protocol of the URL is HTTP, the returned object is of class HttpURLConnection • This class encapsulates all socket management and HTTP directions required to obtain the resource Read more about URLConnection Class 29 public class ContentExtractor { public static void main(String[] argv) throws Exception { URL url = new URL(argv[0]); System.out.println("Host: " + url.getHost()); System.out.println("Protocol: " + url.getProtocol()); System.out.println("----"); URLConnection con = url.openConnection(); InputStream stream = con.getInputStream(); }}} byte[] data = new byte[4096]; int bytesRead = 0; while((bytesRead=stream.read(data))>=0) { System.out.write(data,0,bytesRead); run the example 30 About URLConnection • The life cycle of a URLConnection object has two parts: - Before actual connection establishment • Connection configuration - After actual connection establishment • Content retrieval • Passage from the first phase to the second is implicit - A result of calling some committing methods, like getDate() 31 About HttpURLConnection • The HttpURLConnection class encapsulates all HTTP transaction over sockets, e.g., - Content decoding - Redirection - Proxy indirection • You can control requests by its methods - setRequestMethod, setFollowRedirects, setRequestProperty, ... Read more about HttpURLConnection Class 32 URLEncoder • Contains a utility method encode for converting a string into an encoded format (used in URLs) • To convert a string, each character is examined in turn: - Space is converted into a plus sign + - a-z, A-Z, 0-9, ., -, * and _ remain the same. - The bytes of all special characters are replaced by hexadecimal numbers, preceded with % • To decode an encoded string, use decode() of the class URLDecoder Read more about URLEncoder Class 33