(三)应用层技术总结

1. 域名系统DNS

域名系统DNS是互联网使用的命名系统,用来把便于人们使用的机器名字转换为IP地址

当某一个应用进程需要把主机名解析为IP地址时,该应用进程就调用解析程序并成为DNS的一个客户,把待解析的域名放在DNS请求报文中,以UDP用户数据报方式发给本地域名服务器(使用UDP是为了减少开销)本地域名服务器在查找域名后,把对应的IP地址放在回答报文中返回。应用进程获得目的主机的IP地址后即可进行通信。

若本地域名服务器不能回答该请求,则此域名服务器就暂时成为DNS中的另一个客户,并向其他域名服务器发出查询请求。


1.1 域名系统结构

“域”是名字空间中一个可被管理的划分。域还可以划分为子域,而子域还可继续划分为子域的子域,这样就形成了顶级域、二级域、三级域,等等。

mail.cctv.com
三级域名二级域名顶级域名

1.2 域名服务器

一个服务器所负责管辖的范围叫做。各单位根据具体情况来划分自己管辖范围的区。但在一个区中的所有节点必须是能够连通的。每一个区设置相应的权限域名服务器,用来保存该区中的所有主机的域名到IP地址的映射。总之,DNS服务器的管辖范围不是以“域”为单位,而是以“区”为单位,区是“域”的子集。

  1. 根域名服务器:根域名服务器是最高层次的域名服务器,也是最重要的域名服务器。所有的根域名服务器都知道所有的顶级域名服务器的域名和IP地址。根域名服务器是最重要的域名服务器,因为不管是哪一个本地域名服务器,若要对互联网上任何一个域名进行解析,只要自己无法解析,就首先要求助于根域名服务器。

  2. 顶级域名服务器:这些域名服务器负责管理在该顶级域名服务器注册的所有二级域名。当收到DNS查询请求时,就给出相应的回答(可能是最后的结果,也可能是下一步应当找的域名服务器的IP地址)

  3. 权限域名服务器:这就是前面已经讲过的负责一个区的域名服务器。当一个权限域名服务器还不能给出最后的查询回答时,就会告诉发出查询请求的DNS客户,下一步应当找哪一个权限域名服务器。

  4. 本地域名服务器:本地域名服务器并不属于域名服务器层次结构,但它对域名系统非常重要。当一台主机发出DNS查询请求时,这个查询请求报文就发送给本地域名服务器。

DNS查询举例

为了提高域名服务器的可靠性,DNS域名服务器都把数据复制到几个域名服务器来保存,其中的一个是主域名服务器,其他的是辅助域名服务器,当主域名服务器出故障时,辅助域名服务器可以保证DNS的查询工作不会中断。主域名服务器定期把数据复制到辅助域名服务器中,而更改数据只能在主域名服务器中进行。这样就保证了数据的一致性。

  1. 主机向本地域名服务器的查询一般都是采用递归查询

如果主机所询问的本地域名服务器不知道被查询域名的IP地址,那么本地域名服务器就以DNS客户的身份,向其他根域名服务器继续发出查询请求报文,即替该主机继续查询。因此,递归查询返回的查询结果或者是所要查询的IP地址,或者是报错,表示无法查询到所需的IP地址。

  1. 本地域名服务器向根域名服务器的查询通常是采用迭代查询

当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的IP地址,要么告诉本地域名服务器:“你下一步应当向哪一个域名服务器进行查询”。然后让本地域名服务器进行后续的查询。当然,本地域名服务器也可以采用递归查询,这取决于最初的查询请求报文的设置是要求使用哪一种查询方式。

2. HTTP协议

2.1HTTP特点

  1. HTTP协议用于客户端和服务器端之间的通信
  2. 通过请求和响应的交换达成通信
  1. HTTP是不保存状态的协议,是无状态协议,引入Cookie才能保持状态
  2. HTTP请求URI定位资源

2.2 HTTP方法

  • GET:获取资源 :请求访问已被URI识别的资源。
    指定的资源经服务器端解析后返回响应内容。也就是说,如果请求的资源是文本,那就保持原样返回;如果是像CG(通用网关接口)那样的程序,则返回经过执行后的输出结果。
  • POST:传输实体主体:传输实体的主体。
    虽然用GET方法也可以传输实体的主体,但一般不用GET方法进行传输,而是用POST方法。虽说POST的功能与GET很相似,但POST的主要目的并不是获取响应的主体内容。

