Saya punya aplikasi streaming video yang berjalan dengan baik di kantor saya tetapi gagal total di lokasi pelanggan. Gejalanya adalah bahwa setiap beberapa detik, saya berhenti menerima paket UDP selama 2 detik, kemudian aliran dilanjutkan seolah-olah tidak ada yang salah.
Saya menjalankan http://www.pingtest.net/ di lokasi pelanggan dan ternyata sangat bagus. Tidak ada paket yang dijatuhkan dan latensi rendah. Satu-satunya perbedaan yang saya perhatikan antara dua lokasi kami adalah bahwa ping google.ca
time-out di lokasi mereka tetapi bekerja di tambang.
Bagaimana saya menguji apakah jaringan saya di blok paket UDP masuk? Apakah ada cara bagi saya untuk mengisolasi siapa yang menjatuhkan paket?
networking
udp
Gili
sumber
sumber
Jawaban:
Anda dapat mencoba membuat koneksi UDP dengan
netcat
.Pada mesin A di luar jaringan konsumen:
Perhatikan
-u
yang memerintahkan netcat untuk menggunakan UDP. (Dan perlu juga diketahui, bahwa ada beberapa versi yang berbedanetcat
, yang akan membutuhkan-p
parameter atau tidak; mengingat varian untuk dua yang paling umum (?), Keduanya termasuk dalam Debian.)Pada lokasi konsumen:
nc -u [addr of machine A] 1234
.Cobalah untuk mengirim mengirim beberapa teks, atau bahkan lebih baik menggunakan pipa untuk mengirim file antara kedua lokasi dan melakukan perbedaan sesudahnya.
sumber
-l
, "It is an error to use this option in conjunction with the -p, -s, or -z options.
", jadi saya telah mengoreksi perintah ke salah satu yang saya uji untuk bekerja. Juga, saya telah mengubah 'ip' menjadi 'addr' karena nama host juga dapat digunakan, dan dalam arti 'alamat'.addr
vs.ip
Tetapi sekarang dengan perintah Anda, saya mendapatkan kesalahan:listen needs -p arg
(Saya juga menguji perintah yang diberikan dalam jawaban;)
). Ada berbagai nc di luar sana, jika Anda memberikan lebih banyak detail seperti versi nc dan / atau distro Anda, saya akan menambahkan catatan pada jawaban saya.nc
Perintah default adalah symlink yang/bin/nc -> /etc/alternatives/nc -> /bin/nc.openbsd
disediakan oleh paket Debiannetcat-openbsd
. Mesin Ubuntu lokal saya juganc.openbsd
secara default. Tidak akan menerima-l -p
. Saya juga telah menginstalncat
pada kedua mesin dari paketnmap
Ubuntu / Debian. mesin Debian yang lebih lama,ncat
menolak-l -p
, tetapincat
pada Ubuntu menerima kedua cara. Meskipun versi Debian harus kuno karena itu tidak memiliki--sctp
pilihan.: - /nc
varian Anda? Saya perhatikan bahwa adanetcat-traditional
paket ' ' juga, tapi saya belum mencobanya.netcat-traditional
(v 1.10-38) karena ia dikirimkan dengan debian. Terima kasih atas petunjuk Anda, sekarang saya memasukkan kedua varian ke dalam jawabannya.di sisi server, buat server UPD dengan
di sisi klien, periksa koneksi UDP dengan
sumber
The
netcat
perintah dalam jawaban mpy ini berguna untuk tujuan diagnostik, tapi aku melengkapi jawaban dengan pendekatan lain untuk masalah yang mendasari Anda.Mungkin layak membuat aplikasi Anda kembali ke SCTP , atau bahkan TCP. Saya benar-benar menemukan pertanyaan ini karena saya mencari cara untuk menolak paket UDP yang masuk dari pengguna yang menggunakan lebih dari bagian downlink mereka ketika mengalami kemacetan, karena tidak seperti SCTP dan TCP, UDP tidak memiliki kontrol kemacetan sehingga sangat sulit untuk memprioritaskan downlink. lalu lintas.
Baik SCTP dan TCP memiliki kontrol kemacetan dan bermain baik dengan QoS, tetapi SCTP memiliki manfaat tambahan dibandingkan TCP yang dirancang untuk aplikasi streaming real-time, menjadikannya pengganti yang baik untuk TCP dan UDP. Akibatnya, SCTP adalah yang terbaik dari kedua protokol transportasi yang paling umum.
Bukan ide buruk untuk mundur, daripada hanya mengandalkan UDP. Bahkan jika Anda hanya kembali ke TCP, maka setidaknya Anda dapat mengatakan itu berfungsi, mungkin saja tidak secara optimal.
sumber