计算机网络 —— 应用层


应用层

在本章中,我们学习有关网络应用的原理和实现方面的知识。我们从定义关键的应用层概念开始,其中包括应用程序所需要的网络服务、客户和服务器、进程和运输层接口。我们详细考察几种网络应用程序,包括Web、电子邮件、DNS、对等文件分发和视频流)。然后我们将涉及开发运行TCP和UDP上的网络应用程序。

应用层协议原理

研发新应用程序的核心
1)在不同的端系统上运行
2)通过网络基础设施提供的服务,应用进程彼此通信
如Web:运行在Web服务器主机上的Web服务器程序与运行在用户主机上的浏览器程序通信
如P2P文件共享系统:在参与文件共享的社区中的每台主机中都有一个程序,都可以作为客户端或者服务器程序,并进行通信。

网络核心中没有应用层软件
1)网络核心没有应用层功能
2)网络应用只在端系统上存在,快速网络应用开发和部署

在这里插入图片描述

网络应用程序体系结构

应用程序的体系结构明显不同于网络的体系结构,从应用程序研发者的角度看,网络体系结构是固定的,并为应用程序提供了特定的服务集合。应用程序体系结构由应用程序研发者设计,规定了如何在各种端系统上组织该应用程序

应用程序可能的体系结构:
1)客户-服务器模式(C/S:client/server)
2)对等模式(P2P:Peer To Peer)
3)混合体:客户-服务器和P2P混合体系结构

在这里插入图片描述

客户-服务器体系结构

服务器:
1)一直运行
2)固定的IP地址和周知的端口号(约定)
3)扩展性:扩展性差,数据中心进行扩展

客户端:
1)主动与服务器通信
2)与互联网有间歇性的连接
3)可能是动态IP地址
4)不直接与其它客户端通信

例子:搜索引擎(如谷歌、Bing和百度)、因特网商务(如亚马逊、e-Bay和阿里巴巴)

在一个客户-服务器应用中,常常会出现一台单独的服务器主机跟不上它所有客户请求的情况,为此,配备大量主机的数据中心(data center)常被用于创建强大的虚拟服务器。

P2P体系结构

1)几乎没有一直运行的服务器
2) 任意端系统之间可以进行通信
3)每一个节点既是客户端又是服务器
4)自扩展性:新peer节点带来新的服务能力,当然也带来新的服务请求
5) 参与的主机间歇性连接且可以改变IP地址

例子: Gnutella,迅雷

P2P体系结构也是有成本效率的,因为它们通常不需要庞大的服务器基础设施和服务器带宽(这与具有数据中心的客户-服务器设计形成鲜明对比)。然而,未来P2P应用由于高度非集中式结构,面临安全性、性能和可靠性等挑战。

客户-服务器和P2P混合体系结构

对于许多即时讯息应用而言,服务器被用于跟踪用户的IP地址,但用户到用户的报文在用户主机之间(无须通过中间服务器)直接发送。
在这里插入图片描述

进程通信

1)在同一个主机内,使用进程间通信机制通信(通信的规则操作系统定义)
2)不同主机之间,通过交换报文(Message)来通信
    1. 使用OS提供的通信服务
    2. 按照应用协议交换报文,借助传输层提供的服务

客户进程和服务器进程

我们有时也使用术语“应用程序的客户端和服务器端”。

无论如何,在任何给定的一对进程之间的通信会话场景中,我们仍能将一个进程标识为客户,另一个进程标识为服务器。我们定义客户和服务器进程如下:在一对进程之间的通信会话场景中,发起通信(即在该会话开始时发起与其他进程的联系)的进程被标识为客户,在会话开始时等待联系的进程是服务器。

分布式进程通信需要解决的问题

在这里插入图片描述

可供应用程序使用的传输服务

1)可靠性传输
有些应用则要求100%的可靠数据传输(如电子邮件、Web文档传输、金融应用)
有些应用(如音频、视频)能容忍一定比例以下的数据丢失

2)吞吐
一些应用(如多媒体)必须需要最小限度的吞吐,从而使得应用能够有效运转(带宽敏感的应用)
一些应用能充分利用可供使用的吞吐(弹性应用)

