Network Applications: UDP and TCP Socket Programming Y. Richard Yang 9/17/2013.

Slides:



Advertisements
Similar presentations
2: Application Layer1 Socket programming Socket API r introduced in BSD4.1 UNIX, 1981 r Sockets are explicitly created, used, released by applications.
Advertisements

Client-Server Paradigm and Performance L. Grewe. 2 Review: Basic Client-Server Request/Reply Paradigm Typical Internet app has two pieces: client and.
Network Programming and Java Sockets
Socket Programming Socket Programming Overview Java Socket Programming
Application Layer 2-1 Chapter 2 Application Layer Computer Networking: A Top Down Approach 6 th edition Jim Kurose, Keith Ross Application Layer – Lecture.
2: Application Layer 1 Socket programming Socket API r introduced in BSD4.1 UNIX, 1981 r explicitly created, used, released by apps r client/server paradigm.
9/23/2003-9/25/2003 Sockets & DNS September 23-25, 2003.
1 Creating a network app Write programs that  run on different end systems and  communicate over a network.  e.g., Web: Web server software communicates.
2: Application Layer1 Data Communication and Networks Lecture 12 Java Sockets November 30, 2006.
2: Application Layer1 Socket programming Socket API r introduced in BSD4.1 UNIX, 1981 r explicitly created, used, released by apps r client/server paradigm.
1 Overview r Socket programming with TCP r Socket programming with UDP r Building a Web server.
Internet and Intranet Protocols and Applications Lecture 4: Application Layer 3: Socket Programming February 8, 2005 Arthur Goldberg Computer Science Department.
2: Application Layer1 Chapter 2 (continued) Application Layer – part 2 Computer Networking: A Top Down Approach Featuring the Internet, 3 rd edition. Jim.
Lecture 11 Java Socket Programming CPE 401 / 601 Computer Network Systems slides are modified from Dave Hollinger and Joonbok Lee.
Socket programming with UDP and TCP. Socket Programming with TCP Connection oriented – Handshaking procedure Reliable byte-stream.
2: Application Layer1 Socket Programming. 2: Application Layer2 Socket-programming using TCP Socket: a door between application process and end- end-transport.
2: Application Layer1 Chapter 2: Application layer r 2.1 Principles of network applications r 2.2 Web and HTTP r 2.3 FTP r 2.4 Electronic Mail  SMTP,
1 Network Layers Application Transport Network Data-Link Physical bits.
Protocols Rules for communicating between two entities (e.g., a client and a server) “A protocol definition specifies how distributed system elements interact.
Welcome to CIS 235 Computer Networks Fall, 2007 Prof Peterson.
2: Application Layer 1 Socket Programming Computer Networking: A Top Down Approach Featuring the Internet, 3 rd edition. Jim Kurose, Keith Ross Addison-Wesley,
JAVA Socket Programming Joonbok Lee KAIST.
2: Application Layer 1 Socket Programming TCP and UDP.
JAVA Socket Programming Source: by Joonbok Lee, KAIST, 2003.
ECE5650: Network Programming
1 1 Socket programming Socket API r introduced in BSD4.1 UNIX, 1981 r explicitly created, used, released by apps r client/server paradigm r two types of.
2: Application Layer1 Chapter 2 Application Layer Computer Networking: A Top Down Approach Featuring the Internet, 2 nd edition. Jim Kurose, Keith Ross.
2: Application Layer1 Chapter 2: Application layer r 2.1 Principles of network applications r 2.2 Web and HTTP r 2.3 FTP r 2.4 Electronic Mail  SMTP,
2: Application Layer1 Socket programming Socket API r introduced in BSD4.1 UNIX, 1981 r explicitly created, used, released by apps r client/server paradigm.
CS 3830 Day 11 Introduction : Application Layer 2 Server-client vs. P2P: example Client upload rate = u, F/u = 1 hour, u s = 10u, d min ≥ u s.
Chapter 2 Application Layer Computer Networking: A Top Down Approach, 5 th edition. Jim Kurose, Keith Ross Addison-Wesley, April A note on the use.
Winter 2002Suprakash Datta1 Socket programming Socket API introduced in BSD4.1 UNIX, 1981 explicitly created, used, released by apps client/server paradigm.
-1- Georgia State UniversitySensorweb Research Laboratory CSC4220/6220 Computer Networks Dr. WenZhan Song Associate Professor, Computer Science.
Socket Programming Lee, Sooyong
Network Programming and Sockets CPSC 363 Computer Networks Ellen Walker Hiram College (Includes figures from Computer Networking by Kurose & Ross, © Addison.
Socket Programming Tutorial. Socket programming Socket API introduced in BSD4.1 UNIX, 1981 explicitly created, used, released by apps client/server paradigm.
Java Socket programming. Socket programming with TCP.
NETWORK PROGRAMMING.
2: Application Layer1 Chapter 2: Application layer r 2.1 Principles of network applications r 2.2 Web and HTTP r 2.3 FTP r 2.4 Electronic Mail  SMTP,
2: Application Layer1 Socket programming Socket API Explicitly created, used, released by apps Client/server paradigm Two types of transport service via.
1 CSCD 330 Network Programming Spring 2014 Some Material in these slides from J.F Kurose and K.W. Ross All material copyright Lecture 7 Application.
Network Applications: DNS, UDP Socket 1/24/ Outline  Recap r DNS r Network application programming: UDP.
1 Socket programming Socket API r introduced in BSD4.1 UNIX, 1981 r explicitly created, used, released by apps r client/server paradigm r two types of.
1 COMP 431 Internet Services & Protocols Client/Server Computing & Socket Programming Jasleen Kaur February 2, 2016.
1 CSCD 330 Network Programming Fall 2013 Some Material in these slides from J.F Kurose and K.W. Ross All material copyright Lecture 8a Application.
Network Applications: DNS Details; UDP Network App Programming
Network Applications: Network App Programming: TCP FTP Y. Richard Yang 2/8/2016.
Data Communications and Computer Networks Chapter 2 CS 3830 Lecture 11 Omar Meqdadi Department of Computer Science and Software Engineering University.
1 All rights reserved to Chun-Chuan Yang Upon completion you will be able to: The OSI Model and the TCP/IP Protocol Suite Understand the architecture of.
Topic: Network programming
Socket Programming Socket Programming Overview
Transport layer (last part) Application layer
DNS: Domain Name System
Socket programming with TCP
Chapter 2: outline 2.1 principles of network applications
Socket programming - Java
CSCD 330 Network Programming
Socket Programming Socket Programming Overview
Socket Programming.
CSCD 330 Network Programming
Java Socket Programming
Socket Programming 2: Application Layer.
DNS: Domain Name System
CPSC 441 UDP Socket Programming
Chapter 2: Application layer
DNS: Domain Name System
Network Applications: TCP Network Programming; File Transfer Protocol
DNS: Domain Name System
Socket Programming with UDP
Presentation transcript:

Network Applications: UDP and TCP Socket Programming Y. Richard Yang 9/17/2013

2 Outline  Recap r Network application programming: intro to sockets m UDP m TCP

3 Recap: DNS r Function m map between (domain name, service) to value, e.g., ( Addr) -> (cs.yale.edu, ) -> netra.cs.yale.edu

4 Recap: DNS r Key design features of DNS m Hierarchical domain name space allowing delegation m Recursive or iterative queries

5 Recap: DatagramSocket(Java) r DatagramSocket() constructs a datagram socket and binds it to any available port on the local host r DatagramSocket(int lport) constructs a datagram socket and binds it to the specified port on the local host machine. r DatagramSocket(int lport, InetAddress laddr) creates a datagram socket and binds to the specified local port and laddress. r DatagramSocket(SocketAddress bindaddr) creates a datagram socket and binds to the specified local socket address. r DatagramPacket(byte[] buf, int length) constructs a DatagramPacket for receiving packets of length length. r DatagramPacket(byte[] buf, int length, InetAddress address, int port) constructs a datagram packet for sending packets of length length to the specified port number on the specified host. r receive(DatagramPacket p) receives a datagram packet from this socket. r send(DatagramPacket p) sends a datagram packet from this socket. r close() closes this datagram socket.

Connectionless UDP: Big Picture (Java version) close clientSocket Server (running on serv ) read reply from clientSocket create socket, clientSocket = DatagramSocket() Client Create datagram using ( serv, x) as (dest addr. port), send request using clientSocket create socket, port= x, for incoming request: serverSocket = DatagramSocket( x ) read request from serverSocket write reply to serverSocket generate reply, create datagram using client host address, port number r Create socket with port number: DatagramSocket sSock = new DatagramSocket(9876); r If no port number is specified, the OS will pick one

7 Example: UDPServer.java r A simple UDP server which changes any received sentence to upper case.

8 Java Server (UDP): Create Socket import java.io.*; import java.net.*; class UDPServer { public static void main(String args[]) throws Exception { DatagramSocket serverSocket = new DatagramSocket(9876); Create datagram socket bind at port 9876 Check socket state: %netstat –p udp –n

9 System State after the Call server UDP socket space address: {*:9876} snd/recv buf: address: { :53} snd/recv buf: “*” indicates that the socket binds to all IP addresses of the machine: % ifconfig -a local address why shown as “*”? local port

10 Binding to IP Addresses server UDP socket space Public address: Local address: address: { :53} snd/recv buf: InetAddress sIP1 = InetAddress.getByName(“localhost”); DatagramSocket ssock1 = new DatagramSocket(9876, sIP1); InetAddress sIP2 = InetAddress.getByName(“ ”); DatagramSocket ssock2 = new DatagramSocket(9876,sIP2); DatagramSocket serverSocket = new DatagramSocket(6789); address: { :9876} snd/recv buf: address: { :9876} snd/recv buf: address: {*:6789} snd/recv buf:

11 UDP Demultiplexing server UDP socket space Public address: Local address: address: { :53} snd/recv buf: UDP demutiplexing is based on matching (dst address, dst port) address: { :9876} snd/recv buf: address: { :9876} snd/recv buf: P1 client on server SP: x DP: 9876 S-IP: A D-IP: P2 client IP: B SP: y DP: 9876 S-IP: B D-IP:

12 UDP Demultiplexing server UDP socket space Public address: Local address: address: { :53} snd/recv buf: UDP demutiplexing is based on matching (dst address, dst port) P1 Client on server SP: x DP: 9876 S-IP: A D-IP: P3 client IP: C SP: y DP: 6789 S-IP: C D-IP: address: { :9876} snd/recv buf: address: { :9876} snd/recv buf: address: {*:6789} snd/recv buf:

Per Socket State r Each socket has a set of states: m local address m receive buffer size m send buffer size m timeout See DatagramSocket API to display socket state. Example: socket state after clients sent msgs to the server 13

14 Java Server (UDP): Receiving import java.io.*; import java.net.*; class UDPServer { public static void main(String args[]) throws Exception { DatagramSocket serverSocket = new DatagramSocket(9876); byte[] receiveData = new byte[1024]; byte[] sendData = null; while(true) { DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); serverSocket.receive(receivePacket); Create space for received datagram Receive datagram

15 Java Server (UDP): Processing import java.io.*; import java.net.*; class UDPServer { public static void main(String args[]) throws Exception { … // process data String sentence = new String(receivePacket.getData(), 0, receivePacket.getLength()); String capitalizedSentence = sentence.toUpperCase(); sendData = capitalizedSentence.getBytes(); getData() returns a pointer to an underlying buffer array; for efficiency, don’t assume receive() will reset the rest of the array getLength() returns how much data is valid.

16 Java Server (UDP): Response r Java DatagramPacket:  getAddress()/getPort () returns the source address/port

17 Java server (UDP): Reply InetAddress IPAddress = receivePacket.getAddress(); int port = receivePacket.getPort(); DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port); serverSocket.send(sendPacket); } Get IP addr port #, of sender Write out datagram to socket End of while loop, loop back and wait for another datagram Create datagram to send to client

18 Example: UDPClient.java r A simple UDP client which reads input from keyboard, sends the input to server, and reads the reply back from the server.

19 Example: Java client (UDP) import java.io.*; import java.net.*; class UDPClient { public static void main(String args[]) throws Exception { BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in)); String sentence = inFromUser.readLine(); byte[] sendData = sentence.getBytes(); DatagramSocket clientSocket = new DatagramSocket(); InetAddress sIPAddress = InetAddress.getByName(“servname"); Create input stream Create client socket Translate hostname to IP address using DNS

20 Example: Java client (UDP), cont. DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, sIPAddress, 9876); clientSocket.send(sendPacket); byte[] receiveData = new byte[1024]; DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); clientSocket.receive(receivePacket); String modifiedSentence = new String(receivePacket.getData()); System.out.println("FROM SERVER:" + modifiedSentence); clientSocket.close(); } Create datagram with data-to-send, length, IP addr, port Send datagram to server Read datagram from server

Discussion on Example Code r A simple upper-case echo service is among the simplest network service. r Are there any problems with the program? 21

Data Encoding/Decoding r Pay attention to encoding/decoding of data: transport layer handles only a sequence of bytes 22 byte array query encoding decoding client server if not careful, query sent != query received (how?) result

Example: Endianness of Numbers r int var = 0x0A0B0C0D 23 Intel x86 ARM, Power PC, Motorola 68k, IA-64

Example: String and Chars 24 String byte array String.getBytes() client server Will we always get back the same string? String(rcvPkt, 0, rcvPkt.getLength()); Depends on default local platform char set (why?) : java.nio.charset.Charset.defaultCharset() (UTF-16) String (UTF-16)

Example: Charset Troubles r Try m java EncodingDecoding US-ASCII UTF-8 m java EncodingDecoding ISO UTF-8 25

Encoding/Decoding as a Common Source of Errors r Please read chapter 4 of Java Network Programming for more details r Common mistake even in many (textbook) examples: m Protocol/UseDatagramSockettosendoutandrece iveDatagramPacket.htm 26

Discussion: UDP/DNS Server Pseudocode 27 r Modify the example UDP server code to implement a DNS server. r flags: m query or reply m recursion desired m recursion available m reply is authoritative

28 UDP/DNS Implementation r Standard UDP demultiplexing (find out return address by src.addr/src.port of UDP packet) does not always work r DNS solution: identification: remember the mapping

Outline r Recap r Network application programming m UDP  TCP 29

TCP Socket Design: Starting w/ UDP server Socket socket space address: {*:9876} snd/recv buf: local address local port Issue: TCP is designed to provide a pipe abstraction: server reads an ordered sequence of bytes from each connected client Issue 2: How is the server notified that a new client is connected? P1 client1 P2 client2 sock.nextByte(client1)? newClient = sock.getNewClient()?

BSD TCP Socket API Design server TCP socket space Q: How to decide where to put a new packet? address: {*:9876} snd/recv buf: address: {*:9876; client 1} snd/recv buf: address: {*:9876; client 2} snd/recv buf: socket for new connected clients P1 client1 P2 client2 A: Packet demutiplexing is based on four tuples: (dst addr, dst port, src addr, src port)

TCP Connection-Oriented Demux r TCP socket identified by 4-tuple: m source IP address m source port number m dest IP address m dest port number r recv host uses all four values to direct segment to appropriate socket m server can easily support many simultaneous TCP sockets: different connections/sessions are automatically separated into different sockets

33 Connection-Oriented Demux Client IP:B P1 client IP: A P1P2P4 server IP: S SP: x DP: 25 SP: y DP: 25 P5P6P3 D-IP: S S-IP: A D-IP: S S-IP: B SP: x DP: 25 D-IP: S S-IP: B

34 TCP Socket Big Picture

Summary: Socket Programming with TCP Client must contact server r server process must first be running r server must have created socket (door) that welcomes client’s contact Client contacts server by: r creating client-local TCP socket r specifying IP address, port number of server process r When client creates socket: client TCP establishes connection to server TCP r When contacted by client, server TCP creates new socket for server process to communicate with client TCP provides reliable, in-order transfer of bytes (“pipe”) between client and server application viewpoint

36 Connection-oriented TCP: Big Picture (C version) welcomeSocket=socket(): create socket bind(welcomeSocket, …): specify socket address/port server client TCP connection setup listen(welcomeSocket, …): specify that socket welcomeSocket is a listening socket connectionSocket=accept(welcomeSocket, …): get a connected connection from the queue for socket welcomeSocket; create a new socket identified by connectionSocket read()/write(): do IO on socket connectionSocket close(connectionSocket): done clientSocket=socket(): create socket bind(clientSocket): specify socket address connect(clientSocket, serverAddr, serverPort): initialize TCP handshake to server; return until TCP handshake is done read()/write(): do IO on clientSocket close(clientSocket): done optional

Client/server socket interaction: TCP wait for incoming connection request connectionSocket = welcomeSocket.accept() create socket, port= x, for incoming request: welcomeSocket = ServerSocket(x) create socket, connect to hostid, port= x clientSocket = Socket() close connectionSocket read reply from clientSocket close clientSocket Server (running on hostid ) Client send request using clientSocket read request from connectionSocket write reply to connectionSocket TCP connection setup

Server Flow connSocket = accept() Create ServerSocket(6789) read request from connSocket Serve the request close connSocket -Welcome socket: the waiting room -connSocket: the operation room

39 ServerSocket r ServerSocket() m creates an unbound server socket. r ServerSocket(int port) m creates a server socket, bound to the specified port. r ServerSocket(int port, int backlog) m creates a server socket and binds it to the specified local port number, with the specified backlog. r ServerSocket(int port, int backlog, InetAddress bindAddr) m create a server with the specified port, listen backlog, and local IP address to bind to. r bind(SocketAddress endpoint) m binds the ServerSocket to a specific address (IP address and port number). r bind(SocketAddress endpoint, int backlog) m binds the ServerSocket to a specific address (IP address and port number). r Socket accept() m listens for a connection to be made to this socket and accepts it. r close() closes this socket.

40 (Client)Socket r Socket(InetAddress address, int port) creates a stream socket and connects it to the specified port number at the specified IP address. r Socket(InetAddress address, int port, InetAddress localAddr, int localPort) creates a socket and connects it to the specified remote address on the specified remote port. r Socket(String host, int port) creates a stream socket and connects it to the specified port number on the named host. r bind(SocketAddress bindpoint) binds the socket to a local address. r connect(SocketAddress endpoint) connects this socket to the server. r connect(SocketAddress endpoint, int timeout) connects this socket to the server with a specified timeout value. r InputStreamget InputStream() returns an input stream for this socket. r OutputStreamgetOutputStream() returns an output stream for this socket. r close() closes this socket.

OutputStream r public abstract class OutputStream m public abstract void write(int b) throws IOException m public void write(byte[] data) throws IOException m public void write(byte[] data, int offset, int length) throws IOException m public void flush( ) throws IOException m public void close( ) throws IOException 41

InputStream r public abstract class InputStream m public abstract int read( ) throws IOException m public int read(byte[] input) throws IOException m public int read(byte[] input, int offset, int length) throws IOException m public long skip(long n) throws IOException m public int available( ) throws IOException m public void close( ) throws IOException 42

43 TCP Example Example client-server app: 1) client reads line from standard input ( inFromUser stream), sends to server via socket ( outToServer 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 ( inFromServer stream)

Example: Java client (TCP) import java.io.*; import java.net.*; class TCPClient { public static void main(String argv[]) throws Exception { String sentence; String modifiedSentence; BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in)); sentence = inFromUser.readLine(); Socket clientSocket = new Socket(“server.name", 6789); DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream()); Create input stream Create client socket, connect to server Create output stream attached to socket

Example: Java client (TCP), cont. outToServer.writeBytes(sentence + '\n'); BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); modifiedSentence = inFromServer.readLine(); System.out.println ("FROM SERVER: " + modifiedSentence ); clientSocket.close(); } Read line from server Create input stream attached to socket Send line to server

Example: Java server (TCP) import java.io.*; import java.net.*; class TCPServer { 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())); Create welcoming socket at port 6789

Under the Hood: TCP Multiplexing server client TCP socket space state: listening address: {*:6789, *:*} completed connection queue: sendbuf: recvbuf: TCP socket space state: listening address: {*:25, *:*} completed connection queue: sendbuf: recvbuf: state: listening address: {*:25, *:*} completed connection queue: sendbuf: recvbuf: state: starting address: { :1500, *:*} sendbuf: recvbuf: local addr local port remote addr remote port %netstat –p tcp –n -a

Example: Client Initiates Connection server client TCP socket space state: listening address: {*:6789, *.*} completed connection queue: sendbuf: recvbuf: TCP socket space state: listening address: {*.25, *.*} completed connection queue: sendbuf: recvbuf: state: listening address: {*.25, *.*} completed connection queue: sendbuf: recvbuf: state: connecting address: { :1500, :6789} sendbuf: recvbuf:

Example: TCP Handshake Done server client TCP socket space state: listening address: {*:6789, *:*} completed connection queue: { , } sendbuf: recvbuf: TCP socket space state: listening address: {*:25, *:*} completed connection queue: sendbuf: recvbuf: state: listening address: {*:25, *:*} completed connection queue: sendbuf: recvbuf: state: connected address: { :1500, :6789} sendbuf: recvbuf:

Example: Java server (TCP) import java.io.*; import java.net.*; class TCPServer { 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())); Wait, on welcoming socket for contact by client

