到此为止所介绍的IP协议、TCP协议以及UDP协议是通信最基本的部分,它们属于OSI参考模型中的下半部分。
从本章开始所要介绍的应用协议主要是指OSI参考模型中第5层、第6层、第7层上半部分的协议。
图8.1 OSI参考模型与TCP/IP的应用层
■ 应用协议的定义
利用网络的应用程序有很多,包括Web 浏览器、电子邮件、远程登录、文件传输、网络管理等。能够让这些应用进行特定通信处理的正是应用协议。
TCP和IP等下层协议是不依赖于上层应用类型、适用性非常广的协议。而应用协议则是为了实现某种应用而设计和创造的协议。
例如,远程登录等应用经常使用的TELNET协议,它的支持基于文字的命令与应答,通过命令可以执行各种各样的其他应用。
■ 应用协议与协议的分层
网络应用由不同的用户和软件供应商开发而成。为了实现网络应用的功能,在应用之间进行通信时将其连接的网络协议是非常重要的(应用之间交互的信息叫消息。应用协议定义这些消息的格式以及使用这些消息进行控制或操作的规则。) 。设计师和开发人员根据所开发模块的功能和目的,可以利用现有的应用协议,也可以自己定义一个新的应用协议。
应用可以直接享用传输层以下的基础部分。因为开发者只要关心选用哪种应用协议、如何开发即可,而不必担心应用中的数据该以何种方式发送到目标主机等问题。这也是得益于网络层的功劳。
■ 相当于OSI中第5、第6、第7层的协议
TCP/IP的应用层涵盖了OSI参考模型中第5、第6、第7层的所有功能,不仅包含了管理通信连接的会话层功能、转换数据格式的表示层功能,还包括与对端主机交互的应用层功能在内的所有功能。
从下一节开始我们将逐一介绍几款经典的应用协议。
图8.2 远程登录
远程登录是为了实现TSS(TSS(Time Sharing System)分时系统。参考第1章。) (曾在第1章介绍)环境,是将主机和终端的关系应用到计算机网络上的一个结果。TSS中通常有一个处理能力非常强的主机,围绕着这台主机的是处理能力没有那么强的多个终端机器。这些终端通过专线与主机相连。
类似地,实现从自己的本地计算机登录到网络另一端计算功能的应用就叫做远程登录。通过远程登录到通用计算机或UNIX工作站以后,不仅可以直接使用这些主机上的应用,还可以对这些计算机进行参数设置。远程登录主要使用TELNET和SSH(Secure SHell。) 两种协议。
TELNET利用TCP的一条连接,通过这一条连接向主机发送文字命令并在主机上执行。本地用户好像直接与远端主机内部的Shell(Shell是操作系统提供给用户的、便于使用该系统中各种功能的一种用户接口。它可以解释用户从键盘或鼠标输入的内容,并让操作系统执行。UNIX中的sh、csh、bash和Windows中的Expolorer以及MAC OS的Finder等都属于同一范畴。) 相连着似的,直接在本地进行操作。
TELNET可以分为两类基本服务。一是仿真终端功能,二是协商选项机制。
图8.3 TELNET中输入命令、运行、展示结果的过程
TELNET经常用于登录路由器或高性能交换机等网络设备进行相应的设置(由于路由器和交换机一般都不配备键盘和显示器,因此对它们进行设置时可以通过串行线连接计算机,也可以通过使用TELNET、HTTP、SNMP等方法连接网络。) 。通过TELNET登录主机或路由器等设备时需要将自己的登录用户名和密码注册到服务端。
■ 选项
TELNET中除了处理用户所输入的文字外,还提供选项的交互和协商功能。例如,为实现仿真终端(NVT,Network Virtual Terminal)所用到的界面控制信息就是通过选项功能发送出去的。而且,如图8.4所示TELNET中的行模式或透明模式两种模式的设置,也是通过TELNET客户端与TELNET服务端之间的选项功能进行设置的。
图8.4 行模式与透明模式
■ TELNET客户端
所谓TELNET客户端是指利用TELNET协议实现远程登录的客户端程序。很多情况下,它的程序名就是telnet命令。
TELNET客户端通常与目标主机的23号端口建立连接,并与监听这个端口的服务端程序telnetd进行交互。当然,也可以与其他的TCP端口号连接,只要在该端口上有监听程序能够处理telnet请求即可。在一般的telnet命令(在Windows的命令行里输入telnet命令执行的操作方法并未在本节列出。用户可以通过输入telnet 以后,在telnet的命令行里再输入“open 主机名 端口号”的方式进行连接。但是,从Windows Vista系统以后命令行的telnet功能默认是关闭的,需要单独安装才能使用。) 中可以按照如下格式指定端口号(在使用GUI类型客户端的情况下可以通过设置菜单等命令修改所要连接的端口号。) :
telnet主机名 TCP端口号
TCP端口号为21时可以连接到FTP(8.3节)应用,为25时可以连接到SMTP(8.4.4节),为80时可连接到HTTP(8.5节),为110时可连接到POP3(8.4.5节)。如此看来,每个服务器都有相应的端口号在等待连接。
因此,以下两个命令可以视为相同:
ftp主机名
telnet主机名21
鉴于FTP、SMTP、HTTP、POP3等协议的命令和应答都是字符串,因此通过TELNET客户端连接以后可以直接输入这些协议的具体命令。TELNET客户端也可用于跟踪TCP/IP应用开发阶段的问题诊断。
SSH是加密的远程登录系统。TELNET中登录时无需输入密码就可以发送,容易造成通信窃听和非法入侵的危险。使用SSH后可以加密通信内容。即使信息被窃听也无法破解所发送的密码、具体命令以及命令返回的结果是什么。
SSH还包括很多非常方便的功能:
端口转发是指将特定端口号所收到的消息转发到特定的IP地址和端口号码的一种机制。由于经过SSH连接的那部分内容被加密,确保了信息安全,提供了更为灵活的通信(可以实现虚拟专用网(VPN,Virtual Private Network)。) 。
图8.5 SSH的端口转发
图8.6 文件传输FTP
FTP是在两个相连的计算机之间进行文件传输时使用的协议。在8.2节中,我们已经讲过“远程登录”的概念,FTP中也需要在登录到对方的计算机后才能进行相应的操作。
互联网上有一种FTP服务器是允许任何人进行访问的,这种服务器叫做匿名服务器(anonymous ftp)。登录这些服务器时使用匿名(anonymous)或ftp都可以(习惯上该用户的密码为电子邮件地址的情况居多。) 。
■ FTP的工作机制概要
FTP是通过怎样的机制才得以实现文件传输的呢?它使用两条TCP连接:一条用来控制,另一条用于数据(文件)的传输。
用于控制的TCP连接主要在FTP的控制部分使用。例如登录用户名和密码的验证、发送文件的名称、发送方式的设置。利用这个连接,可以通过ASCII码字符串发送请求和接收应答(如表8.1、表8.2所示)。在这个连接上无法发送数据,数据需要一个专门的TCP进行连接。
FTP控制用的连接使用的是TCP21号端口。在TCP21号端口上进行文件GET(RETR)、PUT(STOR)、以及文件一览(LIST)等操作时,每次都会建立一个用于数据传输的TCP连接。数据的传输和文件一览表的传输正是在这个新建的连接上进行。当数据传送完毕之后,传输数据的这条连接也会被断开,然后会在控制用的连接上继续进行命令或应答的处理。
通常,用于数据传输的TCP连接是按照与控制用的连接相反的方向建立的。因此,在通过NAT连接外部FTP服务器的时候,无法直接建立传输数据时使用的TCP连接。此时,必须使用PASV命令修改建立连接的方向才行。
控制用的连接,在用户要求断开之前会一直保持连接状态。不过,绝大多数FTP服务器都会对长时间没有任何新命令输入的用户的连接强制断开(在文件传输过程中不会断开连接,而是在文件已经传输完成以后,一段时间没有任何其他命令输入,则断开连接。) 。
数据传输用的TCP连接通常使用端口20。不过可以用PORT命令修改为其他的值。最近,出于安全的考虑,普遍在数据传输用的端口号中使用随机数进行分配。
图8.7 FTP通信中使用两条TCP连接
■ 通过ASCII码字符串进行的交互处理
FTP中请求命令中使用着“RETR”等ASCII(American Standard Code for Information Interchange的省略。) 码字符串。而针对这些命令的应答则使用如“200”等3位数字的ASCII码字符串。TCP/IP的应用协议中有很多使用这种ASCII码字符串的协议。
对于ASCII码字符串型的协议来说换行具有重要意义。很多情况下,一行字符串表示一个命令或一个应答,而空白则用来标识与参数之间的分割符。即,命令和应答的消息通过换行区分、参数用空格区分。换行由“CR”(ASCII码的十进制数为13)和“LF”(ASCII码的十进制数为10)两个控制符号组成。
表8.1列出了FTP主要的命令、表8.2汇总了FTP的应答信息。
表8.1 FTP主要命令
表8.2 FTP的主要应答消息
图8.8 电子邮件(E-mail)
电子邮件,顾名思义,就是指网络上的邮政。通过电子邮件人们可以发送编写的文字内容、数码相片,还可以发送各种报表计算得出的数据等所有计算机可以存储的信息。
电子邮件的发送距离不受限,可以在全世界互联网中的任何两方之间进行收发。如果没有电子邮件,出差时也就无法接收最新的邮件信息。电子邮件还可以提供邮件组的服务。它是指向邮件组中的所有用户同时发送邮件的功能。邮件组现在被广泛用于公司或学校下达通知、不同国度的人们讨论共同的话题等场景。出于以上这些优点,电子邮件已经成为当前人们普遍使用的一种服务。
提供电子邮件服务的协议叫做SMTP(Simple Mail Transfer Protocol)。SMTP为了实现高效发送邮件内容,在其传输层使用了TCP协议。
早期电子邮件是在发送端主机与接收端主机之间直接建立TCP连接进行邮件传输。发送人编写好邮件以后,其内容会保存在发送端主机的硬盘中。然后与对端主机建立TCP连接,将邮件发送到对端主机的硬盘。当发送正常结束后,再从本地硬盘中删除邮件。而在发送过程中一旦发现对端计算机因没有插电等原因没有收到邮件时,发送端将等待一定时间后重发。
这种方法,在提高电子邮件的可靠性传输上非常有效。但是,互联网应用逐渐变得越发复杂,这种机制也将无法正常工作。例如,使用者的计算机时而关机时而开机的情况下,只有发送端和接收端都处于插电并且开机的状态时才可能实现电子邮件的收发。由于日本属于东九时区,和美国之间存在时差。日本的白天相当于美国的夜晚。如果大家都是只在白天开机,那么日本跟美国之间就根本无法实现收发邮件。由于互联网是一个连接全世界所有人进行通信的网络,所以这种时差问题就不得不考虑在内。
图8.9 早期的电子邮件发送过程
图8.10 现在互联网中电子邮件的发送过程
为此,在技术上改变了以往直接在发送端与接收端主机之间建立TCP连接的机制,而引进了一种一直会连接电源的邮件服务器(由于在传输层以上的网络中对通信进行转播,因此邮件服务器相当于1.9.7节中介绍的网关。) 。发送和接收端通过邮件服务器进行收发邮件。接收端从邮件服务器接收邮件时使用POP3(Post Office Protocol)协议。
电子邮件的机制由3部分组成,它们分别是邮件地址,数据格式以及发送协议。
使用电子邮件时需要拥有的地址叫做邮件地址。它就相当于通信地址和姓名。互联网中电子邮件地址的格式如下:
名称@通信地址
例如,master@tcpip.kusa.ac.jp中的master为名称,tcpip.kusa.ac.jp为地址。电子邮件的地址和域名的构造相同。此处,kusa.ac.jp表示域名,tcpip则表示master接收邮件的主机名称或为发送邮件所用的子网名称。现在个人邮件地址和邮件组的格式完全相同,因此,光从地址上是无法区分个人电子邮件地址和邮件组的。
现在,电子邮件的发送地址由DNS进行管理。DNS中注册有邮件地址及其作为发送地址时对应的邮件服务器的域名。这些映射信息被称作MX记录。例如,kusa.ac.jp的MX(Mail Exchange) 记录中指定了mailserver.kusa.ac.jp。于是任何发给以kusa.ac.jp结尾的地址的邮件都将被发送到mailserver.kusa.ac.jp服务器。就这样,根据MX记录中指定的邮件服务器,可以管理不同邮件地址与特定邮件服务器之间的映射关系。
很长一段时间里,互联网中的电子邮件只能处理文本格式的(由文字组成的信息。过去的电子邮件,就日本来说人们只能发送7比特 JIS编码的信息。) 邮件。不过现在,电子邮件所能发送的数据类型已被扩展到MIME(Multipurpose Internet Mail Extensions,广泛用于互联网并极大地扩展了数据格式,还可以用于WWW和NetNews中。) ,可以发送静态图像、动画、声音、程序等各种形式的数据。鉴于MIME规定了应用消息的格式,因此在OSI参考模型中它相当于第6层表示层。
MIME基本上由首部和正文(数据)两部分组成。首部不能是空行,因为一旦出现空行,其后的部分将被视为正文(数据)。如果MIME首部的“Content-Type”中指定“Multipart/Mixed”,并以“boundary=”后面字符作为分隔符(boundary=后面的字符串,开头一定要写- -。而且,间隔符后面也一定要写- -。) ,那么可以将多个MIME消息组合成为一个MIME消息。这就叫做multipart。即,各个部分都由MIME首部和正文(数据)组成。
“Content-Type”定义了紧随首部信息的数据类型。以IP首部为例,它就相当于协议字段。表8.3列出了具有代表性的“Content-Type”。
表8.3 MIME具有代表性的Content-Type
图8.11 MIME举例
SMTP是发送电子邮件的协议。它使用的是TCP的25号端口。SMTP建立一个TCP连接以后,在这个连接上进行控制和应答以及数据的发送。客户端以文本的形式发出请求,服务端返回一个3位数字的应答。
每个指令和应答的最后都必须追加换行指令(CR、LF)。
表8.4 SMTP主要的命令
图8.12 SMTP
▼ SMTP以“.”作为邮件正文的结束符,即使正文本身含有这个字符,也能做出识别。具体处理方法为,如果邮件正文的行首有“.”字符时,会在其后面紧接着再追加一个“.”字符。接收邮件时如果行首出现两个“.”字符,则删除其中一个。
随着电子邮件使用的普及,那些漫天的广告邮件和包含钓鱼连接的垃圾邮件成为了日益严重的问题。由于SMTP本身没有验证发送者的功能,因此人们无法避免这类邮件到达自己的邮件服务器。不过现在,通过“POP before SMTP”或“SMTP认证”(SMTP Authentication)等功能进行认证,以此防止冒充发送者的人也越来越多。
并且很多除了自己本域的邮件服务器以外,很多供应商已将网络设置为不与其他网络的25号端口进行通信(这样叫OP25B(Outbound Port 25 Blocking)。如果出差地的酒店也进行OP25B的话,可能会导致无法发送邮件,此时一般会使用587端口(Submission Port)。(RFC6409)) 。
表8.5 SMTP应答
■ 试用SMTP命令
当允许使用TELNET登录SMPT服务器时,可如表8.5的形式在登录(关于telnet命令的使用方式可以参考8.2.1节的最后部分。) SMTP服务器后输入命令。
telnet 服务器名或其IP地址 25
假定自己是SMTP客户端,那么在执行SMTP相关命令以后可以收到如表8.5所示的应答信息。通过这样的尝试可以加深对SMTP协议中各个动作的理解。
图8.13 POP
前一节提到的SMTP是发送邮件的协议,即,SMTP是想要发送邮件的计算机向接收邮件的计算机发送电子邮件的一种协议。在以UNIX工作站为主的互联网初期,这种机制没有什么问题,但是后来用个人电脑连接互联网的环境中就出现很多不便之处。
个人电脑不可能长时间处于开机状态。只有用户在使用时才会开机。在这种情况下,人们希望一开机就能接收到邮件。然而SMTP没有这种处理机制。SMTP的一个不利之处就在于它支持的是发送端主机的行为,而不是根据接收端的请求发送邮件。
为了解决这个问题,就引入了POP协议。如图8.14所示,该协议是一种用于接收电子邮件的协议。发送端的邮件根据SMTP协议将被转发给一直处于插电状态的POP服务器。客户端再根据POP协议从POP服务器接收对方发来的邮件。在这个过程中,为了防止他人盗窃邮件内容,还要进行用户验证。
图8.14 POP的工作机制
POP与SMTP一样,也是在其客户端与服务器之间通过建立一个TCP连接完成相应操作。POP的具体命令和相关应答代码如表8.6所示。它的命令都是较短的ASCII码字符串,应答更是极其简单,只有两种。正常的情况下为“+OK”,发生错误或异常的情况下为“-ERR”。
表8.6 POP主要命令
■ 试用POP命令
当允许使用TELNET登录POP服务器时,在以如下形式登录(关于telnet命令的使用方式可以参考8.2.1节的最后部分。) POP服务器后,可以手工执行表8.6所列的命令。
telnet 服务器名或其IP地址 110
与前一节的SMTP一样,假定自己是POP客户端,在执行POP相关命令以后可以收到相应的应答信息。
IMAP(Internet Message Access Protocol) 与POP类似,也是接收电子邮件的协议。在POP中邮件由客户端进行管理,而在IMAP中邮件则由服务器进行管理。
使用IMAP时,可以不必从服务器上下载所有的邮件也可以阅读。由于IMAP是在服务器端处理MIME信息,所以它可以实现当某一封邮件含有10个附件时“只下载其中的第7个附件”的功能(在POP中无法下载某个特定的附件。因此想要确认附件时就不得不下载邮件中所有的附件。) 。这在带宽较窄的线路上起着非常重要的作用。而且IMAP在服务器上对“已读/未读”信息和邮件分类进行管理,因此,即使在不同的计算机上打开邮箱,也能保持同步,使用起来非常方便(POP虽然也可以支持在多台计算机中下载邮件内容,但是未读信息和邮箱分组只能在每台计算机的软件中各自进行管理。) 。如此一来,使用IMAP,在服务器上保存和管理邮件信息,就如同在自己本地客户端的某个闪存中管理自己的信息一样简单。
有了IMAP人们就可以通过个人电脑、公司的电脑、笔记本电脑以及智能手机等连接到IMAP服务器以后进行收发邮件。由此,在公司下载的电子邮件就不必在笔记本电脑和智能手机上转来转去(不过笔记本电脑和智能手机必须能够连上IMAP服务器才行。) 。IMAP确实为使用多种异构终端的人们提供了非常便利的环境。
万维网(WWW,World Wide Web)是将互联网中的信息以超文本(超文本用以显示文本及与文本相关的内容。) 形式展现的系统。也叫做Web。可以显示WWW信息的客户端软件叫做Web浏览器(Web浏览器(Web Browser),有时也简称为浏览器。) 。目前人们常用的Web浏览器包括微软的Internet Explorer、Mozilla基金会的Firefox、Google公司的Google Chrome、Opera 软件公司的Opera以及Apple公司的Safari等。
借助浏览器,人们不需要考虑该信息保存在哪个服务器,只需要轻轻点击鼠标就可以访问页面上的链接并打开相关信息。
图8.15 WWW
通过浏览器进行访问后回显在浏览器中的内容叫做“Web页”(或WWW页)。公司或学校等组织以及个人的Web页被称作主页。在日本,很多公司的主页地址形式如下:
http://www.公司名称.co.jp/
这一类主页当中通常会发布公司概况、产品信息、招贤纳士等内容。人们可以通过点击这些标题的图标或链接就可以跳到对应的页面上。而这些页面上所提供的信息不仅仅是文字内容,还有图片或动画乃至声音或其他程序等各式各样的信息。此外,通过Web页不仅可以获取信息,还可以通过自己制作Web页来向全世界发布信息。
WWW定义了3个重要的概念,它们分别是访问信息的手段与位置(URI,Uniform Resource Identifier)、信息的表现形式(HTML,HyperText Markup Language)以及信息转发(HTTP,HyperText Transfer Protocol)等操作。
URI是 Uniform Resource Identifier的缩写,用于标识资源。URI是一种可以用于WWW之外的高效的识别码,它被用于主页地址、电子邮件、电话号码等各种组合中。如下所示:
http://www.rfc-editor.org/rfc/rfc4395.txt
http://www.ietf.org:80/index.html
http://localhost:631/
这些例子属于一般主页地址,也被叫做URL(Uniform Resource Locator)。URL常被人们用来表示互联网中资源(文件)的具体位置。但是URI不局限于标识互联网资源,它可以作为所有资源的识别码。现在,在有效的RFC文档中,已经不再使用URL,转而在使用URI(它们之间好比比特跟字节的关系。协议定义中经常使用字节,但是在日常生活中却用比特较多。) 。相比URL狭义的概念,URI则是一个广义的概念。因此,URI可以用于除了WWW之外的其他应用协议中。
URI所表示的组合叫方案(Scheme)(schema是指具有体系的计划或方案。) 。在众多URI的Scheme中WWW主要用其中的http和https表示Web页的位置和访问Web页的方法。关于URI Schema一览表,请参考下面的文档。
http://www.iana.org/assignments/uri-schemes.html
URI的http方案的具体格式如下:
http://主机名/路径
http://主机名:端口号/路径
http://主机名:端口号/路径?访问内容#部分信息
其中主机名表示域名或IP地址,端口号表示传输端口号。关于端口号的更多细节,读者可以参考6.2节。省略端口号时,则表示采用http的默认端口80。路径是指主机上该信息的位置,访问内容表示要传给CGI(关于CGI请参考8.5.6节。) 的信息,部分信息表示页面当中的位置等。
这种表示方法可以唯一地标识互联网中特定的数据。不过,由于用http方案展现的数据随时都有可能发生变化,所以即使将自己喜欢的页面的URI(URL)记住,也不能保证下次是否还能够访问到该页。
表8.7列出了URI的主要方案。
表8.7 主要的URI方案
HTMP是记述Web页的一种语言(数据格式)。它可以指定浏览器中显示的文字、文字的大小和颜色。此外,不仅可以对图像或动画进行相关设置,还可以设置音频内容。
HTML具有纯文本的功能。在页面中不仅可以为文字或图像附加链接,当用户点击那些链接时还可以呈现该链接所指示的内容,因此它可以将整个互联网中任何一个WWW服务器中的信息以链接的方式展现。绝大多数互联网中的Web页,都以链接的形式指向关联的其他信息。逐一点开这些链接就可以了解全世界的信息。
HTML也可以说是WWW通用的数据表现协议。即使是在异构的计算机上,只要是可以用HTML展现的数据,那么效果基本上是一致的。如果把它对应到OSI参考模型,那么可以认为HTML属于WWW的表示层(HTML不仅用于WWW,有时还用于电子邮件。) 。不过,鉴于现代计算机网络的表示层尚未完全准备就绪,根据操作系统和所用软件的不同,最终表现出来的效果也可能会出现细微差别。
图8.16展示了一个通过HTML表现数据样本的例子。如果将其用浏览器(例如Firefox)打开的话,效果如图8.17所示。
图8.16 HTML举例
图8.17 用浏览器读取并显示图8.16的内容
■ XML与Java
WWW中将数据存入文件或在应用之间进行交互时会经常使用XML(Extensible Markup Language)。XML是从SGML(Standard Generalized Ma-rkup Language) 衍生出来的一种语言,与HTML类似,也需要在每个项目的前后加入标签以表达其具体含义。一般,从<标签名>到</标签名>为止表示一个数据。
最近,开发人员经常结合Java与XML进行程序开发。原SUN Microsystems公司发明的Java是一种与平台无关的开发语言。而XML又是不依赖于任何软件供应商的数据格式。
可以认为Java和XML都相当于OSI参考模型中的第6层表示层。这两者一结合,不论连接的是何种类型的网络,其应用上的动作效果能够保持一致。
当用户在浏览器的地址栏里输入所要访问Web页的URI以后,HTTP的处理即会开始。HTTP中默认使用80端口。它的工作机制,首先是客户端向服务器的80端口建立一个TCP连接,然后在这个TCP连接上进行请求和应答以及数据报文的发送。
图8.18 HTTP的工作机制
HTTP中常用的有两个版本,一个HTTP1.0,另一个是HTTP1.1。在HTTP1.0中每一个命令和应答都会触发一次TCP连接的建立和断开。而从HTTP1.1开始,允许在一个TCP连接上发送多个命令和应答(这种方式也叫保持连接(keep-alive)。) 。由此,大量地减少了TCP连接的建立和断开操作,从而也提高了效率。
表8.8 HTTP的主要命令以及应答报文
■ 试用HTTP命令
当允许HTTP服务器和TELNET连接时,可以以如下形式登录(关于telnet命令的使用方式可以参考8.2.1节的最后部分。) HTTP服务器后,再以手动形式执行表8.8所列的命令。
telnet 服务器名或其IP地址 80
假定自己是HTTP客户端,输入ASCII码字符串的命令,并确认表8.8中的应答结果。
■ JavaScript
Web的基本要素为URI、HTML和HTTP。然而仅有这些还无法更改与条件相符的动态内容。为此,通过在浏览器端和服务器端执行特定的程序可以实现更加精彩、多样的内容。例如实现网络购物或搜索功能。
我们称Web浏览器端执行的程序为客户端程序,在服务器端执行的程序为服务器端程序。
JavaScript是一种嵌入在HTML中的编程语言,作为客户端程序可以运行于多种类型的浏览器中。这些浏览器将嵌入JavaScript的HTML下载后,其对应的JavaScript程序就可以在客户端得到执行。这种JavaScript程序用于验证客户端输入字符串是否过长、是否填写或选择了页面中的必须选项等功能(如果将用户输入正确与否的验证都放在服务端执行的话,给服务器带来的负荷太大。因此只要能在客户端进行检查,就在客户端执行这样也可以保证效率。) 。JavaScript还可以用于操作HTML或XML的逻辑结构(DOM,Document Object Model)以及动态显示Web页的内容和页面风格上。最近,更是盛行服务器端不需要读取整个页面而是通过JavaScript操作DOM来实现更为生动的Web页面的技术。这就是Ajax(Asynchronous JavaScrip and XML)技术。
图8.19 JavaScript、CGI中的处理流程
■ CGI
CGI(Common Gateway Interface) 是Web服务器调用外部程序时所使用的一种服务端应用的规范。
一般的Web通信中,只是按照客户端请求将保存在Web服务器硬盘中的数据转发而已。这种情况下客户端每次收获的信息也是同样(静态)的内容。而引入CGI以后客户端请求会触发Web服务器端运行另一个程序,客户端所输入的数据也会传给这个外部程序。该程序运行结束后会将生成的HTML和其他数据再返回给客户端(外部程序并不仅局限于使用CGI启动,它也有可能被包含在Web服务器内部的程序里,或是嵌入了解释器的Web服务器程序里。) 。
利用CGI可以针对用户的操作返回给客户端有各种各样变化(动态)的信息。论坛和网上购物系统中就经常使用CGI调用外部程序或访问数据库。
■ Cookie
Web应用中为了获取用户信息使用一个叫做Cookie的机制。Web服务器用Cookie在客户端保存信息(还可以设置Cookie的有效期。) (多为“用户名”和“登录名”等信息)。Cookie常被用于保存登录信息或网络购物中放入购物车的商品信息。
从Web服务器检查Cookie可以确认是否为同一对端的通信。从而存放于购物车里的商品信息就不必要在保存到服务器了。
■ 博客与RSS
博客(blog)是weblog的缩写。它是一种在使用者完全不懂HTML、也不需要使用FTP的情况下,轻松建立Web页并更新内容的网络服务应用。常用于网络日记、报表等。
RSS是用来交互与Web站点内容更新相关的摘要信息的一种数据格式,也叫做Really Simple Syndication或RDF(Resource Description Framework)Site Summary。Web上的数据看起来虽然比HTML等顺眼些。但是,通过这些数据,若要立即抽取该页面的概要信息或根据关键字自动集合显示那些自己感兴趣的页面,还是一件比较困难的事情。然而,如果使用RSS,则可以将页面的标题、内容中的章节标题和概要、分类、关键字等信息记述下来,只显示页面的概要,提高关键字搜索的精度。作为发布消息为主的Web站点如果支持RSS,那么用户可以轻松地通过RSS获取该站点的最新消息。
通过博客公开信息已经成为现代信息通信中不可阻挡的趋势。而RSS也将会成为人们从日益增多的互联网海量信息中收集自己感兴趣内容的必不可少的工具。
图8.20 网络管理
以前,网络管理都是凭借管理员的记忆和直觉进行。然而随着网络规模变得越来越大,个人的记忆、经验或直觉已经无法与之匹配,需要一个严密的管理工具或方法显得格外重要。在TCP/IP的网络管理中可以使用SNMP(Simple Network Management Protocol)收集必要的信息。它是一款基于UDP/IP的协议。
SNMP中管理端叫做管理器(Manager,网络监控终端),被管理端叫做代理(路由器、交换机等)(SNMPv3中管理器和代理都叫做实体(Entity)。) 。决定管理器与代理之间的通信中所要交互信息的正是SNMP。SNMP中如果将MIB(关于MIB(Management Information Base),请参考8.6.2节。) 看做代理所管理的信息在数据库中的值,那么它可以新增一个值。
起初SNMP的安全机制并不完备。虽然在SNMPv2中有人提出过安全方面的建议,但是由于最终意见未能达成一致,所以支持基于团体认证方式的SNMPv2c成为了当时的标准。不过,该标准并没有采用安全机制。
后来的SNMPv3,不仅集合了所有SNMP的功能于同一个版本,定义了个别的功能模块(Component),并可以结合各种不同版本进行通信。
SNMPv3中将“消息处理”、“用户安全”和“访问控制”三部分分开考虑,可以为每一个部选择各自必要的机制。
例如,在消息处理中除了有SNMPv3中所定义的处理模型以外,还有SNMPv1和SNMPv2的处理模型可供选择。实际上,在SNMPv3中选用SNMPv2的消息处理模型进行通信的情况居多。
消息处理中如果选择了SNMPv2的模型,那么会进行以下8种操作。它们分别是:查询请求,上次要求的下一个信息的查询请求(GetNextRequest-PDU)、应答、设置请求、批量查询请求(GetBulkRequest-PDU)、向其他管理器发送信息通知(InformRequest-PDU)、事件通知、用管理系统定义的命令(Report-PDU)等操作。
图8.21 SNMP工作机制
▼ SNMP的Trap有类似于陷阱的意思。
通常,根据查询请求和应答可以定期检查设备的运行动作,根据设置请求可以修改设备的参数。SNMP的处理可以分为从设备读取数据和向设备写入数据两种。它们采用Fetch和Store模式。这些操作类似于计算中的输入输出等基本操作(计算机中可以向内存中特定的地址写入信息,也可以读取内存中特定地址中的内容,据此进行键盘输入、屏幕显示、磁盘存取等操作。这些过程叫做内存映射I/O,是Fetch/Store模式的典型代表。SNMP正是将这些操作应用到了网络上。) 。
如果出于某种原因网络设备的状况发生变化,将这个变化通知给SNMP管理器时就可以使用Trap。有了Trap,即使没有管理器到代理的请求,也能在设备发生变化时收到从代理发来的通知。
SNMP中交互的信息是MIB(Management Information Base)。MIB是在树形结构的数据库中为每个项目附加编号的一种信息结构。
SNMP访问MIB信息时使用数字序列。这些数字序列各自都有其易于理解的名字。MIB分为标准MIB(有时也叫私有MIB。) (MIB、MIB-II、FDDI-MIB等)和各个提供商提供的扩展MIB。不论是哪种类型的MIB都通过SMI(Structure of Management Information)定义,其中SMI使用ISO 提出的ASN.1(ASN.1(Abstract Syntax Notation 1)是指抽象语法标记法。为标记OSI参考模型中表示层协议而被开发的一种语言。用ASN.1标记的数据可以在网络上传输。) 方法。
MIB相当于SNMP的表示层,它是一种能够在网络上传输的结构。SNMP中可以将MIB值写入代理,也可以从代理中读取MIB值。通过这些操作可以收集冲突的次数和流量统计等信息,可以修改接口的IP地址,还可以进行路由器的启停、设备的启动和关闭等处理。
图8.22 MIB树举例(Cisco Systems相关)
RMON是Remote Monitoring MIB的缩写。MIB由监控网络中某个设备接口(某个点)的众多参数构成。相比之下,RMON则由监控网络上线路的众多参数构成。
RMON中可监控的信息从原来的一个点扩展到了一条线上。这样可以更高效率地监控网络。可监控的内容上也增加了很多从用户角度看极为有意义的信息,如网络流量统计等。
通过RMON可以监控某个特定的主机在哪里通过什么样的协议正在与谁进行通信的统计信息,从而可以更加详细地了解网络上成为负荷的主体并进行后续分析。
RMON中从当前使用状况到通信方向性为止,可以以终端为单位也可以以协议为单位进行监控。此外,它不仅可以用于网络监控,以后还可以用于收集网络扩展和变更时期更为有意义的数据。尤其是通过WAN线路或服务器段部分的网络流量信息,可以统计网络利用率,还可以定位负载较大的主机及其协议相关信息。因此,RMON是判断当前网络是否被充分利用的重要资料。
下面举一个使用SNMP的例子。
MRTG(Multi Router Traffic GRAPHER)是利用RMON定期收集网络中路由器的网络流量信息的工具。该用具可以从以下网站获取:
http://oss.oetiker.ch/mrtg/
图8.23 MRTG可以图像化显示网络流量
互联网一直以来作为数据通信网络得到了蓬勃的发展。最近它的利用范围有了更进一步的扩大。不仅用于实时收发音频、图像、视频等多媒体数据领域,还被用于电视电话会议、现场转播等即时性、双向性的领域。
由于TCP具有流控制、拥塞控制、重发机制等功能,有时应用所发出去的数据可能无法迅速到达对端目标主机。然而在互联网电话(使用的VoIP(Voice Over IP的缩写。) )和电视会议当中,即使有少许丢包,也希望系统延时少一点,非常注重系统的即时性。因此,在实时多媒体通信当中采用UDP。
然而,只使用UDP还不足以达到进行实时多媒体通信的目的。例如,在互联网电视电话议会中需要提供查询对方号码、模拟电话机的拨号以及以什么形式交互数据等功能。为此,需要一个叫做“呼叫控制”的支持。呼叫控制主要采用H.323与SIP协议。此外,还需要RTP协议(结合多媒体数据本身的特性进行传输的一种协议)和压缩技术(在网络上传输音频、视频等大型多媒体数据时进行压缩)的支持。
结合上述众多技术才能够真正实现实时多媒体通信。此外,互联网电视电话会议对实时性的要求远远高于到目前为止的任何一个数据通信领域。因此在搭建网络环境时有必要考虑QoS、线路容量和线路质量等方面的要求。
■ H.323
H.323是由ITU开发用于在IP网上传输音频、视频的一种协议。起初,它主要是作为接入ISDN网和IP网之上的电话网为目的的一种规范而被提出的。
H.323定义了4个主要组件。它们分别是终端(用户终端)、网关(吸收用户数据压缩顺序的不一致性)、网闸(电话本管理、呼叫管理)以及多点控制单元(允许多个终端同时使用)。
图8.24 H.323的基本构成
■ SIP
与H.323相对的TCP/IP协议即是SIP(Session Initiation Protocol)协议。SIP的提出要晚于H.323,但是被普遍认为更适用于互联网。H.323的规范内容较多、对应起来比较复杂,而相比之下SIP的构成则简单了许多。
终端之间进行多媒体通信时,需要具备事先解析对方地址、呼出对方号码并对所要传输的媒体信息进行处理等功能。此外,还需要具备中断会话和数据转发的功能。这些功能(呼叫控制与信令)都被统一于SIP协议中。它相当于OSI参考模型中的会话层。
通过终端之间收发消息,可以令SIP进行呼叫控制并做一些多媒体通信中必要的准备。不过仅凭SIP对数据收发的准备工作还不足以进行多媒体数据的传输。SIP消息通常都由终端进行直接处理,但是也有在服务器上进行处理的情况。由于SIP非常相似于HTTP的工作机制(HTTP中进行Web页的获取与发送依赖于ASCII码字符串的请求命令和数字序列的应答报文。SIP在这一点是与HTTP一样采用ASCII码字符串。) ,不仅在VoIP,在其他应用当中也已经被广泛使用。
图8.25 SIP基本组成
图8.26 通过SIP服务器的呼叫控制的顺序
▼ 根据RTP通信可以不必经过SIP服务器,可直接在SIP终端之间进行。
表8.9 主要SIP命令
表8.10 主要SIP响应消息
■ RTP
UDP不是一种可靠性传输协议。因此有可能发生丢包或乱序等现象。因此采用UDP实现实时的多媒体通信需要附加一个表示报文顺序的序列号字段,还需要对报文发送时间进行管理。这些正是RTP(Real-Time Protocol)的主要职责。
RTP为每个报文附加时间戳和序列号。接收报文的应用,根据时间戳决定数据重构的时机。序列号则根据每发出一次报文加一的原则进行累加。RTP使用这个序列号对同一时间戳的数据(尤其是对于视频的数据。视频中一个帧的数据往往要超过一个包,然而它们发送的时间戳一致。此时就可以使用同一时间戳内不同的序列号加以区分。) 进行排序,掌握是否有丢包的情况发生。
RTCP(RTP Control Protocol)是辅助RTP的一种协议。通过丢包率等线路质量的管理,对RTP的数据传送率进行控制。
图8.27 RTP通信
■ 数字压缩技术
通过有效的压缩可以大量减少音频和视频数据的大小。在有限的网络资源中进行多媒体数据的传输,压缩技术成为一个必要的手段。
MPEG(Moving Picture Experts Group)是决定数字压缩规范的ISO/IEC工作组。在这里所制定的规范叫做MPEG。在MPEG的众多规范当中,MPEG1主要用于VideoCD,而MPEG2主要用于DVD和数字电视播放领域。此外,还有MPEG4和MPEG7等规范。连音乐压缩的MP3(正式的名称为MPEG1 Audio Layer III。) 也属于MPEG的规范。
另一方面,由ITU-T的H.323所规定H.261、H.263与MPEG共同协作的产生了H.264。除此之外,还有微软公司自己的规范。
这些都属于数字压缩技术的范畴。由于它们着重于数据格式上的处理,可以认为它们相当于OSI的表示层。
互联网上电子邮件的通信,普遍属于一台服务器对应多个客户端的C/S模式,即1对N的通信形态。
与之不同,网络上的终端或主机不经服务器直接1对1相互通信的情况叫做P2P(Peer To Peer)。这就好比使用无线收发器进行一对一通话。P2P中主机具备客户端和服务端两方面的功能,以对等的关系相互提供服务。
IP电话中也有使用P2P的例子。使用P2P以后,可以分散音频数据给网络带来的负荷,实现更高效的应用。例如互联网电话Skype就采用了P2P的功能。
除了IP电话外,其他实现互联网的文件传输应用如BitTorrent协议或一部分群组软件等,也是用到了P2P的技术。
图8.28 集中型与P2P型
不过,也有不支持P2P的环境。例如在服务器与客户端分离型的环境中,服务器要在一个可以由互联网直接访问的地方,而客户端即使是在NAT内侧也不会有问题。然而在P2P中这个结构却行不通。它必须具备从互联网越过NAT令双方终端能够访问的功能。
LDAP(Lightweight Directory Access Protocol)是访问目录服务的一种协议,也叫轻量级目录访问协议。所谓“目录服务”是指网络上存在的一种提供相关资源的数据库的服务。这里的目录也有地址簿的意思。可以认为目录服务就是管理网络上资源的一种服务。
LDAP用于访问这种目录服务。目录服务的规范作为X.500(ISO于1988年制定的标准目录访问协议(DAP,Directory Access Protocol)。X.500是它在ITU-T中的编号。) 于1988年由ISO(国际标准化组织)制定。而LDAP在TCP/IP上实现了X.500中的一部分功能。
就像DNS为了更简单地对网络上的各个主机进行管理一样,LDAP是为了更简单地管理网络上的各种资源。
LDAP定义了目录树的结构、数据格式、命名规则、目录访问顺序和安全认证。图8.29列出了LDAP设置的一般结构(LDIF(LDAP Interchange Format:LDAP数据交换格式)) 。图8.30则为单纯目录树的例子。
图8.29 LDIF文件
图8.30 LDAP目录树(DIT)
在大规模的公司或教育机关中,所要管理的对象如使用者(用户)和设备的数量往往非常庞大。那么为了让这些用户能够使用计算机或某个应用,有必要事先进行可否使用计算机或应用的设置。此时如果这些设备和应用应对了LDAP,并在一个可以进行统一管理的LDAP服务器中注册了所有用户,那么就可以对这些用户是否有效进行判断。LDAP常被用于这一类的认证管理和资源管理中(同一类型同样功能的产品还有微软公司的Active Directory、Novell公司的eDirectory等。它们都在支持LDAP的同时还提供自身扩展的功能,所以每个产品所能提供的服务也都不相同。因此,很多公司会根据自己的需求选择合适的产品。) 。