Menggunakan cmd
dan ping
pada Windows memberi saya hasil berikut:
- Ping "localhost":
- Pinging "192.168.0.10" (alamat IP lokal):
Bukankah kedua situasi sama persis?
Maksudku, aku melakukan ping antarmuka yang sama, mesin yang sama dan alamat yang sama. Mengapa saya mendapatkan hasil yang berbeda?
EDIT: Ini ipconfig /all
layar saya :
windows
ip-address
ping
localhost
Diogo
sumber
sumber
Jawaban:
Anda tidak melakukan ping pada antarmuka yang sama , tanpa antarmuka fisik apa pun, Anda masih memiliki "host lokal".
Anda
localhost
digunakan untuk merujuk ke komputer Anda dari IP "internal", bukan dari IP "eksternal" komputer Anda. Jadi, paket ping tidak melewati antarmuka jaringan fisik apa pun; hanya melalui antarmuka loop kembali virtual yang langsung mengirim paket dari port ke port tanpa hop fisik.Anda mungkin masih bertanya-tanya mengapa
localhost
ini::1
diselesaikan, sementara secara tradisional kami mengharapkannya untuk menyelesaikan ke alamat IPv4127.0.0.1
. Catatan yang.localhost
secara tradisional TLD (lihat RFC 2606 ) yang menunjuk kembali ke alamat IP loop kembali (untuk IPv4, lihat RFC 3330 , terutama 127.0.0.0/8).Mencari
localhost
menggunakannslookup
memberi kami:Dengan demikian Windows lebih suka menggunakan alamat IP loop kembali IPv6
::1
(lihat RFC 2373 ) seperti yang terdaftar pertama.Oke, jadi, dari mana asalnya, mari kita lihat file hosts.
Hmm, kita harus melihat pengaturan DNS Windows.
Artikel KB ini memberi tahu kami tentang pengaturan yang memengaruhi apa yang lebih disukai Windows, ditekankan dalam huruf tebal:
Apa tabel kebijakan awalan ini?
Tabel ini memutuskan awalan apa yang didahulukan dari awalan lain selama DNS menyelesaikan.
Ah, jadi menggunakan KB itu kita bisa menambahkan entri di sini yang menunjukkan bahwa IPv4 memiliki prioritas lebih tinggi daripada IPv6.
Catatan: Tidak ada alasan untuk menimpa perilaku ini, kecuali jika Anda mengalami masalah yang kompatibel. Mengubah pengaturan ini pada Windows Server kami memecah server email kami, sehingga harus ditangani dengan hati-hati ...
sumber
The ".localhost" TLD has traditionally been statically defined in host DNS implementations as having an A record pointing to the loop back IP address and is reserved for such use.
Catat penggunaanTLD
dan perhatikan yang secara tradisional didefinisikan . Bahkan,ping localhost.
karya-karya yang menegaskan bahwa ini setidaknya benar dalam konteks pertanyaan ini. Kalimat terakhir Anda bukanlah yang dikatakan RFC, harap kutip jika kalimat itu "mencegahnya menjadi TLD" karena menurut apa yang dikatakannya itu adalah TLD tradisional. Lain mereka tidak akan merujukthe .localhost TLD
localhost
bisa menjadi TLD jika server DNS yang sebenarnya merespons, tetapi umumnya localhost secara umum didefinisikan sebagai nama host di / etc / hosts, di mana nama host dicari sebelum mencoba untuk menyelesaikan melalui DNS. Karena itudig localhost
biasanya tidak mengembalikan catatan "A" untuk 127.0.0.1, atau catatan AAAA untuk :: 1. Itu berarti RFC salah ketika dikatakantraditionally been statically defined in host DNS implementations
, tetapi lebih dikembalikan oleh layanan pencarian nama sistem, yang tidak selalu menggunakan DNS.nslookup
tidak mengembalikan catatan. Jadi, YMMV ...dig
pengembalian saya untuk A, AAAA, dan NS untuklocalhost
, termasuk catatan otoritas untuk:localhost. IN NS localhost.
The antarmuka loopback ada secara independen dari antarmuka Ethernet Anda (s).
Bahkan tanpa komplikasi IPv6 Anda akan memiliki dua alamat berbeda.
Loopback alamat IPv4 : 127.0.0.1
Alamat IPv4 antarmuka Ethernet Anda: 192.168.0.10
Antarmuka loopback mungkin berada di lapisan perangkat lunak yang berbeda, lebih jauh dari perangkat keras nyata. Saya ragu itu tergantung dengan cara apa pun pada driver antarmuka Ethernet spesifik Anda misalnya.
sumber
Localhost dan alamat IP Anda bukan hal yang sama.
Localhost adalah perangkat lunak khusus yang hanya berisi Alamat IP, yang ditautkan ke sistem Anda. Localhost, atau 127.0.0.1, adalah alamat pengulangan. Selalu menunjuk ke sistem Anda, dan hanya dapat diakses dari komputer Anda. Routing ini terjadi pada level OS, dan pasti tidak pernah meninggalkan NIC ... Jadi tidak ada kesempatan untuk mencapai jaringan ....
Ping alamat IP Anda sendiri serupa tetapi berpotensi melibatkan seluruh tumpukan jaringan, karena perlu mendeteksi bahwa itu adalah alamat IP Anda, dan rutekan dengan benar ...
Efeknya harus sama, tetapi bisa ada perbedaan.
Misalnya, cabut kabel jaringan Anda. Ping alamat IP statis Anda. Anda mungkin tidak mendapatkan rute ke host, atau kesalahan lainnya. Sekarang ping localhost atau 127.0.0.1, dan itu akan berhasil.
sumber
Saya menyadari dari tangkapan layar pertanyaan ini bukan tentang Linux, tetapi mungkin membuat "kasus yang tepat" berguna.
Pada OS itu, jika Anda melakukan ping ke salah satu alamat adaptor lokal Anda, itu diterjemahkan ke perangkat loopback (hack kasus khusus). Ini berarti bahwa paket-paket tersebut benar-benar masuk ke perangkat loopback (yang memiliki semua implikasi yang mungkin Anda pikirkan: misalnya dari sudut pandang firewall, paket-paket tersebut masuk pada antarmuka loopback dan akan cocok dengan aturan untuk antarmuka itu).
Perangkat tempat IP diberikan tidak akan pernah melihat paket. (Ini bagus karena tidak akan melakukan hal yang benar dengan paket-paket itu: ia ingin mengirim pengisap keluar.)
Namun, jika antarmuka yang berpendapat bahwa IP harusnya turun, Anda telah kehilangan koneksi itu. Pemetaan ke loopback akan berhenti berfungsi.
Jadi dengan kata lain, itu adalah desain yang bisa diterapkan untuk menganggap alamat lokal tersebut sebagai alias untuk perangkat loopback.
Referensi kode:
http://lxr.linux.no/#linux+v3.3.2/net/ipv4/route.c#L2623
Lihatlah fungsinya
ip_route_output_slow
. Panggilan inifib_lookup
, dan jika fungsi ini mengembalikan kodeRTN_LOCAL
,dev_out
ditulis ulang ke loopback:http://lxr.linux.no/#linux+v3.3.2/net/ipv4/route.c#L2769
sumber
Sepertinya alias "Localhost" sedang menyelesaikan loopback IPv6 dan ketika Anda secara eksplisit menggunakan alamat IPv4 jelas tidak.
sumber
@ebwhite benar tentang apa.
Sekarang, mengapa mungkin Anda mengatur Teredo (saya tidak tahu dari tangkapan layar Anda, mengirimnya ke file teks dan menempelkan seluruh output lebih baik) - perilaku localhost menjadi IPv6 konsisten dengan sistem pada saya IPv4 hanya jaringan dengan teredo yang diinstal, tetapi sistem tanpanya berperilaku seperti yang Anda harapkan
127.0.0.1
saat Anda melakukan pinglocalhost
. Saya telah menguji ini dengan Windows XP dan perlu melihat apa yang dilakukan sistem Windows 7 saya dan memperbarui pertanyaan.Umumnya, sistem default ke IPv6 jika IPv6 tersedia begitu, sistem Anda bekerja sebagaimana mestinya oleh-desain .
sumber