浅析CDN/DNS

379 阅读3分钟

DNS是什么?

简单说DNS(域名系统)就是对应域名和ip的。例如:百度的域名是www.baidu.com,ip是 220.181.111.188。用户通常只记得域名,没人记得ip,所以DNS就可以根据域名找到对应的ip。

DNS目录不是放在一个固定的地方,全世界有很多的域名服务器,分布在不同的地方。DNS就存储在这些域名服务器上,这些域名服务器会定期的通信,以便更新信息。

每一个域名服务器上都可以对应多个ip地址,不同地方的人,访问谷歌服务器,可能得到的信息来自于,完全不同的域名服务器,遵循就近原则。

用户在浏览器中发出一个域名请求时,浏览器就要先解析域名,找到对应的IP地址,域名转变成ip,为了节省资源,需要缓存。

  • 浏览器会先检查,缓存中有没有对应的ip,如果有就结束解析。这个缓存有时间限制,时间太长,会出现ip和域名的对应关系改变了,但是缓存没更新。如果时间太短就会导致用户每次访问网站都要重新解析一次域名,缓存的意义就没有了。

  • 如果浏览器的缓存中没有,浏览器会查找操作系统中的缓存。

  • 在缓存中都没有找到,就使用dns查找对应的ip,使用迭代查询。

    1. 例如:www.baidu.com 的查询方式是从右向左的方式去查询,先找到根服务器,
    2. 获取com顶级服务器的ip,找到com服务器,获取baidu.com的ip,
    3. 找到baidu.com的服务器,获取到www.baidu.com的ip

CDN是什么?

CDN全称内容分发网络,可以就近向用户分发网络内容。cdn在用户和服务器之间增加了cache层,将用户的请求引导到cahce层上,获取到源服务的数据。通过接管dns实现。

设置一个cname指向cdn服务商。例如xxx.like.com(cname)-> www.baidu.com (域名)->220.181.111.188(ip)

引入cdn之后,用户和服务器之间的交互就变了。

  • 用户输入网址,浏览器调用域名解析库对域名进行解析,得到cname,为了得到真实的ip,浏览器需要对,cname进行解析
  • 得到cdn缓存服务器的ip地址,浏览器得到实际ip地址之后,向缓存服务器发出请求
  • 缓存服务器根据域名,根据cache内部的dns域名解析得到ip地址,缓存服务器向向实际的ip地址提交请求
  • 缓存服务器拿到请求结果,本地保存一份,以备后用,发送给用户一份

DNS和CDN的关系

CDN是为了可以就近向用户分发网络内容,如何判断用户离那里近,需要dns定位。

  • dns会有一个ldns可以标志用户的当前位置,然后根据这个位置,可以让用户访问最近的cdn服务器,获取内容。但是这种方法有一个缺点,就是用户可以在a城市联通的用户使用b城市电信的ldns,ldns的定位就不准确了。
  • 解决ldns定位不准确的问题,可以使用http调度方式, 当用户访问我们的服务器时,服务器先分析用户的ip地址,然后服务器给用户返回一个302重定向,将离用户最近的服务器存在location中,用户再去请求这个cdn服务器就能得到最佳的cdn节点。 但是这种方法需要较长的时间,小文件的访问就不适用。