2.3 持久连接节省通信量

HTTP协议的初始版本中,每进行一次HTTP通信就要断开一次TCP连接。

为解决上述TCP连接的问题,HTTP/1.1和一部分的HTTP/1.0想出了持久连接的方法。持久连接的特点是,只要任意一端没明确提出断开连接,则保持TCP连接状态。

持久连接使得多数请求以管线化方式发送成为可能。从前发送请求后需等待并收到响应,才能发送下一个请求。管线化技术出现后,不用等待响应亦可直接发送下一个请求。这样就能够做到同时并行发送多个请求,而不需要一个接一个地等待响应了。


2.4 使用Cookie用的状态管理

Cookie会根据从服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存 Cookie当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去。
服务器端发现客户端发送过来的 Cookie后,会去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息。


2.5 HTTP报文

用于HTTP协议交互的信息被称为HTTP报文。请求端(客户端)的HTTP报文叫做请求报文,响应端(服务器端)的叫做响应报文。hTTP报文本身是由多行数据构成的字符串文本。

HTTP报文大致可分为报文首部报文主体两块。两者由最初出现的空行来划分。通常,并不一定要有报文主体。

  • 请求行 包含用于请求的方法,请求URI和HTTP版本。
  • 状态行 包含表明响应结果的状态码,原因短语和HTTP版本。
  • 首部字段 包含表示请求和响应的各种条件和属性的各类首部。

2.6 编码提升传输速率

  1. HTTP协议中内容编码指明应用在实体内容上的编码格式,并保持实体信息原样压缩。内容编码后的实体由客户端接收并负责解码
  2. 在传输大容量数据时,通过把数据分割成多块,能够让浏览器逐步显示页面。这种把实体主体分块的功能称为分块传输编码

2.7 HTTP状态码

状态码的职责是当客户端向服务器端发送请求时,描述返回的请求结果

2XX成功

状态码功能描述
200ok正常处理
204NO Content连接成功,但不返回资源(无需更新)
206Partial Content返回范围请求

3XX重定向

状态码功能描述
301Moved Permanently永久性重定向,请求的资源已被分配了新的URI
302Found临时性重定向,希望用户本次能使用新的URI访问
303See Other请求资源存在着另一个URI,应使用GET方法获取
304Not Modified发送附带条件的请求时,未满足条件的情况
307Temporary Redirect临时重定向。该状态码与302有相同含义

4XX客户端错误

状态码功能描述
400Bad Request请求报文中存在语法错误
401Unauthorized请求需要有通过httP认证的认证信息;之前已进行过请求,表示认证失败
403Forbidden请求资源的访问被服务器拒绝了
404Not Found服务器上无法找到请求的资源。

5XX服务器错误

状态码功能描述
500Internal Server Error服务器端在执行请求时发生了错误
503Service Unavailable服务器暂时处于超负载或正在进行停机维护

2.8用单台虚拟主机实现多个域名

多个域名可以同时部署在同一个服务器上(相同的IP地址),使用DNS服务解析域名后,两者的访问IP地址会相同。

在相同的IP地址下,由于虚拟主机可以寄存多个不同主机名和域名的Web网站,因此在发送HTTP请求时,必须在Host首部内完整指定主机名域名的URI


2.9通信数据转发程序:代理、网关、隧道

代理

代理是一种有转发功能的应用程序。代理服务器的基本行为就是接收客户端发送的请求后转发给其他服务器。代理不改变请求URI,会直接发送给前方持有资源的目标服务器。

在HTTP通信过程中,可级联多台代理服务器。请求和响应的转发会经过数台类似锁链一样连接起来的代理服务器。

  1. 缓存代理
    代理转发响应时,缓存代理会预先将资源的副本保存在代理服务器上。当代理再次接收到对相同资源的请求时,将之前缓存的资源作为响应返回。
  2. 透明代理
    转发请求或响应时,不对报文做任何加工的代理类型被称为透明代理。反之,对报文内容进行加工的代理被称为非透明代理。

网关

网关是转发其他服务器通信数据的服务器,接收从客户端发送来的请求时,它就自己拥有资源的源服务器一样对请求进行处理。

