Date post: | 13-Dec-2015 |
Category: |
Documents |
Upload: | brenda-clark |
View: | 223 times |
Download: | 4 times |
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