Apa perbedaan antara alamat IP 0.0.0.0 dan 127.0.0.1?

220

Saya tahu 127.0.0.1 ~ 127.255.255.254 adalah alamat IP loopback untuk sebagian besar sistem operasi modern, dan alamat IP ini dapat digunakan untuk merujuk ke komputer kita sendiri.

Tapi apa itu 0.0.0.0? Sepertinya itu juga merujuk ke komputer lokal, jadi apa bedanya ?

Dan, dapatkah Anda menjelaskan koneksi IP berikut untuk saya:

tangkapan layar netstat -satu output

Jichao
sumber
6
Lihat juga pertanyaan ini, karena memberikan perincian tentang apa 0.0.0.0 itu (dan tidak): serverfault.com/questions/228629/…
Ellie Kesselman
Sistem operasi modern akan menggunakan ::1alamat loopback.
kasperd

Jawaban:

157

Satu-satunya hal adalah Anda tidak mengatakan "semua alamat harus memiliki akses" - yang dilakukan di firewall Anda dan / atau perangkat lunak server dan / atau lapisan keamanan lainnya seperti tcpwrappers.

0.0.0.0, dalam konteks ini, berarti "semua alamat IP pada mesin lokal" (pada kenyataannya mungkin, "semua alamat IPv4 pada mesin lokal"). Jadi, jika mesin server web Anda memiliki dua alamat IP, 192.168.1.1 dan 10.1.2.1, dan Anda mengizinkan daemon server web seperti apache untuk mendengarkan pada 0.0.0.0, itu akan dapat dijangkau di kedua alamat IP tersebut. Tetapi hanya untuk apa yang dapat menghubungi alamat IP dan port web tersebut.

Perhatikan bahwa, dalam konteks yang berbeda (perutean) 0.0.0.0 biasanya berarti rute default (rute ke "sisa" internet, selain dari rute di jaringan lokal Anda, dll.).

Lee B
sumber
Jadi maksud Anda soket server web terikat ke alamat yang tersedia ketika mendengarkan di 0.0.0.0?
onmyway133
0.0.0.0berarti rute default hanya jika disertai dengan awalan /0(atau netmask 0.0.0.0)
minmaxavg
Yang perlu diperhatikan: jika beberapa proses mendengarkan pada 0.0.0.0, proses ini akan dapat dijangkau pada alamat IP dari semua antarmuka jaringan mesin yang mencakup alamat antarmuka loop back yang saat ini dikonfigurasi. Tetapi jika proses hanya mendengarkan pada port <portNumber> dari alamat loopback, misalnya 127.0.0.1, dan kemudian proses hanya dapat dicapai dari mesin yang sama dengan menargetkan tepat 127.0.0.1: <portNumber> . Coba alat python ini untuk bermain!
Gab 是 好人
77

Ketika suatu layanan mendengarkan pada 0.0.0.0 ini berarti layanan mendengarkan pada semua antarmuka jaringan yang dikonfigurasi, ketika mendengarkan pada 127.0.0.1 layanan hanya terikat pada antarmuka loopback (hanya tersedia pada mesin lokal)

Slubman
sumber
38

Alamat IP 0.0.0.0dapat memiliki arti yang sangat berbeda, tergantung di mana ia digunakan.

  • Ini bukan alamat yang valid untuk diberikan ke antarmuka jaringan yang sebenarnya, bersama dengan alamat lain di subnet 0.0.0.0/8 (yaitu alamat yang dimulai dengan 0.).
  • Ini tidak dapat digunakan sebagai alamat sumber pada paket IP apa pun, kecuali ini terjadi ketika komputer masih tidak tahu alamat IP-nya dan sedang mencoba untuk mendapatkan satu (contoh klasik: DHCP).
  • Jika digunakan dalam tabel routing, ini mengidentifikasi gateway default; rute ke 0.0.0.0 adalah rute default, yaitu rute yang digunakan ketika tidak ada rute spesifik yang tersedia untuk alamat tujuan.
  • Terakhir, ketika dilihat dalam output dari netstatperintah (yang Anda minta), itu berarti soket yang diberikan mendengarkan semua alamat IP yang tersedia yang dimiliki komputer; ketika komputer memiliki lebih dari satu alamat IP, soket hanya dapat diikat ke alamat dan pasangan port tertentu, atau ke port dan semua alamat; jika Anda melihat alamat IP di sana, berarti soket hanya mendengarkan pada port itu dan alamat tertentu itu; jika Anda lihat 0.0.0.0, itu berarti mendengarkan pada port itu di semua alamat mesin, termasuk satu loopback ( 127.0.0.1).
