Network Applications: Network App Programming: TCP FTP Y. Richard Yang 2/8/2016.

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
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.
Networking Overview February 2, /2/2004 Assignments Due – Homework 0 Due – Reading and Warmup questions Work on Homework 1.
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.
TCP Socket Programming. r An abstract interface provided to the application programmer  File descriptor, allows apps to read/write to the network r Allows.
TCP Socket Programming CPSC 441 Department of Computer Science University of Calgary.
2: Application Layer1 Socket Programming. 2: Application Layer2 Socket-programming using TCP Socket: a door between application process and end- end-transport.
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.
FTP File Transfer Protocol. Introduction transfer file to/from remote host client/server model  client: side that initiates transfer (either to/from.
2: Application Layer 1 Socket Programming TCP and UDP.
Network Applications: UDP and TCP Socket Programming Y. Richard Yang 9/17/2013.
JAVA Socket Programming Source: by Joonbok Lee, KAIST, 2003.
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.
18-1 Last time □ Fast retransmit ♦ 3 duplicate ACKs □ Flow control ♦ Receiver windows □ Connection management ♦ SYN/SYNACK/ACK, FIN/ACK, TCP states □ Congestion.
 Socket  The combination of an IP address and a port number. (RFC 793 original TCP specification)  The name of the Berkeley-derived application programming.
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.
1 CSCD 330 Network Programming Winter 2015 Some Material in these slides from J.F Kurose and K.W. Ross All material copyright Lecture 6 Application.
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.
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.
CPSC Application Layer 1 Trying out HTTP (client side) for yourself 1. Telnet to your favorite Web server: Opens TCP connection to port 80 (default.
Network Applications: DNS Details; UDP Network App Programming
1 CSCD 330 Network Programming Winter 2016 Some Material in these slides from J.F Kurose and K.W. Ross All material copyright Lecture 6 Application.
Socket programming in C. Socket programming Socket API introduced in BSD4.1 UNIX, 1981 explicitly created, used, released by apps client/server paradigm.
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.
Socket Programming Socket Programming Overview
DNS: Domain Name System
Socket programming with TCP
CSCD 330 Network Programming
Chapter 2: outline 2.1 principles of network applications
Socket programming - Java
Socket Programming Socket Programming Overview
Socket Programming.
CSCD 330 Network Programming
Java Socket Programming
Socket Programming 2: Application Layer.
DNS: Domain Name System
DNS: Domain Name System
Network Applications: TCP Network Programming; File Transfer Protocol
DNS: Domain Name System
Presentation transcript:

Network Applications: Network App Programming: TCP FTP Y. Richard Yang 2/8/2016

2 Outline  Admin and recap r Network app programming r FTP

3 Recap: DNS Protocol, Messages Many features: typically over UDP (can use TCP); query and reply messages with the same message format; length/content encoding of names; simple compression; additional info as server push

Recap: 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

5 Recap: UDP Sockets 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: UDP demutiplexing is based on matching (dst address, dst port)

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

Discussion: UDP/DNS Server Pseudocode 7 r Modify the example UDP server code to implement a local DNS server. requesting host cyndra.cs.yale.edu gaia.cs.umass.edu root name server authoritative name server dns.cs.umass.edu 5 6 TLD name server 7 8 local name server

8 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 Overview m UDP  Basic TCP 9

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 individual 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 IP/port} snd/recv buf: address: {*:9876; client 2 IP/port} 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) An individual socket for client 1 An individual socket for client 2

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 different connections/sessions are automatically separated into different sockets

13 TCP Socket Big Picture -Welcome socket: the waiting room -connSocket: the operation room

Client/server Socket Workflow: 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

16 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 creates 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.

17 (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.

18 Simple 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

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 20

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 21

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

Demo % wireshark to capture our TCP traffic tcp.srcport==6789 or tcp.dstport==

Under the Hood: After Welcome (Server) Socket 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

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: Client Connection 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: Client Connection 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: { , :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)

Demo r What if more client connections than backlog allowed? 29

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: connectionSocket

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 big is the backlog (welcome queue) 34 Welcome Socket Queue

Analysis r Is there any interop issue in the sample program? 35

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

Outline r Recap r Network application programming r FTP 37

38 FTP: the File Transfer Protocol r Transfer files to/from remote host r Client/server model m client: side that initiates transfer (either to/from remote) m server: remote host r ftp: RFC 959 r ftp server: port 21/20 (smtp 25, http 80) file transfer FTP server FTP user interface FTP client local file system remote file system user at host

39 FTP Commands, Responses Sample commands: r sent as ASCII text over control channel  USER username r PASS password  PWD returns current dir  STAT shows server status  LIST returns list of file in current directory  RETR filename retrieves (gets) file  STOR filename stores file Sample return codes r status code and phrase r 331 Username OK, password required r 125 data connection already open; transfer starting r 425 Can’t open data connection r 452 Error writing file

40 FTP Protocol Design r What is the simplest design of data transfer? FTP client FTP server TCP control connection port 21 at server RETR file.dat data

41 FTP: A Client-Server Application with Separate Control, Data Connections r Two types of TCP connections opened: m A control connection: exchange commands, responses between client, server. “out of band control” m Data connections: each for file data to/from server Discussion: why does FTP separate control/data connections? Q: How to create a new data connection?

42 Traditional FTP: Client Specifies Port for Data Connection FTP client FTP server TCP control connection port 21 at server PORT clientip:cport RETR file.dat Server initiates TCP data connection server:20 clientip:cport

43 Example using telnet/nc r Use telnet for the control channel m telnet ftp.freebsd.org 21 m user, pass m port 172,27,5,145,4,1 m list r use nc (NetCat) to receive/send data with server m nc –v –l 1025

44 Problem of the Client PORT Approach r Many Internet hosts are behind NAT/firewalls that block connections initiated from outside FTP client FTP server TCP control connection port 21 at server PORT clientip:cport RETR file.dat Server initiates TCP data connection server:20 clientip:cport

45 FTP PASV: Server Specifies Data Port, Client Initiates Connection FTP client FTP server TCP control connection port 21 at server Server initiates TCP data connection server:20 clientip:cport PORT clientip:cport RETR file.dat FTP client FTP server TCP control connection port 21 at server Client initiates TCP data connection of PASV returned serverip:sport PASV RETR file.dat serverip:sport

46 Example r Use Wireshark to capture traffic m Using chrome to visit ftp://ftp.freebsd.org/pub/FreeBSD/README.TXT

47 FTP Evaluation application transport network data link physical application transport network data link physical request reply Key questions to ask about a C-S application - Is the application extensible? - Is the application scalable? - How does the application handle server failures (being robust)? - How does the application provide security? What are some interesting design features of the FTP protocol?

48 FTP Extensions r FTP extensions are still being used extensively in large data set transfers (e.g., LHC) r See GridFTP to FTP extensions m

Outline r Recap r Network application programming r FTP r HTTP 49

Backup Slides 50

DataStream 51

Demo % wireshark to capture traffic tcp.srcport==6789 or tcp.dstport==