Apakah 0.0.0.0.20 dan *: * mewakili hal yang sama?


23

Saya menggunakan netstat (di Windows) untuk melihat port yang didengarkan untuk TCP dan UDP:

masukkan deskripsi gambar di sini

Saya perhatikan bahwa di kolom Alamat Luar Negeri , *:*bukan UDP yang menampilkan 0.0.0.0:0, apakah kedua nilai ini mewakili hal yang sama? Jika demikian, lalu mengapa UDP muncul *:*alih-alih 0.0.0.0:0?


Saya percaya *:*adalah IPv6 sedangkan 0.0.0.0:0IPv4.
LPChip

Saya juga memperhatikan hal berikut UDP 0.0.0.0:5355 *:*:, apakah itu berarti bahwa data dapat dikirim antara IPv4 dan IPv6?
user612473


4
padanan IPv6 dari 0.0.0.0 adalah [::]
marsh-goyangkan

2
@LPChip Anda salah. *:*tidak mengatakan apa-apa tentang versi IP. Namun karena alamat lokal soket itu hanya IPv4, maka alamat jarak jauh juga harus IPv4.
kasperd

Jawaban:


12

Telah ditunjukkan bahwa jawaban saya salah. Karena saya tidak bisa menghapusnya, saya akan memberikan yang benar.

Ekspresi *:*berarti "Alamat Apa Pun, Port apa saja". Semua pendengar UDP akan menampilkan tanda tangan ini. Ini karena sifat tanpa koneksi dari UDP.


Jawaban asli (salah). Iya dan tidak. *:*merujuk ke alamat IPv6 APAPUN. Perbedaan antara alamat yang tidak dikenal / tidak ditentukan adalah samar di IPv4, jadi kami menggunakan 0.0.0.0/0 untuk mewakili host di jaringan, tetapi di IPv6 ada perbedaan yang halus.

Namun untuk sebagian besar, orang menggunakan ::untuk mewakili string yang berdekatan dari 0's.

Di alamat IPv6, setiap urutan nol yang berdekatan dapat diganti dengan :: :

  • 0.0.0.0/0=> 0000: 0000: 0000: 0000: 0000: 0000: 0000: 0000 => ::=>*:*
  • fe80:0000:0000:0000:2000:0aff:fea7:0f7c => fe80::2000:0aff:fea7:0f7c

Representasi menggunakan wildcard memungkinkan kontrol pola alamat yang lebih baik. Misalnya, ::tidak akan cocok fe80::2000:0aff:fea7:0f7c, tetapi *:*akan.

Perbedaan ini tidak benar-benar berarti bagi perangkat apa pun yang tidak melakukan perutean, tetapi ketika tiba saatnya untuk memilih rute yang optimal ke ruang alamat gabungan, notasi wildcard memungkinkan pemilihan jaringan tujuan yang lebih fleksibel.


5
Tapi Anda menulis dalam jawaban Anda bahwa *:* refers to ANY IPv6 address Di sini Anda mengatakan any..addressIPv4 atau IPv6 iepresumably. Jadi yang mana? Apakah *:*membatasi diri untuk IPv6, atau apakah IPv4 juga diperbolehkan?
barlop

2
Kedua soket yang disebutkan dalam pertanyaan hanya IPv4. Anda dapat melihatnya dari alamat lokal yang ditetapkan untuk setiap soket. Karena itu menyebutkan IPv6 tidak relevan dengan pertanyaan.
kasperd

7
IPv6 sama sekali tidak relevan dengan pertanyaan ini.
hobbs

8
Jawaban ini sama sekali salah untuk pertanyaan yang diajukan.
Brad

3
Seperti komentar kasperd ini catatan (dan komentar hobbs ini juga), IPv6 tidak berhubungan dengan pertanyaan. Pertanyaannya adalah tentang apa yang kita lihat di kolom Alamat Asing, yang sesuai dengan apa yang ada di baris yang sama di kolom Alamat Lokal, yaitu IPv4. (Meskipun, dengan beberapa sistem operasi, mendengarkan pada satu keluarga alamat / versi IP biasanya mendengarkan secara otomatis pada keluarga alamat lain.)
TOOGAM

15

The /mengacu pada netmask subnet, yang merupakan bagian dari Layer IP.

The :mengacu pada port yang merupakan bagian dari Transport Layer.

Untuk TCP masuk akal bahwa ada ujung jarak jauh untuk koneksi.

UDP, karena itu tanpa koneksi, tidak masuk akal untuk menunjukkan alamat asing.

Perasaan saya adalah bahwa itu akan selalu menunjukkan wildcard untuk UDP dan bahwa berpotensi ada untuk membuat parsing output sedikit lebih ramah, atau untuk menunjukkan jika Anda menggunakan IPv4 / 6:

