应用层概述
开发一种网络应用应该考虑哪些问题呢?
网络应用程序体系结构
开发一种新的网络应用首先要考虑的是网络应用程序在各种端系统上的组织方式和它们之间的关系,即网络应用程序体系结构。
1. 客户/服务器体系结构
在客户/服务器(Client/Server,C/S)体系结构中,包括一个总是运行着的服务器程序和许多有时运行的客户程序。特征:客户进程是服务请求方,服务器进程是服务提供方。另一个特征:服务器进程总是处于运行状态,并等待客户进程的服务请求。服务器进程具有固定端口号,运行服务器程序的主机也具有固定的IP地址。
基于C/S结构的应用服务通常是服务集中型的,即应用服务集中在网络中比客户计算机少得多的服务器计算机上。由于一台服务器计算机要为多个客户机提供服务,在C/S应用中,常用计算机群集(或服务器场)构建一个强大的虚拟服务器。
2. 对等体结构
在对等(Peer-to-Peer,P2P)体系结构中,没有固定的服务请求者和服务提供者,分布在网络中的应用程序是对等的,被称为对等方。对等方相互之间直接通信,每个对等方即是服务的请求者,又是服务的提供者。基于P2P的应用是服务分散型的,分散在大量对等方计算机中,这些计算机并不为服务提供商所有,而是个人控制的桌面计算机和笔记本电脑,通常位于住宅、校园和办公室。
最突出特性可扩缩性(scalability)。许多实际的网络应用组织成客户/服务器和P2P体系结构的混合体(hybrid)。
3.容易混淆的客户/服务器
客户/服务器有时指的是网络应用程序体系结构,有时指的是进程通信的模式。
进程间的通信,通信的一对进程中发起通信的进程也被称为客户/客户进程,而被动接受通信请求的进程也被称为服务器或服务器进程。
应用层协议
运输层提供了端到端的通信服务。但不同的网络应用其应用程序间要有不同通信规则,因此在运输层协议之上还要有应用层协议(application-layer protocol),其作用是定义运行在不同端系统上的应用进程间为实现特定应用而互相通信的规则。
应用层协议定义:
- 交换的报文类型,如请求报文和相应报文;
- 各种报文类型的语法,如报文中的各个字段及其详细描述;
- 字段的语义,即包含在字段中的信息的含义;
- 进程何时、如何发送报文及时对报文进行相应的规则。
选择运输层协议
运输层的两个主要的协议:TCP和UDP。TCP提供面向连接的可靠的字节流服务,并提供了流量控制和拥塞控制机制。而UDP提供的是无连接的不可靠报文传送服务,UDP没有流量控制和拥塞控制机制,是一种轻量级运输层协议。
应用 | 应用层协议 | 运输层协议 |
---|---|---|
电子邮件 | SMTP | TCP |
远程终端访问 | TELNET | TCP |
万维网 | HTTP | TCP |
文件传送 | FTP | TCP |
IP电话 | 专用协议 | 通常UDP |
流式多媒体通信 | 专用协议 | UDP或TCP |
域名系统DNS
域名系统(Domain Name System,DNS)并不是直接和用户打交道的网络应用,而是为其他各种网络应用提供一种核心服务,即名字服务,使各种网络应用能够在网络应用层使用计算机的名字来进行交互,而不需要直接使用IP地址。
1. 域名系统概述
在因特网上,两个位于不同主机上的应用进程要互相进行通信必须使用IP地址。因特网采用的是层次结构的命名树作为主机的名字,并使用分布式的域名系统。
因特网的域名系统DNS是一个联机分布式数据库系统,并采用客户/服务器模式。DNS使大多数名字都在本地解析,少量解析需要在因特网上通信,因此效率很高。域名到IP地址的转换是由若干个域名服务器程序完成的。这个过程叫做域名解析。域名服务器在专设主机上运行,而人们也常把运行该程序的主机称为域名服务器。
域名解析过程:
当某一个应用进程需要将主机名解析为IP地址时,该应用进程就称为域名系统DNS的一个客户,并把待解析的域名放在DNS请求报文中,以UDP(使用UDP为了减少开销)数据报方式发给本地域名服务器。本地域名服务器在查找域名后,把对应的IP地址放在回答报文中返回。应用进程获得目的主机IP地址后即可进行通信。若本地域名服务器不能回答该请求,则此域名服务器就暂时成为DNS中的另一个客户,并向其他域名服务器发出查询请求。这种过程直至找到能够回答该请求的域名服务器为止。
DNS还提供了一些服务:
- 主机别名 应用进程可以调用DNS来获得主机别名对应的规范主机名及主机IP地址。
- 负载分配 DNS允许用同一个主机名对应一个IP地址的集合。DNS服务器收到该主机名的解析请求时,随机或循环返回地址集合中的一个地址。
- 反向域名解析 应用将某个IP地址转换为域名。
2. 因特网的域名结构
域名采用层次树状结构命名方法,任何一个连接在因特网上的主机或路由器,都可以有一个唯一的层次结构的名字,即域名。“ 域 ” 是名字空间中一个可被管理的划分。域名只是一个逻辑概念。
…三级域名 . 二级域名 . 顶级域名
顶级域名(Top Level Domain,TLD)分为三大类。
(1)国家顶级域名 nTLD:如:cn表示中国,us表示美国,uk表示英国等。
(2)通用顶级域名gTLD:常见的通用顶级域名有7个,com(公司企业)、net(网络服务机构)、org(非营利性组织)、int(国际组织)、edu(美国教育机构)、gov(美国政府部门)、mil(美国军事部门)
(3)反向域arpa:用于反向域名解析,用于将IP地址反向解析为域名。
我国将二级域名划分为“ 类别域名 ”和“ 行政区域名 ”两类。
类别域名有7个,分别为:ac(科研机构)、com(工、商、金融等企业)、edu(教育机构)、gov(政府部门)、net(提供网络服务的机构)、mil(军事机构)、org(非营利性组织)。
行政区域名34个,使用于我国的各省、自治区、直辖市。如:bj北京市、sh上海市、js江苏省等。
3. 域名服务器
名字空间相关信息(最重要的就是域名和IP地址的映射关系)必须保存在计算机中,供所有其他应用查询。DNS的方法是将域名信息分布到叫做域名服务器的许多计算机上。DNS将整个名字空间划分为许多不想交的区(zone),每个区的域名信息由一个权威域名服务器(authoritative name server)负责管理。
原则上名字空间中的每一个域都可以对应一个区。区是域名服务器管辖范围的单位。
4. 域名解析的过程
注意两点:
- 主机向本地域名服务器的查询一般采用递归查询(recursive query)。递归查询就是如果本地域名服务器不知道被查询域名的IP地址时,那么本地域名服务器就以DNS客户的身份向某个根域名服务器继续发出查询请求报文。
- 本地域名服务器向根域名服务器查询时,优先采用迭代查询(iterative query)。迭代查询就是本地域名服务器进行循环查询。当根域名服务器收到查询请求报文但并不知道被查询域名的IP地址时,这个根域名服务器就把自己知道的顶级域名服务器的IP地址告诉本地域名服务器,让本地域名服务器再向顶级域名服务器查询。顶级域名服务器在收到本地域名服务器的查询请求后,就告诉本地域名服务器下一步向哪一个权威域名服务器进行查询。
注:递归查询对于被查询的域名服务器负担太大,通常从请求主机到本地域名服务器的查询是递归查询,其余的是迭代查询。
为了提高DNS查询效率,并减轻根域名服务器的负荷和减少因特网上的DNS查询报文数量,在域名服务器中广泛地使用了高速缓存(也称高速缓存域名服务器)。高速缓存用来存放最近查询过的域名以及从何处获得域名映射信息的记录。
DNS的查询请求和回答报文使用UDP数据报进行发送。
万维网WWW
万维网(World Wide Web,www),万维网是一个大规模的、联机式的信息储藏所,是运行在因特网上的一个分布式应用, 经常用Web来表示万维网。万维网利用网页之间的超链接将不同网站的网页链接成一张 逻辑上的信息网。
万维网是以一个分布式的超媒体(hypermedia)系统,它是超文本(hypertext)系统的扩充。超文本就是带有链接的文本。
万维网要解决的几个问题。
(1)怎样标志分布在整个因特网上的万维网文档?
万维网使用统一资源定位符(Uniform Resource Locator,URL)来标志万维网上的各种文档,使得每一个文档在整个因特网的范围内具有唯一的标识符URL。
(2)用什么样的协议来实现浏览器和万维网服务器间的文档请求和响应?
超文本传输协议(HyperText Transfer Protocol,HTTP)。HTTP是一个应用层协议,他使用TCP连接进行可靠的传输。
(3)如何在万维网文档中写入超链接?怎样使不同作者创作的不同风格的万维网文档都能在因特网上的各种主机上显示出来?
万维网使用的是超文本标记语言(HyperText Markup Language,HTML),使得因特网页面的制作者可以很方便地用超链接从本页面的某处链接到因特网上的任何一个万维网页面,并且制作出来页面能够在任何浏览器的窗口中显示。
(4)怎样使用户能够很方便地找到所需的信息?
搜索工具或搜索引擎(search engine)。
统一资源定位符URL
1. url的格式
URL本质上就是一种应用层地址。URL相当于一个文件名在网络范围的扩展。
URL的一般形式:<协议>://<主机>:<端口>/<路径>。
协议指访问该资源的协议。常用的有http、ftp。: //是固定格式。主机指资源所在主机的域名或IP地址。端口和路径是访问资源的协议的端口号和资源在主机上的详细路径。
2.使用HTTP的URL
HTTP的URL一般形式:http://<主机>:<端口>/<路径>。HTTP的默认端口号是80,也可指定其他端口,通常也可省略。
3. 超文本传输协议HTTP
HTTP协议定义了浏览器怎样向万维网服务器请求万维网文档,以及万维网服务器怎样把万维网文档传送个浏览器?
每个万维网网站都有一个服务器进程,它不断监听TCP的端口80,以便发现是否有浏览器向它发出连接建立请求。
用户单击链接所发生的几个事件:
URL:https://www.tsinghua.edu.cn/publish/newthu/newthu_cnt/faculties/index.html
(1)浏览器分析链接指向页面的URL;
(2)浏览器向DNS请求解析www.tsinghua.edu.cn的IP地址;
(3)域名系统DNS解析出清华大学服务器的IP地址为166.111.4.100;
(4)浏览器与服务器建立TCP连接(服务器端IP地址166.111.4.100,端口是80);
(5)浏览器发出取文件命令:GET/publish/newthu/newthu_cnt/faculties/index.html;
(6)服务器www.tsinghua.eud.cn给出响应,把文件index.html发送给浏览器;
(7)释放TCP连接;
(8)浏览器显示“ 清华大学院系设置 ”文件index.html中的内容。
HTTP是一个无状态协议,也就是说,HTTP不要求服务器保留客户的任何状态信息。同一个客户上一次对服务器的访问不会影响其对该服务器的下一次访问结果,因为服务器不记得曾经访问过的这个用户。HTTP的无状态特性简化了服务器的设计,使服务器更容易支持大量并发的HTTP请求。
HTTP/1.0协议采用的非持续连接方式,即一次请求/响应对应一个TCP连接。每次浏览器请求一个文件都要与服务器建立TCP连接,当收到响应后就立即关闭连接。
HTTP/1.0主要缺点是每请求一个文档就要有两倍的RTT的开销。为了减少时延,浏览器通常建立多个并行的TCP连接同时请求多个对象。但是,每次建立新的TCP连接都要分配缓存和变量并初始化各种状态,在关闭连接时又要释放各种资源,这样万维网服务器往往要同时服务于大量客户的请求,这样会使万维网服务器的负担很重。
HTTP/1.1协议使用持续连接,较好解决了这个问题。持续连接就是万维网服务器在发送响应后仍然保持这条连接,使同一个客户(浏览器)和服务器可以继续在这条连接上传送后续的HTTP请求报文和响应报文。只要这些文档都在同一个服务器上就行。
HTTP/1.1协议的持续连接还可以使用流水线方式工作,即浏览器在收到HTTP的响应报文之前就能够持续发送多个请求报文。使得TCP连接中的空闲时间减少,提高了下载文档的效率。
HTTP报文结构
HTTP有两类报文:
(1)请求报文—从客户向服务器发送请求报文,
(2)响应报文—从服务器到客户的回答。
HTTP是面向文本的。
(1)请求行 / 状态行 用于区分是请求报文还是响应报文。“ CR ” 和 “ LF ” 分别代表“ 回车 ” 和 “ 换行 ”。
(2)首部行 说明浏览器、服务器或报文主体的一些信息。
(3)实体主体 在请求报文中一般都不用这个字段,而在响应报文段中通常就是返回给客户的文档,但也肯呢个没有这个字段。
在服务器上记录用户信息:Cookie
对无状态的HTTP进行状态化的技术中有一种被称为Cookie,Cookie提供了一种机制使得万维网服务器能够“ 记住 ”用户,无需用户主动提供用户表示信息。
对于提前选购的商品加入购物车后,在服务器后端数据库中能以该Cookie识别码为索引维护用户的“ 购物车 ”记录。由于Cookie是保存在浏览器文件和服务器的数据库中,如果几天后再次用这个浏览器访问该网站,服务器仍然能识别该用户。
万维网缓存与代理服务器
在万维网中可以使用缓存机制提高万维网的性能。万维网缓存又称为Web缓存(Web cache)可位于客户机,也可位于中间系统上,位于中间系统上的Web缓存又称为代理服务器(proxy server)。Web缓存把最近的一些请求和响应暂存在本地磁盘中,再次访问同一资源,不需要按URL的地址再去因特网访问资源。