第二章 应用层

2.1 应用层协议原理

1.现在网络应用程序中两种主流体系结构:客户-服务器体系结构和对等(P2P)体系结构。
客户-服务器体系结构的特点是客户之间不相互通信,且服务器具有固定的、周知的地址(IP地址)。
P2P体系结构对于专用服务器有最小的(或没有)依赖,应用程序在间断连接的主机对之间字节通信。
P2P体系结构最棒的特性是它的自扩展性。其是成本有效的,因为不需要庞大的服务器基础设施和服务器宽带。但该体系结构面临的挑战主要是:ISP友好、安全性和激励。
2.进程通信
客户和服务器:在给定的一对进程之间的通信会话场景中,发起通信(即在该会话开始时发起与其他进程的联系)的进程被标识为客户,在会话开始时等待联系的进程是服务器。

应用包含很多对交流进程,两个进程彼此发送信息的时候,进程发送到网络和从网络中接收信息都要一个软件接口,叫做套接字(socket ),一个类比就是process是房子,socket是门。
socket是计算机内应用层与传输层的接口 ,socket也叫做应用程序与网络间的API(Application Programming Interface)。
应用开发者可以控制应用层的所有东西,但是对传输层的控制却几乎做不到,唯一可以控制的传输层部分为(1)传输协议的选择(2)也许还能确定下一些传输层的参数,比如缓冲区最大值,最大报文长度等 。
一旦开发者选中了哪个传输层协议, 应用就建立在由该协议提供的传输层服务上。

一个主机上的程序如果想发送数据包到另一个主机上的程序,那么接收方就得有个地址,为了识别目标,两个信息需要被指明:(1)主机的地址(2)能明确出主机上的接收程序的标识符 。
对于前者,用IP地址标识;对于后者,用端口号来标识。

可供应用程序使用的传输层服务
包括:
1.可靠数据传输
2.吞吐量
3.定时
4.安全性

TCP服务

TCP服务模型包括面向连接的服务和可靠的数据传输的服务。
面向连接的服务:TCP 协议在开始发送应用消息之前客户和服务器就需要彼此交换传输层信息,这个所谓的握手提示客户和服务器要准备好数据包开始传输了。完成握手对话后,在两个进程的socket之间就会出现一个TCP 连接,这个连接是全双工的,就是说客户和服务器可以同时向彼此发送消息 ,但应用完成消息传输之后 ,它还必须拆除这个连接。
可靠的数据传输服务: 通信进程可以仰赖TCP保证所有的数据都无误正确的传输,当发送方把字节流送入socket,它可以依靠TCP把同样的字节流传输到接收方socket ,不会有丢失,也不会有重复 。
TCP协议还具有拥塞控制机制,这种服务不一定能为通信进程带来直接好处,但能为因特网带来整体的好处。当发送方和接收方之间的网络出现拥塞时,TCP的拥塞控制机制会抑制发送进程。

UDP服务

UDP是一个不提供不必要服务的,轻量级的传输层协议 ,提供最少量的服务,UDP 是无连接的,所以进程通信前没有握手 ,UDP提供不可靠的数据传输 。
UDP没有阻塞控制机制,所以发送方发送速率可以是任意它乐意的。

2.2 Web和HTTP

HTTP

Web的应有层协议是HTTP协议(超文本传输协议),它是Web的核心。HTTP定义了web客户向web服务器请求web页面的方式,以及服务器向客户传送web页面的方式。
HTTP使用TCP作为它的支撑运输协议。HTTP客户首先发起一个与服务器的TCP连接。一旦连接建立,该浏览器和服务器进程就可以通过套接字接口访问TCP。
HTTP是一个无状态的协议。HTTP服务器并不保存关于客户的任何信息。
非持续连接:每个请求/响应对是经一个单独的TCP连接发送。
持续连接:所有的请求及其响应通过相同的TCP连接发送。
往返时间(RTT):指一个短分组从客户到服务器然后再返回客户所花费的时间。
非持续连接和持续连接的区别是:非持续连接在服务器发送完响应的数据包后,服务器会请求断开TCP连接,客户端接受完相应数据包后,会关闭TCP连接,再次发送数据会重新建立TCP连接。对于持续连接,服务器发送响应后会保持TCP连接,之后在同一个客户和这个服务器间的请求会通过这个连接传输。
非持续连接的缺点包括:每次请求都得新建TCP连接,这样每个连接建立都得为TCP分配缓存,且客户和服务器都得保存TCP 变量,这会给Web服务器带来很大的负担,因为它可能得同时为成千的用户提供服务。其次,每个数据请求-响应的过程都将会有两个RTT的延迟——一个建立TCP连接,一个请求和回复。
HTTP默认使用持续连接。但HTTP客户和服务器也能配置成使用非持续连接。

