TCP/IP协议中,FTP标准命令TCP端口号为21,Port方式数据端口为20。FTP协议的任务是从一台计算机将文件传送到另一台计算机,它与这两台计算机所处的位置、联接的方式、甚至是是否使用相同的操作系统无关。假设两台计算机通过ftp协议对话,并且能访问Internet, 你可以用ftp命令来传输文件。每种操作系统使用上有某一些细微差别,但是每种协议基本的命令结构是相同的。

 

  FTP的传输有两种方式:ASCII传输模式和二进制数据传输模式。

 

  1.ASCII传输方式:假定用户正在拷贝的文件包含的简单ASCII码文本,如果在远程机器上运行的不是UNIX,当文件传输时ftp通常会自动地调整文件的内容以便于把文件解释成另外那台计算机存储文本文件的格式。

 

  但是常常有这样的情况,用户正在传输的文件包含的不是文本文件,它们可能是程序,数据库,字处理文件或者压缩文件(尽管字处理文件包含的大部分是文本,其中也包含有指示页尺寸,字库等信息的非打印字符)。在拷贝任何非文本文件之前,用binary 命令告诉ftp逐字拷贝,不要对这些文件进行处理,这也是下面要讲的二进制传输。

 

  2.二进制传输模式:在二进制传输中,保存文件的位序,以便原始和拷贝的是逐位一一对应的。即使目的地机器上包含位序列的文件是没意义的。例如,macintosh以二进制方式传送可执行文件到Windows系统,在对方系统上,此文件不能执行。

 

  如果你在ASCII方式下传输二进制文件,即使不需要也仍会转译。这会使传输稍微变慢 ,也会损坏数据,使文件变得不能用。(在大多数计算机上,ASCII方式一般假设每一字符的第一有效位无意义,因为ASCII字符组合不使用它。如果你传输二进制文件,所有的位都是重要的。)如果你知道这两台机器是同样的,则二进制方式对文本文件和数据文件都是有效的。

 

  5. FTP的工作方式

 

  FTP支持两种模式,一种方式叫做Standard (也就是 PORT方式,主动方式),一种是 Passive (也就是PASV,被动方式)。 Standard模式 FTP的客户端发送 PORT 命令到FTP服务器。Passive模式FTP的客户端发送 PASV命令到 FTP Server。

 

  下面介绍一个这两种方式的工作原理:

 

  Port模式FTP 客户端首先和FTP服务器的TCP 21端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。 PORT命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的TCP 20端口连接至客户端的指定端口发送数据。 FTP server必须和客户端建立一个新的连接用来传送数据。

 

  Passive模式在建立控制通道的时候和Standard模式类似,但建立连接后发送的不是Port命令,而是Pasv命令。FTP服务器收到Pasv命令后,随机打开一个临时端口(也叫自由端口,端口号大于1023小于65535)并且通知客户端在这个端口上传送数据的请求,客户端连接FTP服务器此端口,然后FTP服务器将通过这个端口进行数据的传送,这个时候FTP server不再需要建立一个新的和客户端之间的连接。

 

  很多防火墙在设置的时候都是不允许接受外部发起的连接的,所以许多位于防火墙后或内网的FTP服务器不支持PASV模式,因为客户端无法穿过防火墙打开FTP服务器的高端端口;而许多内网的客户端不能用PORT模式登陆FTP服务器,因为从服务器的TCP 20无法和内部网络的客户端建立一个新的连接,造成无法工作。

 

  FTP软件可以更好的帮助你管理FTP目录 提供更系统的工具

 

  FTP工具推荐使用 cuteftp

 

  主动和被动模式FTP有两种使用模式:主动和被动。主动模式要求客户端和服务器端同时打开并且监听一个端口以建立连接。在这种情况下,客户端由于安装了防火墙会产生一些问题。所以,创立了被动模式。被动模式只要求服务器端产生一个监听相应端口的进程,这样就可以绕过客户端安装了防火墙的问题。

 

  一个主动模式的FTP连接建立要遵循以下步骤:

 

  客户端打开一个随机的端口(端口号大于1024,在这里,我们称它为x),同时一个FTP进程连接至服务器的21号命令端口。此时,源端口为随机端口x,在客户端,远程端口为21,在服务器。

 

  客户端开始监听端口(x+1),同时向服务器发送一个端口命令(通过服务器的21号命令端口),此命令告诉服务器客户端正在监听的端口号并且已准备好从此端口接收数据。这个端口就是我们所知的数据端口。

 

  服务器打开20号源端口并且建立和客户端数据端口的连接。此时,源端口为20,远程数据端口为(x+1)。

 

  客户端通过本地的数据端口建立一个和服务器20号端口的连接,然后向服务器发送一个应答,告诉服务器它已经建立好了一个连接。

