跳转至

6 应用层

6.1 应用层概述

回忆一下前四层都在干什么

应用层是计算机网络体系结构的最顶层,是设计和建立计算机网络的最终目的,也是计算机网络中发展最快的部分。

  • 早期基于文本的应用(电子邮件、远程登录、文件传输、新闻组)
  • 20世纪90年代将因特网带入千家万户的万维网WWW
  • 当今流行的即时通信、P2P文件共享及各种音视频应用

6.2 客户/服务器方式和对等方式

网络应用通常运行在不同设备上,这些设备通过通信来一起完成任务。开发新的网络应用时,首先要考虑的是这些设备之间怎么组织和协作。

目前主要有两种方式:

  • 一种是客户/服务器(C/S)方式,也就是客户端向服务器请求服务,服务器提供资源或处理请求;
  • 另一种是对等(P2P)方式,也就是每个设备既是客户端又是服务器,可以互相提供服务,彼此平等协作。

6.2.1 客户/服务器(C/S)方式

客户和服务器是指通信中所涉及的两个应用进程,客户是服务请求方,服务器是服务提供方。服务器总是处于运行状态,并等待客户的服务请求。

服务器具有固定端口号(例如HTTP服务器的默认端口号为80),而运行服务器的主机也具有固定的IP地址。

C/S方式是因特网上传统的、同时也是最成熟的方式,很多我们熟悉的网络应用采用的都是C/S方式。包括万维网WWW、电子邮件、文件传输FTP等。

基于C/S方式的应用服务通常是服务集中型的,即应用服务集中在网络中比客户计算机少得多的服务器计算机上。由于一台服务器计算机要为多个客户机提供服务,在C/S应用中,常会出现服务器计算机跟不上众多客户机请求的情况。

6.2.2 对等方式 (P2P)

在P2P方式中,没有固定的服务请求者和服务提供者,分布在网络边缘各端系统中的应用进程是对等的,被称为对等方。对等方相互之间直接通信,每个对等方既是服务的请求者,又是服务的提供者。

基于P2P的应用是服务分散型的,因为服务不是集中在少数几个服务器计算机中,而是分散在大量对等计算机中,这些计算机并不为服务提供商所有,而是为个人控制的桌面计算机和笔记本电脑,它们通常位于住宅、校园和办公室中。

P2P 的优势有

  • P2P方式的最突出特性之一就是它的可扩展性。因为系统每增加一个对等方,不仅增加的是服务的请求者,同时也增加了服务的提供者,系统性能不会因规模的增大而降低。
  • P2P方式具有成本上的优势,因为它通常不需要庞大的服务器设置和服务器带宽。为了降低成本,服务提供商对于将P2P方式用于应用的兴趣越来越大。

6.3 动态主机配置协议

对于一台主机来说,应该如何配置才能使其能够正常访问 Web 服务器呢?

如果我们对其进行手工配置的话,工作量大并且容易出错,所以我们引入了 DHCP 服务器来为局域网中的各个主机配置以下参数

  • IP 地址
  • 子网掩码
  • 默认网关
  • DNS 服务器

动态主机配置协议DHCP可为计算机自动配置网络参数,使得计算机“即插即联网”(Plug-and-Play Networking)。

当DHCP客户端启动并需要获取IP地址时,它会向网络中广播一个DISCOVER报文(源端口UDP 68,目的端口UDP 67),请求可用的IP地址。

此时,网络中的多个DHCP服务器(如DHCP服务器1和DHCP服务器2)均可能响应,各自发送OFFER报文,提供可租用的IP地址及相关配置信息。客户端收到多个OFFER后,会选择其中一个(通常为最先收到或优先级更高的),并发送REQUEST报文以确认接受该地址。被选中的DHCP服务器则回复ACK报文,正式分配IP地址。

若客户端在租期过半(0.5倍租期)时未收到续租确认,将自动尝试续租;若在租期的87.5%(0.875倍租期)仍未成功,则重新发送DISCOVER报文寻找新的服务器。此外,若原服务器无法继续提供服务(如不响应或返回NACK),客户端需立即停止使用当前IP,并重新发起DHCP发现过程。

用户也可手动发送 RELEASE 报文主动归还IP地址。

现在又有一个问题就是网络中可能有多个子网,DHCP 可能只在一个子网中。如果只按照上述操作配置的话,由于广播发送 DISCOVER 会被路由器丢弃,那么其他子网就不能够自动获取相应的网络参数了。

于是可以给该路由器配置DHCP服务器的IP地址并使之成为DHCP中继代理

