DNS,node以及反向代理的一些知识和应用

2019-12-03 17:29:33 浏览数 (1)

本文作者:IMWeb moonye 原文出处:IMWeb社区 未经同意,禁止转载

概念

域名系统(英文:Domain Name System,缩写:DNS)是因特网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网。DNS 使用TCP和UDP端口53。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。 正向解析:从域名到ip的转换 反向解析:从ip到域名的转换

  • 根域 就是一个".", 就是我们的网址,比如www.example.com,实际是"www.example.com.", 最后是有一个点的。当然一般是被我们忽略了的。 全球共有504个根域服务器,分为13组。
  • 域的划分 一种是按性质划分,如org.,edu.等,另一中是按国家划分,如cn.,jp.等 每个域都有自己的域名服务器,也叫做权威服务器。 如example.com就是顶级域名,而www.example.com就表示example.com域下面的一个www主机。当然也有网站直接将顶级域名映射到www这个主机上的,这样就可以直接通过顶级域名来访问主机。

解析步骤

1、在浏览器中输入www.example.com域名,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。 2、如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。 3、如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/ip参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。 4、如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。 5、如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至13组根DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级DNS服务器地址(example.com)给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找example.com域服务器,重复上面的动作,进行查询,直至找到www.example.com主机。 6、如果用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把转请求转至上上级,以此循环。不管是本地DNS服务器用是是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。

node框架

npm上有一个dns的框架,可以做域名解析

  • 安装
代码语言:javascript复制
npm install -g dns
  • 正向解析
代码语言:javascript复制
var dns = require('dns');
dns.lookup('www.google.com', function onLookup(err, addresses, family) {
  console.log('addresses:', addresses);
});
  • 反向解析
代码语言:javascript复制
var dns = require('dns');

dns.resolve4('www.google.com', function (err, addresses) {
  if (err) throw err;

  console.log('addresses: '   JSON.stringify(addresses));

  addresses.forEach(function (a) {
    dns.reverse(a, function (err, hostnames) {
      if (err) {
        throw err;
      }

      console.log('reverse for '   a   ': '   JSON.stringify(hostnames));
    });
  });
});

更多API,这里

实战

一个反向代理的小实践

实现一个本地的服务,对于普通文件则直接取本地文件,对于请求则转发到服务器上,可配置希望转发的具体ip。 代码会上传到github上。

0 人点赞