6.1 应用层概述
应用层是通过应用进程的交互来实现特定网络应用的问题,例如万维网WWW、域名系统DNS、动态主机配置DHCP、电子邮件、文件传送FTP和P2P文件共享、多媒体网络应用等。
6.2 客户/服务器方式和对等方式
网络应用程序运行在处于网络边缘的不同的端系统上,通过彼此间的通信来共同完成某项任务,因此开发一种新的网络应用首先要考虑的问题就是网络应用程序在各种端系统上的组织方式和它们之间的关系。
6.2.1 客户服务器(Client/Server C/S)方式
- 客户和服务器是指通信中所涉及的两个应用进程。
- 客户/服务器方式所描述的是进程之间服务和被服务的关系。
- 客户是服务请求方,服务器是服务提供方。
- 服务器总是处于运行状态,并等待客户的服务请求,服务器具有固定端口号,而运行服务器的主机也有固定的IP地址。
基于C/S方式的应用服务通常是服务集中型的,即应用服务集中在网络中比客户计算机少得多的服务器计算机上。
- 由于一台服务器计算机要为多个客户机提供服务,在C/S应用中,常会出现服务器计算机跟不上众多客户机请求的情况。
- 为此,在C/S应用中,常用计算机群集构建一个强大的虚拟服务器。
6.2.2 对等(Peer-to-Peer P2P)方式
没有固定的服务请求者和服务提供者,分布在网络边缘各端系统中的应用进程是对等的,被称为对等方。对等方相互之间直接通信,每个对等方既是服务的请求者,又是服务的提供者。
基于P2P的应用是服务分散型的,服务不集中在少数几个服务器计算机中,而是分散在大量对等计算机中。
P2P方式的最突出特性之一就是它的可拓展性,因为系统没增加一个对等方,不仅增加的是服务的请求者,同时也增加了服务的提供者,系统性能不会因规模的增大而降低。
还具有成本上的优势,因为通常不需要庞大的服务器设施和服务器带宽。
6.3 动态主机配置协议 DHCP
DHCP提供了一种即插即用连网,允许一台计算机加入新网络时可自动获取IP地址等网络配置信息而不用手工配置。
DHCP报文在运输层使用UDP协议封装:
- DHCP客户使用的UDP端口为68
- DHCP服务器使用的端口为67
6.3.1 工作过程
1.寻找DHCP服务器(Discover)
主机没有 IP 地址,因此通过广播发送 DHCP 发现(DHCP Discover)报文。 报文中包含:事务ID、客户端MAC地址等
DHCP 服务器收到后,根据客户端 MAC 地址来查询自己的数据库:
- 有记录:则使用这些配置信息来构建配置
- 无记录 :使用默认配置
并准备返回一个可租用的 IP 地址
2.提供IP地址租用(Offer)
DHCP 服务器广播发送 **DHCP 提供(DHCP Offer)报文,**包含:IP 地址、子网掩码、网关、DNS、租期等,广播的原因是此时主机目前还没有配置IP地址。
客户端可能会收到多个提供报文。
3.请求IP地址(Request)
客户端选择收到的第一个 Offer ,向提供该租约的服务器广播发送 DHCP 请求(DHCP Request)报文,表示接受该服务器的租约。
报文包含:事务ID、客户端的MAC地址、接收的租约中的IP地址、提供该租约的DHCP服务器的IP地址。
4.服务器确认(Acknowledge)
被选中的 DHCP 服务器返回 DHCP 确认(DHCP ACK)。
客户端收到后正式使用该 IP,配置完成。
5.地址续约
当租用期过了一半时,客户端向 DHCP 服务器发送 DHCP Request 请求续租:
- 若服务器同意,返回 DHCP ACK,续租成功
- 若不同意,返回 DHCP NAK,客户端必须停止使用旧 IP
- 若无响应,在 85% 租期时再次尝试续租;若仍无响应,租期结束后必须放弃 IP 并重新申请
6.释放地址
客户端主动停止使用该 IP 时,可向服务器发送 DHCP Release,释放租约。
6.4 域名系统DNS
域名系统用于进行域名和IP地址的映射。
DNS系统 使用分布式的多层服务器结构来实现 域名 到 IP 地址 的映射:
- 根域名服务器:最高级别的服务器,不直接给出最终解析结果,高速下一步访问哪个服务器
- 顶级域名服务器:负责管理在该顶级域名服务器注册的所有二级域名
- 权威域名服务器:管理某个区的域名
- 本地域名服务器:也叫做默认域名服务器,负责代表客户端执行整个域名解析过程
6.4.1 域名解析的过程
1.递归查询
- 主机 → 本地域名服务器 → 根域名服务器 → 顶级域名服务器 → 权限域名服务器
- 当查询到域名对应的IP地址后,查询结果会在之前受委托的服务器中传递,传回主机