Massimo
sumber
3
Apa artinya jika Anda menggulung 0.0.0.0? Apakah curl benar-benar menghubungi dan mengirim permintaan melalui antarmuka yang tersedia? Bagaimana cara mengetahui antarmuka mana yang benar? Saya mengerti bagaimana server dapat mendengarkan pada semua antarmuka, tetapi apa mekanisme bagi klien untuk meminta semua antarmuka seperti ketika saya melakukan curl 0.0.0.0 atau curl [::].
CMCDragonkai
1
OS ini kemungkinan besar akan menghalangi Anda untuk melakukan itu, karena itu tidak hanya masuk akal dari perspektif jaringan. Mencoba ping 0.0.0.0pada sistem Windows menghasilkan pesan kesalahan.
Massimo
curl 0.0.0.0hasil connection refuseddi Arch Linux. ping 0.0.0.0, di sisi lain, tampaknya menjadi alias ping 127.0.0.1yang berfungsi dengan baik.
Matthias Braun
@MatthiasBraun connection refusedmungkin karena curl secara default coba sambungkan ke port 80 / tcp. Cobalah untuk menemukan port terbuka Anda dengan nmap -sV localhostdan kemudian untuk misalnya jika 631 / tcp: curl 0.0.0.0:631.
Pablo A
27

Jawaban Lee B benar, tetapi inilah beberapa RFC yang relevan jika Anda tertarik.

0.0.0.0:

Dari RFC1122 , Bagian 3.1.2.3:

Kami sekarang merangkum kasus khusus penting untuk alamat IP Kelas A, B, dan C, menggunakan notasi berikut untuk alamat IP:

            { <Network-number>, <Host-number> }

        or
            { <Network-number>, <Subnet-number>, <Host-number> }

...

          (a)  { 0, 0 }

             This host on this network.  MUST NOT be sent, except as
             a source address as part of an initialization procedure
             by which the host learns its own IP address.

Hanya saja, "host ini di jaringan ini" ... seperti yang dinyatakan oleh Lee B, ini diterjemahkan ke semua alamat IP yang tersedia di host Anda. Hosting layanan di 0.0.0.0 akan secara otomatis meng-host layanan itu di setiap antarmuka yang dapat dialamatkan.

127.0.0.1:

Dari RFC5735 :

127.0.0.0/8 - Blok ini ditugaskan untuk digunakan sebagai alamat loopback host Internet. Datagram yang dikirim oleh protokol tingkat tinggi ke alamat di mana saja di dalam blok ini akan kembali ke dalam host. Ini biasanya diimplementasikan hanya menggunakan 127.0.0.1/32 untuk loopback. Seperti dijelaskan dalam [RFC1122], Bagian 3.2.1.3, alamat dalam seluruh blok 127.0.0.0/8 tidak muncul secara sah di jaringan mana pun.

Perbedaan antara 0.0.0.0 dan alamat loopback 127.0.0.1 adalah bahwa alamat loopback dirancang untuk memungkinkan antarmuka IP berfungsi penuh dalam host itu sendiri, terlepas dari apa yang tampak seperti pengaturan jaringan, jika ada, seperti apa. Lalu lintas yang dikirim ke perangkat loopback segera diterima di sana. Ini tidak terlalu banyak sehingga jaringan loopback "merujuk" ke host Anda sendiri ... itu lebih seperti Anda memiliki segmen jaringan mini di host Anda yang perangkat, proses dan soket dan dapat membuka dan terhubung.


sumber
4

Secara sederhana: Mendengarkan pada 0.0.0.0 berarti mendengarkan dari mana saja yang memiliki akses jaringan ke komputer ini, misalnya, dari komputer ini, dari jaringan lokal atau dari Internet, sementara mendengarkan pada 127.0.0.1 berarti hanya mendengarkan dari komputer ini juga.

Hải Phong
sumber