Example: Server accept() server client TCP socket space state: listening address: {*.6789, *:*} completed connection queue: sendbuf: recvbuf: TCP socket space state: listening address: {*.25, *:*} completed connection queue: sendbuf: recvbuf: state: listening address: {*.25, *:*} completed connection queue: sendbuf: recvbuf: state: connected address: { , :6789} sendbuf: recvbuf: state: established address: { :6789, } sendbuf: recvbuf: Packet sent to the socket with the best match! Packet demutiplexing is based on (dst addr, dst port, src addr, src port)

Example: Java server (TCP): Processing BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream())); clientSentence = inFromClient.readLine(); capitalizedSentence = clientSentence.toUpperCase() + '\n'; DataOutputStream outToClient = new DataOutputStream (connectionSocket.getOutputStream()); outToClient.writeBytes(capitalizedSentence); } Read in line from socket Create input stream, attached to socket

Example: Java server (TCP): Output BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream())); clientSentence = inFromClient.readLine(); capitalizedSentence = clientSentence.toUpperCase() + '\n'; DataOutputStream outToClient = new DataOutputStream (connectionSocket.getOutputStream()); outToClient.writeBytes(capitalizedSentence); } Create output stream, attached to socket Write out line to socket End of while loop, loop back and wait for another client connection

Analysis r Assume that client requests arrive at a rate of lambda/second r Assume that each request takes 1/mu seconds r Some basic questions m How long is the queue at the welcome socket? m What is the response time of a request? 54 Welcome Socket Queue

Analysis r Is there any interop issue in the sample program? m DataOutputStream writeBytes(String) truncates – tputStream.html#writeBytes(java.lang.String) 55