Apa perbedaan antara 127.0.0.1 dan localhost

157

Dengan asumsi yang berikut ini didefinisikan dalam .../hosts:

127.0.0.1 localhost

Apa, jika ada, perbedaan aktual antara menggunakan 127.0.0.1dan localhostsebagai nama server, terutama ketika menekan proses yang berjalan secara lokal yang mendengarkan koneksi?

Bohemian
sumber
15
Bisa dibilang localhostprotokol independen, baik IPv4 dan IPv6 akan berfungsi.
Steve-o

Jawaban:

122

Nah, yang paling mungkin perbedaan adalah bahwa Anda masih harus melakukan yang sebenarnya lookup dari localhostsuatu tempat.

Jika Anda menggunakan 127.0.0.1, maka perangkat lunak (cerdas) hanya akan mengubahnya secara langsung menjadi alamat IP dan menggunakannya. Beberapa implementasi gethostbynameakan mendeteksi format bertitik (dan mungkin format IPv6 yang setara) dan tidak melakukan pencarian sama sekali.

Kalau tidak, nama itu harus diselesaikan. Dan tidak ada jaminan bahwa hostsfile Anda benar-benar akan digunakan untuk resolusi itu (pertama, atau sama sekali) sehingga localhostdapat menjadi alamat IP yang sama sekali berbeda .

Maksud saya, pada beberapa sistem, hostsfile lokal dapat di-bypass. The host.confberkas kontrol ini pada Linux (dan banyak mesin-mesin Unix lainnya).

paxdiablo
sumber
6
Perbedaan utama adalah bahwa koneksi dapat dilakukan melalui Unix Domain Socket, seperti yang dinyatakan di sini: stackoverflow.com/questions/3715925/localhost-vs-127-0-0-1
Don Viegues
/etc/nsswitch.confmemilih apakah hostsatau DNS digunakan pertama kali untuk pencarian host, jika nss sedang berjalan.
Mark Lakata
@ DonViegues Itu desain khusus MySQL dan IMO buruk. Ini akan melihat localhost dan mencoba menggunakan unix-socket daripada menghubungkan menggunakan IP tetapi untuk 127.0.0.1 hanya menggunakan IP.
Arman Ordookhani
@ArmanOrdookhani AFAIK jika Anda terhubung ke host jarak jauh melalui SSH dan kemudian dari sana ke MySQL (seperti terowongan SSH untuk mencapai server MySQL) Anda harus menggunakan 127.0.0.1, karena semuanya berjalan di atas TC / IP. Tetapi jika 2 proses yang berjalan pada mesin yang sama ingin terhubung, localhost (soket unix) lebih cepat / memiliki biaya overhead. Terima kasih!
Don Viegues
1
@ DonViegues Ya Anda benar, unix socket memiliki overhead yang lebih sedikit daripada TCP / IP. Saya hanya ingin menyebutkan perilaku ini khusus untuk MySQL dan bukan sesuatu di tingkat OS atau jaringan.
Arman Ordookhani
36

Wikipedia merangkum ini dengan baik:

Pada sistem komputer modern, localhost sebagai hostname diterjemahkan ke alamat IPv4 di blok bersih 127.0.0.0/8 (loopback), biasanya 127.0.0.1, atau :: 1 di IPv6.

Satu-satunya perbedaan adalah bahwa itu akan mencari di DNS untuk sistem apa yang localhostdiputuskan. Pencarian ini sangat, sangat cepat. Misalnya, agar stackoverflow.comAnda mengetiknya di bilah alamat (atau menggunakan bookmarklet yang menunjuk di sini). Either way, Anda sampai di sini melalui nama host. localhostmenyediakan fungsionalitas yang serupa.

Ryan Bigg
sumber
11
Ini sebenarnya penting. localhost dapat menyelesaikan ke alamat IPv6, sedangkan 127.0.0.1 tidak bisa. Menggunakan localhost pada sistem IPv6 hanya dapat bekerja, sedangkan 127.0.0.1 tidak akan karena IPv4 tidak tersedia.
Erwin Jansen
32

beberapa aplikasi akan memperlakukan "localhost" secara khusus. klien mysql akan memperlakukan localhost sebagai permintaan untuk terhubung ke soket domain unix lokal alih-alih menggunakan tcp untuk terhubung ke server pada 127.0.0.1. Ini mungkin lebih cepat, dan mungkin berada di zona otentikasi yang berbeda.

Saya tidak tahu aplikasi lain yang memperlakukan localhost berbeda dari 127.0.0.1, tetapi mungkin ada beberapa.

Wayne Walker
sumber
8

Nah, dengan IP lebih cepat.

Pada dasarnya, ketika Anda memanggil dengan nama server, itu dikonversi ke IP asli.

Tetapi akan sulit untuk menghafal IP, karena alasan ini nama domain dibuat.

Secara pribadi saya menggunakan http://localhostbukan http://127.0.0.1atau http://username.

Topeng
sumber
localhost lebih cepat, tidak menggunakan TCP / IP
Don Viegues
@Don Viegues - apa yang Anda katakan bertentangan dengan jawaban lain di utas ini. Bisakah Anda menguraikan?
Dikla
Ya, saya akan menyalin dan menempel komentar saya yang lain: Perbedaan utamanya adalah koneksi dapat dibuat melalui Unix Domain Socket, seperti yang dinyatakan di sini: stackoverflow.com/questions/3715925/localhost-vs-127-0-0-1
Don Viegues
5
@DonViegues yang khusus untuk MySQL, yang menangani localhostdalam cara khusus . Aplikasi lain kemungkinan masih akan mencari localhost.
William Denniss
0

Tidak ada yang berbeda. Yang satu lebih mudah diingat daripada yang lain. Secara umum, Anda menetapkan nama untuk dikaitkan dengan alamat IP. Anda tidak harus menentukan localhost untuk 127.0.0.1, Anda bisa menentukan nama yang Anda inginkan.

d_ethier
sumber
-3

Perbedaan utama adalah bahwa koneksi dapat dilakukan melalui Unix Domain Socket, seperti yang dinyatakan di sini: localhost vs. 127.0.0.1

Don Viegues
sumber
6
Jawaban yang Anda tautkan adalah kasus khusus yang khusus untuk MySQL, tidak berlaku secara umum. en.wikipedia.org/wiki/Localhost#Special_cases
William Denniss