HTTP 协议采用请求/响应模型。客户端向服务器发送一个请求报文,服务器以一个状态作为响应。
以下是 HTTP 请求/响应的步骤:
1.客户端连接到web服务器:HTTP 客户端与web服务器建立一个 TCP 连接;
2.客户端向服务器发起 HTTP 请求:通过已建立的TCP 连接,客户端向服务器发送一个请求报文;
3.服务器接收 HTTP 请求并返回 HTTP 响应:服务器解析请求,定位请求资源,服务器将资源副本写到 TCP 连接,由客户端读取;
4.释放 TCP 连接:若connection 模式为close,则服务器主动关闭TCP 连接,客户端被动关闭连接,释放TCP 连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;
5.客户端浏览器解析HTML内容:客户端将服务器响应的 html 文本解析并显示;

HTTP报文格式

1.请求报文
请求报文包括请求行、首部行和请求正文(可选)部分。
如下例所示:

GET /someWeb/home.index HTTP/1.1  //请求行:
Host: www.someWeb.com             //首部行:定义目标主机
Connection: close                 //首部行:标识是持续连接还是非持续连接,close表示非持续连接,Keep
User-agent: Mozilla/4.0           //首部行:客户代理(某种浏览器)
Accept-language: cn               //首部行:可接受的语言
//首部行的最后会有一个空行,表示首部行结束,接下来为请求正文,这一行非常重要,必不可少
//请求正文

请求行分为3部分,分别是方法字段(上例中的GET)、URL字段(上例中的文件地址)和HTTP协议版本字段(上例中的HTTP/1.1)。
方法字段又可分为:GET,HEAD,PUT,POST,DELETE等。

首部行包括:目标主机、持续连接/非持续连接、客户代理、可接受语言等部分。
HTTP请求报文的通用格式为:
这里写图片描述
2.响应报文
HTTP响应报文主要由初始状态行、首部行、实体主体3部分组成。
一个HTTP响应报文:

http/1.1 200 OK    //初始状态行
Connection:close   //首部行,以下6行。该行告诉客户,发送完报文后将关闭TCP连接。
Date:Tue, 09 Aug 2011 15:44:05 GMT//检索到对象,插入到响应报文并发送该响应报文的时间。
Server: Apache/2.2.3 (CentOS)//产生该报文的服务器
Last-Modified:Tue ,09 Aug 2011 15:11:03 GMT
Content-Length:6821//被发送对象的字节数
Contert-Type:text/html//实体体中对象的文本类型

(data data data ...)//实体体

初始状态行包括:协议版本、状态码、相应状态信息。
状态代码为3位数字,200~299的状态码表示成功,300~399的状态码指资源重定向,400~499的状态码指客户端请求出错,500~599的状态码指服务端出错(HTTP/1.1向协议中引入了信息性状态码,范围为100~199)。

这里列举几个常见的:

状态码说明
200响应成功
302跳转,跳转地址通过响应头中的Location属性指定
400客户端请求有语法错误,不能被服务器识别
403服务器接收到请求,但是拒绝提供服务(认证失败)
404请求资源不存在
500服务器内部错误

HTTP响应报文的通用格式为:
这里写图片描述

用户与服务器的交互:cookie

通常,一个Web站点希望能够识别用户,可能是因为服务器想限制用户的访问,或者因为它希望内容与用户身份联系起来。为此,HTTP使用了cookie。
cookie技术有4个组件:
1.在HTTP响应报文中的一个cookie首部行;
2.在HTTP请求报文中的一个cookie首部行;
3.在用户端系统中保留有一个cookie文件,并由用户的浏览器进行管理;
4.位于Web站点的一个后端数据库。
cookie可以用来识别用户,用户首次访问一个站点时,需要提供些一个用户标识,在之后的会话中,浏览器会在向服务器发送一个cookie首部,从而向服务器标识了用户。因此cookie可以在无状态的HTTP上建立一个用户会话层。