IPV4 "*:*" vs. IPV6 "[::]:*"


Saya hanya mengatakan ini kepada beberapa teman. Anda dapat menampilkan PORTS yang mendengarkan, tetapi untuk menampilkan sesi jarak jauh yang sebenarnya ketika tidak ada kemungkinan alasannya ditampilkan sebagai *:*sesi UDP jarak jauh yang tidak ada. Saya setuju dengan Anda di sini.
NotAdmin Dave

6

Dalam kedua kasus informasi tersebut pada dasarnya tidak berarti, tetapi mengindikasikan lebih atau kurang hal yang sama.

Baris pertama Anda adalah soket mendengarkan TCP. Kolom alamat lokal menunjukkan alamat dan port tempat menerima koneksi, dan kolom alamat jarak jauh tidak berarti apa-apa karena soket pendengaran belum memiliki ujung koneksi yang jauh. Sebuah terhubung TCP socket akan menunjukkan alamat dari ujung sambungan dalam kolom itu, tapi untuk mendengarkan soket itu memutuskan untuk menampilkan semua-nol alamat dan port.

Baris kedua Anda adalah soket UDP. UDP adalah protokol tanpa koneksi, yang berarti ia mengirim dan menerima paket tanpa gagasan siapa yang terhubung dengan siapa, apakah paket tersebut merupakan bagian dari percakapan yang ada, atau apakah datanya tiba-tiba saja. Kolom alamat lokal memiliki arti yang sama dengan TCP, dan kolom alamat jarak jauh tidak berarti karena soket UDP dapat memiliki satu rekan, banyak rekan, atau tidak ada rekan setiap saat. (Sebenarnya POSIX memiliki gagasan "soket UDP yang terhubung" tapi itu agak jauh).

Sekarang pertanyaannya: mengapa mereka tampil berbeda? Tampaknya tidak lebih dari kekhasan kode netstat Windows. Linux (net-tools) netstat menampilkan 0.0.0.0:*untuk ujung jarak jauh dari soket pendengar TCP dan soket UDP (untuk IPv4; ia menampilkan :::*untuk IPv6), yang berbeda dari salah satu contoh di Windows, tetapi setidaknya konsisten di dalam program yang sama. Mungkin Windows akan mencari perbedaan semantik antara "untuk diisi nanti" dalam kasus TCP dan "terbuka untuk apa saja" dalam kasus UDP, tetapi sama seperti dua bit kode ditulis oleh dua orang yang berbeda tanpa perhatian khusus untuk konsistensi.


+1 untuk awal paragraf ke-4. 0.0.0.0 memiliki beberapa dokumentasi: Alamat semua nol adalah alamat "tidak ditentukan" (menurut IPv6 Mengatasi RFC 4291 detik 2.5.2 ), sering berlaku untuk alamat yang tidak dikenal. RFC 1700 halaman 4 menyebutkan "Hanya dapat digunakan sebagai alamat sumber", dan RFC 1122 # halaman-29 bagian "a" menjelaskan penggunaan lebih lanjut. ( jawaban saya tentang ::: menyebutkan 0.0.0.0)
TOOGAM

Bukankah 0.0.0.0:0nilai dalam kolom Alamat Asing berarti bahwa setiap alamat IP dan nomor port dapat mengirim data ke soket ini? dan jika nilai ini misalnya 127.0.0.0:12345, maka ini berarti bahwa hanya alamat IP 127.0.0.0dengan nomor port yang 12345dapat mengirim data ke soket ini dan tidak ada orang lain?
Tom

6

Perbedaannya hanyalah notasi.

Netstat di Windows menggunakan 0.0.0.0:0untuk mewakili ide abstrak "setiap alamat dan port jarak jauh" untuk pendengar TCP IPv4 lokal dan *:*untuk pendengar UDP. Untuk IPv6, alamat jarak jauh dilambangkan dengan [::]:0untuk TCP dan *:*untuk UDP.

Di OS X, *.*digunakan untuk TCP dan UDP, apakah IPv4 atau IPv6 (perhatikan bahwa OS X menggunakan titik-titik untuk memisahkan alamat dan port). Linux menggunakan 0.0.0.0:*untuk IPv4 dan :::*untuk IPv6, dengan dua titik dua mewakili singkatan untuk semua alamat IPv6 dan usus ketiga pemisah antara alamat dan port.

IIRC dari sesuatu yang saya dengar atau baca dulu, saya pikir pasangan UDP dapat muncul, tetapi biasanya tidak karena mereka diruntuhkan setelah selesai dan koneksi UDP biasanya sangat pendek, milidetik yang tahan lama atau kurang. Saya belum pernah melihat ini sendiri, jadi itu bisa salah.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.