Perubahan ke /etc/hosts
file tampaknya segera berlaku. Saya ingin tahu tentang implementasinya. Sihir apa yang digunakan untuk mencapai fitur ini?
Perubahan ke /etc/hosts
file tampaknya segera berlaku. Saya ingin tahu tentang implementasinya. Sihir apa yang digunakan untuk mencapai fitur ini?
Jawaban:
Keajaiban membuka /etc/hosts
file dan membacanya:
strace -e trace=file wget -O /dev/null http://www.google.com http://www.facebook.com http://unix.stackexchange.com 2>&1 | grep hosts
open("/etc/hosts", O_RDONLY|O_CLOEXEC) = 4
open("/etc/hosts", O_RDONLY|O_CLOEXEC) = 5
open("/etc/hosts", O_RDONLY|O_CLOEXEC) = 4
The getaddrinfo(3)
fungsi, yang merupakan satu-satunya nama menyelesaikan standar antarmuka, hanya akan membuka dan membaca /etc/hosts
setiap kali dipanggil untuk menyelesaikan nama host.
Aplikasi yang lebih canggih yang tidak menggunakan standar getaddrinfo(3)
, tetapi masih entah bagaimana menambah /etc/hosts
campuran (misalnya dnsmasq
server DNS) mungkin digunakan inotify(7)
untuk memantau perubahan pada /etc/hosts
file dan membaca kembali hanya jika diperlukan.
Browser dan aplikasi semacam itu tidak akan melakukan itu. Mereka akan membuka dan membaca /etc/hosts
setiap kali mereka perlu menyelesaikan nama host, bahkan jika mereka tidak menggunakan resolib libc secara langsung, tetapi mereplikasi kerjanya dengan cara lain.
Resolusi nama, antara lain, dikelola oleh /etc/nsswitch.conf
. Berikut ini kutipannya:
passwd: files sss
shadow: files sss
group: files sss
hosts: files dns myhostname
(...)
Perhatikan hosts
barisnya. Bunyinya: "Ketika menyelesaikan nama host, pertama-tama baca /etc/hosts
file untuk mencari nama host, jika tidak ditemukan kemudian jalankan permintaan DNS, jika tidak ditemukan kemudian coba sistem nama host yang dikonfigurasi secara lokal".
Jadi, inilah mengapa sangat cepat. Perhatikan bahwa itu tidak tergantung pada layanan jaringan pada mesin, jadi tidak ada layanan untuk memulai ulang atau memuat ulang.
/etc/hosts
. Mengapa tidak menggunakan versi cache?