Web缓存

Web缓存器是能够代表Web服务器来满足http请求的网络实体。 Web缓存器有自己的磁盘存储空间,并在存储空间中保存最近请求过的对象的副本。
Web缓存器是服务器同时又是客户。
Web 缓存器的部署有两个原因,第一,Web 缓存器能大大减少请求的回复时间,特别是当客户和初始服务器之间r的瓶颈带宽比客户和Web缓存器间的瓶颈带宽小的时候;第二,Web缓存器可以大大减少一个机构通往互联网的流量,因此机构可以不升级带宽,也就省下开销。更重要的,Web缓存器可以大大减少整个互联网的网络请求流量,让每个应用的性能都能有所改善 。

如果一个机构的带宽不够用,当然可以选择升级带宽,但这是个花费很大的选择,如果选择安装Web缓存器可以达到同样的效果,但是价格却低得多,所以这是大多数机构的选择 。

条件GET方法

存放在get服务器中的对象副本可能是陈旧的,但HTTP协议有一种机制,允许缓存器证实它的对象是最新的,这种机制就是条件GET方法。
如果,1,请求报文使用GET方法;并且2请求报文中包含一个“If-Modified-Since:”首部行。那么,这个HTTP请求报文就是一个条件GET请求报文。

2.3 文件传输协议:FTP

典型的FTP会话中,用户想要向远端的计算机接收文件或发送文件,为了用户能连接远端用户,用户必须提供用户识别和密码,提供这些授权信息之后,用户就可以从本地文件系统发送文件到远端文件系统,反之亦然。

用户先提供远端计算机的主机名,引发本地计算机的FTP客户进程与远端计算机的FTP服务器进程建立TCP连接,然后用户提供用户身份证明和密码,这些会被当做FTP命令的一部分通过TCP连接发送出去,一旦服务器核准了这个用户,用户就可以把本地文件系统的文件复制到远端文件系统,反之亦然。

FTP协议和HTTP协议最大的不同是:
FTP使用了两个并行的TCP连接来传输文件,一个是控制连接,一个是数据连接。控制连接用于在主机之间传输控制信息,如用户标识,口令等。数据连接用于实际传输一个文件。

当用户主机与远程主机开始一个FTP会话时,FTP的客户端首先会在服务器21号端口与服务器端发起一个用于控制的TCP连接。当FTP服务器端从该连接上收到一个文件传输的命令后,就发起一个到客户端的TCP数据连接(端口20)。FTP在该数据连接上准确的传送一个文件,然后关闭该连接。
控制连接贯穿整个用户会话期间,而数据连接每一次数据传输都要建立一个新的连接。

FTP服务器必须在整个会话期间保留用户的状态,而HTTP是无状态的。

2.4 因特网中的电子邮件

组成:用户代理、邮件服务器、简单邮件传输协议(SMTP)
一个典型的邮件发送过程是:从发送方的用户代理开始,传输到发送方的邮件服务器,再传输到接收方的邮件服务器,然后在这里被分发到接收方的邮箱中。

SMTP是因特网电子邮件中主要的应用层协议。它使用TCP可靠的数据传输服务,从发送方的邮件服务器向接收方的邮件服务器发送邮件。

SMTP

特点:
1.主体部分只能采用简单的7位ASCII码;
2.发送方服务器上运行客户端,接收方服务器上运行服务器端;
3.SMTP客户机通过25号端口与服务器建立TCP连接,如果没有开机,则会稍后继续尝试,一旦建立,就正常握手传输。
4.持久连接:当还有另外的报文要发送,就在相同的TCP重复发送;
5.使用QUIT退出。

与HTTP的对比

与HTTP的不同:
HTTP:拉协议,获取文件的机器发起;
SMTP:推协议,发送文件的机器发起;
HTTP:无编码控制;
SMTP:7位ASCII;
HTTP:每个对象封装到它自己的HTTP响应报文中;
SMTP:把所有报文对象放在一个报文之中

邮件访问协议

为何需要单独的邮件访问协议:
由于SMTP是推协议,不能解决接收方用户代理从接收方服务器获取邮件的问题。

