计算机网络(七)应用层

发布时间 2023-06-13 19:46:26作者: Tod4

计算机网络(七)应用层


image-20230516133534345
  • 应用层:解决通过应用进程交互实现特定网络应用的问题
  • 运输层:解决进程之间基于网络的通信问题
  • 网络层:解决分组在多个网络上的传输(路由)问题
  • 数据链路层:解决分组在一个网络(或一个链路)上的传输问题
  • 物理层:解决用何种信息来传输比特的问题

1 应用层概述

  • 应用层解决通过应用进程交互实现特定网络应用的问题
  • 应用层是计算机网络体系结构的最顶层,享受其下各层提供的服务,是设计和建立计算机网络的最终目的,也是计算机网络中发展最快的部分
  • 常见的网络应用有:
    • 万维网www应用,应用层协议为超文本传输协议HTTP
    • 域名系统DNS
    • 动态主机配置DHCP
    • 电子邮件
    • 文件传输FTP和P2P文件共享
    • 多媒体网络应用

2 客户-服务器方式和对等方式

​ 网络应用程序运行在处于网络边缘的不同端系统上,通过彼此之间的通信来完成某项任务。开发一种网络应用首先应该考虑的是网络应用程序在各种端系统上的组织方式和他们之间的关系,目前流行的主要有以下两种方式:

  • 客户端/服务器方式(Client/Server, C/S)

    • 客户(进程)和服务器(进程)是指通信中所涉及的两个应用进程
    • 客户端/服务器方式指的是进程之间服务和被服务的关系,客户是服务的请求方,服务器是服务的提供方
    • 服务器总是处于运行的状态,并等待客户的服务请求,服务器具有固定的端口号(如HTTP服务的默认端口号为80),运行服务器的主机也有固定的IP地址
    image-20230613133914189
    • C/S方式是因特网最传统也是最成熟的方式,如万维网、电子邮件、文件传输FTP等都是财通的C/S方式
    • 基于C/S方式的应用服务通常都是服务集中型的,即应用服务集中在网络中比客户计算机少得多的服务器计算机上,因此常会出现服务器计算机跟不上众多客户机请求的情况,为此常用计算机集群(或者服务器场)构建一个强大的虚拟服务器
  • 对等方式(Peer-to-Peer,P2P)

    • 在P2P方式中,没有固定的服务请求者和服务提供者,分布在网络边缘的各端系统中的应用进程是对等的,被称作对等方,对等方之间直接通信,即是服务的提供者也是服务的请求者

    • 基于P2P方式的应用是服务分散型的,即服务不是集中在少数几个服务器计算机中的,而是分散在大量对等计算机中,这些计算机并不为服务提供商所有,而为个人控制的桌面计算机和笔记本电脑

    • 在因特网上流行的P2P应用主要包括P2P文件共享、即时通信、P2P流媒体、分布式存储等

      image-20230613135134018