3)定时、延迟
一些实时应用出于有效性考虑,对数据传输有严格的时间限制,如Internet 电话、交互式游戏
对于非实时的应用,较低的时延总比较高的时延好,但对端到端的时延没有严格的约束。

4)安全性
在发送主机中,运输协议能够加密由发送进程传输的所有数据,在接收主机中,运输层协议能够在
将数据交付给接收进程之前解密这些数据。这种服务将在发送和接收进程之间提供机密性,以防该数据以某种方式在这两个进程之间被观察到。运输协议还能提供除了机密性以外的其他安全性服务,包括数据完整性端点鉴别

在这里插入图片描述

因特网提供的运输服务

传输层的TCP/UDP协议为调用它们的应用程序提供了不同的服务集合。

TCP协议提供的服务:
1)面向连接:要求在客户端进程和服务器进程之间建立连接。在握手阶段后,一个TCP连接就在两个进程的套接字之间建立了。
2)可靠的数据传输
3)流量控制:发送方不会淹没接受方
4) 拥塞控制:当发送方和接收方之间的网络出现拥塞时,能抑制发送进程

UDP协议提供的服务:
无连接,不可靠数据传输,无流量控制,无拥塞控制,无时间、带宽保证、无安全性

UDP存在的必要性
1)能够区分不同的进程,而IP服务不能
2)在IP提供的主机到主机功能的基础上,区分了主机的应用进程
3)无需建立连接,省去了建立连接时间,适合事务性的应用
4)不可靠数据传输,例如检错重发,适合那些对实时性要求比较高而对正确性要求不高的应用。因为实现可靠性,必须付出时间代价(检错重发)
5)没有拥塞控制和流量控制,应用能够按照设定的速度发送数据

因特网传输协议所不提供的服务:
因特网提供的传输服务有可靠数据传输、吞吐量、定时和安全性。
TCP提供了可靠的端到端数据传送。并且我们也知道TCP在应用层可以很容易地用SSL来加强以提供安全服务。

WEB和HTTP

HTTP概述

非持续连接和持续连接

HTTP报文格式

HTTP报文有两种:请求报文和响应报文
HTTP报文是用普通的ASCII文本书写的,便于人能阅读

HTTP请求方法:
在这里插入图片描述

HTTP消息结构:
HTTP请求消息由四个部分组成:请求行、首部行、空行、实体主体(存放提交数据)
HTTP响应消息也由四个部分组成:状态行、首部行、空行、实体主体(存放响应体)
在这里插入图片描述

请求头参数和响应头参数:

https://blog.csdn.net/qq_35781732/article/details/80183790

浏览器产生的首部行与很多因素有关,包括浏览器的类型和协议版本(例如,HTTP/1. 0浏览器将不会产生任何1.1版本的首部行)、浏览器的用户配置(如喜好的语言)、浏览器当前是否有一个缓存的但是可能超期的对象版本。Web服务器的表现也类似:在产品、版本和配置上都有差异,所有这些都会影响响应报文中包含的首部行。

一些常见的状态码和相关的短语包括:
1)200 OK:请求成功,信息在返回的响应报文中。
2)301 Moved Permanently:请求的对象已经被永久转移了,新的URL定义在响应报文的Location:首部行中。客户软件将自动获取新的URL。
3)400 Bad Request::一个通用差错代码,指示该请求不能被服务器理解。
4)404 Not Found:被请求的文档不在服务器上。
5)505 HTTP Version Not Supported:服务器不支持请求报文使用的HTTP协议版本。

用户和服务器的交互:cookie

一个Web站点通常希望能够识别用户,可能是因为服务器希望限制用户的访问,或者因为它希望把内容与用户身份联系起来。为此,HTTP使用了 cookie,允许站点对用户进行跟踪

cookie技术有4个组件:
1)在HTTP响应报文中的一个cookie首部行;
2)在HTTP请求报文中的一个cookie首部行;
3)在用户端系统中保留有一个cookie文件,并由用户的浏览器进行管理;
4)位于Web站点的一个后端数据库

