文章目录
- 1.简介
- 2.格式
- 3.选项
- 4.子命令
- 5.命令与数据通道
- 6.主动与被动模式
- 主动模式(Active Mode)
- 被动模式(Passive Mode)
- 7.FAQ
- 参考文献
1.简介
FTP(File Transfer Protocol)是一种用于在计算机之间传输文件的标准网络协议。
ftp 则是 FTP 服务的命令行客户端,用于与 FTP 服务器进行交互。
2.格式
代码语言:javascript复制ftp [options] [hostname]
3.选项
代码语言:javascript复制-4: use IPv4 addresses only
-6: use IPv6, nothing else
-p: enable passive mode (default for pftp)
-i: turn off prompting during mget
-n: inhibit auto-login
-e: disable readline support, if present
-g: disable filename globbing
-v: verbose mode
-t: enable packet tracing [nonfunctional]
-d: enable debugging
4.子命令
有许多子命令,这些命令用于执行各种操作,例如连接到服务器、文件传输、目录操作等。以下是一些常用的FTP子命令:
代码语言:javascript复制?, help
显示子命令
open HOST [POST]
与 FTP 服务器建立连接。
user USERNAME [PASSWORD]
用户登录
passive
进入被动方式。
cd DIRECTORY
切换当前远程目录。
ls [DIRECTORY]
列出(当前)远程目录内容。
dir [DIRECTORY]
类似于ls,用于列出当前远程目录内容。
get REMOTE_FILE [LOCAL_FILE]
从服务器下载文件。
mget REMOTE_FILES
批量下载多个文件。
put LOCAL_FILE [REMOTE_FILE]
上传文件到服务器。
mput LOCAL_FILES
批量上传多个文件到服务器。
delete REMOTE_FILE
删除远程文件。
mdelete REMOTE_FILES
批量删除远程文件。
pwd
显示当前远程工作目录。
ascii
将文件传输模式设置为ASCII模式。
binary
将文件传输模式设置为二进制模式。
mkdir DIRECTORY
创建远程目录。
rmdir DIRECTORY
删除远程目录。
bye
关闭 FTP 连接。
quit
退出 FTP 会话。
这只是 ftp 命令的一小部分子命令。FTP还有其他许多命令和选项,具体取决于FTP服务器的支持和配置。你可以在FTP客户端中输入 help 命令来获取更多命令的帮助信息。
5.命令与数据通道
FTP(File Transfer Protocol)使用两个通道来完成文件传输和命令控制:命令通道(Control Channel)和数据通道(Data Channel)。
命令通道(Control Channel):
端口: 命令通道通常使用FTP的默认端口 21。
作用: 在命令通道上,客户端和服务器之间传递控制信息和命令,例如登录认证、切换目录等。
数据通道(Data Channel):
端口: 数据通道的端口可以是动态分配的(被动模式)或服务器端的端口(主动模式)。
作用: 在数据通道上,实际的文件数据被传输。
传输类型: 数据通道的传输类型可以是ASCII模式(文本文件)或二进制模式(二进制文件)。
6.主动与被动模式
FTP 使用主动模式(Active Mode)和被动模式(Passive Mode)来建立数据连接,这涉及到在客户端和服务器之间传输文件时的数据通信。
主动与被动是站在 FTP 服务器的角度来说的。
主动模式(Active Mode)
客户端请求:FTP 客户端随机开启一个非保留端口(大于 1023)N 向服务器的 21 号命令端口发起连接,发送 FTP 用户名和密码,然后开放 N 1 号端口进行监听,并向服务器发出 PORT N 1 命令,告诉服务器客户端采用主动模式并开放了 N 1 端口。
服务器主动连接: 服务器接收到 PORT 命令后,会用其本地的 FTP 数据端口(通常是20)来连接客户端指定的 N 1 端口,进行数据传输。
主动模式的问题:
主动模式可能会面临防火墙问题,因为在传输文件之前,服务器需要与客户端的数据端口建立连接。如果客户端位于防火墙后面,防火墙可能会阻止来自服务器的连接。
被动模式(Passive Mode)
客户端请求: 在被动模式下,客户端随机开启非保留端口(大于 1023)N 向服务器的21号端口发起连接,发送用户名和密码进行登陆,同时会开启N 1端口。然后向服务器发送PASV命令,通知服务器处于被动模式。
服务器响应: 服务器收到命令后,会开放一个非保留端口(大于 1023)P(端口P的范围是可以设置)进行监听,然后用 PORT P 命令通知客户端自己的数据端口是 P。
客户端连接: 客客户端收到命令后,会通过N 1号端口连接服务器的端口P,然后在两个端口之间进行数据传输。
被动模式的优势:
被动模式通常更容易穿越防火墙,因为在被动模式下,客户端与服务器的数据连接是由客户端发起的,而不需要服务器主动连接客户端。
7.FAQ
(1)ls 报错。
使用 ftp HOSTNAME
,然后输入用户名密码成功登录之后,使用 ls 报了如下错误:
501 Server cannot accept argument.
ftp: bind: Address already in use
原因是我们处于主动模式。
主动模式下,ftp 服务器数据端口20要去连接客户端指定的数据端口。一般来讲外部系统到内部的端口连接会被防火墙阻塞。所以报了 ftp: bind: Address already in use
错误。
解决办法是执行 passive 进入被动模式。
(2)连接断开。
使用客户端 ftp 与服务器建立连接后,过一段时间再次执行命令,会报如下错误:
代码语言:javascript复制421 Service not available, remote server has closed connection
描述表示 FTP 服务器已关闭连接,导致无法提供服务。可以使用 open 重新与服务器建立连接。
出现这种情况,可能因为如下几个原因:
- 空闲连接断开: 一些FTP服务器为了节省资源,会在连接空闲一段时间后主动关闭。尝试在服务器上调整空闲连接断开的设置。
- 服务器状态: 可能是FTP服务器本身出现了问题,例如负载过高或正在维护。联系FTP服务器管理员以获取更多信息。
- 防火墙设置: 检查本地防火墙和服务器防火墙的设置,确保它们不会关闭FTP连接。有时,防火墙可能会关闭长时间没有活动的连接。
- 网络不稳定:不稳定的网络连接可能导致连接超时和错误。确保你的网络连接是稳定的。
参考文献
FTP: 501 Server cannot accept argument