tips on ftp implementation. jin pyo hong, hufspage 2 ftp model user interface user pi user dtp...

12
Tips on FTP Tips on FTP Implementation Implementation

Upload: brenda-clark

Post on 13-Dec-2015

224 views

Category:

Documents


4 download

TRANSCRIPT

Tips on FTP Tips on FTP ImplementationImplementation

Jin Pyo Hong, HUFS Page 2

FTP Model

UserInterfac

e

UserPI

UserDTP

ServerDTP

ServerPI

User

FileSystem

FileSystem

FTP Commands

FTP Replies

DataConnection

FTP ServerFTP Server FTP ClientFTP Client

PI: Protocol InterpreterDTP: Data Transfer Process

UserCommands

Port L

Port L-1

Jin Pyo Hong, HUFS Page 3

FTP Commands for Minimum Implementation

User Cmd FTP Cmd arguments 비고

open <hostname> Connect to FTP server

[user] USER <username> User name

PASS <password> Password

nlist NLST [<pathname>] Name list (ls)

ls, dir LIST [<pathname>] Directory list (ls –l)

pwd PWD Print working directory

cd CWD <pathname> Change working directory

lcd <pathname> Change local working directory

type[type] ascii[type] binary

TYPE AI

FTP data type ?A – NVT-ASCII textI – binary data

get RETR <pathname> Retrieve: download the file

put STOR <pathname> Store: upload the file

passive Passive mode on or off (toggle switch)If passive mode on, send PASV for data transferOtherwise, send PORT

PASV Set server into passive mode. Server will reply 227 response with its IP and port

PORT h1,h2,h3,h4,p1,p2 Data port for FTP clienth1,h1,h3,h4: IPv4 addressp1,p2: port number

close QUIT Close FTP session

bye, quit QUIT Close FTP session and exit

Jin Pyo Hong, HUFS Page 4

FTP Replies

Code Description

1yz Positive preliminary reply – The command is being acted upon; expect a final reply code before sending another command

2yz Positive completion reply – The command was successfully executed; a new command may be sent

3yz Positive intermediate reply – The command was accepted, but the final result is being delayed because other information needs to be supplied from the client

4yz Transient negative completion reply – The command failed, but the condition is temporary; the user agent should try again

5yz Permanent negative completion reply – The command failed and will always fail if given again; the command should not be attempted again

Jin Pyo Hong, HUFS Page 5

FTP Response Codes 125 Data connection already

open; transfer starting. 150 File status okay; about to

open data connection. 200 Command okay. 212 Directory status. 213 File status. 220 Service ready for new

user. 221 Service closing control

connection. 225 Data connection open;

no transfer in progress. 226 Closing data connection. 227 Entering Passive Mode

(203,253,69,113,201,131) 230 User logged in, proceed. 250 Requested file action

okay, completed.

331 User name okay, need password.

350 Requested file action pending further information.

421 Service not available, closing control connection.

425 Can't open data connection.

426 Connection closed; transfer aborted.

450 Requested file action not taken.

File unavailable (e.g., file busy). 500 Syntax error, command

unrecognized. 502 Command not

implemented. 530 Not logged in. 550 Requested action not

taken. File unavailable (e.g., file not

found, no access).

Jin Pyo Hong, HUFS Page 6

Open and Closing FTP Sessions

Establish Control Connection

USER <user name>

331 Need passwdPASS <password>

230 User logged in

220 Service ready

QUIT

221 Service closing

User PI Server PI

<user name>

<password>

closebye, quit

UserInterfa

ce

open <host>or from argv

Data Transfer

설계 : State transition diagram - Event: User command, Reply msg-Action: send FTP command …* reply msg 에 대한 state transition 도포함해야

설계 : State transition diagram - Event: User command, Reply msg-Action: send FTP command …* reply msg 에 대한 state transition 도포함해야

State transition table 을 만든다면 , if-then-else 를 쓰지 않고 , table-driven programming 할 수 있지 않을까 ?

State transition table 을 만든다면 , if-then-else 를 쓰지 않고 , table-driven programming 할 수 있지 않을까 ?

Jin Pyo Hong, HUFS Page 7

Data Transfer: get, put, ls- passive mode on

PASV

227 Entering Passive Mode (203,253,69,113,201,131)

RETR/STOR/LIST <file>

150 Opening data connection

226 Transfer Complete

UserPI

ServerPI

UserInterface

get/put/ls <file>

UserDTP

ServerDTP

IP addr, port of server DTP(server’s listening socket addr)

IP addr, port of server DTP(server’s listening socket addr)

Establish data connection

Data TransferClose connection

Jin Pyo Hong, HUFS Page 8

Data Transfer: get, out, ls- passive mode off

User logged in

PORT h1,h2,h3,h4,p1,p2

200 Command Successful

RETR/STOR/LIST <file>

150 Opening data connection

226 Transfer Complete

UserPI

ServerPI

UserInterface

get

UserDTP

ServerDTP

Establish data connection

How to know the listening socket address? - IP addr: control connection socket에서 /* getsockname(controlfd, …); */ - port: 0 - bind(listenfd, …); /* kernel 이 사용하지 않는 port 를 선택 */ - listen(listenfd, …); - getsockname(listenfd, …); - send PORT command - datafd = accept(listenfd, … );

Data TransferClose connection

Jin Pyo Hong, HUFS Page 9

State Transition Diagram CWD, QUIT, PORT, PWD, TYPE

BeginWaitfor

replySuccess

Failure

Sendcmd 2yz

4yz5yz

1yz3yz

Error

Jin Pyo Hong, HUFS Page 10

State Transition Diagram LIST, NLST, RETR, STOR

BeginWaitfor

replySuccess

Failure

Sendcmd 2yz

4yz5yz

3yz

1yz

Error

Jin Pyo Hong, HUFS Page 11

State Transition Diagram Login Sequence: USER, PASS

Waitfor

replySuccess

Failure

SendPASS

2

4, 5

1ErrorBegin

User IDsent

23 4, 5

1,3

SendUSER

Enterpassw

d

Jin Pyo Hong, HUFS Page 12

Reference RFC959, File Transfer Protocol (FTP)