GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana browser saya menemukan server root DNS terdekat?

Browser Anda tidak. Browser Anda akan menggunakan panggilan sistem standar untuk menyelesaikan nama host (biasanya, saya percaya, getaddrinfo() ), dan ini pada gilirannya biasanya akan memeriksa konten /etc/resolv.conf untuk menemukan server nama penyelesaian yang dikonfigurasi, dan menanyakannya. Mereka pada gilirannya akan meneruskan permintaan OS desktop Anda ke server upstream (cache balasan apa pun) atau melakukan resolusi rekursif sendiri. Perhatikan bahwa sebagian besar langkah dalam rantai di atas dapat dikonfigurasi, sehingga apa yang dilakukan browser Anda sebenarnya akan ditentukan secara lokal; tetapi skenario di atas adalah tipikal.

Itu adalah server nama penyelesaian rekursif dalam rantai itu (apakah itu server nama otoritatif yang dikonfigurasi secara lokal, atau beberapa server ISP di masa mendatang) yang perlu mengetahui cara menemukan server root, dan mereka melakukannya melalui file zona yang telah dikonfigurasi sebelumnya untuk . (yang biasanya diperbarui secara berkala dengan meminta server nama root yang tersedia).

Edit :Tidak. Itu akan bergantung pada implementasi, tetapi dalam kasus saya (BIND), itu hanya mengambil satu dan menanyakannya. Selama mendapat jawaban tepat waktu, itu berulang dari sana. Apa yang membuat Anda berpikir bahwa operasi rentang apa pun sedang terjadi?


Dalam resolusi nama DNS, bagaimana browser menentukan server DNS terdekat yang tersedia di antara banyak server DNS?

Seperti yang ditunjukkan oleh jawaban lain, browser Anda, atau program klien lain tidak melakukan pemilihan ini. Program klien meminta resolusi layanan nama dengan melakukan panggilan ke perpustakaan yang disebut resolver.

Resolver menentukan server mana yang harus dihubungi untuk mengajukan pertanyaan. Itu tergantung pada implementasi penyelesai tetapi biasanya itu berkonsultasi, secara berurutan, daftar penyelesai rekursif yang telah dikonfigurasi dengannya (baik dengan konfigurasi statis atau dengan menerimanya melalui mekanisme seperti DHCP.)

Singkatnya:program (tingkat pengguna) Anda meminta resolusi nama dari resolver dan resolver menanyakan server nama yang telah disediakan untuknya melalui beberapa mekanisme konfigurasi.

Saya mengetahui bahwa ada 13 server root, tetapi bagaimana server DNS ISP saya mengetahui server DNS root mana yang harus dihubungi?

Ini juga tergantung implementasi. Saya akan menjelaskan cara kerjanya dengan BIND, karena

  1. BIND adalah server nama yang sangat populer dan kemungkinan besar ISP Anda menggunakannya, dan
  2. Bahkan jika ISP Anda tidak menggunakan BIND, beberapa alternatif menggunakan mekanisme serupa untuk pemilihan server nama dari kumpulan catatan sumber daya NS.

Untuk memulainya, mari kita bicara terlebih dahulu tentang bagaimana server nama berulang mengetahui server nama mana yang akan dipilih untuk berbicara dengan domain tertentu. Untuk setiap domain yang dapat dijangkau dari level root (".") dari server nama, administrator yang mengelola domain tersebut menerbitkan, di domain induk yang berisi, kumpulan catatan sumber daya dari jenis catatan NS (yaitu server nama) untuk didelegasikan secara publik ke server nama disebutkan dalam catatan sumber daya menetapkan tanggung jawab untuk menyelesaikan kueri yang berkaitan dengan domain tersebut.

Salah satu keindahan dari sistem ini adalah memungkinkan pendelegasian hierarki terdistribusi untuk sistem nama domain dan satu-satunya domain yang membutuhkan server rekursif apriori pengetahuan adalah level root, yang dikonfigurasi untuk diketahui oleh server. Dulu paling umum untuk menentukan NS RRset untuk root melalui file "hints" yang dimuat BIND ketika dimulai tetapi untuk sementara sekarang alamat IP yang digunakan oleh server root telah ditentukan sebelumnya di BIND. [Penyimpangan:Anda masih dapat mengesampingkan built-in dengan menentukan zona petunjuk root, dan sebenarnya alamat d.root-servers.net baru saja diubah dan lokasi baru tidak akan tercermin dalam daftar built-in sampai baru versi BIND dibangun dan didistribusikan yang menyertakan informasi baru. Saat ini versi yang berisi alamat IP baru dari server akar D masih dalam versi beta.]

