- 应用层组成
- 网络应用程序体系结构
- 网络应用与对应的应用层协议
应用层的组成
应用层由网络应用和应用层协议组成。
网络应用是计算机网络存在的理由,它提供了各种各样的服务,满足了不同的需求,如web应用能让人们获取到想了解的信息,网络邮箱能收发电子邮件,DNS服务能查询域名对应的IP地址等等。
应用层协议实现了网络应用之间的通讯,应用之间的通讯则是通过收发报文的方式实现的,不同的网络应用之间有不同的需求,所以报文格式和报文响应模式也不尽相同,就有了不同的网络层协议。
网络应用程序体系结构
现代网络应用程序中存在着两种主流的体系结构:
- 客户-服务器。存在两类主机对象,一类为客户端,是资源的索取者,一类是服务器端,是资源的提供者。一般客户会主动”拉取”服务器资源,后者为被动方;在应用程序中,客户之间的通讯是通过服务器端完成的。
- P2P。在P2P中主机既可以拉取数据,又可以数据,主机间可以直接通信,因为这种通信不必通过专用服务器,这些主机对又被称为对等方,该体系结构被称为对等方到对等方。
网络应用与对应的应用层协议
要了解应用层协议,我们需要了解的以下定义:
- 报文类型,例如请求报文或响应报文。
- 报文内容,该报文中包含了哪些字段。
- 字段含义,作用。
- 报文交互规则。
Web和HTTP协议
Web使用了客户-服务器体系结构,Web浏览器作为客户端,Web服务器则作为服务端。
HTTP交互方式
当用户需要访问特定网站获取信息时,他需要在浏览器键入网址,来获取网站界面,这时客户机和服务器经历了以下流程:
- 建立TCP连接
- 发起资源请求
- 服务器响应资源请求
- 客户机收到响应,将响应结果呈现给客户

上面过程基本上涵盖了Web应用中的报文交互方式,即需要建立连接才能请求资源(根本原因是传输层使用了TCP协议),而建立连接后,客户和服务器只用基于资源进行请求和应答即可,直至连接断开。
HTTP报文格式
HTTP请求报文格式
HTTP请求报文和响应报文的格式类似,但是内容不尽相同。
Http请求报文由三部分组成:请求行,首部行和实体体。
注:sp表示空格符,cr表示回车符,lf表示换行符。


HTTP响应报文格式
HTTP响应报文由三部分组成:状态行、首部行和实体体。


DNS:因特网目录服务
因为IP地址不方便记忆,所以域名网址更受一般人青睐,而DNS就提供了域名到IP的地址转换服务。
DNS有两层含义:
- 一个由分层的DNS服务器实现的分布式数据库
- 一个使得主机能够查询分布式数据库的应用层协议
分布式、层次数据库
按层次划分,有三类DNS服务器,分别是:

- 根DNS服务器。根服务器提供顶级域DNS服务器的IP地址。
- 顶级域DNS服务器。顶级域DNS服务器提供权威DNS服务器的IP地址
- 权威DNS服务器。权威DNS服务器提供DNS记录,DNS记录存储了域名和IP的映射
除了上面三类服务器外,还有另一类DNS服务器,称为本地DNS服务器,严格来说,一个本地DNS服务器并不属于该服务器的层次结构,但它对DNS层次结构是至关重要的。每一个ISP都有一个本地DNS服务器,主机可以通过DHCP获取到本地DNS服务器的IP地址,之后主机会向本地DNS服务器发送DNS请求,本地DNS服务器会作为主机的代理,来访问具有层次结构的DNS服务器,获取域名对应的IP地址,并返回给主机,详细交互方式见下节。
DNS交互方式

当主机想要访问www.miaosha.jd.com域名时,需要知道域名对应的IP地址,此时会向本地DNS服务器发送DNS请求;本地DNS服务器收到DNS请求后,会代理主机进行DNS的查询工作,首先它会查询缓存中是否有对应的域名映射,如果有则返回对应IP,如果没有则向根DNS服务器发送请求,根DNS服务器会返回com顶级域DNS服务器的IP地址列表,本地服务器会选择其中一个发送请求,顶级域DNS服务器会返回jd.com权威DNS服务器的IP地址列表,本地服务器会选择其中一个发送请求,权威DNS服务器会返回miaosha.jd.com域名对应的IP地址,并将其缓存;本地DNS服务器用miaosha.jd.com域名对应的IP地址响应请求主机。
DNS报文格式
资源记录
DNS报文应答内容围绕资源记录展开,资源记录提供了主机到IP地址的映射;每个DNS回答报文包含了一条或多条资源记录。
资源记录是一个包含了下列字段的4元组,通过字段语义基本能猜个大概,就不具体细说了。
(Name, Value, Type, TTL)
报文格式
DNS只有查询报文和回答报文,且具有相同的报文格式,如下图所示。

P2P文件分发
这节我们将主要了解P2P体系的存在理由,而不具体讲解协议和应用。
当服务器要把文件发送给对应用户时,我们将客户-服务器体系和P2P体系进行对比。

假如服务器只需要给一个主机发送文件,则客户-服务器体系和P2P体系没有太大区别。
但是如果有大量主机,效率就很低了。假设这时有N台主机,文件大小为M,都向服务器发送了请求。如果采用客户-服务器模式,服务器需要向N台主机发送同一份文件,且在发送完N份文件之前,此项任务将始终占用服务器的上载主链路的带宽,总共吃掉N*M大小的流量;如果采用P2P体系,则服务器只用将完整的文件分块发送给不同的主机,作为对等方的主机之间会互相请求、推送补全完整的文件信息,理想状态下服务器占用主链路的流量只有M,这很好的减小了服务器的负载。另一方面,主机可以从数个较近的对等方获取文件碎片,而不需要在服务器繁忙时挤占服务器和主机间的链路带宽,从而也太高了主机的下载速率。

综上,P2P对于大文件下载来说的确是个很好的体系结构。在此我们提及流行的P2P协议–BitTorrent,因为你可能会在下载文件时看到它,这有助于你回忆起这一章的内容。
发表回复