• FTP文件传输协议两种模式 ftp协议集,错误码集,ftp客户端命令集


    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.

  • 相关阅读:
    eslint 入门学习
    sqlite数据库 select 查询带换行符数据
    (ios)ARC常用设置,部分文件编译设置ARC
    (ios实战)ios调试总结(转载)
    IOS沙盒Files目录说明和常用操作
    (Ios 实战) 自定义UITableView
    iphone,pad等真机不被xcode识别,解决方法
    Xcode模拟器和真机生成的日志查看(转载)
    项目管理(转载)
    互联网教育,未来当有这10个特质(转载)
  • 原文地址:https://www.cnblogs.com/duanxz/p/5129153.html
Copyright © 2020-2023  润新知