FTP有两种使用模式:主动和被动。主动模式要求客户端和服务器端同时打开并且监听一个端口以建立连接。在这种情况下,客户端由于安装了防火墙会产生一些问题。所以,创立了被动模式。被动模式只要求服务器端产生一个监听相应端口的进程,这样就可以绕过客户端安装了防火墙的问题。[4]
一个主动模式的FTP连接建立要遵循以下步骤:
1.客户端打开一个随机的端口(端口号大于1024,在这里,我们称它为x),同时一个FTP进程连接至服务器的21号命令端口。此时,源端口为随机端口x,在客户端,远程端口为21,在服务器。
2.客户端开始监听端口(x+1),同时向服务器发送一个端口命令(通过服务器的21号命令端口),此命令告诉服务器客户端正在监听的端口号并且已准备好从此端口接收数据。这个端口就是我们所知的数据端口。
3.服务器打开20号源端口并且建立和客户端数据端口的连接。此时,源端口为20,远程数据端口为(x+1)。
4.客户端通过本地的数据端口建立一个和服务器20号端口的连接,然后向服务器发送一个应答,告诉服务器它已经建立好了一个连接。
被动模式FTP:
为了解决服务器发起到客户的连接的问题,人们开发了一种不同的FTP连接方式。这就是所谓的被动方式,或者叫做PASV,当客户端通知服务器它处于被动模式时才启用。
在被动方式FTP中,命令连接和数据连接都由客户端发起,这样就可以解决从服务器到客户端的数据端口的入方向连接被防火墙过滤掉的问题。
当开启一个 FTP连接时,客户端打开两个任意的非特权本地端口(N > 1024和N+1)。第一个端口连接服务器的21端口,但与主动方式的FTP不同,客户端不会提交PORT命令并允许服务器来回连它的数据端口,而是提交 PASV命令。这样做的结果是服务器会开启一个任意的非特权端口(P > 1024),并发送PORT P命令给客户端。然后客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据。
对于服务器端的防火墙来说,必须允许下面的通讯才能支持被动方式的FTP:
1. 从任何大于1024的端口到服务器的21端口 (客户端的初始化连接)
2.服务器的21端口到任何大于1024的端口 (服务器响应到客户端的控制端口的连接)
3. 从任何大于1024端口到服务器的大于1024端口 (客户端初始化数据连接到服务器指定的任意端口)
4.服务器的大于1024端口到远程的大于1024的端口(服务器发送ACK响应和数据到客户端的数据端口)

编辑本段协议结构

命令
描述
ABOR
中断数据连接程序
ACCT <account>
系统特权帐号
ALLO <bytes>
为服务器上的文件存储器分配字节
APPE <filename>
添加文件到服务器同名文件
CDUP <dir path>
改变服务器上的父目录
CWD <dir path>
改变服务器上的工作目录
DELE <filename>
删除服务器上的指定文件
HELP <command>
返回指定命令信息
LIST <name>
如果是文件名列出文件信息,如果是目录则列出文件列表
MODE <mode>
传输模式(S=流模式,B=块模式,C=压缩模式)
MKD <directory>
在服务器上建立指定目录
NLST <directory>
列出指定目录内容
NOOP
无动作,除了来自服务器上的承认
PASS <password>
系统登录密码
PASV
请求服务器等待数据连接
PORT <address>
IP 地址和两字节的端口 ID
PWD
显示当前工作目录
QUIT
从 FTP 服务器上退出登录
REIN
重新初始化登录状态连接
REST <offset>
由特定偏移量重启文件传递
RETR <filename>
从服务器上找回(复制)文件
RMD <directory>
在服务器上删除指定目录
RNFR <old path>
对旧路径重命名
RNTO <new path>
对新路径重命名
SITE <params>
由服务器提供的站点特殊参数
SMNT <pathname>
挂载指定文件结构
STAT <directory>
在当前程序或目录上返回信息
STOR <filename>
储存(复制)文件到服务器上
STOU <filename>
储存文件到服务器名称上
STRU <type>
数据结构(F=文件,R=记录,P=页面)
SYST
返回服务器使用的操作系统
TYPE <data type>
数据类型(A=ASCII,E=EBCDIC,I=binary)
USER <username>>
系统登录的用户名
标准 FTP 信息如下
响应代码
解释说明
110
新文件指示器上的重启标记
120
服务器准备就绪的时间(分钟数)
125
打开数据连接,开始传输
150
打开连接
200
成功
202
命令没有执行
211
系统状态回复
212
目录状态回复
213
文件状态回复
214
帮助信息回复
215
系统类型回复
220
服务就绪
221
退出网络
225
打开数据连接
226
结束数据连接
227
进入被动模式(IP 地址、ID 端口)
230
登录因特网
250
文件行为完成
257
路径名建立
331
要求密码
332
要求帐号
350
文件行为暂停
421
服务关闭
425
无法打开数据连接
426
结束连接
450
文件不可用
451
遇到本地错误
452
磁盘空间不足
500
无效命令
501
错误参数
502
命令没有执行
503
错误指令序列
504
无效命令参数
530
未登录网络
532
存储文件需要帐号
550
文件不可用
551
不知道的页类型
552
超过存储分配
553
文件名不允许