cookie的工作过程:
cookie可以用于标识一个用户。用户首次访问一个站点时,可能需要提供一个用户标识(可能是名字)。在后继会话中,浏览器向服务器传递一个cookie首部,从而向该服务器标识了用户。因此cookie可以在无状态的HTTP之上建立一个用户会话层

在这里插入图片描述

cookie能带来什么:用户验证、购物车、推荐、用户状态 (Web e-mail)

cookie与隐私:
1)cookie允许站点知道许多关于用户的信息,并可能将它知道的东西卖给第三方
2)使用重定向和cookie的搜索引擎还能知道用户更多的信息,如通过某个用户在大量站点上的行为,了解其个人浏览方式的大致模式
3)广告公司从站点获得信息

DNS 域名系统

DNS可以看成因特网上作为域名和IP地址互相映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53。DNS的分布数据库是以域名为索引的,每个域名实际上就是一棵很大的逆向树中路径,这棵逆向树称为域名空间(domain name space)。

DNS工作机理概述

假设运行在用户主机上的某些应用程序(如Web浏览器或邮件阅读器)需要将主机名转换为IP地址。这些应用程序将调用DNS的客户端,并指明需要被转换的主机名(在很多基于UNIX的机器上,应用程序为了执行这种转换需要调用函数gethostbyname())。用户主机上的DNS客户端接收到后,向网络中发送一个DNS查询报文。所有的DNS请求和回答报文使用UDP数据报经端口53发送。经过若干毫秒到若干秒的时延后,用户主机上的DNS客户端接收到一个提供所希望映射的DNS回答报文。这个映射结果则被传递到调用DNS的应用程序。

DNS的历史

ARPANET的名字解析解决方案
 主机名:没有层次的一个字符串(一个平面)
 存在着维护站:维护着一张主机名-IP地址的映射文件:Hosts.txt
 每台主机定时从维护站取文件
ARPANET解决方案的问题:
 当网络中主机数量很大时:1、没有层次的主机名称很难分配;2、文件的管理、发布、查找都很麻烦

DNS总体思路
 分层的、基于域的命名机制
 若干分布式的数据库完成名字到IP地址的转换
 运行在UDP之上端口号为53的应用服务
 核心的Internet功能,但以应用层协议实现。在网络边缘处理复杂性。

DNS提供的服务

1)主机名到IP地址的转换(主要):name/IP translate

识别主机有两种方式,通过主机名或者IP地址。人们喜欢便于记忆的主机名标识方式,而路由器则喜欢定长的、有着层次结构的IP地址。为了折中这些不同的偏好,我们需要一种能进行主机名到IP地址转换的目录服务。这就是域名系统DNS的主要任务。DNS由分布于全球的大量DNS服务器以及定义了DNS服务器与查询主机通信方式的应用层协议组成。

2)主机别名到规范名字的转换:Host aliasing

一台主机规范名为relay1. west-coast, enterprise, com的主机,可能还有两个别名为enter-prise. com 和 www.enterprise.com。主机别名(当存在时)比主机规范名更加容易记忆。应用程序可以调用DNS来获得主机别名对应的规范主机名以及主机的IP地址。

3)邮件服务器别名到邮件服务器的正规名字的转换:Mail server aliasing

4)负载均衡:Load Distribution

DNS也用于在冗余的服务器(如冗余的Web服务器等)之间进行负载分配。繁忙的站点(如cnn.com)被冗余分布在多台服务器上,每台服务器均运行在不同的端系统上,每个都有着不同的IP地址。由于这些冗余的Web服务器,一个IP地址集合因此与同一个规范主机名相联系。DNS数据库中存储着这些IP地址集合。当客户对映射到某地址集合的名字发出一个DNS请求时,该服务器用IP地址的整个集合进行响应,但在每个回答中循环这些地址次序。因为客户通常总是向IP地址排在最前面的服务器发送HTTP请求报文,所以DNS就在所有这些冗余的Web服务器之间循环分配了负载。DNS的循环同样可以用于邮件服务器,因此,多个邮件服务器可以具有相同的别名。一些内容分发公司如Akamai也以更加复杂的方式使用DNS,以提供Web内容分发。

