《计算机网络 自顶向下方法》整理(二)应用层

一、应用层协议原理

1、网络应用程序体系结构

应用程序体系结构由应用程序研发者设计,规定了如何在各种端系统上组织该应用程序。现代网络用用程序中有两种主流体系结构:客户-服务器体系结构或对等体系机构(P2P):

  • 客户-服务器体系结构中,客户相互之间不直接通信,此外服务器具有固定的、周知的地址称为IP地址。
  • 在一个P2P体系结构中,对位于数据中心的专用服务器有最小(或没有)依赖。应用程序在间断连接的主机对直接使用直接通信,这些主机对被称为对等方。如文件共享和下载加速器等软件。P2P体系结构的特征之一是它的自扩展性,每个对等方通过向其他对等方分发文件也为系统增加服务能力。,它们通常不需要庞大的服务器基础设施和服务器带宽。但其安全性和可靠性会面临一些挑战。

部分应用具有混合的体系结构,它结合了客户-服务器和P2P元素,如许多即时讯息应用。

2、进程通信

用操作系统的术语来说,进行通信的是进程而不是程序。在两个不同端系统上的进程,通过跨域计算机网络交换报文而相互通信。

2.1、客户和服务器进程

网络应用程序由成对的进程组成,这些进程通过网络相互发送报文。在一对进程之间的通信会话场景中,发起通信的进程被标识为客户,在会话开始时等待联系的进程是服务器。在P2P文件共享系统中,一个进程既能上传文件又能下载文件,所以进程既是客户又是服务器。

2.2、进程与计算机网络之间的接口

进程通过一个称为套接字的软件接口向网络发送报文和从网络接受报文,可以把进程想象为房子,套接字类比为门,门与门之间的是传输设施。由于套接字是建立网络应用程序的可编程接口,因此套接字也称为应用程序和网络之间的应用程序编程接口。应用程序开发者可以控制套接字在应用层端的一切,但是对其在运输层端几乎没有控制权,仅能选择运输层协议,设定几个运输层参数。

2.3、进程寻址

在因特网中主机由IP地址标识,目的地端口号来标识对应的应用程序。

3、可供应用程序使用的运输服务

包括因特网在内的很多网络提供了不止一种运输层协议,当开发一个应用时,必须选择一种可用的运输层协议。应用程序进行根据可靠数据传输、吞吐量、定时和安全性四个方面考量选择对应的协议。

4、因特网提供的运输服务

因特网(更一般的是TCP/IP网络)为应用程序提供两个运输层协议,即UDP和TCP

4.1、TCP服务

TCP服务模型包括面向连接服务和可靠数据传输服务,当某个应用程序调用TCP作为其运输协议时,该应用程序就能获得来自TCP的这两种服务:

  • 面向连接的服务:在应用程序数据报文开始流动之前,TCP让客户和服务器相互交换运输层控制信息,这个所谓的握手过程提醒客户和服务器,让它们为大量分组做准备。在完成握手后,一个TCP连接就在两个进程的套接字之间建立了。这条连接是全双工的,即连接双方的进程可以在此连接上同时进行报文收发。当应用程序结束报文发送后,必须拆除连接
  • 可靠的数据传送服务:通信进程能够依靠TCP、无差别按适当顺序交付所有发送的数据。当应用程序的一端将字节流传送进套接字时,它能够依靠TCP将相同的字节交付给接收方的套接字,而没有字节的丢失和冗余。

TCP协议还拥有拥塞控制机制,当发送方和接受方之间的网络出现拥塞时,TCP的拥塞控制机制会抑制发送进程。TCP拥塞控制同时也试图限制每个TCP连接,使它们达到公平共享网络带宽的目的。

4.2、UDP服务

UDP是一种不提供不必要服务的轻量级运输协议,它提供最小服务。它是无连接的,因此在两个进程通信前没有握手过程。它提供一种不可靠数据传输服务。此外,它也没有拥塞控制机制。