6.4 域名系统

当用户在浏览器中输入域名(如 cnnic.cn)时,计算机首先会在本地DNS缓存中查找该域名对应的IP地址。如果未找到(如图中所示“未找到!”),则会向配置的DNS服务器发送查询请求,询问“cnnic.cn 对应的IP地址是什么?”。DNS服务器接收到请求后,会在其维护的域名数据库中进行查找,发现 cnnic.cn 对应的IP地址为 159.226.6.133,并将该结果返回给用户主机。用户主机获得IP地址后,即可与目标Web服务器建立连接并访问网站。

那么因特网是否可以只使用一台 DNS 服务器呢?这样的域名服务器肯定会因为超负荷而无法正常工作,而且一旦域名服务器出现故障,整个因特网就会瘫痪。

1983年,因特网就开始采用层次结构的命名树作为主机的名字(即域名),并使用分布式的域名系统DNS。DNS使大多数域名都在本地解析,仅少量解析需要在因特网上通信,因此系统效率很高。

6.4.1 因特网的域名结构

因特网采用层次树状结构的域名结构。域名的结构由若干个分量组成,各分量之间用“点”隔开,分别代表不同级别的域名。

  • 每一级的域名都由英文字母和数字组成,不超过63个字符,不区分大小写字母。
  • 级别最低的域名写在最左边,而级别最高的顶级域名写在最右边。

域名系统既不规定一个域名需要包含多少个下级域名,也不规定每一级的域名代表什么意思。

各级域名由其上一级的域名管理机构管理,而最高的顶级域名则由因特网名称与数字地址分配机构ICANN进行管理。

Example

nic.hnust.edu.cn 中 nic 为四级域名,hnust为三级域名,edu为二级域名,cn为顶级域名

Note

6.4.2 因特网上的域名服务器

DNS使用分布在各地的域名服务器来实现域名到IP地址的转换。


根域名服务器是最高层次的域名服务器。每个根域名服务器都知道所有的顶级域名服务器的域名及其IP地址。

尽管我们将这13个根域名服务器中的每一个都视为单个的服务器,但“每台服务器”实际上是由许多分布在世界各地的计算机构成的服务器群集

  • 当本地域名服务器向根域名服务器发出查询请求时,路由器就把查询请求报文转发到离这个DNS客户最近的一个根域名服务器。
  • 这就加快了DNS的查询过程,同时也更合理地利用了因特网的资源。根域名服务器通常并不直接对域名进行解析,而是返回该域名所属顶级域名的顶级域名服务器的IP地址

顶级域名服务器负责管理在该顶级域名服务器注册的所有二级域名。

当收到DNS查询请求时就给出相应的回答,可能是最后的结果,也可能是下一级权限域名服务器的IP地址。


权限域名服务器负责管理某个区的域名。每一个主机的域名都必须在某个权限域名服务器处注册登记。因此权限域名服务器知道其管辖的域名与IP地址的映射关系。

另外,权限域名服务器还知道其下级域名服务器的地址。


本地域名服务器不属于上述的域名服务器的等级结构。

当一个主机发出DNS请求报文时,这个报文就首先被送往该主机的本地域名服务器。本地域名服务器起着代理的作用,会将该报文转发到上述的域名服务器的等级结构中。

每一个因特网服务提供者ISP,一个大学,甚至一个大学里的学院,都可以拥有一个本地域名服务器,它有时也称为默认域名服务器。

本地域名服务器离用户较近,一般不超过几个路由器的距离,也有可能就在同一个局域网中。本地域名服务器的IP地址需要直接配置在需要域名解析的主机中。

6.4.3 因特网的域名解析过程

当主机 m.xyz.com 想要获取域名 y.abc.com 的IP地址时,会向其配置的本地域名服务器 dns.xyz.com 发起递归查询请求(步骤①)。本地域名服务器收到请求后,若自身缓存中无该记录,则会代替客户端向更高层级的域名服务器进行逐级查询。

为了提高DNS的查询效率,并减轻根域名服务器的负荷和减少因特网上的DNS查询报文数量,在域名服务器中广泛地使用了高速缓存。高速缓存用来存放最近查询过的域名以及从何处获得域名映射信息的记录。

不但在本地域名服务器中需要高速缓存,在用户主机中也很需要。许多用户主机在启动时从本地域名服务器下载域名和IP地址的全部数据库,维护存放自己最近使用的域名的高速缓存,并且只在从缓存中找不到域名时才向域名服务器查询。同理,主机也需要保持高速缓存中内容的正确性。

