基于互联网络的文件数据传输
2013年02月22日

注:本文是《大数据量报表技术研究》专著的一部分


一、问题的提出

w  适用于Web方式传输文件的网络协议有哪些?各有哪些优劣?

w  这些协议如何在Web应用中实现?

 

二、问题的研究

网络协议,在ISO标准的“OSI模型”中分为7层:应用层、传输层、网络层、数据链路层、物理层。与互联网相关的,我们只需要考虑“TCP/IP协议族”就可以了。

TCP/IP协议”是“TCP/IP协议族”的简称,是一系列协议的合集,按“TCP/IP参考模型”划分,这些协议可以分为4层:应用层、传输层、网络互连层、网络接口层。

TCP/IP协议族旗下,常用协议有:

w  应用层:

       DNS(域名解析)、HTTP(超文本传输)、

       FTP(文件传输)、SSH(安全外壳)、SOAP(简单对象访问)

       POP3(邮局协议)、SMTP(简单邮件传输)

w  传输层:

       TCP(传输控制)、UDP(用户数据报)

       至于更底层的协议,和操作系统和硬件设施有关,不是本课题关注的重点。更具体来说,本课题只需要关注的是TCPUDPHTTPFTP等协议。

 

1UDP协议和TCP协议的区别

       在传输层,主要就两个协议,UDPTCP,其对比如下图:

2.1 TCPUDP的对比


TCP

UDP

是否建立连接

连接

非连接

传输可靠性

可靠

不可靠

速度

适合数据量

大量数据

少量数据

       简单的讲,UDP唯一的优点就是传输速度快,比TCP要快得多。我们看到的QQ、飞秋等软件最开始都是采用UDP协议来传输消息和文件(但MSN是采用的TCP),而且P2P下载软件、视频文件的传送也通常是建立在UDP协议(或者类似协议)之上的。实际上,因为UDP传输数据不可靠,会丢包,所以不宜用于恶劣的互联网环境中,但是在局域网环境下,UDP用得比较多。另外,我们看到,UDP在进步,已经有很多RUDP (可信的UDP)、EUDP(增强的UDP协议)面世,但实际的应用还不是很广泛,有兴趣的读者可以自己去研究。

       对于基于B/SWeb应用,终端是浏览器,受浏览器的限制,通常不能直接使用UDP协议传输数据(除非自己写相关的浏览器组件)。总之,在Web应用中UDP用得比较少,UDP的主要应用是在局域网中。

 

2HTTPFTP

       在应用层中,能用于传输文件的,主要就是FTPTFTPHTTP

       TFTP一般都是工作在UDP协议上的,不在我们的考虑中。剩下的就是HTTP协议和FTP协议,他们都是工作在TCP协议上的。Web应用的文件传输,理论上可以借助这两种协议来实现。

       通常来说,FTP协议(即“文件传输协议”),是比较稳定的,而且能够传输很大的文件,但是安全性不高,特别是在Web应用场合下。

       HTTP协议呢,虽然也可以传输文件,但是毕竟不是很专业,特别是对于文件“上传”,10M大小的文件还可以,但是不能过大,因为“如果上传的文件过大的话,任何一个HTTP服务器都有可能在文件传输的过程中中断传输”。

       通过HTTP上传有3方式:PUTWebDAVRFC1867,前2种不适合大文件上传,目前我们使用的普通Web上传都是基于RFC1867标准,即在HTML中基于表单的文件上传。这种方式,简单地说,就是在HTML表单中为input元素的type属性增加了一个file选项(即<input type="file">),并且定义了一种新的MIME类型:multipart/form-data,对于这个标准,大多数的Web服务器都是支持的。

       至于文件的下载,可以直接通过HTTP服务器,将文件传输给浏览器客户端。通常有两种方式:

1)      直接访问文件的url去下载

文件放到Web服务器目录下,可以直接访问文件名称的全url去下载。

2)      通过应用程序将文件推送到客户端

       文件不在Web服务器目录下,比如在应用服务器磁盘上,此时需要通过应用程序将文件推送到客户端(比如通过response.getOutputStream()或者socket)。

 

       对于Web模式下的基于FTP方式的文件传输,客户端是浏览器,仅仅靠HTMLJS是不行的,因为需要在客户端做一些处理,所以需要引入RIARich Internet Application,富客户端),即编写一些运行在浏览器上的插件来支持——常见的方式ActiveXJava AppletJavaFXFlexSilverlight。技术上是可行的,比如通过Java Applet去做,可能稍微有一点麻烦,要求客户的计算机要安装jre环境,但是效果可能比http方式要好很多。目前大家可以看到,有些网站支持大文件的上传和下载,基本上都是需要安装浏览器插件的,比如QZone相册高速上传、115网盘高速下载等。

 

3、其他(非TCP/IP)协议

       其他协议基本上都很难使用到报表这种具体的业务场景中。

       比如PPP协议,那是一个较底层(数据链路层)的协议,采用了和TCP不一样的底层数据传输技术。它适用于那种没有Server-Client概念的结构中。比如网络上的共享文件下载,可以直接从其他Client那里去建立点对点的连接。