image-20201104203226620

5、应用层协议

应用层协议定了了运行在不同端系统上的应用程序进程如何互相传递报文,特别是应用层协议定义了:

  • 交换报文的类型,如请求报文和响应报文;
  • 各种报文类型的语法,如报文中的各个字段如何定义和描述;
  • 字段的语义,即这些字段中信息的含义;
  • 确定一个进程何时及如何让发送报文,对报文进行响应的规则。

二、Web和Http

1、Http概述

Web的应用层协议是超文本传输协议,它是Web的核心。Http由两个程序实现,一个客户程序和一个服务器程序。Http定义了Web客户向服务器请求Web页面的方式,以及服务器向客户传送Web页面的方式。

Http使用TCP作为它的支撑运输协议。一旦客户向它的套接字接口发送了一个请求报文,该报文就脱离了客户控制并进入TCP的控制。需要注意的是服务器向客户发送被请求的文件,而不存储任何关于该客户的状态,所以说HTTP是一个无状态协议

2、非持续连接和持续连接

客户可以发出一些列请求并且服务器对每个请求进行响应时,由于这一系列请求可以以规则的间隔周期性或间断性的发出,且当这些请求是经TCP进行的,应用程序开发者就需要做出一个选择,即每个请求/响应对是经一个单独的TCP连续发送,还是所有的请求及其响应经相同的TCP连接发送。前者被称为非持续连接,后者被称为持续连接。HTTP既能使用非持续连接也能使用持续连接,其默认使用持续连接,但可配置为非持续连接。

2.1、采用非持续连接的HTTP

在非持续连接中,每个TCP连接只传输一个请求报文和响应报文,但在默认情况下,大部分浏览器打开5~10个并行的TCP连接,而每条连接处理一个请求响应事务。往返时间(RTT)是指一个短分组从客户端到服务器然后再返回客户所花费的时间,RTT包括分组传播时延,分组的中间路由器和交换机上的排队时延以及分组处理时延。三次握手中的前两部分花费了一个RTT,第三部分的确认操作可以结合发送报文操作,而服务器响应报文后又花费一个RTT,所以粗鲁来讲,总的响应时间就是两个RTT加上服务器传输HTML的时间

非持续连接有两个缺点:必须为每个请求对象建立和维护一个全新的连接,这意味这Web服务器和客户都要分配TCP的缓冲区和保持TCP变量,这无疑是一种负担。每个对象的传输都需要经受两倍的RTT时延

2.2、采用持续连接的HTTP

在采用Http1.1持续连接的情况下,一个完整的Web页面可以用单个持续TCP连接进行传送,甚至位于同一台服务器的多个Web页面在从该服务器发送给同一个客户时,可以在单个持续TCP连接上进行,它们可以一个接一个的发送,而不必等待对未决请求的回答。如果一条连接经过一段时间后仍未被使用,HTTP服务器就关闭该连接。Http/2是在Http1.1基础上构建的,它允许在相同连接中多个请求和回答交错,并增加了在该连接中优化HTTP报文请求和回答的机制。

3、HTTP报文格式

image-20201104213751948

3.1、HTTP请求报文

Http请求报文的第一行叫做请求行(request line),后继的行叫做首部行(header line)。请求行有三个字段:方法字段,URL字段和HTTP版本字段。首部行中的Host为Web代理高速缓存提供需要;Connection:Open/Close指明是否使用持续连接;User-agent指明用户代理,即向服务器发送请求的浏览器的类型;Accept-language表示用户想得到的对象的版本。另外首部后面会有一个实体体,使用Get方法时实体体为空,使用Post方法时实体体才有内容。

3.2、HTTP响应报文