3 动态主机配置协议DHCP

  • 为了使用户主机正常访问web服务器,需要对其配置:IP地址、子网掩码、默认网关、DNS服务器等网络相关配置信息,如果主机数量较多,则手动配置工作量较大而且容易出错

    image-20230613143307233
  • DHCP是TCP/IP体系应用层的协议,使用运输层的UDP提供的服务,也就是DHCP报文在运输层会被封装成为UDP用户数据报(DHCP服务器端口为67,客户端口为68),然后封装有DHCP报文的用户数据报在网络层会被封装成IP数据报,然后再根据使用的网络接口,封装成数据链路层的帧进行发送

  • 动态主机配置DHCP就是在网络中添加一台DHCP服务器,在服务器中设置好可为其他主机配置的网络配置信息网络中的各主机开机之后就会启动DHCP程序,从DHCP服务器请求自己的网络配置信息,而不用手动配置

    image-20230613143644812
  • DHCP的具体工作流程如下:

    • DHCP使用客户/服务器方式,在DHCP服务器上运行DHCP服务器进程,在用户主机上运行DHCP客户进程

    • DHCP客户寻找DHCP服务器:当启用主机的DHCP后,DHCP客户将广播发送DHCP发现报文,封装该报文的IP数据报的源地址是0.0.0.0(因为主机目前还没有分配到IP)目的地址是255.255.255.255(表示该报文为一个广播报文,使用广播发送是因为主机不知道当前网络有哪几个DHCP服务器和它们的IP地址),网络中的所有设备都会收到该IP数据报,并对其进行层层解封,解封出封装有DHCP发现报文的UDP用户数据报,其他用户主机应用层没有监听该UDP用户数据报目的端口67的进程也就是DHCP服务器进程,因此收到广播报文只能丢弃。而DHCP服务器应用层始终运行着DHCP服务器进程,因此会接收该DHCP发现报文并做出响应

      image-20230613144400711

      DHCP发现报文结构主要包括:事务ID、DHCP客户端的MAC地址

    • DHCP服务器提供IP地址租用:DHCP服务器收到DHCP客户端发送的DHCP发现报文后,根据其封装的DHCP客户端的MAC地址来查找自己的数据库,看是否有针对该MAC地址的匹配信息,如果有则直接使用这些配置信息构建并发送DHCP提供报文,否则使用默认信息构建DHCP提供报文。报文的源地址为DHCP服务器地址,目的地址仍为广播地址(主机仍然没有分配到IP地址)

      image-20230613145459800

    • DHCP客户接收IP地址租用:网络中的所有设备都会收到该DHCP提供报文,并对其进行层层解封,解封出封装有DHCP提供报文的UDP用户数据报,对于DHCP服务器,其应用层不存在运行DHCP客户端的进程,对于其他的DHCP客户则根据报文中的事务IP判断该报文不是自己请求的报文,因此除了对应DHCP用户都会丢弃该报文,DHCP客户在收到多个DHCP提供报文的时候,会选择最先收到的那个

      DHCP提供报文中除了事务ID,还封装有配置信息,包括:

      • IP地址,DHCP服务器在自己的IP地址池中挑选IP地址的时候,都会使用ARP来确保所选的IP地址未被网络中的其他地址所占用
      • 子网掩码
      • 地址租期
      • 默认网关
      • DNS服务器
    • DHCP服务器确认IP地址租用:随后DHCP客户需要向所选择的DHCP服务器发送DHCP请求报文,封装该IP数据报的源地址仍为0.0.0.0(挑选的配置信息还需要征得DHCP服务器的同意),目的地址为广播地址(不用向网络中的每一个DHCP服务器单播发送DHCP请求报文来告知它们是否请求它们作为自己的DHCP服务器),该DHCP请求报文包括事务ID、DHCP客户端的MAC地址、接收的租约中的IP地址、提供此租约的DHCP服务器的IP地址

      image-20230613151657164

    • DHCP服务器在收到DHCP请求报文报文后,首先使用ARP检测分配的IP地址是否被网络中的其他主机所占用,没有就给DHCP客户发送DHCP确认报文,封装该报文的IP数据报的源IP地址为DHCP服务器的IP地址,目的地址为0.0.0.0广播地址,DHCP客户在收到该DHCP确认报文后就可以使用所租到的IP地址了。

      image-20230613151933214
    • 当DHCP客户租用的IP地址得到0.5租期的时候,DHCP客户需要向DHCP服务器发送DHCP请求报文来更新租用期,封装该报文的IP数据报的源IP地址为DHCP客户之前使用的IP地址,目的IP地址为DHCP服务器的地址

      • DHCP服务器若同意,则发回DHCP确认报文,DHCP就得到了新的租期
      • 若不同意,则发回DHCP否认报文,DHCP客户必须立即停用之前租用的IP地址,并重新发送DHCP发送报文重新申请租用IP地址
      • 如果DHCP服务器一直未响应,直到达到0.875租用期,则DHCP客户需要重新发送DHCP发送报文重新申请租用IP地址,然后继续等待DHCP服务器可能做出的反应
      • 如果一直未做出反应,则DHCP客户必须立即停用之前租用的IP地址,并重新广播发送DHCP发送报文
    • 同时,DHCP客户端可以随时提前终止DHCP服务器所提供的租用期,只需要向DHCP服务器发送DHCP释放报文即可

3.1 DHCP中继代理

image-20230613154301823

​ 正常情况下,由于路由器隔离广播域,所以DHCP客户向DHCP服务器发送DHCP发现报文的时候,不会被路由器转发,而一个网络配置一个DHCP服务器显然是不合理的,因此可以在该路由器中配置DHCP服务器的IP地址使之成为DHCP的中继代理,这样路由器在收到DHCP客户的广播报文的时候就能向DHCP服务器发送单播的DHCP发现报文

4 域名系统DNS

  • 在使用域名而不是IP地址来访问目的主机的时候,用户主机首先在自己的DNS高速缓存中查找该域名对应的IP地址

  • 如果没有找到则会向网络中的某台DNS服务器查询,DNS服务器中有域名和IP地址映射关系的数据库,DNS服务器在收到DNS查询报文后,会在其数据库中进行查询,之后将查询结果发送给用户主机

    DNS绝大多数的域名都是在本地解析,仅少量解析需要在网络上通信

  • 最后用户主机根据查询结果中的IP地址就能去访问WEB服务器了

    image-20230613160932749

    因特网是否只使用一台DNS服务器?不能,因为:

  • 因特网的规模很大,只有一台DNS服务器会导致其超负荷工作,而且一旦域名服务器出现故障,整个因特网就会瘫痪

  • 因此因特网采用层次结构的命名树作为主机的名字,并且使用分布式的域名系统DNS,这样即使单个计算机出现了故障,也不会影响整个系统的正常运行

  • 为了提高DNS的查询效率,减轻根域名服务器的负荷、减少互联网上DNS查询报文的数量,在域名服务器中广泛使用了告诉缓存,高速缓存用来存放最近查询过的域名及从何处能够获得域名映射信息的记录

  • 由于域名到IP地址的映射关系并不是永久不变的,为了保持高速缓存的正确性,域名服务器会为每项内容设置计时器并删除超过合理时间的项

    域名结构

    域名结构由若干个分量组成,各分量之间用点隔开,表示不同级别的域名

    image-20230613161853452
    • 顶级域名分为三类:

      • 国家顶级域名:cn、us、uk

      • 通用顶级域名

        image-20230613162125995
      • 反向域:用于反向域名解析,即IP地址反向解析为域名

    • 二级域名:在国家域名下注册的二级域名均由该国家自行决定

    • 我国的二级域名划分为一下两类:

      image-20230613162311604
    image-20230613162406071