Pokoknya, kunci takeaway di sini adalah bahwa setiap domain telah dikaitkan dengannya NS record RRset yang berisi nameserver yang diumumkan secara publik untuk domain tersebut. Anda harus mencoba melihat beberapa sendiri. Mari kita lihat akarnya:

$ dig . ns +edns=0 @f.root-servers.net.

Saya hanya akan memotong bagian jawaban, yang akan berisi NS RRset yang dikembalikan tanpa urutan yang dapat diprediksi (saya membahas sedikit di sini -- urutan umumnya ditentukan oleh konfigurasi server nama yang saya ajak bicara . Akar yang berbeda mungkin menjawab dengan urutan yang berbeda tetapi item yang dipesan harus sama.)

    ;; ANSWER SECTION:
    .           518400  IN  NS  h.root-servers.net.
    .           518400  IN  NS  j.root-servers.net.
    .           518400  IN  NS  c.root-servers.net.
    .           518400  IN  NS  l.root-servers.net.
    .           518400  IN  NS  e.root-servers.net.
    .           518400  IN  NS  a.root-servers.net.
    .           518400  IN  NS  f.root-servers.net.
    .           518400  IN  NS  k.root-servers.net.
    .           518400  IN  NS  i.root-servers.net.
    .           518400  IN  NS  d.root-servers.net.
    .           518400  IN  NS  m.root-servers.net.
    .           518400  IN  NS  b.root-servers.net.
    .           518400  IN  NS  g.root-servers.net.

Itu semua adalah server nama untuk domain root (".") dan kami dapat mengajukan pertanyaan kepada mereka tentang domain root. Jika kami mengajukan pertanyaan tentang sesuatu yang tidak ada di domain root, kami akan menerima kesalahan atau, kemungkinan besar rujukan ke kumpulan server nama lain (mis. "example.com? Saya tidak menjawab pertanyaan tentang example.com. . Coba tanyakan server nama domain .com -- mereka ada di sana..")

Lalu, bagaimana BIND mengetahui server nama mana dari NS RRset yang akan memberikan respons tercepat?

Jawabannya adalah:awalnya tidak. Namun di bawah perilaku defaultnya, ia belajar dari waktu ke waktu dan menetap biasanya meminta server dengan waktu pulang pergi terpendek.

Waktu Pulang Pergi dan Pemilihan Kandidat Nameserver BIND mengandalkan Round Trip Times (RTT) ke server nama dalam RRset untuk memilih server nama mana yang akan menerima kuerinya. Pertama kali NS RRset untuk domain ditambahkan ke cache, semua catatan di set diberi waktu perjalanan bolak-balik acak kecil, dalam urutan beberapa milidetik. Setelah priming awal itu, ketika kueri perlu diarahkan ke server nama yang didelegasikan untuk domain tertentu, BIND memeriksa cache-nya dan (semoga) menemukan RRset. Itu memilih server dengan waktu RTT terendah dari set dan membuat permintaannya. Dan saat kueri selesai, BIND memperbarui RTT untuk NS RRset sebagai berikut:

  1. RTT server yang baru saja ditanyakan disetel ke waktu perjalanan bolak-balik sebenarnya.
  2. Semua server lain di RRset memiliki RTT yang dikurangi sebagian kecil (~3-4%, menurut saya..)

Mari kita lihat cara kerjanya dengan melihat contoh. Pertama kali penyelesai rekursif saya menemukan domain example.com, ia memuat NS RRset untuk example.com ke dalam cache-nya. Misalkan administrator example.com telah mengumumkan tiga server nama untuk example.com sehingga NS RRset terlihat seperti:

example.com    NS    servera.example.com
example.com    NS    serverb.example.com
example.com    NS    serverc.example.com

