Saya menggunakan netstat (di Windows) untuk melihat port yang didengarkan untuk TCP dan UDP:
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
?
windows
networking
netstat
pengguna612473
sumber
sumber
*:*
adalah IPv6 sedangkan0.0.0.0:0
IPv4.UDP 0.0.0.0:5355 *:*
:, apakah itu berarti bahwa data dapat dikirim antara IPv4 dan IPv6?*:*
tidak mengatakan apa-apa tentang versi IP. Namun karena alamat lokal soket itu hanya IPv4, maka alamat jarak jauh juga harus IPv4.Jawaban:
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 cocokfe80::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.
sumber
*:* refers to ANY IPv6 address
Di sini Anda mengatakanany..address
IPv4 atau IPv6 iepresumably. Jadi yang mana? Apakah*:*
membatasi diri untuk IPv6, atau apakah IPv4 juga diperbolehkan?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 "[::]:*"
sumber
*:*
sesi UDP jarak jauh yang tidak ada. Saya setuju dengan Anda di sini.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.sumber
0.0.0.0:0
nilai dalam kolom Alamat Asing berarti bahwa setiap alamat IP dan nomor port dapat mengirim data ke soket ini? dan jika nilai ini misalnya127.0.0.0:12345
, maka ini berarti bahwa hanya alamat IP127.0.0.0
dengan nomor port yang12345
dapat mengirim data ke soket ini dan tidak ada orang lain?Perbedaannya hanyalah notasi.
Netstat di Windows menggunakan
0.0.0.0:0
untuk 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[::]:0
untuk 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 menggunakan0.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.
sumber