CDN与DNS
DNS
域名系统(Domain Name System)。由两部分组成:
- 分层的DNS服务器实现的分布式数据库,服务器通常是服务器通常运行BIND软件即Berkeley Internet Name Domain的Unix机器。
- 能够使主机查询分布式数据库的应用层协议(dns协议)
DNS协议运行在UDP之上,使用53号端口。
DNS作为网络核心协议,为什么在应用层实现,而不是在运输层或网络层实现?
- 由域名系统的组成可以看出,域名系统使用的是CS模式(客户端-服务器模式)。它运行在端系统上(即网络边缘的端系统上)
- 通讯的端系统之间需要CIA层的传输协议来传送DNS报文。
总的来说,域名系统是一个应用系统,只不过该应用不直接与用户打交道,而是作为基础应用,由其他应用层协议如HTTP、SMTP/FTP使用。DNS采用位于网络边缘的客户端和服务器(理解DNS的实现位于网络边缘及其重要),实现域名到IP地址的转换。
域名系统的核心功能
- 实现域名到IP地址的转换
- 实现主机别名(host aliasing)到规范名称(canonical hostname)的转换
- 负载分配 一个主机名可以配置多个冗余的服务器IP地址,DNS可以为多个IP进行负载分配。(说白了,一个域名可以有多个IP地址,多个IP地址对应多个服务器,DNS可以为多个服务器负载均衡)
域名系统的工作机理
假设某个应用(如浏览器)需要将主机名(域名)换成IP地址,应用需要调用DNS客户端,并给出需要转换的主机名。DNS客户端收到后,则会向本地DNS服务器发送DNS查询报文,收到查询DNS的回答报文后返回给调用者(浏览器)。
DNS服务器的层次结构:
DNS服务器分为多个层次(不仅仅是图中所示的三层,这三层之下可能有很多层),大致分为三种类型:
- 根域名服务器,全球13台(不是仅有是13台服务器,而是13个分布式集群,总的根服务器有几百台)
- 顶级域名服务器(TLD,Top level domain),负责维护顶级域名,如:com/org/net/edu/gov及国家域名。顶级域名服务器知道如果想要查询某个顶级域名下的域名(如baidu.com),应该查询哪个权威域名服务器。
- 权威域名服务器,负责维护权威域名(组织或机构的域名)。如百度公司会有权威域名服务器,负责baidu.com下的域名到IP地址的转换。如api.baidu.com,百度公司提供的权威域名服务器应该能查到该域名对应的ip地址。
除了图中的三层,每个ISP(一个大学,一个系,一个公司)都有自己的本地域名服务器。比如百度公司下属有AI自动驾驶部门和搜索部门,其域名分别为:ai.baidu.com和so.baidu.com,搜索部门可能还有算法部门、广告部门,alg.so.baidu.com和ad.so.baidu.com那么搜索部门可以有自己的本地域名服务器,负责alg和ad的主机名的解析。
上面的这个例子利用了递归查询(recursive query)和迭代查询(iterative query)。从cis.poly.edu到dns.poly.edu是递归查询,后续2-7为迭代查询。
DNS缓存
为了减少网络中DNS报文的数量,DNS服务器会将查询到的DNS记录缓存起来,下次再有同类型查询时,直接使用缓存记录,而不需要再查询。
DNS记录
DNS服务器存储的信息为资源记录(Resource Record,简称RR)。RR通常为一个四元组:
(Name, Value, Type, TTL)
其中TTL为生存时间,决定了该记录应当从缓存中删除的时间。Name和Value的含义取决于Type.
- 如果Type为A,则Name是主机名,Value是该主机名对应的IP地址
- 如果Type=NS,则Name是一个域,Value是这个域的权威域名服务器的主机名。
- 如果Type=CNAME,则Name是一个别名,Value是该别名对应的规范主机名。
CDN
Content Distribution Networks,内容分发网络。通过向网络边缘节点预先分发和存储服务内容,就近为用户提供服务,提高用户体验。
CDN的两种部署方式:
- Enter Deep 将CDN服务器部署到接入网,这样离用户近,体验更好,但缓存服务器较多管理困难
- Bring Home 将CDN服务器部署到少数关键位置,比如骨干网交换阶段附近(离 first ISP pop比较近) 租用线路将服务器连接起来
CDN的加速原理: