ホームページ  >  記事  >  ウェブフロントエンド  >  Nodejs がドメイン名解決モジュール DNS を理解することを学ぶ

Nodejs がドメイン名解決モジュール DNS を理解することを学ぶ

青灯夜游
青灯夜游転載
2021-02-22 17:41:321966ブラウズ

Nodejs がドメイン名解決モジュール DNS を理解することを学ぶ

この記事では、ドメイン名解決モジュール DNS について詳しく紹介します。一定の参考値があるので、困っている友達が参考になれば幸いです。

関連する推奨事項: 「nodejs チュートリアル

動作原理

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

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

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

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

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

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

chrome://net-internals/#dns

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

3. ローカル HOST ファイルを読み取ります Windows でのパスは通常 # です# #
c:\Windows\System32\drivers\etc\hosts

4. ブロードバンド オペレーター ISP への DNS システム コールを開始すると、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 パラメーターは、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);//null
    console.log(address);//218.11.2.249
    console.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、ホスト名、サービス) です。ホスト名とサービスはどちらも文字列です (「localhost」や「http」など)。エラーが発生した場合、パラメーター err は Error オブジェクト、err.code はエラー コード

var dns = require('dns');
dns.lookupService('127.0.0.1',80,function(err, hostname, service){
    console.log(err);//null
    console.log(hostname);//bai
    console.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, addresss)

です。

addresses

の各項目のタイプはレコード タイプによって異なります。エラーが発生した場合、パラメータ errError オブジェクト、err.code はエラー コード <pre class="brush:js;toolbar:false;">var dns = require(&amp;#39;dns&amp;#39;); //IPV4 dns.resolve(&amp;#39;www.qq.com&amp;#39;,function(err,address){ console.log(address);//[ &amp;#39;125.39.240.113&amp;#39;, &amp;#39;61.135.157.156&amp;#39; ] }); //IPV6 dns.resolve(&amp;#39;www.qq.com&amp;#39;,&amp;#39;AAAA&amp;#39;,function(err,address){ console.log(address);//[ &amp;#39;240e:e1:8100:28::2:16&amp;#39; ] }); //别名 dns.resolve(&amp;#39;www.qq.com&amp;#39;,&amp;#39;CNAME&amp;#39;,function(err,address){ console.log(address);//undefined });</pre>[dns.resolve4] (ホスト名, コールバック)] 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 サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。