4.1 分布式域名系统
  • 域名和IP地址的映射关系必须保存在域名服务器中供其他应用查询,DNS使用分布在世界各地的域名服务器来实现域名到IP地址的转换

  • 域名服务器可以划分为一下四种类型:

    • 根域名服务器:存储所有顶级域名服务器的域名及其IP地址,域名服务器不直接对域名进行解析,而是返回该域名所属顶级域名的顶级域名服务器的IP地址

      image-20230613163111874

    • 顶级域名服务器:管理注册在该顶级域名下的所有二级域名,当收到DNS查询请求的时候就进行响应的回答(可能是响应的结果,也可能是下一级权限域名服务器的IP地址)

    • 权限域名服务器:负责某个区的域名,每一个主机的域名必须在某个权限域名服务器处登记。因此权限域名服务器知道其管辖的域名和IP地址的映射关系,另外也知道其下级的域名服务器的地址

    • 本地域名服务器:本地域名服务器并不属于上述域名服务器的等级结构,当一个主机发出DNS请求报文的时候,首先会被送到该主机的本地域名服务器,本地域名服务器仅仅起到代理的作用,会将该报文转发到上述的域名服务器的登记结构中

      image-20230613164538743

4.2 域名解析的过程
  • 递归查询

    image-20230613164907386
  • 迭代查询

    image-20230613164924673

5 文件传送协议FTP

6 电子邮件

7 万维网www

  • 万维网的文档包括:HTML、CSS、JS
7.1 HTTP超文本传输协议
  • HTTP定义了浏览器(即万维网客户进程)怎么向万维网服务器请求万维网文档,以及万维网服务器怎么把万维网文档传输给浏览器

  • 浏览器(客户)进程首先和服务器进程(使用熟知端口号80)建立TCP连接,基于这条已经建立的TCP连接,浏览器进程向服务器进程发送HTTP请求报文,服务器进程收到后执行相应操作,然后给浏览器发送HTTP响应报文

    image-20230613191422895
7.2 HTTP版本概述
  • HTTP1.0采用非持续连接方式。在该方式下,每次浏览器请求一个文件都要与服务器建立TCP连接,当收到响应后就立即断开连接

    • 客户与服务器之间通过三次握手建立TCP连接之后,在这三个报文的最后一个报文的数据载荷部分就携带有HTTP的请求报文,服务器收到后就给客户进程发送HTTP响应报文
    • 一次请求和响应的时间就记为往返时间RTT,因此在HTTP1.0下请求一个万维网文档所需的时间为2RTT+文档的传输时延
    image-20230613191706389
    • 为了减小时延,浏览器常常会建立多个并行的TCP连接同时请求多个对象,但是这样会大量占用万维网服务器的资源
  • HTTP1.1采用持续连接方式,在该方式下,万维网服务器在发送响应后仍然保持这条连接,使同一个客户(浏览器)和服务器可以继续在这条连接上传送后续的HTTP请求报文和响应报文

    • 为了进一步提高效率,HTTP1.1的持续连接还使用流水线的方式工作,即浏览器在收到HTTP的响应报文之前就能够连续发送多个请求报文,这样一个接一个的请求报文到达服务器后,服务器就发回一个接一个的响应报文,节省了多个RTT时间,使TCP连接的空闲时间减少提高了下载文档的效率
7.3 HTTP报文格式

​ HTTP是面向文本的,其报文的每一个字段都是一些ASCII码串,每个字段的长度都是不固定的,HTTP报文包括:

  • HTTP请求报文

    • 第一行是请求行,由方法字段开始,其后跟一个空格,后跟URL统一资源定位符字段,其后再跟一个空格,后跟一个版本字段,最后是一个回车换行

      HTTP支持的方法有:

      image-20230613193925938
    • 第二行开始为首部行,每一个首部行由一个首部字段名开始,然后跟一个冒号和一个空格,再是该字段的取值和回车换行

      常见的首部行:

      image-20230613193952817
    • 首部行的下面是一个空行

    • 最下面是一个实体主体,通常不用

    image-20230613193729270
  • HTTP响应报文

    • 第一行是状态行,由版本字段开始,其后跟一个空格,后跟状态码字段,再跟一个空格后跟短语字段最后是回车换行

      HTTP常见状态码:

      image-20230613194245160
    • 其他行和HTTP请求报文是类似的:

    • 第二行开始为首部行,每一个首部行由一个首部字段名开始,然后跟一个冒号和一个空格,再是该字段的取值和回车换行

    • 首部行的下面是一个空行

    • 最下面是一个实体主体,通常不用

      image-20230613194159228
7.4 浏览器Cookie