Mari kita asumsikan juga demi contoh ini bahwa pemecah masalah Anda membutuhkan waktu berikut untuk menerima respons dari setiap server dalam kumpulan ini:

servera  --  30 ms
serverb  --  45 ms
serverc  --  50 ms

Sekarang saat pertama kali example.com NS RRset dimuat, bobot RTT diprioritaskan dengan nilai acak kecil. Jadi sebelum kita menanyakan apa pun pada server nama example.com, tabel RTT mungkin terlihat seperti ini:

servera  --  8 ms
serverb  --  9 ms
serverc  --  7 ms

Pertama kali kami menanyakan example.com, kami akan pergi ke serverc dan mengajukan pertanyaan kami. Serverc membutuhkan waktu 50 md untuk merespons, jadi setelah kueri kami selesai, kami memperbarui tabel RTT kami sehingga sekarang terbaca:

servera  --  7 ms    //  reduced by a small fraction
serverb  --  8 ms    //  reduced by a small fraction
serverc  --  50 ms   //  updated to reflect the actual round trip time.

Kali berikutnya kami jelas akan memilih servera, karena sekarang memiliki waktu pulang pergi terendah. Setelah hanya beberapa kueri ke domain example.com, kita akan memiliki gagasan yang cukup baik tentang server nama mana yang memberi kita respons tercepat dan setelah itu kita akan lebih memilih server itu paling waktu.

Mengapa kebanyakan waktu dan bukan semua waktu? Dan ada apa dengan sedikit yang saya sebutkan sebelumnya tentang "Semua server lain di RRset memiliki RTT mereka berkurang sebagian kecil"? Nah, ternyata sementara kita mau prefer server tercepat, kami tidak ingin menghapus server lain secara permanen. Mungkin server c adalah server tercepat hampir sepanjang waktu, tetapi pada saat kami pertama kali mengatur RTT-nya, server itu sangat sibuk. Mungkin server untuk sementara tidak berfungsi, menghasilkan RTT yang sangat tinggi (setelah upaya kami untuk menanyakan waktu habis), tetapi kami ingin mulai menanyakannya lagi setelah kembali berfungsi. Dengan menyesuaikan nilai server lain ke bawah setiap kali, cepat atau lambat mereka akan merayap lebih rendah dari rata-rata RTT server yang kita pilih. Ketika itu terjadi, kami akan melemparkan kueri ke arah mereka dan jika waktunya lebih baik, maka bagus.. Jika tidak, kami mengatur ulang RTT-nya dan kembali ke bagian bawah daftar prioritas kami hingga merayap kembali ke depan lagi. Sebagian besar kueri kami akan masuk ke server atau server tercepat di set tetapi outlier dicoba secara berkala untuk memastikan bahwa jika kondisi telah berubah, tabel akan diperbarui untuk mencerminkan hal itu dan rata-rata server terbaik masih dipilih.


13 server nama root sebenarnya bukan 13 server. Masing-masing adalah kumpulan server terdistribusi di berbagai situs di seluruh dunia, dan mereka diakses melalui perutean IP standar, sama seperti server lainnya.

Adapun yang mana root nameserver server DNS ISP memilih untuk dihubungi, yang mungkin bergantung pada detail penyelesai DNS mereka. Mungkin benar-benar acak, mungkin berbobot, tapi saya tidak bisa memberi tahu Anda.

Sunting:jika maksud Anda, bagaimana ISP menemukan salah satu dari 13 server nama, ada daftar publik dari mereka dan alamat IP yang sesuai yang pada dasarnya dimiliki setiap komputer. Dari sana, tinggal memilih satu dan membiarkan router internet melakukan sisanya.


Linux
  1. Bagaimana Cara Kerja Sticky Bit?

  2. Linux – Bagaimana Cara Mengubah Kata Sandi Root yang Terlupakan?

  3. Bagaimana Internal Sudo Bekerja?

  1. Linux – Bagaimana Mengganti Server Vm Dns?

  2. Bagaimana Perintah Keluar Bekerja Pada Terminal Unix?

  3. Apa Jenis-Jenis Server DNS

  1. Bagaimana Menjalankan Perintah Sebagai Administrator Sistem (root)?

  2. Cara mengubah kata sandi root mysql

  3. Bagaimana cara kerja antarmuka loopback