流行的几种文件传输协义 曹继建 1996-11-08 在联机通信中,人们经常要使用文件传输协议(File Transfer Protocols)上装或下载文件。我们知道,计算机内部的并行数据在发送到调制解调器之前,必须要转换成串行数据,并给每个字节附加一个起始位和一个停止位,以便使收信系统能准确判断任一字节的开始和结束。早期的联机通信中,几乎每个字节都是这样直来直去传送,人们称这种没有任何纠错能力的传输方式为ASCII码传送方式,还有的人则干脆称其为ASCII协议,在有些通信软件的文件传输协议的选择项中也常常有ASCII的选项。由于ASCII码的传输只是字节流的传送,因而在传输线路状态不佳时就会出现数据丢失、系统死机、通信中断等错误。在ASCII字符集中“$”符号的数据串是“100100”,如果线路瞬间干扰使前面的“1”丢失变为“0”,成了“100”,也就是字符“^D”。ASCII字符集中的“^D”(EOT)是标志文件传输结束的符号,接收系统收到该字符后就立即停止数据的接收。 随着人们对数据传输质量的更高要求及对各种方便传送的需要,多种性能各异的具有检错能力的二进制文件传输协议便相继开发出来。二进制文件传输协议不象ASCII传输方式那样一个字节一个字节的依次传送,而是把许多个字节“打”成一定长度的“包”(Packet),并给每个包加上一些能够检错的字节进行传送。也有的人把这种传送叫“块”(Block)传送或是“帧”(Frame)传送。对方的计算机收到此“包”,必须进行“拆包”(Unpack)处理,才能还原正文内容。“包”的大小因协议不同而有差异,或是128个字节,或是1,024个字节,若尾包的文件字节很少,则采用空字符NUL“补位”的办法把“包”填满。在文件传送过程中,只要收发的协议一致,系统就会在协议约定的状态下,完成控制信号、错误确认及标记等各种传输工作。尽管这些协议至今仍没有得到官方的认可,但其可靠的传输性能却受到使用者的青睐,得到了迅速推广,成为事实上的文件传输协议,并被广泛应用在包括Internet在内的各种联机系统中。 二进制文件传输协议有很多种,本文不能详尽叙述,只能介绍几种目前较为流行的协议,供使用时参考。 1. XModem XModem又叫MODEM7或XModem/checsum(校验和),是较早出现并被广泛使用的二进制文件传输协议,有较强的检错能力。XModem“包”的大小为128字节,每个“包”都携带一个8bit的“校验和”字节供接收系统检测。若接收检测的结果与“校验和”一致,接收系统就会发出ACK的确认回答标志信号并请求传送下一个“包”的信息。若接收检测的结果与“校验和”不一致,接收系统则发出NAK否认回答标志信号,告诉发送系统传输出现错误,请求重传该“包”的内容,如此下去直到整个文件的传送结束,或者在一定的时间内纠错无效退出传送状态。 XModem的传送可靠率能达到96%,缺点是只能以8个数据位的格式传送文件,而且在流控状态时易造成系统异常。 2. XModem CRC XModem CRC 是在XModem协议的基础上改进的版本。由于使用了CRC(循环冗余校验),每个“包”便有了两个“校验和”的字节(16bit),检错能力有了明显增强,使安全系数提高到99.6%以上。但因增加了检错字节使文件的传送时间有所延长,这种延长在长文件传送时最明显。值得一提的是,只有通信中的两个系统具备了CRC的条件才能进行循环冗余码校验,如果其中的一个系统不提供这种校验,另一系统就会自动转换成XModem协议的工作状态。另外,有些早期的通信软件不支持这样的操作,用户只能珍XModem协议。 3. WModem WModem是由XModem协议演变而来的协议,也可以把它叫做“窗口式 XModem”。WModem的工作过程比较特别,虽然每个“包”的容易也是128个字节,但它不象XModem那样在每个“包”之后才能收到ACK或者NAK标志信号,而只在连续传递几个“包”之后才能收到A(K或者MAK标志信号)。设计者形象地把被传送的第一个数据“包”与后来收到的标志信号之间的时间段称作窗口。正常状态时,WModem可准确检测到NAK的出现,并能确定哪一个“包”在传送时出现错误需要重新传送。由于WModem的窗口数据吞吐量较大,须使有较大内存缓冲区的系统才能可靠地接收,小内存的计算机是不能使用这个协议的。 YModem/XModem 1K YModem的工作方式与XModem几乎一样,不同点只是XModem的“包”有128个字节,而YModem的“包”有1024个字节,所以YModem又叫XModem 1K。由于YModem的“包”比XModem的“包”大出许多,因此非常适合传送篇幅很长的大块文件。在线路状况良好的情况下,将会有效地缩短传送时间。如果线路状况不佳时,最好不要使用这个协议,因为频繁地重传那些被查出错误的大“包”肯定得不偿失。 YModem/Batch 上面介绍的几个二进制文件传输协议在每次使用时只能传送一个数据文件,如果数个文件要传送到同一个接收系统,就只能在第一悠扬文件传送结束后,再进行下一个文件的传送。频繁的操作和额外占用的处理时间,无疑给使用者带来了很多的不便。YModem/Batch协议可有效地解决这类难题。YModem/Batch能把一个以上的文件(包括文件名、字节数量等信息)按照事先编排的顺序一次性地传送给对方,其作用很象DOS系统的BAT批处理命令。接收系统收到文件后,可按需要把每个文件存入指定的驱动器和路径中。 YModem-G YModem-G是一种本身不提供检错或纠错能力的流式协议,除非有MNP(Microsoft Networking Protocol)硬件协议的支持,否则不能使用。如果有MNP硬件为其提供服务的话,YModem-G就会成为一个相当不错的协议,因为MNP硬件具有衣好的检错和纠错能力。YModem-G的每“包”容量也是1024个字节,但每一个“包”在传送后并不理会是否有接收端ACK的响应,只是不停地将所有的“包”都发出去,检错和纠错工作完全由MNP系统完成。与YModem-G合作的最佳硬件协议是MNP4。就传送速度而言,YModem-G肯定要比前面介绍的几种协议的速度快得多。 Kermit Kermit是一个既灵活又方便且非常有使用价值的协议,用户群较大。同其它文件传送协议一样,Kermit在传送文件时也是将数据打“包”并使用“校验和”。前面介绍的几种协议,不论是哪一种,只要一经选定,“包”的大小就会固定下来。Kermit“包”的大小则是随数据的整体结构和线路质量的变化而改变的。在理想的线路状态时“包”最大,大小为1KB(1024字节);线路质量下降时“包”就要随之变小,或是512字节、或是256字节、或是128字节。当线路出现瞬时中断时,Kermit能迅速恢复数据同步传输,这一点是其它协议无法比拟的。大多数协议都是用8数据位方式传送字符的,Kermit则可在需要时将8数据位转换为7数据位传送,这样的转换使ASCII字符集中的28个控制字节在传输中增加了可靠性。Kermit还有批处理的功能,可以用通配符“*”代替文件名或扩展名传送数个文件,如在.TXT之前使用“*”就可以传送所有扩展名为TXT的文件。另外,如果文件中有的字符重复出现,Kermit会使用一种压缩处理技术,即重复字符只被传送一次,同时发送一组关键码告诉接收系统重复的次数和字符的位置,这样可以节省相当多的时间。 ZModem ZModem协议尽管是一个不太成熟的协议,但快速可靠的良好性能已使它受到越来越多人的喜爱。ZModem对“包”的处理与Kermit相仿,“包”的大小也是取决于线路的质量好坏,并提供有效的32bit或16bit的CRC错误检测。ZModem具有高级文件管理特点,允许一次传送多份文件和自动上下载文件,操作简单方便。也能在传送意外中断后,迅速重新恢复数据的传送。在常规情况下,ZModem的传送可靠率能达到99%。 除了上述几种二进制文件传输协议在网络中经常出现外,还有某些系统协议也在文件传输中发挥着作用,如CompuServe的B协议和B+协议以及America Online等等。另有一些具有独自的文件传输能力和纠错技术的专有文件传输协议在个别系统中被使用,这种协议只能在特定的软硬件环境下才能起作用,不能在公共免费软件库、共享软件及商业通信中使用。 总而言之,二进制文件传输协议是非常优秀的,只要应用得当就能收到良好的传送效果。这些协议的成品在大多数的通信软件包中均有提供,也可以通过BBS或从其它联机网络中下载得到。需要指出的是,由于版本的不同,收发两个系统间选定的同类协议的功能可能略有差异,是否能正常通信要取决于实验后的结果。目前使用最普遍的协议有XModem、ZModem和Kermit这三种,其中XModem使用的频次最高