2.迭代查询
- 由本地DNS服务器对各级DNS服务器发起。
- 特点:DNS 服务器只告诉你"我知道" 或 "我不知道,但你可以问谁"。
- 例如本地 DNS 向根 DNS 询问,根 DNS 告诉本地 DNS 下一次应查询顶级 DNS。
由于递归查询对被查询对域名服务器负担太大,通常采用 :主机到本地域名服务器时递归查询,其余的都是迭代查询

为了提供DNS的查询速率,广泛使用高速缓存,存储最近查询过的域名以及从何处获得域名映射信息的记录。
由于域名到IP地址的映射关系不是永久不变,为了保持高速缓存中的内容正确,域名服务器为每项设置计时器并删除超过合理时间的项。
不仅在本地域名服务器中需要高速缓存,在用户主机中也很需要。许多主机在启动时从本地域名服务器下载域名和IP地址的全部数据库,维护最近使用的域名的高度缓存,并且只在从缓存中找不到域名时才向域名服务器查询。同理,主机中也需要保持高速缓存中内容的正确性。
6.6 万维网WWW
万维网并非某种特殊的计算机网络 ,它是一个大规模的、联机式的信息储藏所,是运行在因特网上的一个分布式应用。
万维网利用网页之间的超链接将不同网站的网页链接成一张逻辑上的信息网。
为了方便地访问在世界范围的文档,万维网使用统一资源定位符URL来指明因特网上任何种类"资源"的位置。
URL的一般形式由以下四个部分组成:<协议>://<主机>:<端口>/<路径>
6.6.1 超文本传输协议HTTP
HTTP报文格式
HTTP是面向文本的,其报文中的每一个字段都是一些ASCII码串


Cookie
HTTP被设计为一种无状态的协议,Cookie提供一种机制使得万维网能够"记住"用户,是对无状态的HTTP进行状态化的技术。

万维网缓存和代理服务器
在万维网中的缓存机制称为Web缓存,可位于客户机,也可位于中间系统上,位于中间系统上的Web缓存又称为代理服务器。
Web缓存把最近的一些请求和响应暂存在本地磁盘中。当新请求到达时,若发现这个请求于暂时存放的请求相同,就返回暂存的响应,而不需要按URL的地址再次去因特网访问该资源。
如果Web缓存命中率高,则会大大减少R1 与R2这条链路的通信量,减少访问因特网的时延。


原始服务器在响应中会带有两个重要信息(缓存服务器依靠其判断本地缓存是否还能用):
- Last---Modified:对象最后的修改时间
- Expires:对象的有效期
缓存访问过程
1.主机向代理服务器请求对象
2.代理检查缓存是否过期
- 未过期**→** 直接返回给主机
- 过期:代理向原始服务器发送条件请求 If-Modified-Since:<缓存中的 Last---Modified 时间>
3.原始服务器判断
- 对象未更新**→** 返回 304 Not Modified
- 代理服务器:直接将缓存内容发给主机,更新缓存的有效期
- 对象更新 → 返回200 OK + 新对象
- 代理服务器:用新对象替换旧缓存返回给主机,更新Last---Modified与Expires