FTP内部命令:

FTP的命令行格式为: ftp -v -d -i -n -g [主机名] ,其中   -v 显示远程服务器的所有响应信息;   -n 限制ftp的自动登录,即不使用;    .n etrc文件;   -d 使用调试方式;   -g 取消全局文件名。   ftp使用的内部命令如下(中括号表示可选项):   
  1.![cmd[args]]:在本地机中执行交互shell,exit回到ftp环境,如: !ls*.zip.   
     2.$ macro-ame[args]:执行宏定义macro-name.   
     3.account[password]:提供登录远程系统成功后访问系统资源所需的补 充口令。   
     4.append local-file[remote-file]:将本地文件追加到远程系统主机, 若未指定远程系统文件名,则使用本地文件名。     
     5
.ascii:使用ascii类型传输方式。 
     6.bell:每个命令执行完毕后计算机响铃一次。   

  7.bin:使用二进制文件传输方式。   
  8.bye:退出ftp会话过程。   
  9.case:在使用mget时,将远程主机文件名中的大写转为小写字母。   
  10.cd remote-dir:进入远程主机目录。   
  11.cdup:进入远程主机目录的父目录。   
  12.chmod mode file-name:将远程主机文件file-name的存取方式设置为 mode,如: chmod 777 a.out 。   
  13.close:中断与远程服务器的ftp会话(与open对应)。   
  14.cr:使用asscii方式传输文件时,将回车换行转换为回行。   
  15.delete remote-file:删除远程主机文件。   
  16.debug[debug-value]:设置调试方式, 显示发送至远程主机的每条命 令,如: deb up 3,若设为0,表示取消debug。
  17.dir[remote-dir][local-file]:显示远程主机目录,并将结果存入本 地文件local-file。   
  18.disconnection:同close。   
  19.form format:将文件传输方式设置为format,缺省为file方式。   

    20.get remote-file[local-file]: 将远程主机的文件remote-file传至 本地硬盘的local-file。  
  21.glob:设置mdelete,mget,mput的文件名扩展,缺省时不扩展文件名, 同命令行的-g参数。   
  22.hash:每传输1024字节,显示一个hash符号(#)。   
  23.help[cmd]:显示ftp内部命令cmd的帮助信息,如:help get。   
  24.idle[seconds]:将远程服务器的休眠计时器设为[seconds]秒。   
  25.image:设置二进制传输方式(同binary)。  
  26.lcd[dir]:将本地工作目录切换至dir。   
  27.ls[remote-dir][local-file]:显示远程目录remote-dir, 并存入本 地文件local-file。   
  28.macdef macro-name:定义一个宏,遇到macdef下的空行时,宏定义结 束。   29.mdelete[remote-file]:删除远程主机文件。   
  30.mdir remote-files local-file:与dir类似,但可指定多个远程文件, 如: mdir *.o.*.zipoutfile 。   
  31.mget remote-files:传输多个远程文件。   
  32.mkdir dir-name:在远程主机中建一目录。   
  33.mls remote-file local-file:同nlist,但可指定多个文件名。   
  34.mode[modename]:将文件传输方式设置为modename, 缺省为stream方 式。   35.modtime file-name:显示远程主机文件的最后修改时间。   
  36.mput local-file:将多个文件传输至远程主机。   
  37.newer file-name: 如果远程机中file-name的修改时间比本地硬盘同 名文件的时间更近,则重传该文件。   
  38.nlist[remote-dir][local-file]:显示远程主机目录的文件清单,并 存入本地硬盘的local-file。  

39.nmap[inpattern outpattern]:设置文件名映射机制, 使得文件传输 时,文件中的某些字符相互转换,如:nmap $1.$2.$3[$1, $2].[$2,$3],则 传输文件a1.a2.a3时,文件名变为a1,a2。该命令特别适用于远程主机为非UNIX 机的情况。   40.ntrans[inchars[outchars]]:设置文件名字符的翻译机制,如ntrans 1R,则文件名LLL将变为RRR。   
  41.open host[port]:建立指定ftp服务器连接,可指定连接端口。   
  42.passive:进入被动传输方式。   
  43.prompt:设置多个文件传输时的交互提示。   
  44.proxy ftp-cmd:在次要控制连接中,执行一条ftp命令, 该命令允许 连接两个ftp服务器,以在两个服务器间传输文件。第一条ftp命令必须为open, 以首先建立两个服务器间的连接。   
  45.put local-file[remote-file]:将本地文件local-file传送至远程主 机。   46.pwd:显示远程主机的当前工作目录。   
  47.quit:同bye,退出ftp会话。   
  48.quote arg1,arg2...:将参数逐字发至远程ftp服务器,如: quote syst.   49.recv remote-file[local-file]:同get。   
  50.reget remote-file[local-file]:类似于get,但若local-file存在, 则从上次传输中断处续传。
  51.rhelp[cmd-name]:请求获得远程主机的帮助。   
  52.rstatus[file-name]:若未指定文件名,则显示远程主机的状态,否 则显示文件状态。   
  53.rename[from][to]:更改远程主机文件名。   
  54.reset:清除回答队列。   
  55.restart marker:从指定的标志marker处,重新开始get或put,如: restart 130。   
  56.rmdir dir-name:删除远程主机目录。   
  57.runique:设置文件名唯一性存储,若文件存在,则在原文件后加后缀 .1,.2等。 58.send local-file[remote-file]:同put。   
  59.sendport:设置PORT命令的使用。   
  60.site arg1,arg2...:将参数作为SITE命令逐字发送至远程ftp主机。   
  61.size file-name:显示远程主机文件大小,如:site idle 7200。   
  62.status:显示当前ftp状态。   
  63.struct[struct-name]:将文件传输结构设置为struct-name, 缺省时 使用stream结构。   
  64.sunique:将远程主机文件名存储设置为唯一(与runique对应)。   
  65.system:显示远程主机的操作系统类型。   
  66.tenex:将文件传输类型设置为TENEX机的所需的类型。   
  67.tick:设置传输时的字节计数器。   
  68.trace:设置包跟踪。   
  69.type[type-name]:设置文件传输类型为type-name,缺省为ascii,如: type binary,设置二进制传输方式。   
  70.umask[newmask]:将远程服务器的缺省umask设置为newmask,如: umask 3。   71.user user-name[password][account]:向远程主机表明自己的身份, 需要口令时,必须输入口令,如:user anonymous my@email。   
  72.verbose:同命令行的-v参数,即设置详尽报告方式,ftp服务器的所有 响应都将显示给用户,缺省为on.   
  73.?[cmd]:同help.

FTP文件传输协议两种模式 ftp协议集,错误码集,ftp客户端命令集的更多相关文章

  1. TP传输的两种模式

      主动模式(active):   我们知道,FTP是由TCP封包的模式连接,TCP 这种封包由于需要经过 Server 端与 Client 端两边的『三次握手』之后,才能确定联机,也就是需要执行AC ...

  2. Linux中crontab下scp文件传输的两种方式

    Linux下文件传输一般有两个命令scp.ftp(工具需要下载安装) 本文主要讲讲scp的文件传输脚本 1.scp ssh-keygen -t rsa免输入密码,传输 这里假设主机A 用来获到主机B的 ...

  3. 【RL-TCPnet网络教程】第35章 FTP文件传输协议基础知识

    第35章      FTP文件传输协议基础知识 本章节为大家讲解FTP(File Transfer Protocol,文件传输协议)的基础知识,方便后面章节的实战操作. (本章的知识点主要整理自网络) ...

  4. FTP 文件传输协议的两种模式:主动模式和被动模式

    https://www.cnblogs.com/i-shu/articles/4905266.html FTP支持两种模式,一种方式叫做Standard (也就是 PORT方式,主动方式),一种是 P ...

  5. FTP(文件传输协议)工作原理

    目前在网络上,如果你想把文件和其他人共享.最方便的办法莫过于将文件放FTP服务器上,然后其他人通过FTP客户端程序来下载所需要的文件. 1.FTP架构 如同其他的很多通讯协议,FTP通讯协议也采用客户 ...

  6. 【FTP】FTP(文件传输协议)工作原理(SFTP)

    目前在网络上,如果你想把文件和其他人共享.最方便的办法莫过于将文件放FTP服务器上,然后其他人通过FTP客户端程序来下载所需要的文件. 1.FTP架构 如同其他的很多通讯协议,FTP通讯协议也采用客户 ...

  7. FTP具有两种模式

    FTP具有两种模式,分别是port模式(也叫主动模式)和pasv模式(也叫被动模式),怎么来理解这两种模式呢?我来打个比喻吧,在主动模式下:客户端给服务器端的21端口发命令说,我要下载什么什么,并且还 ...

  8. Django---Http协议简述和原理,HTTP请求码,HTTP请求格式和响应格式(重点),Django的安装与使用,Django项目的创建和运行(cmd和pycharm两种模式),Django的基础文件配置,Web框架的本质,服务器程序和应用程序(wsgiref服务端模块,jinja2模板渲染模块)的使用

    Django---Http协议简述和原理,HTTP请求码,HTTP请求格式和响应格式(重点),Django的安装与使用,Django项目的创建和运行(cmd和pycharm两种模式),Django的基 ...

  9. FTP文件传输服务器原理

    FTP服务器,全称File Transfer Protocol Server,是在互联网上提供文件存储和访问服务的计算机,它们依照FTP协议提供服务.FTP,文件传输协议(File Transfer ...

随机推荐

  1. hdu 5777 domino 贪心

    domino Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Problem ...

  2. java加载jdbc驱动三种方式的比较

    一.引言 平时连接数据库的时候首先要加载jdbc驱动,这一步骤其实有三种方式,他们的区别?优劣? 二.快速了解三种加载方式 Class.forName(“com.mysql.jdbc.Driver”) ...

  3. PHP超级全局变量、魔术变量和魔术函数的区别和联系

    PHP超级全局变量.魔术变量和魔术函数的区别和联系 一.总结 一句话总结:PHP超级全局变量主要用于web开发,魔术变量主要用于输出当前对象的信息,魔术函数则是对象的常用方法 相同点: 1.PHP超级 ...

  4. TextView两种显示link的方法

    TextView两种显示link的方法 一.简介 也是TextView显示文本控件两种方法 也是显示丰富的文本 二.方法 TextView两种显示link的方法  1)通过TextView里面的类ht ...

  5. JS获取元素计算过后的样式

    获取元素计算过后的样式 Window.getComputedStyle() 方法会在一个元素应用完有效样式且计算完所有属性的基本值之后给出所有 CSS 属性的值. 语法: let style = wi ...

  6. Linux find 命令大全

    find 含义: 顾名思义,是从来查找满足条件的内容. 从指定目录,递归的查找满足条件的内容. 格式: find [查询目录] [参数] [匹配方式] 文件操作: -name : 查找文件名  ( f ...

  7. 开发常用js代码段

    // 获取http传递的参数export const getRequest = ()=>{ var url = location.search; //获取url中"?"符后的 ...

  8. 快速掌握Android 虚拟机(AVD)方法

    摘自 http://jingyan.baidu.com/article/15622f24707710fdfdbea553.html 参阅:http://jingyan.baidu.com/articl ...

  9. IOS-MapKit

    一.MapKit框架的使用 MapKit框架使用须知 MapKit框架中所有数据类型的前缀都是MK MapKit有一个比较重要的UI控件 :MKMapView,专门用于地图显示   跟踪显示用户的位置 ...

  10. CPU高获取其线程ID然后分析

    一.具体步骤 shift+p 按照cpu排序 shift+m按照内存排序 1.查看进程下所有线程 top -H -p  pid  2.将十进制数换成16进制:print "%x/n" ...