六、应用层
之前讨论的是计算机网络提供通信服务的过程,本章讨论各种应用进程通过什么样的应用层协议来使用网络所提供的通信服务。
主要内容:
1)DNS域名系统:从域名解析出IP地址;
2)万维网和HTTP协议,以及万维网的两种不同的信息搜索引擎;
3)电子邮件的传送过程,SMTP协议和POP3协议使用的场合;
4)基于万维网的电子邮件系统的特点;
5)动态主机配置DHCP的特点;
6)网络管理的三个部分。
6.1域名系统DNS
6.1.1域名系统概述
DNS是分布式系统。域名到IP地址的解析是由分布在因特网上的许多域名服务器程序共同完成。域名服务器程序在专设的结点上运行,把运行域名服务器程序的机器称为域名服务器。
域名到IP地址的解析过程要点如下:当某一个应用进程需要把主机名解析为IP地址时,该应用进程就调用解析程序,并成为DNS的一个客户,把待解析的域名放在DNS请求报文中,以UDP用户数据报的方式发给本地域名服务器(使用UDP是为了减少开销)。本地域名服务器在查找域名后,把对应的IP地址放在回答报文中返回。应用进程获得目的主机的IP地址后即可进行通信。
若本地域名服务器不能回答该请求,则此域名服务器就暂时成为DNS中的另一个客户,并向其他域名服务器发出查询请求。这种过程直至找到能够回答该请求的域名服务器为止。
6.1.2因特网的域名结构
因特网采用层次树状结构的命名方法,就像全球邮政系统和电话系统那样。采用这种命名方法,任何一个连接在因特网上的主机或路由器,都有一个唯一的层次结构的名字,叫域名。
从语法上来讲,每一个域名都是由标号序列组成,而各标号之间用点隔开’.’,例如下面的域名:mail.cctv.com。其中标号com是顶级域名,cctv是二级域名,mail是三级域名。
DNS规定域名中的标号不区分大小写。cctv和CCTV是等价的。
根据域名服务器的作用,将其划分为以下四类:
1)根域名服务器:最高层次的域名服务器。所有的根域名服务器都知道所有的顶级域名服务器的域名和IP地址。无论哪一个本地域名服务器,只要自己无法解析域名,就首先求助于根域名服务器。根域名服务器会告诉本地域名服务器下一步应当找哪一个顶级域名服务器进行查询。
2)顶级域名服务器:负责管理在该顶级域名服务器注册的所有二级域名。
3)权限域名服务器:当一个权限域名服务器还不能给出足后的查询回答时,就会告诉发出查询请求的DNS客户,下一步应当找哪一个权限域名服务器。
4)本地域名服务器:当一个主机发出DNS查询请求时,这个查询请求报文就发送给本地域名服务器。
为了提高域名服务器的可靠性,DNS域名服务器都把数据复制到几个域名服务器来保存,其中一个时主域名服务器,其他的是辅助域名服务器。
为了提高DNS查询效率,并减轻根域名服务器的负荷和减少因特网上的DNS查询报文数量,在域名服务器中广泛使用了高速缓存。高速缓存用来存放最近查询过的域名以及从何处获得域名映射信息的记录。
6.2文件传送协议FTP
6.2.1FTP概述
文件传送协议FTP只提供文件传送的一些基本的服务,它使用TCP可靠的运输服务。FTP的主要功能是减少或消除在不同操作系统下处理文件的不兼容性。
6.2.2 FTP的工作原理
FTP使用客户服务器方式。一个FTP服务器进程可同时为多个客户进程提供服务。FTP服务进程由两大部分组成:一个主进程,负责接收新的请求;若干个从属进程,负责处理单个请求。
主进程的工作步骤如下:
1)打开熟知端口(端口号为21),使客户进程能够连接上;
2)等待客户进程发出连接请求;
3)启动从属进程来处理客户进程发来的请求。从属进程对客户进程的请求处理完毕后即终止。
4)回到等待状态,继续接受其他客户进程发来的请求。主进程与从属进程的处理是并发地进行。
6.2.3 简单文件传送协议TFTP
简单文件传送协议TFTP,TFTP也使用客户服务器方式,但使用UDP数据报。
6.3 远程终端协议TELNET
TELNET是一个简单的远程终端协议,也是因特网的正式标准。用户用TELNET就可在其所在地通过TCP连接注册(即登录)到远地的另一个主机上。TELNET能将用户的击键传到远地主机,同时也能将远地主机的输出通过TCP连接返回到用户屏幕。这种服务是透明的,因此TELNET又称为终端仿真协议。
TELNET也使用客户服务器方式。在本地系统运行TELNET客户进程,而在远地主机则运行TELNET服务器进程。
6.4 万维网WWW
万维网WWW(World Wide Web)是一个大规模的、联机式的信息储藏所,英文简称为web。
6.4.1 万维网概述
万维网用链接的方法能非常方便地从因特网上的一个站点访问另一个站点,从而主动地按需获取丰富的信息。
超文本:包含指向其他文档的链接的文本。
万维网以客户-服务器方式工作。浏览器就是用户主机上的万维网客户程序。万维网文档所驻留的主机则运行服务器程序,因此这个主机也称为万维网服务器(web服务器)。客户程序向服务器程序发出请求,服务器程序向客户程序发送回客户所要的万维网文档。
在一个客户程序主窗口上显示出的万维网文档成为页面。
万维网必须解决以下几个问题:
1)怎样标志分布在整个因特网上的万维网文档?
2)用什么样的协议来实现万维网上各种链接?
3)怎样使不同作者创作的不同风格的万维网文档,都能在因特网上的各种主机上显示出来,同样使用户清楚地知道在什么地方存在着链接?
4)怎样使用户能够很方便地找到所需的信息?
解决方案:
1)万维网使用统一资源定位符URL来标志万维网上的文档,并使每一个文档在整个因特网上有着唯一的URL。
2)超文本传送协议HTTP。HTTP是应用层协议,它使用TCP连接进行可靠的传送。
3)万维网使用超文本标记语言HTML,使得万维网页面的设计者可以很方便地用链接从本页面的某处链接到因特网上的任何一个万维网页面,并且能够在自己的主机屏幕上将这些页面显示出来。
6.4.2 统一资源定位符URL(不区分大小写)
1.URL格式
由于访问不同对象所使用的协议不同,所以URL还指出读取某个对象时所使用的协议。URL一般形式由以下四个部分组成:
<协议>://<主机>:<端口>/<路径>
<协议>指出使用什么协议来获取该万维网文档。常用的如http、ftp。
<主机>指出这个万维网文档在哪一个主机上,这里使用该主机在因特网上的域名。
<端口>HTTP默认80,FTP默认21,通常可省略。
<路径>有时可省略。
2.使用HTTP的URL
对于万维网的网点的访问要使用HTTP协议,HTTP的URL一般格式为:
http://<主机>:<端口>/<路径>
HTTP默认端口号为80,通常可省略
6.4.3 超文本传送协议HTTP
1.HTTP的操作过程
HTTP协议定义了浏览器(万维网客户进程)怎样向万维网服务器请求万维网文档,以及服务器怎样把文档传送给浏览器。
HTTP是面向事务的应用层协议,是万维网上能够可靠地交换文件(包括文本、声音、图像等各种多媒体文件)的重要基础。
HTTP报文通常都使用TCP连接传送。
万维网的大致工作过程:
每个万维网网点都有一个服务器进程,它不断地监听TCP的端口80,以便发现是否有浏览器向它发出连接建立情求。一旦监听到连接建立请求并建立了TCP连接后,浏览器就向服务器发出浏览某个页面的请求,服务器接着就返回所请求的页面作为响应。最后,TCP连接被释放。
浏览器和服务器之间的请求和响应交互,必须按照规定的格式和遵循一定的规则,这些格式和规则就是超文本传送协议HTTP。
HTTP规定在客户端与服务器之间的每次交互,都由一个ASCII码串构成的请求和一个类似的通用因特网邮件扩充的响应组成。
用户浏览页面的方法有两种。一种方法是在浏览器的地址窗口中键入所要找大的页面的URL。另一种方法是在某一个页面中用鼠标点击一个可选部分,这时浏览器会自动在因特网上找到所要链接的东西。
下面用HTTP/1.0具体说明用户在点击鼠标后发生的几个事件:
1)浏览器分析链接指向页面的URL;
2)浏览器向DNS请求解析www.tsinghua.edu.cn的IP的地址。
3)域名系统DNS解析出清华大学服务器的IP地址为166.111.4.100。
4)浏览器向该IP地址发出连接建立请求,服务器收到后建立TCP连接。
5)浏览器发出取文件命令:GET /chn/yxsz/index.htm。
6)服务器www.tsinghua.edu.cn给出响应,把文件index.htm发送给浏览器。
7)释放TCP连接。
8)浏览器显示文件index.htm中的所有文本。
HTTP协议本身是无连接的,也就是说虽然HTTP使用TCP连接,但通信的双方在交换HTTP报文之前不需要先建立HTTP连接。
HTTP协议是无状态的,也就是说同一个客户第二次访问同一个服务器上的页面时,服务器的响应与第一次相同。HTTP的无状态化简化了服务器的设计,使服务器更容易支持大量并发的HTTP请求。
用户在点击鼠标链接某个万维网文档时,HTTP协议首先要和服务器建立TCP连接。这需要使用三次握手。当三次握手的前两部分完成后(即经过了一个RTT后),万维网客户就把HTTP请求报文作为第三次握手的第三个报文的数据发送给服务器。服务器收到HTTP请求后,就把所请求文档作为响应返回给客户。
HTTP/1.0的主要缺点就是每次请求一个文档就要有两倍RTT的开销。另一种开销是万维网客户和服务器为每一次建立新的TCP连接都要分配缓存和变量。所以这种非持续连接会使万维网服务器负担很重。
HTTP/1.1协议较好地解决了这个问题,它使用了持续连接。所谓持续连接就是万维网服务器在发送响应后仍然在一段时间内保持这条连接,使同一个客户和该服务器可以继续在这条连接上传送后续的HTTP请求和响应报文。
2.代理服务器
代理服务器(proxy server)是一种网络实体,又称为万维网高速缓存。代理服务器把最近一些请求和响应暂存在本地磁盘中。当新请求到达时,若代理服务器发现这个请求与暂时存放的请求相同,就返回暂存的响应,而不需要按URL的地址再去因特网访问该资源。代理服务器可在客户端或服务器端工作,也可在中间系统上工作。
在代理服务器的情况下,访问因特网的过程如下:
1)PC中的浏览器向因特网的服务器请求服务时,先和代理服务器建立TCP连接,并向代理服务器发送HTTP请求报文。
2)若代理服务器已经存放了所请求的对象,代理服务器就把这个对象放入HTTP响应报文中返回给PC浏览器。
3)否则,代理服务器就代表发出请求的用户浏览器,与因特网上的源点服务器建立TCP连接,并发送HTTP请求报文。
4)源点服务器把所请求的对象放在HTTP响应报文中返回给代理服务器。
5)代理服务器收到这个对象后,先复制在自己的本地存储器中,然后再把这个对象放在HTTP响应报文中,通过已建立的TCP连接返回给PC浏览器。
3.HTTP的报文结构
1)请求报文-客户向服务器发送请求报文。
2)响应报文-服务器向客户应答。
由于HTTP是面向文本的,因此在报文中的每一个字段都是一些ASCII码串,因而各个字段长度不确定。
HTTP请求报文和响应报文都是由三个部分组成。这两种报文格式的区别就是开始行不同。
1)开始行:用于区分是请求报文还是响应报文。在请求报文中开始行叫请求行,在响应报文中开始行叫状态行。在开始行的三个字段之间都以空格分隔开,最后的“CR”和“LF”分别代表“回车”和“换行”。
请求行:方法、请求资源的URL、以及HTTP的版本。
方法是面向对象技术中的专用名词,指对所请求的对象进行的操作。
下表是请求报文中的常用方法:
方法(操作) | 意义 |
OPTION | 请求一些选项信息 |
GET | 请求读取由URL所标志的信息 |
HEAD | 请求读取由URL所标志的信息的首部 |
POST | 给服务器添加信息(例如:注释) |
PUT | 在指明的URL下存储一个文档 |
DELETE | 删除指明的URL所标志的资源 |
TRACE | 用来进行回环测试的请求报文 |
CONNECT | 用于代理服务器 |
2)首部行:用来说明浏览器、服务器或报文主体的一些信息。
3)实体主体:在请求报文中一般都不用这个字段,在响应报文中可能也没有这个字段。
状态行:包括HTTP版本、状态码、以及解释状态码的短语。
状态码都是三位数字的,分为5大类共33种。例如
1xx表示通知消息的,如请求收到了或正在进行处理;
2xx表示成功,如接受或知道了;
3xx表示重定向,如要完成请求还须采取进一步的行动;
4xx表示客户的差错,如请求中有错误的语法或不能完成;
5xx表示服务器的差错,如服务器失效无法完成请求。
下面三种状态行在响应报文中是经常见到的。
HTTP/1.1 202 Acceptd {接受}
HTTP/1.1 400 Bad Request {错误的请求}
HTTP/1.1 404 Not Found {找不到}
若请求的网页从http://www.ee.xyz.edu/index.html转移到了一个新的地址,则响应报文的状态行和一个首部行就是下面的形式:
HTTP/1.1 301 Moved Permanently {永久性地转移了}
Location: http://www.xyz.edu/ee/index.htm {新的url}
4.在服务器上存放用户的信息
HTTP是无状态的,但有些万维网站点希望能够识别用户。例如,网上购物时,当用户把选好的物品放在购物车后,还要继续浏览和选购其他物品,这个时候需要服务器记住用户身份,使用户再选购的物品可以放在同一个购物车里。使用Cookie来完成。规定万维网站点可以使用Cookie来跟踪用户。Cookie表示在HTTP服务器和客户之间传递的状态信息。
Cookie工作过程:
当用户张三浏览某个使用Cookie的网站时,该网站的服务器就为张三产生一个唯一的识别码,并以此作为索引在服务器的后端数据库中产生一个项目。接着就在给张三的HTTP响应报文中添加一个叫做Set-cookie的首部行,值就是该用户的识别码。当张三收到这个响应时,其浏览器就在它管理的特定Cookie文件中添加一行,其中包括这个服务器的主机名和Set-cookie后面给出的识别码。当张三继续浏览这个网站时,每发送一个HTTP请求报文,其浏览器就会从其Cookie文件中取出这个网站的识别码,并放到HTTP请求报文的Cookie首部行中。
Cookie在个人隐私上存在争议。
6.4.4 万维网文档
1.超文本标记语言HTML
超文本标记语言(HyperText Markup Language)就是一种制作万维网文档的标准语言,它消除了不同计算机之间信息交流的障碍。
XML(Extensible Markup Language)是可扩展标记语言,设计宗旨是传输数据,而不是像HTML一样显示数据。
CSS(Cascading Style Sheets)层叠样式表,是一种样表式语言,用于为HTML文档定义布局。CSS与HTML的区别:HTML用于结构化内容,CSS用于格式化结构化的内容。
2. 动态万维网文档
动态文档是指文档的内容是在浏览器访问万维网服务器时才由应用程序动态创建。当浏览器请求到达时,万维网服务器要运行另一个应用程序,并把控制转移到此程序。接着该应用程序对浏览器发来的数据进行处理,并输出HTTP格式的文档,万维网服务器把应用程序的输出作为对浏览器的响应。
要实现动态文档就必须在以下两个方面对万维网服务器的功能进行扩充:
1)应增加另一个应用程序,用来处理浏览器发来的数据,并创建动态文档;
2)应增加一个机制,用来使万维网服务器将浏览器发来的数据传送给这个应用程序,然后万维网服务器能够解释这个应用程序的输出,并向浏览器返回HTML文档。
下图是扩充了功能的万维网服务器示意图。这里增加了一个机制,叫做通用网关接口CGI(Common Gateway Interface)。CGI是一种标准,它定义了动态文档如何创建,输入数据如何提供给应用程序,以及输出结果应如何应用。
在万维网服务器中新增加的应用程序叫做CGI程序。
DHCP:动态主机配置协议。为主机配置IP地址、DNS服务器、子网掩码、默认路由地址。使用UDP。