目前一些流行的邮件访问协议,包括第三版的邮局协议(POP3)、因特网邮件访问协议(IMAP)以及HTTP。

SMTP用来将邮件从发送方的邮件服务器传输到接收方的邮件服务器;SMTP也用来将邮件从发送方的用户代理传送到发送方的邮件服务器;而像POP3这样的邮件访问协议,用来将邮件从接收方的邮件服务器传送到接收方的用户代理。

POP3

POP3按照3个阶段进行工作:
特许:用户代理发送用户名和口令鉴别用户;
事务处理:用户代理取回报文,同时可以对报文进行删除和取消删除标记;
更新:出现在客户发出了quit命令后,目的是结束该POP3会话,这时,邮件服务器删除那些标记为删除的报文。

IMAP

特点:
为用户提供了创建文件夹以及将邮件从一个文件夹移动到另一个文件夹的命令。
为用户提供了在远程文件夹中查询邮件的命令。
具有允许用户代理获取报文组件的命令。

基于web的电子邮件

特点:
收件人通过浏览器从邮箱取报文时,使用的是HTTP而不是POP3或IMAP;
发件人通过浏览器发送报文到邮件服务器,采用的是HTTP而不是SMTP;
邮件服务器之间发送报文还是使用SMTP。

2.5 DNS:因特网的目录服务

DNS的主要任务是提供主机名到IP地址转换的的目录服务。
DNS是:
1.一个由分层的DNS服务器实现的分布式数据库。
2.一个使得主机能够查询分布式数据库的应用层协议。
DNS协议运行在UDP之上,使用53号端口。

DNS提供的服务:
除了进行主机名到IP地址的转换外,DNS还提供了一些重要的服务:
1.主机别名:应用程序可调用DNS来获得主机别名对应的规范主机名以及主机的IP地址。
2.邮件服务器别名:应用程序可调用DNS,对提供的邮件服务器别名进行解析,以获得该主机的规范主机名及其IP地址。
3.负载分配:对于繁忙的站点,旋转均衡的回复查询结果。

DNS工作机理:

集中式

即在因特网上只使用一个DNS服务器,该服务器包含所有的映射。
该设计方式虽然简单,但已不适用于当前的因特网,这种集中式的设计的问题包括:
1.单点故障。如果该DNS服务器奔溃,整个因特网随之瘫痪。
2.通信容量。单个DNS服务器不得不处理所有的DNS查询。
3.远距离的集中式数据库。远距离将导致很大的时延。
4.维护。维护需要付出很大的代价。

分布式、层次式

3种类型的DNS服务器
1.根DNS服务器。每台服务器实际上是一个冗余的服务器网络,以提供安全性和可靠性。
2.顶级域服务器。这些服务器负责顶级域名如com、org、net、edu和gov,以及所有国家的顶级域名如uk、fr、ca和jp。
3.权威DNS服务器。
这3种类型的DNS服务器的结构,如下图所示。
这里写图片描述
除了以上3种DNS服务器外,还有另一类重要的DNS,称为本地DNS服务器。一个本地DNS服务器严格来说并不属于该服务器的层次结构,但它对DNS层次结构是重要的。

DNS查询方式分为递归查询和迭代查询。从理论上讲,任何DNS查询既可以是迭代的也能是递归的。

DNS缓存:DNS缓存可以改善时延性能并减少因特网上传输的DNS报文数量,因而得到广泛的使用。
其原理是:在一个请求链中,当某DNS服务器收到一个DNS回答时,它能够将回答的信息缓存在本地存储器中。
DNS服务器通常会定期丢弃缓存信息。

DNS记录和报文

2.6 P2P应用

可参考:https://www.cnblogs.com/lca1826/p/6531782.html

P2P文件分发

在P2P文件分发中,每个对等方都能够重新分发其所有的该文件的任何部分,从而协助服务器进行分发。

P2P体系结构的扩展性

对足够大的N(对等方的数量):

客户机/服务器体系结构的分发时间随着对等方的数量N线性增加并且没有界。
P2P体系结构,其最小分发时间曲线与log2N曲线类似,因此最小分发时间远小于客户机/服务器体系结构的分发时间。其自扩展性很强。

BitTorrent

BitTorrent是一种用于文件分发的流行P2P协议。

分布式散列表

参考:《计算机网络自顶向下方法》第六版

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值