响应报文有三个部分,一个初始状态行,6个首部行以及实体体(entity body)。实体体是报文的主要部分,它包含了所请求的对象本身。状态行有三个字段,协议版本字段,状态码和相应的状态信息。首部行中的Connection指明是否需要持续连接;Date为服务器从它的文件系统中检索到该对象,将对象插入响应报文并发送该响应报文的时间;Server表示它是由Apache服务器产生的,类似请求报文中的User-agent;Last-modified指示了对象创建或最后修改的日期和时间。它对于缓存服务器来说非常重要;Content-Length指示了被发送对象的字节数;Content-Type指示了实体体中的对象是HTML文件。

image-20201104215005631

4、用户与服务器的交互:Cookie

Web站点为了能够识别用户,或限制用户的访问,或将内容与用户身份联系起来,为此Http使用了Cookie。Cookie技术有4个组件:

  • 在Http响应报文中的一个Cookie首部行;
  • 在Http请求报文中的一个Cookie首部行;
  • 在用户端系统中保留一个Cookie文件,并由用户的浏览器进行管理;
  • 位于Web站点的一个后端数据库;

Cookie可以用于标识一个用户,后续会话中,浏览器向服务器传递一个Cookie首部,从而服务器标识了用户。因此Cookie可以在无状态的Http之上建立一个用户会话层。

image-20201104221059110

5、Web缓存

Web缓存器也叫代理服务器,它是能够代表初始Web服务器来满足HTTP请求的网络实体。Web缓存器即是服务器又是客户,当它接受浏览器的请求并发回响应时它是一个服务器,当它向服务器发出请求并接受响应时,它是一个客户。通过使用内容分发网络CDN,Web缓存器正在因特网中发挥这越来越重要的作用。

6、条件Get方法

尽管高速缓存能够减少用户感受到的响应时间,但同时也引入了一个问题,即存放在缓存器中的对象副本可能是陈旧的,幸好Http协议有一种机制,允许缓存器证实它的对象是最新的。这种机制就是条件Get方法。如果请求报文使用Get方法,并且请求报文中包含一个If-Modified-Since首部行,那么Http请求报文就是一个条条件Get请求报文。条件Get报文会将Last-Modified的值告诉服务器,服务器对比这两个时间判断对象有无更新。如果该对象没有更新,则返回一个带有304状态码 Not Modified的报文,没有包含对象;如果对象已更新,则返回一个带有被请求对象的报文。

三、因特网中的电子邮件

因特网电子邮件系统有3个主要组成部分:用户代理邮件服务器简单邮件传输协议

  • 用户代理允许用户阅读、回复、转发、保存和撰写邮件,如Outlook就是用户代理的例子。
  • 邮件服务器是电子邮件体系的核心,从发送方的用户代理开始,传送到发送方的电子邮件服务器,再传送到接受方的电子邮件服务器,最后到接收方,如果发送方不能将邮件交付给接收方,则会将邮件保存在服务器的报文队列中,每30分钟进行一次尝试,如若不能成功则会删除该报文并通知发送方。
  • SMTP是因特网电子协议中的应用层协议,它使用TCP可靠数据传输服务。它既可以表现为客户,也可以表现为服务器。

1、SMTP

SMTP一般不使用中间邮件服务器发送邮件,当邮件保存至发送方电子邮件服务器的报文队列中后,SMTP客户端会建立与接收方的TCP连接,如果接受方因没有开机等原因,发送方会在稍后继续尝试连接。一旦连接建立,SMTP的客户与服务就会执行某些应用层的握手。

SMTP限制所有邮件的体部分只能采用简单的7比特ASCII表示,即在用SMTP发送邮件之前,需要将二进制的多媒体数据编码为ASCII码,并在传输后将ASCII码还原为多媒体数据。而按照ASCII码的表示方法,每个报文以CRLF.CRLF结束,其中CR和LF分别表示为回车和换行。需要指出的是SMTP使用持续连接。

2、与Http的对比

