Bagaimana cara mendeteksi jika jaringan menjatuhkan paket UDP?

8

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.catime-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?

Gili
sumber
Kedengarannya seperti masalah firewall bagi saya. Apakah Anda memiliki firewall perangkat lunak atau perangkat keras?
Pitto
Anda tidak bisa bertanya kepada pelanggan apa konfigurasi jaringan mereka diatur?
Ramhound
@ Ramhound, idealnya tidak. Saya tidak ingin harus menggali ke pengaturan router pelanggan potensial setiap kali saya ingin mendemonstrasikan produk saya :)
Gili
2
Kawan, tolong jelaskan suara negatif Anda, kalau tidak saya tidak bisa menjawab.
Gili

Jawaban:

4

Anda dapat mencoba membuat koneksi UDP dengan netcat.

Pada mesin A di luar jaringan konsumen:

nc -u -l -p 1234            # if using netcat-traditional
nc -u -l 1234               # if using netcat-openbsd (as pointed out by @JamesHaigh)

Perhatikan -uyang memerintahkan netcat untuk menggunakan UDP. (Dan perlu juga diketahui, bahwa ada beberapa versi yang berbeda netcat, yang akan membutuhkan -pparameter 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.

mpy
sumber
Perintah jarak jauh Anda gagal untuk saya. Halaman manual mengatakan untuk -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'.
James Haigh
@ Jamesames: Saya setuju dengan Anda pada poin addrvs. ipTetapi 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.
mpy
Oh benar, ini memalukan bahwa mereka tidak kompatibel satu sama lain! :-( Ok, jadi mesin jarak jauh saya adalah Debian. ncPerintah default adalah symlink yang /bin/nc -> /etc/alternatives/nc -> /bin/nc.openbsddisediakan oleh paket Debian netcat-openbsd. Mesin Ubuntu lokal saya juga nc.openbsdsecara default. Tidak akan menerima -l -p. Saya juga telah menginstal ncatpada kedua mesin dari paket nmapUbuntu / Debian. mesin Debian yang lebih lama, ncatmenolak -l -p, tetapi ncatpada Ubuntu menerima kedua cara. Meskipun versi Debian harus kuno karena itu tidak memiliki --sctppilihan.: - /
James Haigh
P: Apa distro Anda, dan ncvarian Anda? Saya perhatikan bahwa ada netcat-traditionalpaket ' ' juga, tapi saya belum mencobanya.
James Haigh
@ Jamesames: Saya memang menggunakan netcat-traditional(v 1.10-38) karena ia dikirimkan dengan debian. Terima kasih atas petunjuk Anda, sekarang saya memasukkan kedua varian ke dalam jawabannya.
mpy
13

di sisi server, buat server UPD dengan

iperf -s -u

di sisi klien, periksa koneksi UDP dengan

iperf -u -c <IP Address of Server>
ckarrie
sumber
1
Inilah jawaban sebenarnya. Perlu memiliki akses server di sisi lain. Tapi itu memberi Anda umpan balik kehilangan paket langsung. Dan Anda juga dapat menggunakannya untuk menguji bandwidth TCP.
DragonFax
0

The netcatperintah 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.

James Haigh
sumber