Connection Method |
FTP runs exclusively over TCP. FTP servers by default listen on port 21 for
incoming connections from FTP clients. A connection to this port from the FTP
Client forms the control stream on which commands are passed to the FTP server
from the FTP client and on occasion from the FTP server to the FTP client. FTP
uses out-of-band control, which means it uses a separate connection for control
and data. Thus, for the actual file transfer to take place, a different
connection is required which is called the data stream. Depending on the
transfer mode, the process of setting up the data stream is different.
In active mode, the FTP client opens a random port ( 1023), sends the
FTP server the random port number on which it is listening over the control
stream and waits for a connection from the FTP server. When the FTP server
initiates the data connection to the FTP client it binds the source port to port
20 on the FTP server.
In order to use active mode, the client sends a PORT command, with the IP and
port as argument. The format for the IP and port is "h1,h2,h3,h4,p1,p2". Each
field is a decimal representation of 8 bits of the host IP, followed by the
chosen data port. For example, a client with an IP of 192.168.0.1, listening on
port 1025 for the data connection will send the command "PORT 192,168,0,1,4,1".
The port fields should be interpreted as p1�256 + p2 = port, or, in this
example, 4�256 + 1 = 1025.
In passive mode, the FTP server opens a random port (> 1023), sends
the FTP client the server's IP address to connect to and the port on which it is
listening (a 16 bit value broken into a high and low byte, like explained
before) over the control stream and waits for a connection from the FTP client.
In this case the FTP client binds the source port of the connection to a random
port greater than 1023.
To use passive mode, the client sends the PASV command to which the
server would reply with something similar to "227 Entering Passive Mode
(127,0,0,1,78,52)". The syntax of the IP address and port are the same as for
the argument to the PORT command.
In extended passive mode, the FTP server operates exactly the same as
passive mode, however it only transmits the port number (not broken into high
and low bytes) and the client is to assume that it connects to the same IP
address that was originally connected to. Extended passive mode was added by RFC
2428 in September 1998.
While data is being transferred via the data stream, the control stream sits
idle. This can cause problems with large data transfers through firewalls which
time out sessions after lengthy periods of idleness. While the file may well be
successfully transferred, the control session can be disconnected by the
firewall, causing an error to be generated.
The FTP protocol supports resuming of interrupted downloads using the REST
command. The client passes the number of bytes it has already received as
argument to the REST command and restarts the transfer. In some commandline
clients for example, there is an often-ignored but valuable command, "reget"
(meaning "get again") that will cause an interrupted "get" command to be
continued, hopefully to completion, after a communications interruption.
Resuming uploads is not as easy. Although the FTP protocol supports the APPE
command to append data to a file on the server, the client does not know the
exact position at which a transfer got interrupted. It has to obtain the size of
the file some other way, for example over a directory listing or using the SIZE
command.
In ASCII mode (see below), resuming transfers can be troublesome if client
and server use different end of line characters.
The objectives of FTP, as outlined by its RFC, are:
- To promote sharing of files (computer programs and/or data).
- To encourage indirect or implicit use of remote computers.
- To shield a user from variations in file storage systems among different
hosts.
- To transfer data reliably, and efficiently.
|