SMTP和Http都用于从一台主机向另一台主机传送文件,HTTP是用Web服务器向Web客户传送文件,SMTP则是从一个邮件服务器向另一个邮件服务器传送文件,两者使用持续连接,但也有一些重要的区别:

  • HTTP是拉协议,它由接收方发起,从服务器拉取部分信息;SMTP是推协议,即发送邮件服务器把文件推向接收服务器,且连接由发送方发起;
  • SMTP要求报文使用7比特的ASCII码格式,HTTP则不受此限制;
  • 当处理一个既包含文本又包含图形的文档,HTTP把每个对象封装到它自己的HTTP响应报文中,而SMTP则把所有报文对象放在报文中;

3、邮件报文格式

邮件报文由包含环境信息的首部和报文体组成,首部行和报文体用空行(即回车换行)进行分隔。每个首部行包含一些可读的文本,由关键字,冒号和值组成,每个首部必须含有一个From:首部行和To:首部行,一个首部也许包含一个Subject:首部行以及其他可选的首部行。

4、邮件访问协议

接收方不能通过SMTP得到报文,因为取报文是一个拉动作,而SMTP是一个取协议,所以我们需要引入一个特殊的邮件访问协议来解决难题,该协议将接受方的邮件服务器上的报文传送至用户代理。目前有一些流行的邮件访问协议,包括第三版的邮局协议(POP3)、因特网邮件访问协议(IMAP)以及Http。

4.1、POP3

POP3协议简单,故功能有限。它按照三个阶段进行工作:特许,事务处理及更新。第一阶段用户代理以明文形式发送用户名和口令鉴别用户;第二阶段用户代理取回报文,在该阶段用户代理可以对报文进行删除标记,取消报文删除标记,获取邮件统计信息等动作;第三阶段出现在客户发出quit命令之后,目的是结束该POP3对话,这时该邮件服务器删除被标记为删除的报文。

特许阶段有两个主要的命令user和pass 。事务处理过程中,用户代理发出一些命令,服务器对命令做出回答,回答可能有两种:+OK指示前面的命令是正常的,-ERR指示前面的命令有异常。POP3用户代理通常被配置为“下载并删除”或“下载并保留”,这些配置信息不会在会话中携带,仅会保留在POP3服务器中。当被配置为下载并删除后,会出现PC端接受后,移动端无法再次接受的情况。

4.2、IMAP

POP3协议没有为用户提供任何创建远程文件夹并为报文指派文件夹的方法,IMAP正是为此应运而生。IMAP可以将报文与文件夹联系起来,并为用户提供了在远程文件夹中查询邮件的命令,按指定条件去查询匹配的邮件,它还维护了IMAP会话的用户状态信息,IMAP另一个重要的特性是它具有允许用户代理获取报文某些部分的命令。

4.3、基于Web的电子邮件

在此种情况下,邮件服务器之间仍然使用SMTP发送和接受邮件,而邮件服务器和浏览器之间的传递则是使用Http协议。

四、DNS:因特网的目录服务

主机的一种标识方式是使用主机名,但由于路由器无法处理这类不定长的字母数字组合,主机也可以使用IP地址进行标识。

1、DNS提供的服务

我们需要一种能进行主机名到IP地址转换的目录服务,来处理由于不同需求而存在的主机名和IP地址。这就是域名系统(Domain Name System,DNS)的主要任务。DNS是一个由分层的DNS服务器实现的分布式数据库,也是一个使得主机能够查询分布式数据库的应用层协议。DNS协议运行在UDP之上,使用53端口。

DNS通常是由其他应用层协议所使用的,包括HTTP、SMTP和FTP,将用户提供的主机名解析为IP地址。它还提供一些重要的服务:

  • 主机别名:有着复杂主机名的主机拥有一个或多个别名,其复杂主机名称为规范主机名,应用程序可以调用DNS来获取主机别名对应的规范主机名及IP地址;

  • 邮件服务器别名:电子邮件应用程序可以调用DNS,对提供的主机名别名进行解析,以获取该主机的规范主机名及其IP地址;

  • 负载分配:DNS也用在冗余的服务器之间进行负载分配,DNS数据库存储着这些IP地址的集合,当客户对映射到某地址集合的名字发出一个DNS请求时,该服务器用IP地址的整个集合进行响应,但在每个回答中循环这些地址次序