首先,它向根域名服务器发起递归查询(步骤②),根域名服务器返回负责 .com 顶级域的顶级域名服务器(如 dns.com)的地址(步骤③)。接着,本地域名服务器向该顶级域名服务器查询(步骤④),后者返回负责 abc.com 域的权威域名服务器(如 dns.abc.com)的地址(步骤⑤)。然后,本地域名服务器再向该权威服务器查询 y.abc.com 的IP地址(步骤⑥),最终获得结果并返回给主机(步骤⑦)。

但是这样递归查询有一个问题,就是在高流量下的根服务器或顶级域名服务器将不堪重负,严重影响性能和稳定性。所以通常采用以下模式来进行查询

  • 从请求主机到本地域名服务器的查询是递归查询
  • 而其余的查询是迭代查询。

6.5 文件传送协议

将某台计算机中的文件通过网络传送到可能相距很远的另一台计算机中,是一项基本的网络应用,即文件传送。

文件传送协议(File Transfer Protocol,FTP)是因特网上使用得最广泛的文件传送协议。

  • FTP提供交互式的访问,允许客户指明文件的类型与格式(如指明是否使用ASCII码),并允许文件具有存取权限(如访问文件的用户必须经过授权,并输入有效的口令)。

下图是 FTP 的基本工作原理

  • 主动模式:当需要传输数据时,FTP客户通过控制通道告知服务器自己的另一个临时端口号,服务器主动从其熟知端口20发起TCP连接到客户端指定的端口,建立数据通道。这种方式要求客户端允许服务器的入站连接,可能被防火墙阻拦。
  • 被动模式:当需要传输数据时,FTP客户通过控制通道通知服务器开启一个临时端口并进入监听状态,然后由客户端主动连接该端口以建立数据通道。这种方式中,所有连接均由客户端发起,适用于客户端位于防火墙后或NAT环境下的场景。

默认情况下,FTP使用TCP 21端口进行控制连接,TCP 20端口进行数据连接。 但是,是否使用TCP 20端口建立数据连接与传输模式有关,主动方式使用TCP 20端口,被动方式由服务器和客户端自行协商决定。

6.6 电子邮件

电子邮件系统采用客户/服务器方式。

电子邮件系统的三个主要组成构件:用户代理,邮件服务器,以及电子邮件所需的协议。

  • 用户代理是用户与电子邮件系统的接口,又称为电子邮件客户端软件。
  • 邮件服务器是电子邮件系统的基础设施。因特网上所有的因特网服务提供者ISP都有邮件服务器,其功能是发送和接收邮件,同时还要负责维护用户的邮箱。
  • 协议包括邮件发送协议(例如SMTP)和邮件读取协议(例如POP3,IMAP)。

SMTP协议只能传送ASCII码文本数据,不能传送可执行文件或其他的二进制对象。

为解决SMTP传送非ASCII码文本的问题,提出了多用途因特网邮件扩展 (Multipurpose Internet Mail Extensions,MIME)。

通过浏览器登录(提供用户名和口令)邮件服务器万维网网站就可以撰写、收发、阅读和管理电子邮件。这种工作模式与IMAP很类似,不同的是用户计算机无需安装专门的用户代理程序,只需要使用通用的万维网浏览器。

6.7 万维网

6.7.1 万维网概述

万维网(World Wide Web,WWW)并非某种特殊的计算机网络。它是一个大规模的、联机式的信息储藏所,是运行在因特网上的一个分布式应用。

万维网利用网页之间的超链接将不同网站的网页链接成一张逻辑上的信息网。

为了方便地访问在世界范围的文档,万维网使用统一资源定位符URL来指明因特网上任何种类“资源”的位置。

URL的一般形式由以下四个部分组成:<协议>://<主机>:<端口>/<路径>

万维网文档主要由三种核心技术构成:HTML、CSS 和 JavaScript。

  • HTML(超文本标记语言) 使用各种标签来定义网页的结构和内容,是网页的基础骨架;
  • CSS(层叠样式表) 用于从视觉和美学角度控制网页的样式,如字体、颜色、布局等,实现页面的美化与排版;
  • JavaScript 是一种脚本语言(与Java无关),用于控制网页的交互行为,如响应用户操作、动态更新内容等。三者协同工作,共同构建出结构清晰、样式美观、功能丰富的现代网页。

6.7.2 HTTP 协议

超文本传输协议 HTTP 定义了浏览器(即万维网客户进程)怎样向万维网服务器请求万维网文档,以及万维网服务器怎样把万维网文档传送给浏览器。

