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

概念

域名系统(英文: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的框架,可以做域名解析

  • 安装
npm install -g dns
  • 正向解析
var dns = require('dns');
dns.lookup('www.google.com', function onLookup(err, addresses, family) {
  console.log('addresses:', addresses);
});
  • 反向解析
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 条评论
登录 后参与评论

相关文章

来自专栏北京马哥教育

MySQL主从复制架构及原理

一、简介 在实际生产中,数据的重要性不言而喻,因此考虑到数据的重要性比如单点故障导致后端数据库奔溃,或者后端数据库访问压力过大等,mysql数据库做主从非常有必...

3154
来自专栏FreeBuf

ProxyChains实现自动添加代理逃避检测

使用爬虫爬取网站或者使用扫描器扫描目标时经常会遇到扫描频率较为频繁导致IP被封或者限制访问的情况,这时候我们就需要考虑利用IP代理的方式不断的变换IP进行爬虫和...

2785
来自专栏Java帮帮-微信公众号-技术文章全总结

Shiro权限管理详解

1 权限管理 1.1 什么是权限管理 基本上涉及到用户参与的系统都要进行权限管理,权限管理属于系统安全的范畴,权限管理实现对用户访问系统的控制,按照安全规则或者...

3925
来自专栏PHP实战技术

想玩集群?读写分离?你要先懂这个!

答案是:Mysql主从同步,集群,读写分离,都会涉及数据的数据同步,所以想玩哪些东西,我们还是要把这个数据同步的基础学会之后我们才能玩其他的,今...

2977
来自专栏PHP技术

HTTP/2 服务器推送(Server Push)

HTTP/2 协议的主要目的是提高网页性能。 头信息(header)原来是直接传输文本,现在是压缩后传输。原来是同一个 TCP 连接里面,上一个回应(respo...

3216
来自专栏Java面试笔试题

什么是端口号

在网络技术中,端口(Port)包括逻辑端口和物理端口两种类型。物理端口指的是物理存在的端口,如ADSL Modem、集线器、交换机、路由器上用 于连接其他网络设...

551
来自专栏蓝天

redis for lack of backlog

版本: redis-3.2.9 部署: 5台64G内存的物理机,每台机器启动2个redis进程组成5主5备集群,每台机器1个主1个备,并且错开互备...

875
来自专栏加米谷大数据

HDFS的特点分析以及如何存储数据

HDFS采用Master/Slave的架构来存储数据,这种架构主要由四个部分组成,分别为HDFS Client、NameNode、DataNode和Second...

771
来自专栏KaliArch

Kafka-manager部署

1.1 Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。

2005
来自专栏jeremy的技术点滴

nginx使用备忘

27411

扫码关注云+社区