网关的工作机制和代理十分相似。而网关能使通信线路上的服务器提供非HTTP协议服务。利用网关能提高通信的安全性,因为可以在客户端与网关之间的通信线路上加密确保连接的安全。比如,网关可以连接数据库,使用SQL语句查询数据。

隧道

隧道是在相隔甚远的客户端和服务器两者之间进行中转,隧道按要求建立起一余与其他服器的通信线路,时使用SSL等加密手段进行通信。隧道的目的是确保客户端能与服务器进行安全的通信

隧道本身不会去解析HTTP请求。也就是说,请求保持原样中转给之后的服务器。隧道会在通信双方断开连接时结束。

3 确保安全的HTTPS

3.1 HTPP的缺点

  • 通信使用明文(不加密),内容可能会被窃听
  • 不验证通信方的身份,因此有可能遭遇伪装
  • 无法证明报文的完整性,所以有可能已遭篡改

3.1.1 加密防止窃听

通信的加密

一种方式就是将通信加密。HTTP协议中没有加密机制,但可以通
过和SSL或TLS的组合使用,加密HTTP的通信内容。与SSL组合使用的HTTP被称为HTTPS

内容的加密

还有一种将参与通信的内容本身加密的方式。由于HTTP协议中没有加密机制,那么就对HTTP协议传输的内容本身加密。即把HTTP报文里所含的内容进行加密处理。在这种情况下,客户端需要对HTTP报文进行加密处理后再发送请求。

3.1.2 不验证通信方的身份就可能遭遇伪装

  • 无法确定请求发送至目标的Web服务器是否是按真实意图返回响应的那台服务器。有可能是已伪装的Web服务器
  • 无法确定响应返回到的客户端是否是按真实意图接收响应的那个客户端。有可能是已伪装的客户端
  • 无法确定正在通信的对方是否具备访问权限。因为某些Web服务器上保存着重要的信息,只想发给特定用户通信的权限。
  • 无法判定请求是来自何方、出自谁手。
  • 即使是无意义的请求也会照单全收,无法阻止海量请求下的Dos攻击

SSL不仅提供加密处理,而且还使用了一种被称为证书的手段,证书由值得信任的第三方机构颁发,用以证明服务器和客户端是实际存在的。

3.1.3 无法证明报文完整性,可能已遭篡改

接收到的内容可能有误

没有任何办法确认,发出的请求/响应和接收到的请求/响应是前后相同的。

请求或响应在传输途中,遭攻击者拦截并篡改内容的攻击称为中间人攻击

如何防止篡改

常用确定报文完整性的方法是MD5和SHA-1等散列值校验的方法,以及用来确认文件的数字签名方法。

3.2 HTTP+加密+认证+完整性保护= HTTPS

HTTPS并非是应用层的一种新协议。只是HTTP通信接口部分用SSL和TLS协议代替而已。

3.2.1 相互交换密钥的公开密钥加密技术

共享钥加密的困境

加密和解密同用一个密钥的方式称为共享密钥加密,也被叫做对称密钥加密。

发送密钥就有被窃听的风险,但不发送,对方就不能解密。再说,密钥若能够安全发送,那数据也应该能安全送达。

使用两把密钥的公开密钥加密

公开密钥加密使用一对非对称的密钥。一把叫做私有密钥,另一把叫做公开密钥。顾名思义,私有密钥不能让其他任何人知道,而公开密钥则可以随意发布,任何人都可以获得

使用公开密钥加密方式,发送密文的一方使用对方的公开密钥进行加密处理,对方收到被加密的信息后,再使用自己的私有密钥进行解密。利用这种方式,不需要发送用来解密的私有密钥,也不必担心密钥被攻击者窃听而盗走。

HTTPS采用混合加密机制

HTTPS采用共享密钥加密和公开密钥加密两者并用的混合加密机制。若密钥能够实现安全交换,那么有可能会考虑仅使用公开密钥加密来通信。但是公开密钥加密处理速度要慢。
所以应充分利用两者各自的优势,将多种方法组合起来用于通信。在交换密钥环节使用公开密钥加密方式,之后的建立通信交换报文阶段则使用共享密钥加密方式。

  1. 使用公开密钥加密方式安全地交换在稍后的共享密钥加密中要使用的密钥
  2. 确保交换的密钥是安全的前提下,使用共享密钥加密方式进行通信
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值