web缓存(也称代理服务器)是一种旨在不需要直接访问目标服务器即可满足用户需求的装置。
Web缓存的工作示意图如下所示
1. 浏览器创造一个到代理服务器的TCP协议,并且向其发送一个请求报文
2. 如果代理拥有对象服务器的副本,就向浏览器发送其存储的响应报文
3. 如果代理并不拥有相关对象,那么代理服务器就会向目标服务器建立TCP链接,发送一个请求报文,并获取响应报文
4. 代理接收到报文后,就在其本地空间中存储一份副本,并且向浏览器发送响应报文。
因此,代理服务器即扮演了浏览器的角色,又扮演了服务器的角色
1. 由于代理和浏览器的相对距离更近,所以请求的响应速度会更快
2. 避免了由于信道拥挤带来的阻塞问题
3. web缓存减少了使用网络消耗的流量,因此就改善了应用性能
参考如上图所示的网络连接,服务端路由器和客户端路由器由一条速率为1.54MBPS的链路链接,假设对象的平均长度为1MB,浏览器对服务器的平均访问速率为每秒15个请求。将此持续时延称为互联网时延
总的响应时间为浏览器请求对象到接收为止的所用时间。局域网链路强度为0.15,而接入链路上的流量强度为1,也就是极度拥挤
为了解决这个方案,可以使用两种方法
1. 将链路速率提高,比如154MBPS,但这样进行的开销较大
2. 在浏览器端接入一个WEB缓存,平均时延就会达到大约1.2s,效率大大提高
然而,代理服务器也具有一个问题:如果服务器修改了相关信息,代理的报文就会和服务器不同。为了解决这个问题,HTTP协议本身具有一种机制避免这个问题,也就是条件GET。
GET方法判断:
1. 请求报文使用get方法
2. 请求报文包含If-modified-since:
条件GET使用
假设代理服务器发送了请求,并且已经接收到了响应。那么,它也会同时存储报文的缓存日期。之后,一个星期后另一个浏览器请求同一个对象,那么就会由代理服务器发送GET条件检查服务端是否已经修改
引入:用来识别一个自然人可以有很多方式,例如车牌号,身份证号等。但是用一些方式识别人有时候会比较麻烦,比如“138xxxxxxxx”先生等。
因特网的情况和人类一样,大部分主机使用主机名(例如www.google.com) 进行标识,但是,主机名几乎不提供主机在因特网中的位置信息。所以,也可以用IP地址识别主机
但是,IP地址虽然长度固定,却很难进行记忆。因此,我们需要一种将主机名和IP地址进行对应的工具,这就是DNS(domain name system).DNS具有两个部分:
1. 一个分布式数据库
2. 一个用来查询该数据库的应用层协议
1. DNS客户端在同一台用户主机运行
2. 浏览器抽取主机名并传给DNS客户端
3. 客户端向DNS服务器发起一个请求
4. DNS客户端收到回答报文,包含主机名的IP地址
5. 浏览器能够发起TCP链接
1. 获取规范主机名(一个主机可能有多个别名,DNS可以获取其中的规范主机名)
2. 负载分配 在冗余服务器之间进行负载分配
如果DNS按照集中式设计,那么其会具有以下缺点:
1. 单点故障 DNS崩溃即因特网瘫痪
2. 通信容量 DNS将会处理上亿请求服务
3. 远距离集中式数据库 如果物理距离过远,DNS会极大降低效率
4. 维护 集中式的数据库将会过于庞大难以维护
如图所示,DNS使用按照层次结构映射分布的DNS服务器,这里先简单解释上图三种类型的服务器
1. 根DNS 服务器 提供TLD服务器的IP地址(TLD:.com/.org等)
2. 顶级域DNS服务器 提供权威服务器的IP地址
3. 权威DNS服务器 记录主机名和IP地址的映射
4. 本地DNS服务器 并不属于DNS服务器的层次结构 用户在本地通过该服务器获取IP地址
如上图所示,比如主机地址在engineering.nyu.edu ,需要gaia.cs.umass.edu的IP地址
主机首先向本地DNS服务器发送DNS查询报文,之后本地服务器将报文发送至根服务器。根服务器向本地返回具有TLD为.edu的IP地址列表,本地服务器再向TLD服务器发送查询报文找到权威服务器,最后向权威服务器发送报文获取IP地址
在上图的迭代查询方式中,每次请求都要经过本地服务器。同时,DNS查询也可以通过递归方式进行。
如上图所示,这样就形成了一条完整的查询链
在一个请求链中,如果DNS接收到一个回答,它会缓存在回答中的信息。缓存并非是永久的,在一段时间后,DNS将会丢掉缓存信息
DNS的记录形式是一个四元组:
RR format: (name, value, type, ttl)
其中,TTL记录了记录应当从缓存中删除的时间,而name和value的值由type决定
1. type = A name是主机名 value是IP地址
2. type = ns name 是域名(foo.com)value是权威DNS服务器的主机名
3. type = cname value是名字为name的主机的规范主机名
type = mx value 是别名为name的邮件服务器的规范主机名
DNS服务器只有查询和回答报文两种,并且形式相同 内容如下
前12个字节--首部区域,识别用于标识查询,标志用于确定是哪种报文,剩下的字段显示了4类数据区中出现的数量
问题--正在进行的查询信息
回答--最初请求名字的资源记录
权威--其他权威服务器的记录
附加--其他有帮助的记录
可以通过nslookup发送DNS请求,例如:
可以获得目标服务器的IP地址
DNS服务器可能会收到DDOS攻击和欺骗攻击,但目前还没有成功案例