2、DNS工作机理概述

DNS的一种简单设计是在因特网只使用一个DNS服务器,该服务器包含所有的映射。但会有以下问题:

  • 单点故障:如果该DNS服务器故障,整个因特网会随着瘫痪;
  • 通信容量:单个DNS服务器不得不处理所有的DNS查询;
  • 远距离的集中式数据库:不能临近所有查询客户,中间还会经过低速和拥塞的链路,导致严重的时延;
  • 维护:不得不保留所有的因特网主机记录,导致中央数据库庞大,还不得不解决频繁更新的问题;

2.1、分布式、层次数据库

为了处理扩展性问题,DNS使用了大量的DNS数据库,它们以层次的方式组织,并分布在全世界范围内。大致来说,有3种类型的DNS服务器:根DNS服务器,顶级域(TLD)DNS服务器和权威DNS服务器:

image-20201107152301617

  • 根DNS服务器:根服务器提供TLD服务器的IP地址
  • 顶级域DNS服务器:每个顶级域(com、org、net等)和所有国家的顶级域(uk、ca、jp)等,都有TLD服务器
  • 权威DNS服务器:在因特网上具有公共可访问主机的每个组织必须提供公共可访问的DNS记录,这些记录将这些主机的名字映射为IP地址。

还有一类重要的DNS服务器,称为本地DNS服务器。每个ISP都有一台本地DNS服务器,当主机与某个ISP连接时,该ISP提供一台主机的IP地址,该主机具有一台或多台其本地DNS服务器的IP地址。在实践中,从请求主机到本地DNS服务器的查询是递归的,其余的查询是迭代的。

2.2、DNS缓存

当DNS服务器接受一个DNS回答时,它能将映射缓存在本地存储器中,但这种映射并不是永久的。

3、DNS记录和报文

共同实现DNS分布式数据库的所有DNS服务器存储了资源记录(Resource Record),RR提供了主机名到IP地址的映射。每个DNS回答报文包含一条或多条资源记录。TTL是该记录的生存时间,同时记录还有不同的类型,Name和Value的值取决于Type。

  • Type=A时,Name是主机名,Value是该主机名对应的IP地址;
  • Type=NS时,Name是个域,Value是知道如何获得该域中主机IP地址的权威DNS服务器的主机名;
  • Type=CNAME时,Value是别名为Name的邮件服务器的规范主机名;
  • Type=MX时,Value是个别名为Name的邮件服务器的规范主机名;

3.1 、DNS报文

DNS报文有查询和回答两种报文,并且它们有着相同的格式

image-20201107163142085

  • 前12个字节是首部区域。第一个字段是一个16比特的数,用于标识该查询,这个标识符会被复制到对查询的回答报文中,以便让客户用它来匹配发送的请求和接受到的回答。标识字段含有若干标志,如1比特的”查询/回答"标志位指出是查询保温还是回答报文,1比特的请求名字是否为权威DNS服务器的标志位,1比特的是否递归查询的标志位等。此外在该首部中,还有4个关于数量的字段,指出了在首部后的4类数据区域出现的数量
  • 问题区域包含正在进行的查询信息,包括名字字段,类型字段等;
  • 来自DNS服务器的回答中,回答区域包含了对最初请求的名字的资源记录,回答区域中可以包含多条RR,因此一个主机名能够有多条IP地址;
  • 权威区域包含了其他权威服务器的记录;
  • 附加区域包含了其他有帮助的记录。

3.2、在DNS数据库中插入记录