HTTP/1.0采用非持续连接方式。在该方式下,每次浏览器要请求一个文件都要与服务器建立TCP连接,当收到响应后就立即关闭连接。

  • 每请求一个文档就要有两倍的RTT的开销。若一个网页上有很多引用对象(例如图片等),那么请求每一个对象都需要花费2RTT的时间。
  • 为了减小时延,浏览器通常会建立多个并行的TCP连接同时请求多个对象。但是,这会大量占用万维网服务器的资源,特别是万维网服务器往往要同时服务于大量客户的请求,这会使其负担很重。

HTTP/1.1采用持续连接方式。在该方式下,万维网服务器在发送响应后仍然保持这条连接,使同一个客户(浏览器)和该服务器可以继续在这条连接上传送后续的HTTP请求报文和响应报文

  • 为了进一步提高效率,HTTP/1.1的持续连接还可以使用流水线方式工作,即浏览器在收到HTTP的响应报文之前就能够连续发送多个请求报文。这样的一个接一个的请求报文到达服务器后,服务器就发回一个接一个的响应报文。

HTTP 报文格式

常见的请求报文:

GET /index.htm HTTP/1.1 Host: www.hnust.cn Connection: close User-Agent: Mozilla/5.0 Accept-Language: cn

响应报文中常见的状态行

HTTP/1.1 202 Accepted 接受请求

HTTP/1.1 400 Bad Request 错误的请求

HTTP/1.1 404 Not Found 找不到页面

6.7.3 Cookies

早期的万维网应用非常简单,仅仅是用户查看存放在不同服务器上的各种静态的文档。因此HTTP被设计为一种无状态的协议。这样可以简化服务器的设计。

现在,用户可以通过万维网进行各种复杂的应用,如网上购物、电子商务等。这些应用往往需要万维网服务器能够识别用户。

Cookie提供了一种机制使得万维网服务器能够“记住”用户,而无需用户主动提供用户标识信息。也就是说,Cookie是一种对无状态的HTTP进行状态化的技术

6.7.4 万维网缓存与代理服务器

在万维网中,可通过缓存机制(又称Web缓存或代理服务器)来提高访问效率。Web缓存可以部署在客户端或中间系统上,位于中间系统的缓存通常称为代理服务器(Proxy Server)。

Web缓存把最近的一些请求和响应暂存在本地磁盘中。当新请求到达时,若发现这个请求与暂时存放的请求相同,就返回暂存的响应,而不需要按URL的地址再次去因特网访问该资源。

如果暂存的请求未过期,则直接相应

如果过期了,就要再去因特网中访问该资源了

Review

Answer

D, 一个主机可以通过两块网卡连接到两个网络,其就有两个 IP 地址了,显然这两个 IP 可以映射到同一个域名上。此外,多台主机也可以映射到同一个域名上(负载均衡)一台主机可以映射到多个域名上

Answer

A

Answer

这个题目比较综合,首先需要进行域名解析,有可能 www.abc.com 就在本地有相应的缓存,那么不需要到 Internet 上访问各种域名服务器,最坏的情况就是首先主机向本地域名服务器发出 DNS 请求,然后本地域名服务器向 Internet 依次迭代查询根域名服务器,com 顶级域名服务器,abc.com 域名服务器,需要 30ms

现在我们得到了 www.abc.com 的 IP 地址,于是建立 TCP 连接,需要 1.5 RTT,然后第三次携带这 index.html 请求过去,发回来相应的数据需要 0.5 RTT。所以答案选 D

Answer

C,这个问题结合域名系统以及 http/1.1相关的内容,找到对应的 IP 需要 4RTT,建立连接1个 RTT, 请求 http 页面需要 1 RTT,请求图片一个 RTT

注意 http/1.0 与 http/1.1 中持续与非持续连接的区分,以及 http/1.1 中流水线和非流水线请求之间的区分

Answer

这个题目非常考验逻辑,源端口是 80,说明是 Web 服务器发出的 http 响应分组。若该 http 请求是从外网来的,那么 NAT 表中肯定有这个表项。那么说明这个请求是从内网来的,那么这个分组应该要发给内网的,所以路由器不转发,直接丢弃

Answer

D, 这里是不支持并行连接,非持久的情况。TCP 建立连接需要一个 RTT,然后请求 Web 页需要一个 RTT。然后注意每一张图片都需要独自建立 TCP 连接,然后再请求图片,需要两个 RTT。2+ 7*2 = 16 个 RTT

评论区

对你有帮助的话请给我个赞和 star => GitHub stars
欢迎跟我探讨!!!