ftp中“二进制传输模式”和“ASCII传输模式”有什么区别?

《Red Hat Linux 指南:服务器设置与程序设计篇》第2章FTP:跨越网络传送文件,这一章为您介绍实现FTP协议的服务器和客户端有很多种、以及开FTP服务器可以让用户以匿名用户身份anonymous或者ftp登录,最后为您介绍FTP提供了两种传输文件的模式:二进制模式和ASCII模式。本小节讲述的是二进制传输模式和ASCII传输模式。

2.3.6 二进制传输模式和ASCII传输模式

FTP服务器vsftpd能够(但并不总是)提供两种文件传输模式。二进制模式传输总是复制文件的精确的、字节对字节的文件映像,而绝不会改变行结束符。所有二进制文件都用二进制模式传送。除非需要转换行结束符,否则也要使用二进制模式来传输ASCII文件。

ASCII文件(比如文本文件或程序源代码,在Linux下使用vi之类的文本编辑器创建这些文件)使用单个换行符(NEWLINE,CONTROL-J,记作”\n”)来标记每行的末尾;其他操作系统则用不同的方式来标记行尾。Windows用RETURN(CONTROL-M,记作”\r”)后面跟随NEWLINE(总共两个字符)来标记每行的末尾。Mac系统只使用RETURN自身。这些描述不适用于由Word或OpenOffice之类的字处理软件创建的文档文件,因为这些程序产生的是二进制文件。

当上传文件时,FTP服务器vsftpd能够将Linux行结束符映射到Windows行结束符;而当下载文件时,它又能够将Windows行结束符映射到Linux行结束符。尽管可以认为这些功能应该放在客户端上实现,而不是在服务器上,但是它们确实集成在vsftpd中,ASCII下载功能可能会带来安全风险。

要想在允许使用ASCII模式的FTP服务器上使用该模式,请在登录之后输入命令”ascii”,并将cr设置为ON(默认值,参见2.3.7节)。如果在传送文件时服务器不允许改变行结束符,那么在用二进制模式传输文件前后,还可以分别使用实用工具unix2dos或dos2unix。

安全

当用ftp命令size(显示文件的尺寸)检查非常大的文件时,该命令会消耗大量服务器资源,因此可以用来发动DoS攻击。为了增强安全性,默认情况下vsftpd在二进制模式下传输每个文件,即使看似正在使用ASCII模式。在服务器方,将参数ascii_upload _enable和ascii_download_enable设置为YES,可以启用真正的ASCII模式传输。在服务器设置允许ASCII传输的情况下,客户端通过使用ascii、binary和cr命令控制是否映射行结束符。