第7章:应用层
-
应用层协议定义了运行在不同端系统上的应用程序进程如何相互传递报文。
-
应用层的许多协议都是基于客户服务器方式。即使是
P2P
对等通信方式,实质上也是一种特殊的客户服务器模式。客户是服务请求方,服务器是服务提供方。
7.1 域名系统DNS
7.1.1 概述
-
域名系统
DNS(Domain Name System)
是互联网使用的命名系统,用于把便于人们使用的机器名字转化为IP
地址。 -
域名系统对于网络来说是必要的吗?
- 不是必须要有的,存在的原因是因为
IP
地址不方便人类记忆。
- 不是必须要有的,存在的原因是因为
-
那么既然域名要映射为
IP
地址,互联网上可不可以不用IP
地址呢?- 这是不可以的,因为
IP
的长度是固定的,方便机器处理。而域名的长度并不是固定的,机器处理起来比较困难。
- 这是不可以的,因为
-
从理论上讲,整个互联网可以只适用一个域名服务器。但这种做法不可取,因为这个域名服务器会压力太大,存在单点故障。因此域名采用层次树形结构的命名方法,并使用分布式域名系统
DNS
。
7.1.2 互联网的域名结构
- 每一个域名都是由标号序列组成的,各标号之间用点隔开,例如下图:
-
DNS
对域名有如下规定:(1)每个标号不超过
63
个字符;(2)不区分大小写;
(3)标号中除连字符(-)外不能使用其他的标点符号;
(4)级别最低的域名写在左边,最高的写在右边;
(5)完整域名不能超过
255
个字符(包含点)。 -
顶级域名
TLD(Top Level Domain)
可以分为三大类:(1)国家顶级域名
nTLD
:例如cn
表示中国,us
表示美国,uk
表示英国,等等;(2)通用顶级域名
gTLD
:例如com
表示公司企业,net
表示网络服务机构,等等;(3)基础结构域名(
infrastructure domain
):这种顶级域名只有一个,即arpa
,用于反向域名解析,因此又称为反向域名。 -
用域名树表示互联网的域名系统是最清楚的。最上面的是根,但没有对应的名字,根的下一级节点就是最高一级的顶级域名。如下图:
7.1.3 域名服务器
-
域名体系是抽象的,具体实现需要域名服务器,域名服务器没有采用每一级的域名都对应一个域名服务器,而是采用划分**区(zone)**的办法,这样可以减少域名服务器的数量,提高运行效率。
-
每一个区中所有的节点必须是能够连通的。每个区设置相应的权限域名服务器(authoritative name server)。区是
DNS
服务器实际管辖的范围。区可能小于等于域,但一定不能大于域。如下图:
- 互联网上的
DNS
域名服务器是按照层次结构安排的,每个域名服务器都只对域名体系中的一部分进行管辖。如下图:
-
由上图可以看出可以把域名系统划分为四种不同的类型(其中本地域名服务器不属于上图中的层次,但也是很重要的)
(1)根域名服务器:是最高层次的域名服务器,也是最重要的域名服务器。所有的根域名服务器直到所有的顶级域名服务器的域名和
IP
地址。到2016.2
,全世界已经在588
个地点安装了根域名服务器,但它们只使用13
个不同IP
地址的域名,即a.rootservers.net、b.rootservers.net、...、m.rootservers.net
。这13
组根域名服务器每组在全世界都有分布。(2)顶级域名服务器(
TLD
服务器):负责管理顶级域名服务器注册的所有二级域名。(3)权限域名服务器:负责一个区的域名服务器。
(4)本地域名服务器:当一台主机发出
DNS
请求时,这个查询请求报文就发送给本地域名服务器。每一个互联网提供者ISP
,或一个大学,设置一个大学的系,都可以拥有一个本地域名服务器。一般我们在电脑中手动配置的DNS
就是本地域名服务器的IP
。 -
下面需要讨论一个重要的问题,如何根据域名解析出对应的
IP
地址,有两种策略:递归查询、迭代查询。如下图:
- 一般来说,为了加快访问速度,本地域名服务器会缓存域名和
IP
的对应关系,并定时更新。类似的,我们的个人电脑也会缓存这些信息,可以在cmd
窗口中输入ipconfig /displaydns
查看这些内容,如下图:
7.2 文件传输协议
7.2.1 概述
-
文件传输协议
FTP(File Transfer Protocol)
是互联网上使用的最广泛的文件传输协议。 -
FTP
屏蔽了各计算机系统的细节,因而适合于在异构网络中任意计算机之间传送文件。 -
FTP
只是文件共享协议中的一大类,另一大类是联机访问。这两类的区别如下:-
FTP
如果要存取文件,就必须首先获得该文件的一个副本;如果要修改文件,也只能对文件的副本进行修改,然后再将修改后的文件副本传回原节点。 -
联机访问允许用户对文件远程操作,因此对文件的修改不需要丢副本修改。联机访问还允许多用户同时操作。
-
7.2.2 FTP的基本工作原理
-
FTP
是基于TCP
的,主要功能是较少或消除在不同操作系统下处理文件的不兼容性。 -
FTP 使用客户服务器方式。一个 FTP 服务器进程可同时为多个客户进程提供服务。FTP 的服务器进程由两大部分组成:一个主进程,负责接受新的请求;另外有若干个从属进程(例如后面图中的控制连接和数据连接),负责处理单个请求。
-
主进程的工作步骤如下:
(1)打开熟知端口(端口号为 21),使客户进程能够连接上。
(2)等待客户进程发出连接请求。
(3)启动从属进程来处理客户进程发来的请求。从属进程对客户进程的请求处理完毕后即终止,但从属进程在运行期间根据需要还可能创建其他一些子进程。
(4)回到等待状态,继续接受其他客户进程发来的请求。主进程与从属进程的处理是并发地进行。
-
在进行文件传输时,
FTP
的客户和服务器之间要建立两个并行的TCP
连接:控制连接和数据连接(都是从属进程),控制连接用于发送控制信息,数据连接(端口号为20
)用于发送数据。如下图:
7.2.3 简单文件传输协议TFTP
-
简单文件传输协议
TFTP(Trivial File Transfer Protocol)
,很小且易于实现的协议,是基于UDP
的。 -
优点:
(1)可用于
UDP
环境;(2)占用内存小。
7.3 万维网
7.3.1 概述
-
万维网
WWW(World Wide Web)
是一个大规模的、联机式的信息储藏库。万维网通过页面上的**超链接(hyperlink)**连接到一起。 -
万维网是一个分布式的**超媒体(hypermedia)系统,它是超文本(hypertext)**系统的扩充。超文本是指指向其他文档的链接文本(text)。超媒体和超文本内容不同,超媒体文档中可以包含文本、图形、声音、动画以及视频图像等。
-
WWW
系统的结构采用了客户/服务器模式. -
万维网必须解决的问题:
(1)怎样标志分布在整个因特网上的万维网文档?
(2)用何协议实现万维网上各种超链的链接?
(3)怎样使各种万维网文档都能在因特网上的各种计算机上显示出来,同时使用户清楚地知道在什么地方存在着超链?
(4)怎样能够使用户方便地找到所需的信息?
-
关于这四个问题的答案如下:
(1)使用统一资源定位符
URL (Uniform Resource Locator)
来标志万维网上的各种文档。 使每一个文档在整个因特网的范围内具有唯一的标识符URL
。(2)在万维网客户程序与万维网服务器程序之间进行交互所使用的协议,是超文本传送协议
HTTP (HyperText Transfer Protocol)
。HTTP
是一个应用层协议,它使用TCP
连接进行可靠的传送。(3)超文本标记语言
HTML (HyperText Markup Language)
使得万维网页面的设计者可以很方便地用一个超链从本页面的某处链接到因特网上的任何一个万维网页面。(4)使用搜索引擎,例如
Google
、百度等。
7.3.2 统一资源定位符URL
-
统一资源定位符
URL (Uniform Resource Locator)
用来定位互联网上的资源。 -
URL
的一般形式由以下四个部分组成:<协议>://<主机>:<端口>/<路径>
。最后两项有时可以省略。现在最常用的协议就是http
(超文本传输协议HTTP
),其次是ftp
(文件传输协议FTP
)。 -
现在有些浏览器为了方便用户,在输入
URL
时,可以把前面的http://
设置把主机名最前面的www
省略,然后浏览器替用户把省略的字符添上。例如用户输入baidu.com
,会变为https://www.baidu.com
。 -
注意:
URL
中的字母不区分大小写。
-
我们平时使用最多的是使用
HTTP
的URL
。 -
HTTP
的URL
的一般形式是:http://<主机>:<端口>/<路径>
。 -
HTTP
的默认端口是80
,通常可以省略。路径也可以省略,省略之后URL
就指的是互联网上的某个主页(home page
)。 -
主页是个很重要的概念,它可以是以下的几种情况之一:
(1)一个
WWW
服务器的最高级别的页面。例如百度的主页:(2)某个组织或者部门的一个订制的页面或目录。
(3)由一个人自己设计的描述他本人情况的
WWW
页面。 -
如下是一个
URL
的实例:
7.3.3 超文本传输协议HTTP
-
HTTP
协议定义的浏览器怎样向万维网请求万维网文档,以及服务器怎样把文档传给浏览器。 -
从层次的角度看,
HTTP
是面向事务的应用层协议。 -
HTTP
协议时无状态的(stateless)。也就是说同一个客户两次访问同一个服务器,这个服务器并不记得这个用户。 -
HTTP
协议时无连接的。这就是说,虽然HTTP
使用了TCP
连接,但通信的双方在交换HTTP
报文之前不需要建立HTTP
连接。 -
1997
年之前使用的是HTTP/1.0
协议,现在普遍使用的是HTTP/1.1
协议。 -
HTTP/1.0
每次请求一个链接需要2RTT
时间,因此如果一个页面有很多内容需要请求,这样很慢。如下图:
-
HTTP/1.1
很好的解决了上述问题,HTTP/1.1
使用到了持续连接。即万维网在发送相应请求后仍然在一段时间内保持这条连接,使统一客户(浏览器)和该服务器可以继续在这条连接上传送后续的HTTP
请求报文和响应报文。 -
HTTP/1.1
协议的持续连接有两种工作方式:(1)非流水线方式:客户在收到前一个响应后才能发出下一个请求;(2)流水线方式:客户可以一直发送请求,这种方式效率高。
-
代理服务器
(proxy server)
:又称为万维网高速缓存(Web cache)
,它代表浏览器发出HTTP
请求。 -
代理服务器的最重要的作用就是加快用户访问网络的速度。是局部性原理的一个体现。
-
代理服务器会把最近的一些请求和响应暂存在本地磁盘中。当新请求到达时,若代理服务器发现这个请求与暂时存放的请求相同,就返回缓存的内容,而不需要按照
URL
的地址再次去互联网访问该资源。如果没有的话代理服务器去互联网访问该资源,得到该资源后复制一份存储下来并将结果返回给用户。 -
如下图展示了代理服务的作用:
-
使用代理服务器对网站的访问过程如下:
(1)浏览器先和代理服务器建立
TCP
连接,并向其发送HTTP
请求;(2)若代理服务器已经存放了该资源,直接返回;
(3)否则,代理服务器就代表发出请求的用户浏览器,与因特网上的源点服务器建立
TCP
连接,并发送HTTP
请求报文;(4)源点服务器将所请求的对象放在 HTTP 响应报文中返回给校园网的高速缓存;
(5)高速缓存收到此对象后,先复制在其本地存储器中(为今后使用),然后再将该对象放在
HTTP
响应报文中,通过已建立的TCP
连接,返回给请求该对象的浏览器。
HTTP
的报文结构如下图:
-
首先看请求报文:
- 第一行是请求行,
URL
和版本很简单,主要看方法,包含如下方法:
- 下面是一个请求报文的完整例子:
- 第一行是请求行,
-
再看响应报文:
- 第一行是状态行,包含三项:
HTTP
的版本,状态码,解释状态码的简单短语。最重要的是状态码,如下:
- 下面是一个响应报文的完整例子:
- 第一行是状态行,包含三项:
-
刚才提到
HTTP
是无状态的,但是如果一个网站想要区别两个请求是否是一个用户,怎么办?有两种方式解决这个问题,即Cookie
和Session
。 -
Cookie和Session的区别:
Cookie
是在客户端存储用户的信息,Session
是在服务器端存储客户的信息。这里主要介绍Cookie
。 -
万维网站点使用
Cookie
来跟踪用户。Cookie
表示在HTTP
服务器和客户之间传递的状态信息。 -
使用
Cookie
的网站服务器为用户产生一个唯一的识别码。利用此识别码,网站就能够跟踪该用户在该网站的活动。 -
Cookie
工作过程:(1)当用户
A
浏览某个使用Cookie
的网站时,该网站服务器就会为A
产生一个唯一的识别码,并放入服务器的数据库中。(2)接着服务器在给
A
的HTTP
的响应报文中添加一个叫做Set-cookie
的首部行。首部字段名:“Set-cookie”;值:第(1)步生成的识别码,例如:(3)当
A
收到这个响应时,其浏览器会在它管理的Cookie
文件中添加一行,包括这个服务器的主机名和识别码。(4)当
A
继续访问这个网站时,每发送一个HTTP
请求,其浏览器就会从Cookie
文件中提取出这个文件的识别码,饼放到HTTP
请求报文的Cookie
首部行中。例如:(5)这样,服务器就能跟踪这个用户了。
-
这里再提一点,转发和重定向的区别:转发由服务器端进行页面跳转,重定向由客户端进行页面跳转。如下图:
7.3.4 万维网的文档
-
使用超文本标记语言
HTML
。注意HTML
并不是应用层的协议。 -
一个例子如下(注意:后面大括号的内容是注释):
- 文档内可以有超链接:分为远程链接(链接到其他页面)和本地链接(链接到本文档的其他位置)。
7.3.5 万维网的信息检索功能
-
又搜索引擎提供检索功能,分为两类:
(1)全文检索引擎,例如谷歌和百度;
(2)分类目录检索系统,例如雅虎中国、新浪、搜狐、网易等。
7.4 电子邮件服务
- 电子邮件传输的过程如下图:
-
发送方需要使用用户代理将邮件发送到发送方邮件服务器中(使用
SMTP
协议),然后发送方邮件服务器将邮件发送到接收方邮件服务器(使用SMTP
协议),最后接收方用户使用POP3
或者IMAP
协议从接收方邮件服务器读取文件。 -
电子邮件由**信封(envelope)和内容(content)两部分组成。在信封上,最重要的就是收件人的地址。
TCP/IP
体系的电子邮件系统规定电子邮件地址(e-mail address)**的格式如下:用户名@邮件服务器域名。例如xyz@abc.com
。 -
关于
SMTP
有以下注意点:(1)使用客户服务器模式;
(2)发件人的邮件发送到邮件服务器的邮件缓存后,
SMTP
客户每隔一段时间(例如30分钟)就对邮件缓存扫描一次,如发现有邮件,就使用SMTP
的熟知端口号25
与接收方的SMTP
服务器建立连接,将邮件传过去。(3)
STMP
不使用中间的服务器。 -
关于
POP3
和IMAP
的对比如下:
-
POP3
如果在读取邮件后会从接收方服务器将该邮件删除,换个电脑后就没有改邮件了;IMAP
不会,IMAP
是一个联机协议。 -
另外指的一提的是现在最常用的是基于
WEB
的电子邮件。使用HTTP
传输。
7.5 动态主机配置协议DHCP
-
每一台计算机刚接入网络的时候需要配置很多信息,例如:
(1)本机的
IP
地址;(2)子网掩码;
(3)默认路由器的
IP
地址;(4)
DNS
服务器的IP
地址。 -
这些内容如果手动配置时十分麻烦的,另外普通人也不一定直到这些信息甚至这些概念。另外也不能实现给每台计算机配置好这些信息,因为我们不知道这台计算机最终会在哪个网络中。
DHCP
就是解决这个问题的,可以实现这些内容的自动配置。 -
动态主机配置协议
DHCP(Dynamic Host Configuration Protocol)
提供了一种机制,称为即插即用联网。这种机制允许一台计算机加入新的网络和获取IP
地址二不需要手工参与。 -
需要
DHCP
服务器实现给新接入网络的计算的配置工作,DHCP
服务器可以给计算机分配IP
地址,通知其默认路由器IP
地址,DNS
服务器的IP
等。 -
DHCP
使用客户服务器模式。需要IP
地址的主机在启动时就像DHCP
服务器广播发送发现报文(DHCPDISCOVER)(目的地址为255.255.255.255
,原地址为0.0.0.0
),DHCP
服务器在收到这个消息后进行答复,回答报文称为提供报文(DHCPOFFER)。 -
为了让互联网中的
DHCP
服务器不太多,不是给每个网络分配一个DHCP
服务器,而是每个网络至少配备一个DHCP中继代理。如下图:
-
另外
DHCP
使用运输层的UDP
协议。 -
DHCP
服务器分配给计算机的IP
都是临时的,每次DHCP
服务器会从IP
池(池化技术)中分配一个IP
给计算机,计算机可以拥有这个IP
一段时间,这段时间被称为租用期(lease period)。 -
DHCP
的详细工作过程如下图:
- 在我们的电脑中,
控制面板\网络和 Internet\网络连接
中右击网络查看属性可以查看Internet协议版本4(TCP/IPv4)
的属性信息,如果设置的是自动配置,则表明使用的是DHCP
,如下图:
- 我们也可以使用
cmd
的命令行查看DHCP
信息,命令是ipconfig /all
,如下图: