ホームページ  >  記事  >  ウェブフロントエンド  >  NodeJSにおけるドメイン名DNSの詳細説明

NodeJSにおけるドメイン名DNSの詳細説明

零下一度
零下一度オリジナル
2017-06-26 13:33:221703ブラウズ

前の言葉

この記事では、ドメイン名解決モジュール DNS について詳しく紹介します

動作原理

ブラウザを開いて上のアドレスバーに URL を入力し、Enter キーを押した瞬間に、多くのことが起こります。まず、コンピューターは 0 と 1 しか理解できません。つまり、コンピューターは人間のアルファベットのアドレスを理解できません。IPv4 の場合、それは 8 ビットの 2 進数の 4 つのグループです。人間の便宜のためには、URL を IP アドレスに変換するサービスが必要です、それが DNS です

DNS 取得プロセス全体がレイヤーごとにキャッシュされます

1. ブラウザは独自の DNS キャッシュを検索します

ブラウザ DNSキャッシュ時間は、DNS サーバーから返される TTL 値とは関係ありません。

ウェブサイトのドメイン名の実際のIPアドレスを取得した後、ブラウザはネットワークリクエストの損失を減らすためにそのIPをキャッシュします。各ブラウザには固定の DNS キャッシュ時間があり、Chrome の有効期限は 1 分です。この期間中、DNS は再リクエストされません

Chrome ブラウザは自分の DNS キャッシュ時間を確認し、それを入力する方が便利です。アドレスバー

chrome://net-internals/#dns

2. オペレーティングシステム独自の DNS キャッシュを検索します

3. ローカル HOST ファイルを読み取ります。Windows でのパスは通常

c:\Windows\System32\drivers\etc\hosts

4. への DNS を開始します。ブロードバンド オペレーターの ISP システム コール、ISP サーバーは自身のキャッシュをチェックします

5. まだ見つからない場合、ISP サーバーはローカル コンピューターに代わって反復的な DNS 解決要求を開始します

6. それでも失敗する場合は、解決に失敗します

ローカル解決

DNSモジュールには2種類の機能が含まれており、そのうちの1つは、基盤となるオペレーティングシステムツールを使用してドメイン名解決を実行する機能であり、ネットワーク通信を必要としません。そのような関数は 1 つだけあります: dns.lookup()

【dns.lookup(hostname[, options], callback)】

このメソッドは、ドメイン名 ('cnblogs.com' など) を最初に見つかったレコードに解決します。 A (IPV4) または AAAA(IPV6)。パラメータ オプションにはオブジェクトまたは整数を指定できます。オプションを指定しない場合は、IP v4 アドレスと v6 アドレスの両方を使用できます。 options が整数の場合、4 または 6 でなければなりません

options パラメータには次の属性が含まれます

family:地址协议族,必须为4或6的整数
hints:设置getaddrinfo的标志,dns.ADDRCONFIG 或者 dns.V4MAPPED(ipv4映射成ipv6)
all:false(默认),布尔值,如设置为true,则返回IP数组,否则返回单个IP地址
{
  family: 4,
  hints: dns.ADDRCONFIG | dns.V4MAPPED
}

コールバック関数にはパラメータ(err、address、family)が含まれます。 address パラメーターは、IP v4 または v6 アドレスを表します。 family パラメータは 4 または 6 で、アドレス ファミリを示します (以前にルックアップに渡された値である必要はありません)。エラーが発生した場合、パラメーター err は Error オブジェクト、err.code はエラー コードです

​​

[注] err.code は 'ENOENT' と等しくなります。これは、ドメイン名が存在しない、またはその他の理由が考えられます。 、利用可能なファイル記述子がないなど

var dns = require('dns');
dns.lookup('www.cnblogs.com', function(err, address, family){
    console.log(err);//nullconsole.log(address);//218.11.2.249console.log(family);//4});

同じドメイン名が複数の異なるIPに対応する場合があります。 options = {all: true}と設定することで取得できます

var dns = require('dns');
dns.lookup('www.qq.com',{all:true}, function(err, address, family){
    console.log(err);//null/*[ { address: '125.39.240.113', family: 4 },
  { address: '61.135.157.156', family: 4 } ] */console.log(address);
    console.log(family);//undefined});

【dns.lookupService(address, port, callback)】

lookupに対応して、lookupService()メソッドはIPアドレスとポートからのリフレクションを実行します。ドメイン名を解析するには

このメソッドのコールバック関数のパラメータは (err, hostname, service) です。ホスト名とサービスはどちらも文字列です (「localhost」や「http」など)。エラーが発生した場合、パラメーター err は Error オブジェクト、err.code はエラー コードです

​​
var dns = require('dns');
dns.lookupService('127.0.0.1',80,function(err, hostname, service){
    console.log(err);//nullconsole.log(hostname);//baiconsole.log(service);//http});

ネットワーク分析

dns.lookup() を除く DNS モジュールのすべての関数は、実際の DNS に接続する必要がありますドメイン名のサーバー 解析機能であり、常にネットワークを使用して DNS クエリを実行します

【dns.resolve(hostname[, rrtype], callback)】

このメソッドはドメイン名 ('cnblogs.com' など) を解決します。レコードタイプ配列を指定する rrtype に変換します

有効な rrtypes 値は次のとおりです:

'A' (IPV4 地址, 默认)'AAAA' (IPV6 地址)'MX' (邮件交换记录)'TXT' (text 记录)'SRV' (SRV 记录)'PTR' (用来反向 IP 查找)'NS' (域名服务器 记录)'CNAME' (别名 记录)'SOA' (授权记录的初始值)

コールバックパラメータは(err, addresses). 其中 addresses 中每一项的类型都取决于记录类型。出错时,参数err 是 Error 对象,err.code はエラーコードです

var dns = require('dns');//IPV4dns.resolve('www.qq.com',function(err,address){
    console.log(address);//[ '125.39.240.113', '61.135.157.156' ]});//IPV6dns.resolve('www.qq.com','AAAA',function(err,address){
    console.log(address);//[ '240e:e1:8100:28::2:16' ]});//别名dns.resolve('www.qq.com','CNAME',function(err,address){
    console.log(address);//undefined});

【dns.resolve4(hostname, callback)】

dns に似ています.resolve()、IPv4のみクエリ可能(Aレコード)

var dns = require('dns');
dns.resolve4('www.qq.com',function(err,address){
    console.log(address);//[ '125.39.240.113', '61.135.157.156' ]});

【dns.reverse(ip, callback)】

このメソッドは、IPアドレスを逆解決し、そのアドレスを指すドメイン名の配列を返すために使用されます。 IPアドレス。コールバック関数のパラメータ (err、ホスト名)。エラーが発生した場合、パラメーター err は Error オブジェクト、err.code はエラー コードです

​​
var dns = require('dns');
dns.reverse('114.114.114.114',function(err,hostnames){
    console.log(hostnames);//'public1.114dns.com'});

以上がNodeJSにおけるドメイン名DNSの詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。