6.2.4 FTP服务的两个连接
我们从另外一种情况来看FTP,前面我们学习的是客户机与服务器之间建立的FTP连接(6.2.3 网络基本服务—文件传输协议(FTP)),如图,数据连接是在两个服务器数据传送进程之间建立的,此时的FTP模型如图所示。
用户和服务器数据传送进程二者都有默认的端口,用户进程的默认数据端口与控制连接端口是相同的。而服务器进程默认的数据端口是与控制连接相邻的端口,比如服务器进程默认的控制端口是21,而数据连接的默认端口就是相邻的20。而FTP实现必须支持使用默认数据端口,此外只有用户协议解释器可以通过PORT命令指定一个替代的、默认端口的非默认数据端口,比如当数据要在两个服务器A和B之间传送时,用户C的协议解释器与两个服务器的协议解释器都要建立控制连接,
如图
服务器A收到客户C发送的PASV命令,该命令就是告知服务器A收到该传送命令后在其数据端口上监听,此时的服务器A处于监听状态,而非初始化一个连接,服务器A向客户机的用户协议解释器发送对PASV命令的确认,确认包括服务器A正在监听的主机IP地址和端口的标识,当用户协议解释器收到对PASV命令的确认时就向服务器B发送包含A的主机地址和端口标识的PORT命令,B会返回一个应答,用户协议解释器会发送相应的服务命令给A和B。
图中STOR命令是服务器的数据传送进程接受经数据连接传送过来的数据,并且把数据作为一个文件存储在服务器上,如果在STOR命令的路径名参数中所指定的文件已经存在与服务器中的话,文件内容将被传送来的新的文件替换,如果文件不存在就会在服务器上创建一个新文件。
图中RETR命令表示检索,该命令会导致服务器的数据传送进程向数据连接另一端的服务器或者是用户数据传送进程发送RETR命令中参数中的路径名指定文件的副本。服务器B会发起连接,开始传送。
无论哪种模型当数据传送正在进行的时候协议要求控制连接是打开的。控制连接在FTP服务器之间都是打开的。而数据连接没有必要一直存在。根据需要一会建立一会关闭,数据传送完成之后就关闭。
文件传输协议FTP最大的特点就是使用两个连接。
- 控制连接,在整个会话期间一直保持打开,FTP客户发出的传送请求通过控制连接发送给服务器端的控制进程,但控制连接不用来传送文件
- “数据连接”,是实际用于传输文件的,服务器端的控制进程在接收到FTP客户发送来的文件(目录列表等)传输请求后就创建**"数据传送进程"和“数据连接”**,用来连接客户端和服务器端的数据传送进程。
数据传送进程实际完成文件等数据的传送,在传送完毕后关闭“数据传送连接”。
FTP服务的另一个特点是FTP服务使用两个熟知的端口,基本的Internet服务都有自己的熟知端口,例如web服务的熟知端口是基于TCP的80,远程登录Telnet是23,这些都是只有一个熟知端口,而FTP则是有两个熟知端口。分别是基于TCP的21和20。
- 客户进程与服务器进程使用的熟知端口21建立控制连接。
- 需要传输数据时,客户进程会告诉服务器进程自己的**“监听”端口,用于建立数据连接,服务器进程用自己的传送数据的熟知端口20与客户进程所提供的端口建立数据连接**。
FTP使用了两个不同的端口号,所以数据连接与控制连接不会发生混乱。
使用两个独立连接的主要特点:使协议更加简单和容易实现;在传输文件时还可以利用控制连接(例如,客户发送请求终止传输)
TCP依靠两个端点标识一个连接,因此主进程创建从属进程时可以不用使用临时端口,也就是服务器端可以利用20和21两个端口建立多个控制连接和数据连接。