《WebGIS开发实践手册》1.1.2 计算机是如何互联的?
在ARPANET计划中,要将不同大学的不同独立计算机通过通讯线路连接起来,构成计算机网络,就必须克服这个硬件沟壑。显然,计算机之间的通信和信息交换应该遵守一些共同的“游戏规则”,且这些规则必须独立于具体的硬件环境,这就是我们所谓的协议(Protocol)。
ARPANET最初使用的是NCP协议(Network Core Protocol)而不是TCP/IP协议,但NCP随着连接用户的增加,暴露出了许多缺陷,如缺乏多台计算机的定位区分功能(没有IP)和传输的纠错能力等。
1983年, ARPANET全面采用TCP/IP协议,它是由Robert E. Kahn和Vinton Cerf在1973年提出的,后者还是NCP协议的开发者,他们二位被共称为“互联网之父”,一起确定了互联网的基础。
1984年,国际标准化组织ISO也颁布了“开放系统互联基本参考模型”(OSI,Open System Interconnection Reference Model),但OSI标准过于复杂,从未真正被实现过,相反,随着万维网的出现,TCP/IP协议慢慢战胜了其它的网络协议方案,成为今天互联网的事实标准。
TCP/IP协议之所以成功,乃是因为它具有以下特点:
Ø 开放性,抽象自计算机硬件和操作系统;
Ø 统一分配网络地址,网络中每台计算机都具有唯一的IP地址与其他设备相区别;
Ø 标准化的应用协议,能提供多种可靠的应用服务。
TCP/IP的参考模型是一个抽象分层模型,在这一模型中,所有的TCP/IP协议都被划归到4个层中。每一层都建立在低一层提供的服务之上,并为更高一层提供服务。
TCP/IP协议的4层结构从低到高分为如下四层,如图 1‑3所示:
图 1‑3 四层结构的TCP/IP协议
Ø 网络连接层(Network Access Layer):它是TCP/IP协议的最底层,负责网络层与硬件设备之间的通信,即数据帧的发送和接收。这一层的协议非常之多,如Wi-Fi、MPLS、Ethernet等。
Ø 网际层(Internet Layer):网际层负责解决网络之间计算机传输数据包的问题。这一层的协议有四个,即IP协议,负责在主机与网络之间寻址和路由数据包,正是因为拥有IP,网络中不同的计算机才能相互区别;ARP协议,即地址解析协议,负责获得同一物理网络的硬件主机地址;ICMP协议,即网际控制消息协议,负责发送消息并报告有关数据包的传输错误;IGMP,互联网管理协议。
我们目前使用的IP协议是IPv4版本,其IP地址长度为32位,尽管这一IP地址群多达40多亿个,但美国掌握了其绝对的控制权和大部分IP地址,由于IP地址的滥用和浪费,现在已经面临枯竭。目前全世界正在推广IPv6版本的协议,其地址长度为128位,号称“可以为地球上的每一粒沙子都分配一个IP地址”。中国在1998年由CERNET率先建立了IPv6试验网,并获国际组织认可,1999年开始正式分配IPv6地址。
Ø 传输层(Transport Layer):这一层位于网际层之上,用于在计算机程序之间提供通信会话。它有两个主要的传输协议:传输控制协议TCP,它是一种“面向连接”的协议,在通讯之前必须双方建立联系,才能为应用程序提供可靠的通信连接,适合于一次传输大批数据,并适用于要求得到响应的应用程序;用户数据报协议UDP,它提供了一种无连接通信,且不对传送包进行可靠的保证。适合于一次传输小量数据,其可靠性则由应用层来负责。
Ø 应用层(Application Layer):应用层是最顶上的一层,顾名思义,它包含了所有与应用程序协作的协议。应用层是大多数与网络相关的应用程序为了通过网络与其他程序通信所使用的协议层。这一层的协议运行于TCP和UDP协议之上,它们包括HTTP(用于网络浏览)、HTTPS(HTTP的安全版本,许多网上银行和WebMail采用这一协议)、FTP(用于文件传输)、POP3(用于接收电子邮件)、SMTP(用户发送电子邮件)和NEWS(新闻组协议)等。
当我们打开如Internet Explorer、Firefox等WWW浏览器时,键入的网址大部分都被解析为http://xxx/,这就是采用了HTTP协议;而在Foxmail或Google等电子邮件软件中设置邮件地址时,使用的则是POP3和SMTP协议。对于大部分网络用户而言,HTTP和HTTPS协议是我们日常上网使用的最频繁的应用层协议了[1],如图 1‑4所示:
图 1‑4 登录Google基于的HTTPS协议
网络应用程序一定需要使用最上层,即某种应用层协议才能实现互联网上的数据传输吗?答案是否定的,实际上,目前很多网络电视软件、视频通讯软件和文件传输软件就是直接使用TCP或UDP协议在传输数据包,不使用应用层协议也是完全可以的[2],如图 1‑5所示:
图 1‑5 QQ可以使用多种协议登录到服务器
除了协议,端口号是我们必须熟悉的另一个主题。由于多个网络应用程序都可能运行在同一台计算机上,需要使用某种机制来保证恰当的应用程序在目标计算机上获得和发送来自源机器的数据分组,并保证响应被发送到源计算机的恰当应用程序面前,这可以通过使用 TCP 或 UDP的端口号来设置。这就好像在一个办事大厅中,不同的应用程序应该在不同窗口排队,才能办理不同的事务。
默认的TCP端口号有许多种,如FTP数据通道端口号为20,FTP控制端口号为21,BBS协议Telnet端口号为23,SMTP端口号为25,而我们最常用的HTTP协议的端口号为80,当然,我们为某种服务任意指定某个端口号(但该端口号不能正在被使用)也是允许的,如在同一台计算机上同时安装IIS和Apache均提供HTTP服务时,一个的端口号为80,另一个就不能是80,一般都设置为8080。
小知识:新闻组、BBS和FTP
由于富客户端(RIA)技术的快速发展,许多几年前需要专门应用软件才能实现的应用和UI效果,目前都可以在WWW浏览器中实现,不管是过去的BBS、Email,还是FTP,在Internet Explorer或Firefox等浏览器环境中都能非常容易地“模拟”出来,以至于许多新网民都不知道网络上还有新闻组、BBS和FTP这些曾经风靡一时的“古老”东西。
新闻组(NewsGroup)是一种使用电子邮件交互的讨论组,其实现技术与目前WWW上的论坛完全不同,前者使用的是NNTP协议,需要使用特定的客户端,如Outlook Express或ThunderBird来访问,它通过邮件的方式进行话题的交流。在网络发展早期,新闻组一度异常活跃,但遗憾的是,这一应用已日渐式微,目前许多知名的新闻组已经不复存在。
BBS(Bulletin Board System,电子公告板)是一种使用TELNET协议交互的软件,它是今天WWW论坛的前身。早期的BBS是一种纯文字性的交流方式,需要专门的浏览软件才能访问,如CTerm、FTerm和NetTerm等,但在许多PC操作系统中都内置了telnet软件,使我们可以不借助其它浏览软件就能访问各个BBS站点。
我们可以点击“开始”按钮,在“运行”菜单弹出的对话框“打开”中键入telnet://bbs.gznet.edu.cn,点击“回车”键,就会弹出一个“华南木棉”BBS站的欢迎页面,如图 1‑6所示。
图 1‑6 使用Telnet登录“华南木棉”BBS
虽然今天大部分的BBS都提供了基于WWW的浏览站点,但在很多高校和科研机构中,许多用户仍然喜欢使用CTerm等软件通过telnet协议登录BBS。
FTP也许是普通人次熟悉的协议,在许多高校和公司内部,为了给指定的用户共享数据文件,都会使用FTP Serv-U等软件搭建一个FTP站点而不是通过Web页面下载。大部分Web浏览器,都直接支持FTP协议,我们可以在IE的地址栏中输入ftp://<提供FTP服务的服务器名>,通过输入用户名和密码,就能够像管理本地文件一样下载和上传数据了。
小知识:TCP连接数
我们已经介绍过,TCP和UDP可以直接用于数据传输,如QQ的视频聊天、数据传输、PPS的网络电视等,都是基于TCP或UDP协议的。
每当一个TCP连接建立时,操作系统中便会产生一个TCP连接线程,如果OS对此不进行限制,就可能会被“黑客”制造的无数多个连接线程拖慢运行速度,直到最后死机为止。还记得冲击波病毒吗?它就利用了这个原理!
为避免这个漏洞再被人利用,Windows XP系统对TCP连接数进行了限制,默认值是10个。但当带宽足够时,10个线程数反而限制了某些软件的应用,需要适当放宽线程数的限制来提高数据传输速度,这也就是类似PPS等软件要求我们更改TCP连接数的原因。
[1] 根据调查,目前互联网上的数据流量大部分源自电子邮件和BitTorrent下载而非HTTP流量
[2] TCP和UDP的区别可以浏览http://net.zdnet.com.cn/network_security_zone/2009/0106/1303620.shtml