应用层概述
不同网络应用的应用进程之间,还需要用不同的通信规则。因此在运输层协议之上,还需要有应用层协议。
每个应用层协议都是为了解决某一类应用问题,而问题的解决又必须通过位于不同主机中的多个应用进程之间的通信和协同工作来完成。
应用进程之间的这种通信必须遵循严格的规则,而应用层的具体内容就是精准定义这些通信规则:
- 应用进程交换的报文类型,如请求报文和响应报文。
- 各种报文类型的语法,如报文中的各个字段及其详细描述。
- 字段的语义,即包含在字段中的信息的含义。
- 进程何时、如何发送报文,以及对报文进行响应的规则。
客户与服务器方式
应用层的许多协议都是基于客户服务器方式。客户和服务器都是指通信中所涉及的两个两个应用进程:客户是服务请求方,服务器是服务提供方。
对等方式
域名系统DNS
DNS概述
域名系统DNS是互联网使用的命名系统,用于人们使用的机器名字转换为IP地址。域名系统很明确地指出这种系统是用在互联网中的。
许多应用层软件经常直接使用域名系统DNS。虽然计算机的用户只是间接而不是直接使用域名系统,而DNS却为互联网的各种网络应用提供了核心服务。
域名系统可以把互联网上的主机名字转换为IP地址。
DNS的作用
当我们在浏览器中搜索某个域名地址时,用户主机首先会在DNS高速缓存中寻找该域名的IP地址,若没有找到,则会向网络中的某台DNS服务器进行查询。
DNS服务器中有域名和IP地址映射关系的数据库,当查询到访问域名的IP地址后,发送给主机。
现在,用户主机可以通过web服务器的IP地址对其进行访问了
Q1:因特网是否可以只使用一台DNS服务器?
A1:这种做法并不可取。因为因特网的规模很大,这样的域名服务器肯定会因为超负荷而无法正常工作,而且一旦域名服务器出现故障,整个因特网就会瘫痪。
DNS是分布式系统
互联网的域名系统DNS被设计成为一个联机分布式数据库系统,并采用客户服务器方式。DNS使大多数名字都在本地进行解析,仅少量解析需要在互联网上通信,因此DNS系统的效率很高。
由于DNS是分布式系统,即使单个计算机出现故障,也不会妨碍整个系统正常运行。
我们一般使用域名来访问目的主机,而不是直接使用IP地址
域名到IP地址的解析是由分布在互联网上许多域名服务器程序共同完成,域名服务器程序在专设的节点上运行,而人们也常把运行域名服务器程序的机器称为域名服务器。
当某一个应用进程需要把主机名解析为IP地址时,该应用进程就调用解析程序,并成为DNS的一个客户,把待解析的域名放在DNS
互联网的域名结构
互联网采用了层次树状结构的命名方法。
任何一个连接在互联网上的主机或路由器,都有一个唯一的层次结构的名字,即域名。
“域”是名字空间中一个可被管理的划分。域还可以被划分成子域,子域又可划分为子域,这样就形成了顶级域、二级域。
注意区分顶级域名与二级域名
这种按等级管理的命名方法便于维护名字的唯一性,并且也容易设计出一种高效的域名查询机制。需要注意的是,域名只是逻辑概念,并不代表计算机所在的物理地点。
域名系统服务器
一个服务器所负责管辖的范围叫做区。
各单位根据具体情况来划分自己管辖的区。但在一个区中的所有节点是必须能够连通的。每一个区设置相应的权限域名服务器,用来保存域名和IP地址的映射关系
域名和IP地址的映射关系必须保存在域名服务器中,供所有其他应用查询。显然不能将所有信息都储存在一台域名服务器中。
DNS使用分布在各地的域名服务器来实现域名到IP地址的转换。
下面来举例说明域和区的关系
左图表示abc只设一个区abc.com,此时区和域指同一件事
右图表示abc划分了两个区:abc.com 和 y.abc.com,都各设置了相应的权限域名服务器。
不难看出,区是“域”的子集。
域名服务器种类
权限域名服务器:当权限域名服务器还不能给出最后的回答,就会告诉下一步应当查询哪一个权限服务器:
abc.com 和 y.abc.com,都各设置了相应的权限域名服务器。
域名解析的过程
图中主机想知道y.abc.com的IP地址,主机先向本地域名服务器进行递归查询,本地域名服务器接受委托后再向根域名服务器申请递归查询,逐级到权限域名服务器。
权限域名服务器将查询到的对应IP地址逐级返回给当前主机
主机想知道y.abc.com的IP地址,先对本地域名服务器进行递归查询,本地域名服务器进行收到委托后,对根域名服务器进行进行迭代查询,根服务器返回信息告诉本地域名服务器应当访问顶级域名服务器。
本地域名服务器再次向顶级域名服务器进行迭代查询,同样顶级域域名服务器返回信息让本地域名服务器访问权限域名服务器。
本地域名服务器再次向权限域名服务器进行迭代查询,权限域名服务器返回当前所查询域名的ip地址。
本地域名服务器收到所返回的ip地址信息后返回给主机
高速缓存
为了提高DNS的查询效率,并减轻根域名服务器的负荷和减少因特网上的DNS查询报文数量,在域名服务器中广泛地使用了高速缓存。
高速缓存用来存放最近查询过的域名以及从何处获得域名映射信息的记录。
由于域名到IP地址的映射关系并不是永久不变,为保持高速缓存中的内容正确,域名服务器应为每项内容设置计时器并删除超过合理时间的项(例如,每个项目只存放两天)。
不但在本地域名服务器中需要高速缓存,在用户主机中也很需要。许多用户主机在启动时从本地域名服务器下载域名和IP地址的全部数据库,维护存放自己最近使用的域名的高速缓存,并且只在从缓存中找不到域名时才向域名服务器查询。同理,主机也需要保持高速缓存中内容的正确性。
练习
最少的时候:
最多的时候:这里易错点,不知道www.abc.xyz.com是二级域名,没有意识到权限域名服务器还要查询一个权限域名服务器。
文件传输协议
FTP概述
两台主机之间传送文件有如下问题:
- 计算机储存数据格式不同
- 文件的目录结构和文件命名规定不同
- 对于相同的文件存取功能,操作系统使用的命令不同
- 访问控制方法不同
文件传送协议FTP只提供文件传送的一些基本服务,它使用TCP可靠的运输服务。FTP主要功能就是减少或消除不同操作系统下处理文件的不兼容性。
FTP客户可以将文件上传至FTP服务器,也可以从FTP服务器上下载文件。
FTP的应用
FTP使用客户服务器方式。一个FTP服务器进程可同时为多个客户进程提供服务。
FTP的服务器进程由两大部分组成:一个主进程,负责接受新的请求;另外有若干个从属进程,负责处理单个请求。
主进程的工作步骤如下:
FTP服务器打开熟知端口(端口号为21)
等待客户进程发出连接请求
启动从属进程处理客户进程发来的请求。从属进程对客户进程的请求处理完毕后即终止,但从属进程在运行期间根据需要还可能创建其他子进程。
回到等待状态,继续接受其他客户发来的请求。主进程与从属进程的处理是并发进行的。
FTP服务器监听熟知端口号21,FTP客户随机选择临时端口号与其建立TCP连接,这条TCP连接用于传送FTP相关命令。
当有数据传输,FTP客户通过命令通道告知FTP服务器,与自己的另一个端口进行TCP连接建立数据通道,FTP服务器主动连接FTP客户,并建立传输数据的TCP连接。
由于建立数据通道时,是FTP服务器主动向FTP客户发起连接,所以这也叫做“主动连接。”
而当数据传输时,FTP服务器开启某个临时端口被动等待FTP客户发起TCP连接建立数据通道,叫做“被动连接”。
控制连接:控制连接在整个会话期间一直保持打开,FTP客户所发出的传送请求,通过控制连接发送给服务器端的控制进程。
数据连接:用于文件传输,在每次文件传输时才建立,传输结束就关闭。
由于FTP使用了一个分离的控制连接,因此FTP的控制信息是带外传送的
FTP并非对所有数据传输都是最佳
计算机A运行的应用程序要在远地计算机B的一个很大的文件末尾添加一行信息:
若使用FTP,则先将此文件从计算机B传送到A,添加上这行信息后,再用FTP将此文件传送到计算机B。
实际上这种传送是不必要的,因为计算机A并未使用该文件的内容。
网络文件NFS系统
NFS允许应用进程打开一个远地文件,并能在该文件的某一个特定的位置开始读写数据。这样NFS可使用户只复制一个大文件中的一个很小的片段,而不需要复制整个大文件。
对于上述例子,计算机A中的NFS客户软件,把要添加的数据和在文件后面写数据的请求一起发送到远地的计算机B中的NFS服务器,NFS服务器更新文件后返回应答信息。在网络中传送的只是少量的修改数据
简单文件传送TFTP
TCP/IP协议族中还有一个简单文件传送协议TFTP,它是一个很小且易于实现的文件传送协议。
虽然TFTP也是用客户服务器方式,但它使用UDP数据报,因此TFTP需要有自己的差错改正措施。TFTP只支持文件传输而不支持交互。
TFTP没有一个庞大的命令集,没有列目录的功能,也不能对用户进行身份鉴别。
TFTP的优点
第一、TFTP可用于UDP环境。例如:当需要将程序或文件同时向许多机器下载时就往往需要使用TFTP。
第二、TFTP代码所占的内存较小。这对较小的计算机或某些用途的设备是很重要的,只需要固化了TFTP、UDP和IP的小容量只读存储器即可。
当接通电源后,设备执行只读存储器中的,在网络上广播一个TFTP请求。网络上的TFTP服务器就发送响应,设备收到此文件后将其放入内存,然后开始运行程序。
TFTP的主要特点
- 每次传送的数据报文中有512字节的数据,最后一次可不足512字节
- 数据报文按序编号,从1开始
- 支持ASCLL码或二进制传送
- 可对文件进行读或写
- 使用很简单的首部
TFTP的工作比较像等待停止协议。发送完一个文件块后就等待对方的确认,确认时应指明所确认的块编号。发完数据后在规定时间内收不到确认就要重发PDU。
发送确认的一方若在规定时间内收不到下个文件块,也要重发确认PDU。这样就可保证文件的传送不会因某一个数据报丢失而失败。
练习
远程终端协议TELNET
TELNET是一个简单的远程终端协议。用户用该协议可在所在地通过TCP连接到远地的另一台主机上(使用主机名或IP地址)。
TELNET能将用户的击键传到远地主机,同时也能将远地主机的输出通过TCP连接返回到用户屏幕
网络虚拟终端NVT
TELNET能够适应许多计算机和操作系统的差异。例如,终端程序时,许多系统用ctrl+c,也有系统用ESC按键。
为了适应这种差异,TELNET定义了数据和命令应怎样通过互联网,这就是所谓的网络虚拟终端NVT
客户软件把用户的击键和命令转化成NVT格式,并送交服务器。服务器软件把收到的数据和命令转换成远地系统所需格式。
向用户返回数据时,服务器把远地系统的格式转换为NVT格式,本地客户再从NVT格式转换到本地系统所需格式。
万维网
万维网概述
万维网是一个大规模的、联机式的信息储藏所,英文简称为web。
万维网用链接的方法能非常方便从互联网上一个站点访问另一个站点,从而主动地按需获取丰富的的信息。
万维网提供分布式服务的特点:
万维网是一个分布式的超媒体系统,它是超文本系统的扩充。所谓超文本系统的扩充。所谓超文本是指包含指向其它文档链接的文本。
而这些信息源可以分布世界各地,并且数目也不受限制。
万维网的特点
分布式和非分布式的超媒体系统有很大区别。在非分布系统中,各种信息都驻留在单个计算机磁盘中。
由于各种文档都可以从本地获得,因此这些文档之间的链接可进行一致性检查。所以,一个分布式超媒体系统可以保证所有连接都是有效的和一致的。
万维网把大量信息分布在互联网上,每台主机的文档都独立进行管理。对这些文档的增加、修改、删除或重新命名都不需要通知到互联网上的节点。
万维网以客户服务器方式工作。浏览器就是在用户主机上的万维网客户程序。万维网文档所驻留的主机则运行服务器程序,因此这台主机也称为万维网服务器。客户程序向服务器程序发出请求,服务器程序向客户程序送回客户所要的万维网文档。
万维网的文档
超文本标记语言HTML
超文本标记语言HTML就是一种制作万维网页面的标准语言,它消除了不同计算机之间的信息交流的障碍。但请注意,HTML并不是应用层的协议,它只是万维网浏览器使用的一种语言。
HTML允许在万维网页面中插入图像,一个页面中本身的图像叫作内含图像。HTML标准并没有规定该图像格式(绝大多数都支持GIF和JPEG格式。
一副位图文件可能占用500~700KB的存储空间,但若将此图像改存为经压缩的.gif格式,可能就只有十几个千字节,大大减少了存储空间
HTML还规定了链接的设置方法。我们知道每个链接都有一个起点和终点。链接的起点可以是一个字或几个字,或是一幅图,一段文字。链接终点可以是其他网站的页面。这种链接方式叫做远程链接。这时必须在HTML文档指明链接到的网站URL;又是链接可以指向本计算机中的某一个文件或本文件的某处,这叫作本地连接。这时必须在HTML文档中指明链接的路径。
XML
XML是可扩展标记语言,它和HTML很相似,但XML的设计宗旨是传输数据而不是显示数据。更具体的,XML用于标记电子文件,使其具有结构性的标记语言。
XHTML可扩展超文本标记语言,是作为一种XML应用重新定义的HTML
CSS是层叠样式表,它是一种样式表语言,用于为HTML文档定义布局。
需要对页面进行美化时,我们需引入CSS文档
如果想对网页添加操作和响应
使用一个botton标签添加按钮,再为点击按钮事件发生添加一个调用函数
再用Javascript编写该操作的具体实现代码,且通过元素id来找到相应的元素,也就是显示hello world的p标签
动态万维网
上述的都是静态文档。在文档创作完毕后就存放在万维网服务器中,再被用户浏览时不会改变内容。正因为内容不会改变,因此用户对静态文档的每次读取所得到的返回结果相同。
静态文档最大优点是简单,HTML是一种排版语言,静态文档可以由不懂程序设计的人员来创建。
静态文档的缺点是不够灵活,信息变化时就要由文档的作者手工对文档进行修改。
动态文档是指文档内容是在服务器访问万维网服务器时才由应用程序动态创建的。
当浏览器请求到达时,万维网服务器要运行另一个应用程序,并把控制转移到此应用程序。接着该应用程序对浏览器发来的数据进行处理,并输出HTML格式的文档,万维网服务器把应用程序的输出作为对浏览器的响应。
由于对浏览器每次请求的响应都是临时生成的,因此用户通过动态文档所看到的内容是不断变化的。
动态文档的优点:具有报告最新信息的能力。动态文档的缺点:创建难度比静态文档高,因为这是编写用于生成文档的应用程序,而编写的程序还要通过大范围测试以保证有效性。
动态文档和静态文档的主要差别体现在服务器一端。这主要是文档内容的生成方法不同。
对浏览器而言两者都是HTML所规定格式,无法判定是哪一种文档,只有文档开发者知道。
因此,实现动态文档要对万维网服务器进行功能扩充如下:
1、增加一个应用程序,用于处理浏览器的数据,并创建动态文档
2、应增加一个机制,用来使万维网服务器将浏览器发来的数据传送给这个应用程序,然后万维网服务器能够解释这个应用程序的输出,并向浏览器返回HTML文档。
这里增加了一个机制,叫作通用网关接口CGI (Common Gateway Interface)。CGI是一种标准,它定义了动态文档应如何创建输入数据应如何提供给应用程序,以及输出结果应如何使用。
活动万维网文档
动态文档一旦建立,它所包含的信息内容也就固定下来而无法及时刷新屏幕。另外,像动画之类的显示效果动态文档也无法提供。
能提供屏幕连续更新的技术是活动文档。这种技术是把所有的工作都转移给浏览器端。
每当浏览器请求一个活动文档时,服务器就返回一段活动文档程序副本,使该程序副本在浏览器端运行。此时,活动文档程序可与用户直接交互,并连续改变屏幕显示。
只要客户运行活动文档程序,对网络带宽要求不会太高。
统一资源定位符URL
统一资源定位符URL是用来表示从互联网上得到的资源位置和访问这些资源的方法。URL给资源的位置提供一种抽象的识别方法,并进行定位。 只要能定位,就可以对资源进行各种操作。
1、URL的格式
1、协议指出使用何种协议来获取该万维网文档。现在最常用的协议就是http(超文本传送协议HTTP)其次是FTP(文件传送协议FTP)
2、主机名是万维网文档所存放的主机域名,通常以www开头(但这并不是硬性规定)。主机名用点分十进制的IP地址替代也可以。
3、端口就是端口号,通常是协议的默认端口号(例如协议HTTP的默认端口号是80),因此可省略。但如果不使用默认端口号,那么就必须写明现在所使用的端口号。
4、最后的路径可能是较长的字符串,但有时也不需要使用。
超文本传送协议HTTP
协议HTTP定义了浏览器怎样向万维网服务器请求万维网文档,以及服务器如何把文档传送给浏览器。
从层次的角度看,HTTP是面向事务的应用层协议,它是万维网上能够可靠低交换文件的重要基础。请注意,协议HTTP不仅可以传送完成超文本跳转所必需的信息,而且也传送任何可从互联网上得到的信息。
用户主机的浏览器进程(客户进程)与服务器进程进行基于因特网的通信,浏览器进程首先发起TCP连接,服务器使用熟知端口号80接收到连接请求后建立了TCP通信。
浏览器就向服务器发出HTTP请求报文(浏览某个页面的请求),服务器接着就返回所请求页面作为响应。
HTTP1.0传输特点
HTTP1.1传输特点
HTTP使用了持续连接,就是万维网服务器发送响应后仍然在一段时间内保持这条连接,使同一个客户可以继续在这条连接上传送后续的HTTP请求报文和响应报文。
这并不局限于传送同一个页面上链接的文档,而是只要这些文档在同一个服务器就行。协议HTTP/1.1持续连接有两种工作方式——非流水线和流水线方式。
非流水线的特点:客户收到前一个响应后才能发出下一个请求。因此,在TCP连接已建立后,客户每访问一次对象就要用去一个往返时间RTT。其缺点是服务器发送完一个对象后,其TCP连接就处于空闲状态,浪费了服务器资源。
流水线的特点:客户收到HTTP的响应报文之前就能够接著新的请求报文。因此,服务器就可以连续发回响应报文。因此,使用流水线方式时,客户访问所有对象只需花费一个RTT时间。流水线工作方式是TCP连接中的空闲时间减少,提高了下载文档效率。
HTTP/2 传输特点
协议HTTP/2是HTTP1.1的升级版本,其HTTP方法、状态码、语义都未改变。
其主要特点:1、HTTP/2把服务器发回的响应变成可以并行地发回(使用同一个TCP连接),这就大大缩短了服务器的响应时间。
2、HTTP/2允许客户复用TCP连接进行多个请求,这就节省了TCP连续多次建立和释放连接的时间
3、HTTP/2将所有报文都划分为许多较小的二进制编码的帧,并采用了新的压缩算法,不发送重复的首部字段,减少了首部开销,提高了传输效率
HTTP的报文结构
HTTP有两类报文:
- 请求报文——从客户向服务器发送请求报文
- 响应报文——从服务器到客户的回答
由于HTTP是面向文本,因此在报文中每一个字段都是一些ASCII码,因而各个字段的长度都是不确定的
HTTP请求报文和响应报文都是由三个部分组成的,这两种报文格式的区别就是开始行不同。
- 开始行:用于区分是请求报文还是响应报文。在请求报文中的开始行叫作请求行,而在响应报文中的开始行叫作状态行。在开始行的三个字段之间都以空格分隔开,最后的“CR”和“LF”分别代表“回车”和“换行”
- 首部行:用来说明浏览器、服务器或报文主题的一些信息。首部可以有好几行,但也可以不使用。在每一个首部行中都有首部字段名和它的值,每一行在结束的地方都要有“回车”和“换行”。整个首部行结束时,还有一空行将首部行和后面的实体主体分开。
- 实体主体:在请求报文中一般都不用这个字段,而在响应报文中也可能没有这个字段。
请求报文的第一行“请求行”只有三个内容:即方法、请求资源的URL,以及HTTP的版本
注意:这里的“方法”就是对所请求的对象进行的操作,这些方法实际上也就是一些命令。因此,请求报文的类型是由它所采用的方法决定的
常用的方法:
HTTP响应报文的主要特点:
每一个请求报文发出后,都能收到一个响应报文。响应报文的第一行就是状态行。
状态行包括三项内容:即HTTP的版本、状态码,以及解释状态码的简单短语。
在服务器上存放用户的信息——cookie
首先用户主机与服务器建立连接,当用户主机使用浏览器初次向服务器发送请求报文时,而服务器进程会为该客户生成唯一的cookie识别码。
HTTP响应报文包含有一个省部字段为set-Gookie的首部行,该字段取值就是cookie识别码。
浏览器进程收到该响应报文后,就在浏览器特定的cookie文件中添加一行,当用户购次使用该浏览器b间这个网站时。
用户浏览器再次访问这个服务器时,会从文件中取出cookie识别码,并放到HTTP的cookie首部行,服务器根据cookie识别码返回个性化网页
代理服务器
1、校园网的计算机中的浏览器向互联网的服务器请求服务时,就先和校园网的代理服务器建立TCP连接,并向代理服务器发出HTTP请求报文。
2、若代理服务器已经存放了所请求的对象,代理服务器就把这个对象放入HTTP响应报文中返回给计算机的浏览器。
3、若代理服务器没有存放所请求的对象,代理服务器就与源点服务器建立TCP连接,并发送HTTP请求报文
4、源点服务器把所请求的对象放在HTTP响应报文中返回给校园网的代理服务器
5、代理服务器收到这个对象后,先复制在自己本地存储器中,然后再把这个对象放在HTTP响应报文中,通过已建立的TCP连接,返回给请求该对象的浏览器。
若源点服务器中的文档已修改,而代理服务器中的未修改,怎么办?
源点服务器通常会为每个响应的对象设定一个修改时间字段和一个有效时间字段。当客户主机向代理服务器发送请求,若代理服务器的该文档未过期,就会将该文档发送回去。
- 如果已过期,就会向源点服务器发送请求,在请求报文中包含有一个省部字段为if-modified-since的首部行,该字段取值就是文档的修改日期,源点服务器通过该日期就可判断出代理服务器中存储的文档与自己的一致。
- 如果一致,则给代理服务器发送不包含实体主体的响应,状态码为304,短语为not-modify,代理服务器重新更新该文档有效日期,并发送回主机
- 如果不一致,则给代理服务器发送封装有该文档的响应报文,代理服务器就更新了该文档,然后封装在响应报文中发送回主机。
在使用代理服务器的情况下,由于有相当大一部分通信量局限在校园网内部, 因此R1——R2专线链路上的通信量大大减少,因而减小了访问互联网的时延。
以代理服务器方式构成的内容分发网络CDN在互联网应用中起到了很大作用。