目录
如果错过互联网,与你擦肩而过的不仅仅是机会,而是整整一个时代。
基本概念
DNS(Domain Name System)
DNS是将域名和IP地址一一映射的一个分布式数据库。提供DNS服务的服务器叫做域名服务器。
DNS也是运行在 UDP(TCP)上,使用53号端口,使主机能够查询分布式数据库的一种应用层协议。
DNS
域名服务器
主域名服务器 | 主域名服务器负责一片区域内所有的域名信息服务,是特定的权威信息源,数据可以修改。 |
辅助域名服务器 | 辅助域名服务器可在主域名服务器故障时作为其备份进行信息服务,辅助域名服务器的信息是备份得来的,数据无法修改。 |
缓存域名服务器 | 缓存域名服务器爬取了域名服务器的查询回答, 像网页快照一样,存在滞后问题,但其访问响应速度会大大提升。由于每次缓存数据的更新频率不固定,没有规律,所以用户访问的最新信息的概率和地域会出现差异。 |
转发域名服务器 | 转发域名服务器是负责所有非本地域名的本地查询,在本地服务器无法查询到时,转发给指定服务器,并返回查询结果。 |
工作原理
查询域名对应的IP地址时,要经过以下步骤:
- 主机在本地服务器进行递归查询;
- 本地服务器向根域名服务器进行迭代查询;
- 根域名服务器告诉本地服务器,下一步应查询顶级域名服务器的IP地址;
- 本地服务器向顶级域名服务器进行查询;
- 顶级域名服务器告诉本地域名服务器,应查询权限域名服务器的IP地址;
- 本地服务器向权限域名服务器进行查询;
- 权限域名服务器告诉本地服务器所查询的域名的IP地址;
- 本地服务器把结果告诉主机。
域名解析协议
DNS协议默认通过UDP协议进行通讯,但是由于广域网不支持传输过大的UDP数据包,所以在报文长度超过512个字节的时候,应转换为TCP协议进行传输。所以,DNS可以使用TCP协议进行数据传输。
域名解析
在进行DNS解析过程中,会进行以下步骤:
浏览器缓存 | 先检查在浏览器中是否有缓存(一般情况下,浏览器会有2-30分钟内的缓存) |
操作系统缓存 | 检查域名是否存在于本地的Hosts文件,如果没有,则向DNS服务器发送查询请求 |
路由器缓存 | 将请求发送给路由器,查找ISP服务商缓存的DNS服务器,直至查找到IP地址 |
ISP DNS缓存 | ISP DNS是电脑设置的首选DNS服务器,大多数情况下,上面都会有缓存 |
根域名服务器 | 在前面都没有查找到时,DNS服务器会将请求发送至根域 |
域名缓存
计算机中的DNS记录在本地有两种缓存方式:浏览器缓存和操作系统缓存。
浏览器缓存:浏览器获取网站域名的IP后进行缓存,减少网络消耗。浏览器有固定的DNS缓存时间,在此期间不会重复请求。
操作系统缓存:即用户自己配置的Hosts文件。
在浏览器中访问的时候,首先查找浏览器缓存,如果没有,则查找操作系统缓存,没有的话,再查询本地DNS服务器。主机和本地DNS服务器间的查询方式是递归查询,即本地服务器一定会给主机想要的答案。
DNS查询
- 递归查询:域名服务器代替用户进行查询,主机只需等待就好。如无法直接回答,则会在其分支的上进行查询,结果返回至分支上,不会返回至主机,主机那边只要一个结果。
- 迭代查询:域名服务器收到用户的请求后,先在本地服务器上查找是否有此域名,如果没有,则查询哪可能会存放要查找的域名,后继续查找。主机一直和各个服务器存在交互。
查询结果是找到并返回结果和未找到,并返回错误,每次查询都会有结果返回。
其他应用层协议使用DNS的过程
同主机下,使用者从浏览器URL中抽取主机名,发送一个带有主机名的请求至DNS服务器,DNS回复一个带有主机名对应IP的报文,浏览器接收之后,向位于该IP地址的80端口的HTTP服务器发起一个TCP连接。
DNS常见记录及作用
域名和IP之间的对应关系称为“记录(record)”。
- SOA记录(Start Of Authority):起始授权记录,一个区域解析器有且仅有一条SOA记录,而且必须是第一条记录,主要说明管理员信息及时间参数;
- A记录(Address):地址记录,返回域名指向的IP地址;
- NS记录(Name Server):域名服务器记录,返回保存下一级域名信息的服务器地址,只能设置为域名,不能设置为IP地址,迭代解析,配合A记录使用;
- MX记录(Mail eXchange):邮件记录,返回接收电子邮件的域名服务器;
- CNAME记录(Canonical Name):规范名称记录,返回零一个域名,即当前查找的是另一个域名的跳转;
- PTR记录(Pointer Record):逆向查询记录,从IP查域名。
查询域名时,TTL为生存周期,是递归结果在主机中的缓存时长,可以全局继承。IN为
网络/协议类型,目前DNS主要支持的协议就是IN。TYPE就是资源记录类型,一般都是A记录。RDATA是资源记录数据,就是域名关联的信息数据。
DNS最早于1983年由保罗·莫卡派乔森发明,原始技术在882和883号草案上规范。后1987年发布的1034和1035号草案修正了DNS的技术规范并废除此前规范。
早期的域名必须以英文的句号结尾,DNS才会进行解析, 如今DNS服务器已经能够自动在末尾补上句号了。基于Punycode的IDNA系统可以将Unicode字符串映射为有效的DNS字符集,这已经通过了验证并被一些注册机构采纳。