分布式、层次数据库

有3种类型的DNS服务器:根DNS服务器顶级域(Top Level Domain, TLD) DNS服务器和权威DNS服务器,这些服务器以层次结构组织起来。假定一个DNS客户要决定主机名www. amazon, com的IP地址。粗略说来,将发生下列事件。客户首先与根服务器之一联系,它将返回顶级域名 com的TLD服务器的IP地址。该客户则与这些TLD服务器之一联系,它将为 amazon, com 返回权威服务器的IP地址。最后,该客户与amazon, com权威服务器之一联系,它为主机名www. amazon, com返回其IP地址。

1)根DNS服务器:提供TLD服务器的IP地址。
2)顶级域DNS服务器:提供了权威DNS服务器的IP地址。对于每个Generic顶级域(如com、org、net、edu和gov)和所有Country顶级域(如uk、fr、ca和jp),都有TLD服务器(或服务器集群)。
3)权威DNS服务器:一种方法:组织机构实现它自己的权威DNS服务器以保存主机名映射为IP地址的记录;另一种方法是:该组织能够支付费用,让这些记录存储在某个服务提供商ISP的一个权威DNS服务器中。多数大学和大公司实现和维护它们自己基本和辅助(备份)的权威DNS服务器。

在这里插入图片描述
在这里插入图片描述

还有另一类重要的DNS服务器,称为本地DNS服务器。严格说来,一个本地DNS服务器并不属于该服务器的层次结构,但它对DNS层次结构是至关重要的。每个ISP (如居民ISP、机构、公司、大学)都有一台本地DNS服务器(也叫默认名字服务器)。

对某机构ISP而言,本地DNS服务器可能就与主机在同一个局域网中;对于某居民区ISP来说,本地DNS服务器通常与主机相隔不超过几台路由器。当主机发岀DNS请求时,该请求被发往本地DNS服务器,它起着代理的作用,并将该请求转发到DNS服务器层次结构中。

举例:假设主机 cis. poly. edu 想知道主机 gaia. cs. umass. edu 的IP地址。同时假设 cis. poly. edu 主机的本地DNS服务器为dns. ploy. edu,并且 gaia. cs. umass. edu 的权威DNS服务器为dns. umass. edu。有递归查询和迭代查询两种方式(现今常用)。
在这里插入图片描述

DNS缓存

1)一旦本地DNS服务器学到了一个映射,就将该映射缓存起来。
2)TLD服务器的IP地址通常都在本地服务器中缓存着,使得根服务器不用经常被访问,可以提高效率。
3)存在一致性问题:如果情况变化,缓存结果和权威资源记录不一致。
      解决方案:TTL(默认2天)。本地DNS服务器在一段时间后(通常设置为两天)将丢弃缓存的信息。

举一个例子,假定主机apricot, nyu. edu向本地DNS服务器dns. nyu. edu查询主机名cnn. com的IP地址。此后,假定过了几个小时,纽约大学的另外一台主机如kiwi. nyu. edu也向本地DNS服务器dns. nyu. edu查询相同的主机名。因为有了缓存,该本地DNS服务器可以立即返回cnn. com的IP地址,而不必查询任何其他DNS服务器。本地DNS服务器也能够缓存TLD服务器的IP地址,因而允许本地DNS绕过查询链中的根DNS服务器。事实上,因为缓存,除了少数DNS查询以外,根服务器被绕过了。

DNS记录和报文

资源记录

资源记录RR是一个包含了下列字段的4元组:(Name,Value,Type,TTL)

TTL:记录的生存时间,它决定了资源记录应当从缓存中删除的时间。在下面给岀的记录例子中,我们忽略掉TTL字段。Name和Value的值取决于Type。
− -
1)如果Type = A,则Name是主机名,Value是该主机名对应的IP地址。因此,一条类型为A的资源记录提供了标准的主机名到IP地址的映射。例如(Tayl.bar.foo.com, 145.37.93.126, A)。
− -
2)如果Type = NS,则Name是域(如foo.com),而Value是该域的权威DNS服务器的主机名。这个记录用于沿着查询链来路由DNS查询。例如(foo.com, dns.foo.com, NS)。
− -
3)如果Type = CNAME,则Name是其他服务器(如Web服务器)的主机别名,Value是其他服务器(如Web服务器)的规范主机名。该记录能够向査询的主机提供一个主机名对应的规范主机名,例如(foo.com, relay1.bar.foo.com, CNAME)。
− -
4)如果Type = MX,则Name是邮件服务器的主机别名,Value是邮件服务器的规范主机名。举例来说,(foo.com, mail.bar.foo.com, MX)就是一条MX记录。MX记录允许邮件服务器主机名具有简单的别名

在这里插入图片描述
如果一台DNS服务器是用于某特定主机名的权威DNS服务器,那么该DNS服务器会有一条包含用于该主机名的类型A记录。如果服务器不是用于某主机名的权威服务器,那么该服务器将包含一条类型NS记录,该记录对应于包含主机名的域;它还将包括一条类型A记录,该记录提供了在NS记录的Value字段中的DNS服务器的IP地址。

DNS报文
DNS协议:有查询和回答报文,DNS查询和回答报文有着相同的格式

  • 1)12个字节是首部区域,有6个字段。
    • id字段是一个16比特的数,用于标识该查询。这个标识符会被复制到对查询的回答报文中,以便让客户用它来匹配发送的请求和接收到的回答
    • flag字段中含有若干标志。
      • 1比特的 “查询/回答”标志位 指出报文是查询报文0还是回答报文1。
      • 当某DNS服务器是所请求名字的权威DNS服务器时,1比特的 “权威的”标志位 被置在回答报文中。
      • 如果客户(主机或者DNS服务器)在该DNS服务器没有某记录时希望它执行递归查询,将设置1比特的“希望 “递归”标志位
      • 如果该DNS服务器支持递归查询,在它的回答报文中会对1比特的 “递归可用”标志位 置位。
    • 在该首部中,还有4个有关数量的字段,这些字段指出了在首部后的4类数据区域出现的数量
  • 2)问题区域包含着正在进行的查询信息。
    • 名字字段:包含正在被查询的主机名字
    • 类型字段,指出有关该名字的正被询问的问题类型
  • 3)回答区域包含了对最初请求的名字的资源记录。
    • 在回答报文的回答区域中可以包含多条RR,因此一个主机名能够有多个IP地址(例如冗余Web服务器)。
  • 4)权威区域包含了其他权威服务器的记录。
  • 5)附加区域包含了其他有帮助的记录。

在这里插入图片描述

在DNS数据库中插入记录

在这里插入图片描述

DNS的安全性

1)试图向每个DNS根服务器发送大量的分组,使得大多数合法DNS请求得不到回答。但许多DNS根服务器受到了分组过滤器的保护,配置的分组过滤器阻挡了所有指向根服务器的ICMP ping报文。这些被保护的服务器因此未受伤害并且与平常一样发挥着作用。此外,大多数本地DNS服务器缓存了顶级域名服务器的IP地址,使得这些请求过程通常绕过了 DNS根服务器。

2)更为有效的DDoS攻击将是向顶级域名服务器(例如向所有处理.com域的顶级域名服务器)发送大量的DNS请求。过滤指向DNS服务器的DNS请求将更为困难,并且顶级域名服务器不像根服务器那样容易绕过。但是这种攻击的严重性通过本地DNS服务器中的缓存技术可将部分地被缓解。

3)攻击者截获来自主机的请求并返回伪造的回答。在DNS毒害攻击中,攻击者向一台DNS服务器发送伪造的回答,诱使服务器在它的缓存中接收伪造的记录。这些攻击中的任一种,都能够将毫无疑虑的Web用户重定向到攻击者的Web站点。然而,这些攻击难以实现,因为它们要求截获分组或扼制住服务器。

DNS自身已经显示了对抗攻击的令人惊讶的健壮性。至今为止,还没有一个攻击已经成功地妨碍了 DNS服务

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值