📄 文件传输协议.htm
字号:
<TD vAlign=top align=middle width="84%"><FONT face=宋体 size=3>
<P align=justify>数据块结束是EOF</FONT></P></TD></TR>
<TR>
<TD vAlign=top align=middle width="16%"><FONT face=宋体 size=3>
<P align=justify>32</FONT></P></TD>
<TD vAlign=top align=middle width="84%"><FONT face=宋体 size=3>
<P align=justify>数据块内有怀疑错误</FONT></P></TD></TR>
<TR>
<TD vAlign=top align=middle width="16%"><FONT face=宋体 size=3>
<P align=justify>16</FONT></P></TD>
<TD vAlign=top align=middle width="84%"><FONT face=宋体 size=3>
<P
align=justify>数据块是重新开始标记</FONT></P></TD></TR></TBODY></TABLE></CENTER></DIV>
<P> <FONT face=宋体 size=3></P>
<P align=justify> </P>
<P
align=justify>以这种编码,对于特定块可能存在多个描述子编码条件,所需要的位必须全部设置。重新开始标记包括在数据流中,它作为8位整数代表在控制连接上使用语言的可打印字节,但<SP>不得出现在其中。例如要传送6字节标记,下面就是例子:</P>
<P align=justify></FONT> </P>
<TABLE cellSpacing=1 cellPadding=7 width=300 border=1>
<TBODY>
<TR>
<TD vAlign=top width="50%"><FONT face=宋体 size=3>
<P align=justify>Descrptr code = 16</FONT></P></TD>
<TD vAlign=top width="50%"><FONT face=宋体 size=3>
<P align=justify>Byte count = 6</FONT></P></TD></TR></TBODY></TABLE><FONT
face=宋体 size=3>
<P align=justify></FONT> </P>
<TABLE cellSpacing=1 cellPadding=7 width=300 border=1>
<TBODY>
<TR>
<TD vAlign=top width="33%"><FONT face=宋体 size=3>
<P align=justify>Marker 8位</FONT></P></TD>
<TD vAlign=top width="33%"><FONT face=宋体 size=3>
<P align=justify>Marker 8位</FONT></P></TD>
<TD vAlign=top width="33%"><FONT face=宋体 size=3>
<P align=justify>Marker 8位</FONT></P></TD></TR></TBODY></TABLE><FONT
face=宋体 size=3>
<P align=justify></FONT> </P>
<TABLE cellSpacing=1 cellPadding=7 width=300 border=1>
<TBODY>
<TR>
<TD vAlign=top width="33%"><FONT face=宋体 size=3>
<P align=justify>Marker 8位</FONT></P></TD>
<TD vAlign=top width="33%"><FONT face=宋体 size=3>
<P align=justify>Marker 8位</FONT></P></TD>
<TD vAlign=top width="33%"><FONT face=宋体 size=3>
<P align=justify>Marker 8位</FONT></P></TD></TR></TBODY></TABLE><FONT
face=宋体 size=3>
<P align=justify>3.4.3. 压缩模式</P>
<P
align=justify>有三种信息需要传送:常规数据以字节串传送;压缩数据,包括复本和过滤器;控制信息,以两个转义字符传送。如果有N(>0但小于127)个常规数据传送,在数据前一位加上一个字节,这个字节最高位为0,其它位表示的数值等于N。如下图:</P>
<P align=center><IMG height=78 alt=图示 src="文件传输协议.files/FTP-3.gif"
width=410></P>
<P align=justify>若要压缩一个数据位D的N复本字符串,用两个字节传送,如下图,它表示的是压缩的字节:</P>
<P align=center><IMG height=78 alt=图示 src="文件传输协议.files/FTP-4.gif"
width=263></P>
<P
align=justify>一串N过虑器字节可以压缩为一个字节,而过滤器字节根据表示法不同而不同。如果类型是ASCII或EBCDIC,过滤器字节是<SP>,如果是图象或本地类型,则是0。下面就是过滤器字节:</P>
<P align=center><IMG height=78 alt=图示 src="文件传输协议.files/FTP-5.gif"
width=131></P>
<P
align=justify>转义序列是双字节,头一个全0,后一个内是定义于块模式下的描述子代码。描述子代码与块模式中的意义相同,它作用于其后串中的字节。而压缩模式对于增加带宽有好处(因为数据是压缩过的)。</P>
<P align=justify>3.5. 差错恢复和重新开始</P>
<P
align=justify>位丢失和数据错误是这一层的差错控制由TCP负责。而重新开始则是给用户一个处理系统(包括操作系统,网络等)失败的方法。重新开始过程仅适用于块和压缩模式,它要求发送者在数据流中加入特定标记,标记仅对传送者有意义,但其中的内容是控制连接使用的语言。标记可以代表一个位记数,记录记数或可以标记数据数目的任何点。如果接收方也支持重新开始,将会在接收系统中保存这一标记。在系统失败重新启动后,用户可以根据原来的标记重新开始数据传送,也就是我们通常熟悉的断点续传过程。接收方接收到一段数据,然后记下一点,如果发送方失败了,就从这一点以后再传送相应的数据。具体的这里不多说了。</P>
<P align=justify>4. 文件传输功能</P>
<P
align=justify>从用户PI到服务器的信道是建立在用户到标记服务器端口间的。用户协议解释器负责发送命令和解释接收的应答;服务器PI解释命令,发送应答,指导DTP建立数据连接并传送数据。如果数据传输的第二方是用户DTP,通过用户FTP主机的内部协议对它进行控制;如果第二方是服务器DTP,它由用户PI发来的命令经过自己的PI控制。</P>
<P align=justify>4.1. FTP命令</P>
<P align=justify>4.1.1. 访问控制命令</P>
<P align=justify>下列命令指定访问控制标记(命令码在括号内):</P>
<P align=justify>用户名(USER)</P>
<P
align=justify>参数是标记用户的Telnet串。用户标记是访问服务器必须的,此命令通常是控制连接后第一个发出的命令,有些主机还会要求口令和帐户。服务器可以在任何时间接收新的USER命令以改变访问控制和(或)帐户信息。这可以重新开始登录过程,所以传输参数不变,在进行中的文件传输在过去的访问控制参数下完成。</P>
<P align=justify>口令(PASS)</P>
<P
align=justify>参数是标记用户口令的Telnet串。此命令紧跟USER命令,在某些站点它是完成访问控制不可缺少的一步。因此口令是个重要的东西,因此不能显示出来,服务器方没有办法隐藏口令,所以这一任务得由用户FTP进程完成。</P>
<P align=justify>ACCOUNT (ACCT)</P>
<P align=justify> </P>
<P
align=justify>参数是标记用户帐户的Telnet串。此命令不需要与USER相关,一些站点可能需要帐户用于登录,另一些可以限制帐户的权限,在后一种情况下,此命令可在任何时候发送。应答的不同可以区别不同的情况:当登录需要帐户信息时,对PASS命令的响应是332。另外,如果不需要帐户信息,对PASS的响应是230,如果需要帐户信息在以后需要,服务器会返回332或532,这要看它是保存此命令还是拒绝此命令了。</P>
<P align=justify>改变工作目录(CWD)</P>
<P
align=justify>此命令使用户可以在不同的目录或数据集下工作而不用改变它的登录或帐户信息。传输参数也不变。参数一般是目录名或与系统相关的文件集合。</P>
<P align=justify>回到上一层目录(CDUP)</P>
<P align=justify>此命令要求系统实现目录树结构,它的响应和CWD的相同。</P>
<P align=justify>结构加载(SMNT)</P>
<P
align=justify>此命令使用户在不改变登录或帐户信息的情况下加载另一个文件系统数据结构。传输参数也不变。参数是文件目录或与系统相关的文件集合。</P>
<P align=justify>重新初始化(REIN)</P>
<P
align=justify>此命令终止USER,将所有I/O和帐户信息写入,但不许进行中的数据传输完成。重置所有参数,控制连接打开,可以再次开始USER命令。</P>
<P align=justify>退出登录(QUIT)</P>
<P
align=justify>此命令终止USER,如果没有数据传输,服务器关闭控制连接;如果有数据传输,在得到传输响应后服务器关闭控制连接。如果用户进程正在向不同的USER传输数据,不希望对每个USER关闭然后再打开,可以使用REIN。对控制连接的意外关闭,可以导致服务器运行中止(ABOR)和退出登录(QUIT)。</P>
<P align=justify>4.1.2. 传输参数命令</P>
<P
align=justify>所有数据传输参数有默认值。服务器必须记录下默认值,在FTP服务请求后,可以以任何顺序发送。下面命令传送参数:</P>
<P align=justify>数据端口(PORT)</P>
<P align=justify> </P>
<P
align=justify>参数是要使用的数据连接端口,通常情况下对此不需要命令响应。如果使用此命令时,要发送32位的IP地址和16位的TCP端口号。上面的信息以8位为一组,逗号间隔十进制传输,如下例:</P>
<P align=justify>PORT h1,h2,h3,h4,p1,p2</P>
<P align=justify>其中h1是IP地址的最高8位。</P>
<P align=justify>被动(PASV)</P>
<P align=justify>此命令要求服务器DTP在指定的数据端口侦听,进入被动接收请求的状态,参数是主机和端口地址。</P>
<P align=justify>表示类型(TYPE)</P>
<P
align=justify>参数指定表示类型。有些类型需要第二个参数,第一个参数由单个Telnet字符定义,第二个参数是十进制整数指定字节大小,参数间以<SP>分隔。下面是格式:</P>
<P align=center><IMG height=127 alt=格式 src="文件传输协议.files/FTP-6.gif"
width=318></P>
<P align=justify>默认表示类型是ASCII非打印字符,如果参数未改变,以后只改变了第一个参数,则使用默认值。</P>
<P align=justify>文件结构(STRU)</P>
<P align=justify>参数是一个Telnet字符代码指定文件结构。下面是代码及其意义:</P>
<P align=justify>F - 文件(非记录结构),它是默认值</P>
<P align=justify>R - 记录结构</P>
<P align=justify>P - 页结构</P>
<P align=justify>传输模式(MODE)</P>
<P align=justify>参数是一个Telnet字符代码指定传输模式。下面是代码及其意义:</P>
<P align=justify>S - 流(默认值)</P>
<P align=justify>B - 块</P>
<P align=justify>C - 压缩</P>
<P align=justify>4.1.3. FTP服务命令</P>
<P
align=justify>FTP服务命令定义用户请求的文件传输或文件系统功能。此命令的参数通常是路径名,其语法要和服务器的规范一致。推荐的默认值是最近指定的设备目录或目录。命令顺序通常没有限制,只有"rename
from"命令后面必须是"rename to",重新启动命令后面必须是中断服务命令。服务命令的响应通常在数据连接上传输。下面是具体的命令:</P>
<P align=justify>获得文件(RETR)</P>
<P align=justify>此命令使服务器DTP传送指定路径内的文件复本到服务器或用户DTP。这边服务器上文件的状态和内容不受影响。</P>
<P align=justify>保存(STOR)</P>
<P
align=justify>此命令使服务器DTP接收数据连接上传送过来的数据,并将数据保存在服务器的文件中。如果文件已存在,原文件将被覆盖。如果文件不存在,则新建文件。</P>
<P align=justify>唯一保存(STOU)</P>
<P align=justify>此命令和STOR差不多,此命令要求在此目录下的文件名是唯一的,对此命令的响应必须包括产生的用户名。</P>
<P align=justify>附加(APPE)</P>
<P align=justify>它和STOR的功能差不多,但是如果文件在指定路径内已存在,则把数据附加到原文件尾部,如果不存在则新建文件。</P>
<P align=justify>分配(ALLO)</P>
<P
align=justify>此命令用于在一些主机上为新传送的文件分配足够的存储空间。参数是十进制的逻辑字节数。如果是记录或页结构,页或记录的最大大小也需要,这在第二个参数内以十进制指定。第二个参数是可选的,如果有它,它和第一个参数以Telnet字符<SP>
R <SP>分隔。此命令在STOR或APPE命令后,对于不需要分配存储空间的机器,它的作用等于NOOP。</P>
<P align=justify>重新开始(REST)</P>
<P
align=justify>参数域代表服务器要重新开始的那一点,此命令并不传送文件,而是略过指定点后的数据,此命令后应该跟其它要求文件传输的FTP命令。</P>
<P align=justify>重命名(RNFR)</P>
<P align=justify>这个命令和我们在其它操作系统中使用的一样,只不过后面要跟"rename to"指定新的文件名。</P>
<P align=justify>重命名为(RNTO)</P>
<P align=justify>此命令和上面的命令共同完成对文件的重命名。</P>
<P align=justify>放弃(ABOR)</P>
<P
align=justify>此命令通知服务中止以前的FTP命令和与之相关的数据传送。如果先前的操作已经完成,则没有动作,返回226。如果没有完成,返回426,然后再返回226。关闭控制连接,数据连接不关闭。</P>
<P align=justify>删除(DELE)</P>
<P align=justify>此命令删除指定路径下的文件。用户进程负责对删除的提示。</P>
<P align=justify>删除目录(RMD)</P>
<P align=justify>此命令删除目录。</P>
<P align=justify>创建目录(MKD)</P>
<P align=justify>此命令在指定路径下创建新目录。</P>
<P align=justify>打印工作目录(PWD)</P>
<P align=justify>在响应是返回当前工作目录。</P>
<P align=justify>列表(LIST)</P>
<P
align=justify>服务器传送列表到被动DTP,如果路径指定一个目录或许多文件,返回指定路径下的文件列表。如果路径名指定一个文件,服务器返回文件的当前信息,参数为空表示用户当前的工作目录或默认目录。数据传输在ASCII或EBCDIC下进行,用户必须确认这一点。因为文件信息因系统不同而不同,所以不可能被程序自动利用,但是人类用户却很需要。</P>
<P align=justify>名字列表(NLST)</P>
<P
align=justify>服务器传送目录表名到用户,路径名应指定目录或其它系统指定的文件群描述子;空参数指当前目录。服务器返回文件名数据流,以ASCII或EBCDIC形式传送,并以<CRLF>或<NL>分隔。这里返回的信息有时可以供程序进行进一步处理。</P>
<P align=justify>站点参数(SITE)</P>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -