应用层协议都是为了解决某一类应用问题,而问题的解决又往往是通过位于不同主机的多个应用进程之间的通信和协同工作来完成的。应用层的具体内容就是规定应用进程在通信时所遵循的协议。
一、域名系统DNS
- 概述
域名系统DNS(Domain Name System)是因特网使用的命名系统,用来把便于人们使用的机器名字转换成IP地址。许多应用层软件经常直接使用域名系统,计算机的用户只是间接地使用域名系统。
域名比起IP地址更加便于人们记忆,但是机器在处理IP数据报的时候使用的还是IP地址,因为其定长特性,IPv4为32位,IPv6为128位便于机器处理。
因特网的域名服务系统DNS被设计成为一个联机分布式数据库系统,并采用客户服务器方式。DNS使大多数名字都在本地进行解析(resolve),仅仅少量解析需要在因特网上通信,因此DNS效率很高。由于DNS是分布式系统,即使单个计算机出现故障也不会妨碍整个DNS系统的正常运行。
域名到IP地址的解析是由分布在因特网上的许多域名服务器程序,简称域名服务器共同完成的。解析过程的要点如下:
- 当某一个应用进程需要把主机名解析为IP地址时,该应用进程就调用解析程序(resolver),并成为DNS的一个客户,把待解析的域名放在DNS请求报文中,以UDP用户数据报方式(减少开销)发给本地域名服务器。
- 本地服务器在查找到域名后,把对应的IP地址放在回答报文中返回。应用进程获得目的主机的IP地址后即可进行通信。
- 若本地域名服务器不能回答该请求,则此域名服务器就暂时成为DNS中的另一名客户,并向其他域名服务器发出查询请求。这种过程直至找到能够回答该请求的域名服务器为止。
- 因特网的域名结构
因特网采用了层次树状结构的命名方法,采用这种方法,任何一个连接在因特网上的主机或路由器,都有唯一的层次结构的名字,即域名。这里的“域(domain)”是名字空间中一个可被管理的划分。从语法上讲,每一个域名都是由标号(label) 序列组成,而各标号之间用点(.)隔开。
DNS规定,域名中的标号都有英文字母、数字和字符(-)构成。级别最低的域名写在最左,而级别最高的顶级域名写在最右边。有多个标号组成的完整域名总共不超过255个字符。
域名树可以清楚的表示因特网的域名系统,最上面的根没有名字,域名树的叶节点就是单台计算机的名字,不能再继续往下划分子域了, 如图1所示。
域名服务器
具体实现域名系统是使用分布在各地的域名服务器,一个服务器所管辖的(或有权限的)范围叫做区(zone)。各单位根据具体情况来划分自己管辖范围的区。但在一个区中的所有节点必须是能够连通的。每一个区设置相应的权限域名服务器(authoritative name server),用来保存该区中的所有主机的域名到IP地址的映射。总之,DNS服务器的管辖范围是以“区”为单位,而不是以“域”为单位,区是域的子集。
根据域名服务器所起的作用,可以分为以下四种类型:- 根域名服务器(root name server):最高层次的域名服务器,也是最重要的域名服务器。任何一个根域名服务器都知道所有的顶级域名服务器的域名和IP地址。在许多情况下,根域名服务器并不直接把待查询的域名直接转换成IP地址(根域名服务器也没有这种信息),而是告诉本地域名服务器下一步应当找哪一个顶级域名服务器进行查询。
- 顶级域名服务器(TLD服务器):负责管理在该顶级域名服务器注册的所有二级域名。当收到DNS查询请求时,就给出相应的回答,可能是最后结果,也可能是下一步应当找的域名服务器的IP地址。
- 权限域名服务器:这就是前面所说的负责一个区的域名服务器,当一个权限域名服务器还不能给出最后的查询回答时,就会告诉发出查询请求的DNS客户,下一步应当查找哪一个权限域名服务器。(如区abc.com和区y.abc.com各设有一个权限域名服务器)
- 本地域名服务器(local name server):当一个主机发出DNS查询请求时,这个查询请求报文就发给本地域名服务器,有时也称之为默认域名服务器。
以下简单的讨论域名解析的过程,需要注意两点:
a. 主机向本地域名服务器的查询一般都是采用递归查询(recursive query)。主机所询问的本地域名服务器不知道被查询域名的IP地址时,本地域名服务器就以DNS客户的身份向其他根域名服务器继续发送查询请求报文(即替该主机继续查询),而不是让该主机自己进行下一步的查询。因而,递归查询返回的查询结果要么是所要查询的IP地址,要么报错。
b. 本地域名服务器向根域名服务器的查询通常是采用迭代查询(iterative query)。当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的IP地址,要么告诉本地域名服务器下一步应当向哪一个域名服务器进行查询,然后让本地域名服务器进行后续的查询。逐步按照域树的路径向下走直到叶节点,得到了所要解析的域名的IP地址,然后把这个结果返回给发起查询的主机。当然本地域名服务器也可以采用递归查询,这取决于最初的查询请求报文的设置是要使用哪一种查询方式。
图2给出这两种查询的示例图:
为了提高DNS查询的效率,并减轻根域名服务器的负荷和减少因特网上的DNS查询报文数量,在域名服务器中广泛使用了高速缓存,高速缓存用来存放最近查询过的域名以及从何处获得域名映射信息的记录。假定在高速缓存中可以找到域名对应的IP地址,则本地域名服务器可以直接从高速缓存中取出上次查询的结果告诉用户。如果在缓存中没有找到域名对应的IP地址而是存放顶级域名服务器的IP地址,那么本地域名服务器也可以不向根域名服务器查询,而是直接向顶级域名服务器发送查询请求报文。
由于名字到地址的绑定并不经常改变,为保持高速缓存中的内容正确,域名服务器应该为每项内容设置计时器并处理超过合理时间的项。
不但在本地域名服务器中需要高速缓存,在主机中也很需要。许多主机在启动时从本地域名服务器下载名字和地址的全部数据库,维护存放自己最近使用的域名的高速缓存。
二、文件传送协议
- FTP概述
文件传输协议FTP(File Transfer Protocol)是因特网上使用最广泛的文件传送协议。FTP提供交互式的访问,允许客户指明文件的类型与格式(如指明是否使用ASCII码),并允许文件具有存取权限(如访问文件的用户必须经过授权,并输入有效的口令)。
FTP和TFTP分别基于TCP和UDP,这两种都是文件共享协议中的一大类,即复制整个文件,其特点是:若要存取一个文件,就必须先获得一个本地的文件副本,若要修改文件,只能对文件的副本进行修改,然后再将修改后的文件副本传回到原节点。
文件共享协议中的另一大类是联机访问(on-line access),多个程序可能同时对一个文件进行存取。例如网络文件系统NFS(Network File System)。 FTP的基本工作原理
在两个主机之间传送文件看似简单,实际上有很多问题:- 计算机存储数据的格式不同。
- 文件的目录结构和文件命名的规定不同。
- 对于相同的文件存取功能,操作系统使用的命令不同。
- 访问控制方法不同。
FTP使用TCP可靠的运输服务,FTP的主要功能是减少或消除在不同操作系统下处理文件的不兼容性。
FTP使用客户服