如何注册登记你的域名?首先你要在注册等级机构注册你的域名,提供你的基本和辅助权威DNS服务器的名字和IP地址。注册登记机构将确保一个类型NS和类型A的记录输入TLD com服务器,你还要确保用于Web服务器的类型A资源记录和用于邮件服务器的类型MX资源记录被输入你的权威DNS服务器中。每台DNS服务器中的内容都是静态配置的,最近DNS协议添加了一个更新选项,可以通过DNS报文对数据库中的内容进行动态添加或删除。

五、P2P文件分发

在P2P文件分发中,每个对等方能够向其他对等放重新分发它已经收到的该文件的任何部分,从而在分发过程中协助该服务器,目前最为流行的P2P文件分发协议是BitTorrent

1、P2P体系结构的扩展性

对于客户-服务器体系结构,随着对等方数量的增加,分发时间呈线性增长且没有界。对于P2P体系结构,最小分发时间不仅总是小于客户-服务器体系结构的分发时间,并且对于任意的对等方数量N,总是小于文件长度/链路的上载速率。因此,具有P2P体系结构的应用程序能够是自扩展的,这种自扩展的原因是:对等放除了是比特的消费者外还是它们的重新分发者

2、BitTorrent

BitTorrent是一种用于文件分发的流行P2P协议。参与一个特定文件分发的所有对等方的集合被称为一个洪流。在一个洪流中的对等方彼此下载等长度的文件快,典型的文件块长度为256K。当一个对等方首次加入一个洪流时,他没有块,随着时间的流逝,它积累了越来越多的块。当它下载块时,也为其他对等方上载了多个块,一旦某对等放获得了整个文件,它也许离开洪流,也许留在洪流继续为其他对等方上载块。同时,任何对等方可能在任何时候仅具有块的子集就离开洪流,并在以后重新加入该洪流中。

每个洪流具有一个基础设施节点,称为追踪器,当一个对等方加入某洪流时,它向追踪器注册自己,并周期性地通知追踪器它仍在洪流中。以这种方式,追踪器跟踪参与在洪流中的对等方。一个给定的洪流可以在任何时刻具有数以百计或数以千计的对等放。

六、视频流和内容分发网

1、因特网视频-略

2、HTTP流和DAS

由于客户可用的带宽大小有很大的不同,这导致了一种新型基于HTTP的流的研发,它常常被称为经HTTP的动态适应性流(Dynamic Adaptive Streaming over HTTP,DASH)。在DASH中,视频编码为几个不同的版本,其中每个版本具有不同的比特率,对应不同的质量水平。

使用DASH后,每个视频版本存储在HTTP服务器中,每个版本都有一个不同的URL,HTTP服务器也有一个告示文件,为每个版本提供了一个URL及其比特率。

3、内容分发网

为例应对向分布于全世界的用户分发巨量视频的挑战,几乎所有主要的视频流量公司都利用内容分发网(Content Distribution NetWork,CDN)。CDN可以是住专用CDN,即它由内容提供商自己所拥有;也可以是第三方CDN,它代表多个内容提供商分发内容。CDN常用两种不同的服务器安置原则:

深入:通过在遍及全球的接入ISP中部署服务器集群来深入到ISP的接入网中。但因这种高度分布式设计,维护和管理集群的任务成为挑战

邀请做客:通过在少量关键位置建造大集群来邀请到ISP做客,不是将集群放在接入ISP中,而是CDN将它们的集群放置在因特网交换点。

3.1、CDN操作

大多数CDN利用DNS来截获和重定向请求,来确定此时适合用于该用户的CDN服务器集群,并将客户的请求重新定向到该集群的某台服务器,

3.2、集群选择策略

任何CDN,其核心是集群选择策略,即动态的将客户定向到CDN中的某个服务器集群或数据中心的机制。一种简单的策略是指派客户到地理上最为临近的集群,但可能存在地理临近集群并非最近集群的问题。还有一种是基于当前流量条件为客户决定最好的集群,CDN能够对其集群和客户之间的时延和丢包性能执行周期性的实时测量,其缺点是许多LDNS被配置为不响应这些探测。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章