第二章:应用层 |《计算机网络:自顶向下方法》
一、应用层协议原理
1、网络应用程序体系结构
客户-服务器体系结构(C-S):Web
点对点结构(P2P):迅雷
混合结构:Napster
2、进程通信
客户和服务器进程
进程与计算机网络之间的接口:进程通过套接字(socket)软件接口向网络发送报文和从网络接收报文。
进程寻址:主机的地址由IP地址标识,进程的位置由端口号标识。
3、可供应用使用的运输服务
运输服务的衡量标准:可靠数据传输、吞吐量、定时、安全性
4、因特网提供的运输服务
TCP服务:特点是面向连接和可靠的数据传送
UDP服务:特点是无连接的最小服务(非可靠)
5、应用层协议
应用层协议(application layer protocol)定义了运行在不同端系统上的应用程序进程如何相互传递报文。
(1)交换的报文类型,如请求报文和响应报文;
(2)各种报文类型的语法,如报文中的各个字段公共详细描述;
(3)字段的语义,即包含在字段中信息的含义;
(4)进程何时、如何发送报文及对报文进行响应。
二、Web和HTTP
1、HTTP
HTTP即超文本传输协议,是Web的应用层协议。
Web是由对象组成的,比如一个Web页面包含一个HTML文本和5个JPRG图形,那么这个Web就包含了6个对象。
HTTP使用TCP作为它的支撑运输协议。
HTTP不保存关于客户的任何信息,所以我们说HTTP是一个无状态协议。
2、非持续连接和持续连接
参考链接: 面试时如何优雅的谈论HTTP/1.0/1.1/2.0
HTTP 1.0
HTTP 1.0规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求。但是,这也造成了一些性能上的缺陷,例如,一个包含有许多图像的网页文件中并没有包含真正的图像数据内容,而只是指明了这些图像的URL地址,当WEB浏览器访问这个网页文件时,浏览器首先要发出针对该网页文件的请求,当浏览器解析WEB服务器返回的该网页文档中的HTML内容时,发现其中的图像标签后,浏览器将根据标签中的src属性所指定的URL地址再次向服务器发出下载图像数据的请求。显 然,访问一个包含有许多图像的网页文件的整个过程包含了多次请求和响应,每次请求和响应都需要建立一个单独的连接,每次连接只是传输一个文档和图像,上一次和下一次请求完全分离。即使图像文件都很小,但是客户端和服务器端每次建立和关闭连接却是一个相对比较费时的过程,并且会严重影响客户机和服务器的性能。当一个网页文件中包含JavaScript文件,CSS文件等内容时,也会出现类似上述的情况。
HTTP1.1
为了克服HTTP 1.0的这个缺陷,HTTP 1.1支持持久连接(HTTP/1.1的默认模式使用带流水线的持久连接),在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。一个包含有许多图像的网页文件的多个请求和应答可以在一个连接中传输,但每个单独的网页文件的请求和应答仍然需要使用各自的连接。HTTP 1.1还允许客户端不用等待上一次请求结果返回,就可以发出下一次请求,但服务器端必须按照接收到客户端请求的先后顺序依次回送响应结果,以保证客户端能够区分出每次请求的响应内容,这样也显著地减少了整个下载过程所需要的时间。
HTTP2.0
HTTP/2.0 时代拥有了「多路复用」功能,意思是: 在一条连接上,我可以同时发起无数个请求,并且响应可以同时返回。
3、HTTP报文格式
参考链接: HTTP请求、响应报文格式 - CSDN博客
请求报文:HTTP请求报文主要由请求行、请求头部、请求正文3部分组成。
响应报文:HTTP响应报文主要由状态行、响应头部、响应正文3部分组成。
4、用户和服务器的交互:cookie
参考链接: 计算机网络应用层之cookie - CSDN博客
1)cookie技术的组成
在了解cookie的工作原理之前,我们先来了解一下cookie技术的组成,它由4部分组成,如下:
- 在HTTP响应报文中有一个cookie首部行;
- 在HTTP请求报文中有一个cookie首部行;
- 在用户端系统中保留有一个cookie文件,由用户浏览器管理;
- 在Web站点有一个后端数据库;
2)cookie的工作原理
在了解了cookie技术的组成之后,我们来看看cookie是怎么工作的。下面就以主机A中的浏览器访问网站xxx作为例子来分析cookie的工作原理吧。
首先主机A使用浏览器上网,当主机A第一次访问xxx网站时,当请求报文到达xxx的Web服务器时,该Web服务器将产生一个唯一识别码(例如:12345),并以此作为索引在它的后端数据库中产生一个表项,并用Set-cookie:首部行和刚才产生的值为设置HTTP响应报文的首部。这样在HTTP响应报文的首部,我们就可以看到这样的一个首部行——Set-cookie: 12345.
当主机A的浏览器收到该HTTP响应报文时,它会看到Set-cookie:首部,然后浏览器在它的本地cookie文件上加入一行,其中包括Set-cookie:首部行中的识别码。
由于主机A的cookie文件已经有了用于xxx网站的表项,因此当主机A的浏览器继续浏览xxx网站时,每请求一个Web页面,其浏览器就会从它的cookie文件中获取到xxx网站的识别码,并放入HTTP请求报文中cookie首部行中,即加入了首部行Cookie: 12345。
当xxx网站的服务器收到该包含Cookie首部行的HTTP请求报文后,服务器通过查询后端服务器,确定cookie标识码对应的用户,从而可以直接知道用户的信息(即知道确实有一个这样的用户,不久前登陆过该网站)。
注意,在cookie的方式下,xxx网站的服务器可以跟踪主机A在该站点的活动,xxx Web站点并不需要知道主机A的用户是谁,但是,它确切地知道用户12345访问了哪些页面,按照什么顺序,在什么时间。
简单点来说,cookie用于标识用户,用户首次访问站点时,可能需要提供一个用户标识,但在后继的访问中,浏览器向服务器传递一个cookie首部,供服务器识别该用户。因此cookie可以在无状态的HTTP上建立一个用户会话层,允许服务器通过用户与应用程序之间的会话对用户进行验证。
5、Web缓存器(代理服务器)
1)使用Web缓存器的2个主要原因:
- 降低延迟:缓存离客户端更近,因此,从缓存请求内容比从源服务器所用时间更少,呈现速度更快,网站就显得更灵敏。
- 降低网络传输:副本被重复使用,大大降低了用户的带宽使用,其实也是一种变相的省钱(如果流量要付费的话),同时保证了带宽请求在一个低水平上,更容易维护了。
2)工作过程
6、条件get方法
参考链接: 应用层-3、web缓存和代理服务器技术 - CSDN博客
上述实现方式还有一个问题就是无法保证本地存储器内的内容是最新的,所以需要采用一种方式——(条件性GET方法)来保证数据是最新版本。这个方法的基本思想就是本地代理服务器向URL目标服务器发送一个GET请求消息,这个消息里面包括了本地存储资源的更新时间,在URL目标服务器中,会用这个时间与最新版本的时间进行比对,如果时间一致就返回 304 Not Modified , 否则就返回 200 OK 和最新版本的资源。代理服务器接收到返回信息后会判断这个返回码,如果是304,就直接返回给客户给本地代理服务器存储的资源;如果是200就把新接收到的资源返回给用户,同时更新代理服务器存储的内容。
三、文件传输协议FTP
FTP的特点:同HTTP一样,也是运行在TCP上的协议,但它采用了两个并行的TCP连接来传输文件,一个用于控制连接,一个用于数据连接,所以我们称其为带外(out-of-band)传输。另外,控制链接和持续整个过程,而每传输一个新文件,都需要新开一条数据连接。
四、因特网中的电子邮件
参考链接: [计算机网络-应用层] 因特网中的电子邮件
电子邮件的组成部分:
用户代理、邮件服务器和简单邮件传输协议。
用户代理允许用户阅读、回复、转发、保存和撰写报文。
邮件服务器组成了电子邮件体系结构的核心。每个接收方在其中的某个服务器上有一个邮箱。邮箱包含用户的到达报文、离开(将发送)邮件报文的报文队列;在发送电子邮件报文的邮件服务器之间采用SMTP协议。
SMTP是因特网电子邮件中主要的应用层协议。它使用TCP可靠数据传输服务,从发送方的邮件服务器向接收方的邮件服务器发送邮件。
1、SMTP
使用TCP从客户机到服务器可靠地传输电子邮件报文,用端口25。
直接传输:发送服务器到接收服务器。
传输的三个阶段:握手 (欢迎)、报文的传输、关闭。
命令/响应交互
命令: ASCII文本
响应: 状态码和短语
报文必须以7比特ASCII格式。
为了描述SMTP的基本操作,下面来模拟一下Alice给Bob发送一封简单的ASCII报文的过程:
1) Alice使用UA写作报文并向 bob@someschool.edu 发送
2) Alice的UA向其邮件服务器发送报文;报文放置在报文队列中
3) SMTP的客户机侧打开与Bob的邮件服务器的TCP连接
4) SMTP通过TCP连接发送Alice的报文
5) Bob的邮件服务器将该报文放入Bob的邮箱
6) Bob调用其用户代理来读报文
2、SMTP与HTTP的对比
HTTP: 拉协议 SMTP: 推协议
SMTP要求全部7位ASCII码格式传输,HTTP无此要求
HTTP: 每个对象封装在其自己的响应报文中 SMTP: 所有报文对象放在一个报文中
两者都有ASCII 命令/响应交互,状态码
3、邮件报文格式
一个典型的报文首部如下:
From: alice@crepes.fr
To: bob@hamburger.edu
Subject: Searching for the meaning of life.
在报文首部之后,紧接着是一个空白行,然后是以ASCII格式表示的报文主体。
MIME:
由于在RFC 822中描述的报文首部只适合于发送普通ASCII文本,不能充分满足多媒体报文(如带有图片、音频和视频的报文)或携带有非ASCII文本格式(例如,非英语语言所使用的字符)的报文的需求。为发送非ASCII文本的内容,发送方的用户代理必须在报文使用附加的首部行。这些额外的首部行定义在RFC 2045和RFC 2046中,多用途因特网邮件扩展(MIME)是对RFC 822的扩展。
支持多媒体的两个关键MIME首部是Content-Type:和Content-Transfer-Encoding:。
Content-Type:首部行允许接收用户代理对报文采取适当的动作。
Content-Transfer-Encoding:首部行提示接收用户代理该报文主体已经使用了ASCII编码,并指出了所用的编码类型。
接收服务器一旦接收到具有RFC 822和MIME首部行的报文,就在该报文的顶部添加一个Received:首部行;该首部行定义了发送该报文的SMTP服务器的名称(from),接收该报文的SMTP服务器的名称(by),以及接收服务器接收到的时间。
有时一个邮件有多个Receive:行,这是因为有的邮件在发送方和接收方之间的路径要经过不止一个SMTP服务器转发。
4、邮件访问协议
在上述分析中,有一个疏漏的环节,那就是在Alice向Bob发送邮件的过程中,Bob是如何通过运行在他本地PC上的用户代理,获得位于某ISP的邮件服务器上的他的邮件呢?注意到Bob的用户代理不能使用SMTP来取回邮件,因为取邮件时一个拉操作,而SMTP是一个推协议。因此我们要引入邮件访问协议。
POP
POP协议支持“离线”邮件存储转发处理:客户端程序连接服务器,下载所有未阅读的电子邮件;一旦将邮件从邮件服务器端送到客户端上,邮件服务器上的邮件将会被删除。
POP3
POP3协议允许电子邮件客户端下载服务器上的邮件,但是在客户端的操作(如移动邮件、标记已读等),不会反馈到服务器上,比如通过客户端收取了邮箱中的3封邮件并移动到其他文件夹,邮箱服务器上的这些邮件是没有同时被移动的 。
IMAP,以及和POP3的区别
IMAP像POP3那样提供了方便的邮件下载服务,让用户能进行离线阅读。IMAP和POP3是邮件访问最为普遍的Internet标准协议。不同的是:
- IMAP提供Webmail与电子邮件客户端之间的双向通信,客户端收取的邮件仍然保留在服务器上,同时在客户端上的操作都会反馈到服务器上(如:删除邮件,标记已读等,服务器上的邮件也会做相应的动作。所以无论从浏览器登录邮箱或者客户端软件登录邮箱,看到的邮件以及状态都是一致的)。而POP3在客户端的操作不会反馈到服务器上。
- IMAP更好地支持了从多个不同设备中随时访问新邮件。
- IMAP提供的摘要浏览功能可以让你在阅读完所有的邮件到达时间、主题、发件人、大小等信息后才作出是否下载的决定。
- POP3需要下载未阅读的邮件,IMAP可以不用把所有的邮件全部下载,而是通过客户端直接对服务器上的邮件进行操作。所有通过IMAP传输的数据都会被加密,从而保证通信的安全性。
- IMAP 整体上为用户带来更为便捷和可靠的体验。POP3 更易丢失邮件或多次下载相同的邮件。
五、DNS:因特网的目录服务
参考链接: [计算机网络-应用层] DNS:因特网的目录服务
DNS提供的服务主要为主机名到IP地址。
1、DNS提供的其他服务:
- 主机别名。有着复杂主机名的主机可以拥有一个或多个别名。原复杂主机名也叫规范主机名。主机别名(如果有的话)比主机规范名更容易记忆。应用程序可以调用DNS来获得主机别名对应的规范主机名以及主机的IP地址。
- 邮件服务器别名。同主机别名类似,电子邮件应用程序调用DNS,对提供的邮件服务器别名进行解析,以获得该主机的规范主机名以及其IP地址。MX(Mail Exchanger,邮件交换)记录允许一个公司的邮件服务器和Web服务器用相同的(别名化的)主机名。
- 负载分配。DNS也用于在冗余的服务器(如冗余的Web服务器等)之间进行负载分配。对于这些冗余的Web服务器,一个IP地址集合对应于同一个规范主机名。DNS数据库中存储着这些IP地址集合。当客户机为映射到这个IP地址集合的名字发出一个DNS请求时,该服务器用包含全部这些地址的报文回答,但在每个回答中旋转这些地址排放顺序。因为客户机通常总是向IP地址排在最前面的服务器发送HTTP请求报文,所以DNS就在所有这些冗余的Web服务器之间旋转分配负载。DNS旋转同样适用于邮件服务器,因此,多个邮件服务器可以具有相同的别名。
2、DNS的工作原理
DNS采用分布式的设计方案。
下面是DNS服务器的部分层次结构(由上到下,每层分别是根服务器、TLD服务器、权威服务器):
1)分布式、层次数据库
大致来说,有3种类型的DNS服务器:根DNS服务器、顶级域(Top Level Domain,TLD)DNS服务器和权威DNS服务器。
假设一个DNS客户机要确定主机名 http://www.amazon.com的IP地址。粗略来讲,将发生下列事件:
·客户机请求根服务器以发现com TLD服务器 ·客户机请求com TLD服务器以得到 http://amazon.com 权威服务器 ·客户机请求 http://amazon.com 权威服务器以得到对 http://www.amazon.com的IP地址
下面来详细介绍一下这三种类型的DNS服务器:
·根DNS服务器
在因特网上有13个根DNS服务器(标号为a到m),尽管我们将这13个根DNS服务器中的每个都视为单个的服务器,但每台“服务器”实际上是冗余服务器的群集,以提供安全性和可靠性。
·顶级域(TLD)服务器
负责com, org, net, edu等,以及所有顶级国家域 uk, fr, ca, jp.
·权威DNS服务器
组织的DNS服务器为组织的服务器(如Web和电子邮件)提供对IP映射的权威主机名。 能够由组织或服务提供商维护。
·本地DNS服务器
本地DNS服务器严格来说并不属于DNS服务器的层次结构,但它对DNS层次结构是很重要的。
在图1的例子中用到了递归查询和迭代查询。从 http://cis.poly.edu到 http://dns.poly.edu发出的查询是递归查询,因为该查询请求 http://dns.poly.edu以自己的名义获得该映射。而后继的三个是迭代查询,因为所有的回答都是直接返回给 http://dns.poly.edu。
从理论上,所有的DNS查询既可以是迭代的也可以是递归的。例如,图2显示了一条DNS查询链,其中所有查询都是递归的。
实际中,查询通常遵循图1中的模式:从请求主机到本地DNS服务器的查询是递归的,其余查询是迭代的。
2)DNS缓存
为了改善时延性能并减少在因特网上到处传输的DNS报文数量,DNS广泛使用缓存技术。
原理:当一个DNS服务器接收一个DNS回答(例如,包含主机名到IP地址的映射)时,DNS服务器能将回答中的信息缓存在本地存储器。由于主机与主机名的IP地址映射决不是永久的,所以DNS服务器在一段时间后(通常设置为两天)将丢弃缓存的信息。
3)域名解析过程
3、DNS记录和报文
1)DNS记录:
实现DNS分布式数据库的所有DNS服务器共同存储着资源记录(Resource Record,RR),RR提供了主机名到IP地址的映射。下面是RR的基本格式:
Type=A name 是主机名,Value是IP地址
Type=NS name 是域 (如 http://foo.com), Value是该域的权威名字服务器的IP地址
Type=MX Value是与name相联系的邮件服务器
Type=CNAME Value是别名为name的主机对应的规范主机名
注:通过使用MX记录,一个公司的邮件服务器和其他服务器(如它的Web服务器)可以使用相同的别名
2)DNS报文:
DNS只有两种报文,即查询和回答报文,并且这两种报文有着相同的格式。
下图是DNS报文格式:
6、P2P应用
问题 : 从一个服务器向N个节点分发一个文件需要多长时间?
客户机/服务器:服务器串行地发送N个副本
- 时间: NF/us
- 客户机i需要F/di时间下载
P2P:服务器必须发送一个副本
- 时间: F/us
- 客户机i需要F/di时间下载
- 总共需要下载NF比特
- 最快的可能上传速率: us + ∑ui
PS:
广告时间啦~
理工狗不想被人文素养拖后腿?不妨关注微信公众号: