Apa perbedaan antara 0.0.0.0, 127.0.0.1 dan localhost?

271

Saya menggunakan Jekylldan Vagrantdi mac saya. Saya menemukan bahwa Jekyll serverakan mengikat 0.0.0.0:4000bukan 127.0.0.1:4000. Juga gem serverakan mengikat ke alamat ini secara default. Saya masih dapat mengunjunginya melalui http://localhost:port. Tetapi untuk Jekyll, sepertinya pengaturan default (mis. 0.0.0.0:4000) memerlukan akses Internet. Saya tidak dapat berjalan Jekyll servertanpa Internet. Apakah ini bug kecil?

Saya juga menggunakan Vagrant. Saya telah mengatur port forwarding (8080 => 4000) di Vagrantfile, karena saya menginstal Jekylldi Vagrantmesin virtual dan mengujinya di bawah Macintosh. Jika saya menggunakan pengaturan default (0.0.0.0:4000), itu berfungsi. Saya dapat mengunjunginya dari safari saya dengan http://localhost:8080. Tetapi jika tidak ada internet, saya tidak dapat mengikat ke 0.0.0.0:4000. Saya menggunakan jekyll server -H 127.0.0.1untuk mengikat layanan 127.0.0.1:4000sebagai gantinya, maka saya tidak dapat mengunjunginya melalui http://localhost:8080.

Adakah yang bisa menjelaskan perbedaan antara 0.0.0.0, 127.0.0.1 dan localhost ? Dan adakah yang bisa menjelaskan mengapa perbedaan akan menyebabkan masalah ini ?

Ciel
sumber
Artikel ini mungkin membantu howtogeek.com/225487/…
fangxing

Jawaban:

408

127.0.0.1biasanya alamat IP yang ditetapkan untuk "loopback" atau antarmuka hanya lokal. Ini adalah adapter jaringan "palsu" yang hanya dapat berkomunikasi dalam host yang sama. Ini sering digunakan ketika Anda ingin aplikasi yang mampu jaringan hanya melayani klien di host yang sama. Suatu proses yang mendengarkan 127.0.0.1untuk koneksi hanya akan menerima koneksi lokal pada soket itu.

"localhost" biasanya merupakan nama host untuk 127.0.0.1alamat IP. Biasanya diatur dalam /etc/hosts(atau setara dengan Windows bernama "host" di suatu tempat di bawah %WINDIR%). Anda dapat menggunakannya sama seperti nama host lainnya - coba "ping localhost" untuk melihat bagaimana itu teratasi 127.0.0.1.

0.0.0.0memiliki beberapa arti berbeda, tetapi dalam konteks ini, ketika server diminta untuk mendengarkan 0.0.0.0itu berarti "mendengarkan pada setiap antarmuka jaringan yang tersedia". Adaptor loopback dengan alamat IP 127.0.0.1dari perspektif proses server terlihat seperti adaptor jaringan lainnya pada mesin, sehingga server disuruh mendengarkan0.0.0.0 akan menerima koneksi pada antarmuka itu juga.

Mudah-mudahan itu menjawab sisi IP pertanyaan Anda. Saya tidak terbiasa dengan Jekyll atau Vagrant, tetapi saya menduga bahwa penerusan porta Anda 8080 => 4000entah bagaimana terikat pada adaptor jaringan tertentu, sehingga tidak ada di jalur ketika Anda terhubung secara lokal ke127.0.0.1

Kapten Pedantic
sumber
Hmm, ping localhosttampaknya bekerja pada Windows bahkan tanpa file host menunjuk 127.0.0.1ke localhost.
Pacerier
Setuju dengan Pacerier. Setidaknya di Windows, localhost berperilaku sebagai 0.0.0.0 (bukan 127.0.0.1) secara default
drodsou
5
"Ini sebagian besar benar kecuali untuk uraian Anda tentang pengikatan ke 0.0.0.0. Ini tidak mengikat ke setiap antarmuka jaringan yang tersedia seperti yang telah Anda uraikan, melainkan mengikat semua alamat . Dalam tumpukan TCP ini dikenal sebagai INADDR_ANY - dari jawaban yang dihapus dari @strangemonad
Piotr Dobrogost
15

Dalam versi Jekyll saat ini, defaultnya adalah http://127.0.0.1:4000/ .
Ini bagus, jika Anda terhubung ke jaringan tetapi tidak ingin orang lain mengakses aplikasi Anda.

Namun mungkin Anda ingin melihat bagaimana aplikasi Anda berjalan pada ponsel atau dari beberapa laptop / komputer lain.

Dalam hal ini, Anda dapat menggunakannya

jekyll serve --host 0.0.0.0

Ini mengikat aplikasi Anda ke host & penggunaan selanjutnya berikut untuk menghubungkannya dari beberapa host lain

http://host's IP adress/4000 
Sanyam Jain
sumber