Saya menyadari ini sangat subyektif dan tergantung pada sejumlah variabel, tapi saya bertanya-tanya langkah apa yang kebanyakan orang lalui ketika mereka perlu mendiagnosis paket loss pada sistem yang diberikan?
Saya menyadari ini sangat subyektif dan tergantung pada sejumlah variabel, tapi saya bertanya-tanya langkah apa yang kebanyakan orang lalui ketika mereka perlu mendiagnosis paket loss pada sistem yang diberikan?
Jawaban:
Saya seorang insinyur jaringan, jadi saya akan menggambarkan ini dari sudut pandang saya.
Bagi saya, mendiagnosis kehilangan paket biasanya dimulai dengan "itu tidak berfungsi dengan baik". Dari sana, saya biasanya mencoba menemukan kit sedekat mungkin dengan kedua ujung komunikasi (biasanya, workstation di kantor dan server di suatu tempat) dan ping sedekat mungkin ke ujung lainnya (idealnya "titik akhir jarak jauh", tapi terkadang ada firewall yang tidak bisa saya kirim ping, jadi harus puas dengan antarmuka LAN pada router) dan lihat apakah saya bisa melihat kerugian.
Jika saya dapat melihat kerugian, biasanya merupakan kasus "bandwidth tidak cukup" atau "tautan dengan masalah" di suatu tempat di antara keduanya, jadi temukan rute melalui jaringan dan mulai dari tengah, yang biasanya memberi Anda satu ujung atau yang lain.
Jika saya tidak dapat melihat kerugian, dua langkah selanjutnya cenderung menjadi "kirim ping lebih banyak" atau "kirim ping lebih besar". Jika itu tidak seperti memberi indikasi tentang apa masalahnya, sekarang saatnya untuk mulai melihat kebijakan QoS dan statistik antarmuka melalui seluruh jalur antara titik akhir.
Jika itu tidak menemukan apa-apa, sekarang saatnya untuk mulai mempertanyakan asumsi Anda, apakah Anda benar-benar menderita kehilangan paket. Satu-satunya cara yang pasti untuk menemukan itu adalah dengan melakukan penangkapan simultan di kedua ujungnya, baik dengan menggunakan WireShark (atau setara) pada host atau dengan menghubungkan mesin sniffer (mungkin menggunakan WireShark atau yang serupa) melalui keran jaringan. Kemudian datang kesenangan membandingkan dua paket menangkap ...
Kadang-kadang, apa yang dikaitkan dengan "packet loss" hanyalah sesuatu di sisi server terasa lebih lambat (seperti, katakanlah, memindahkan database dari "pada LAN yang sama" ke "20 ms jauhnya" dan menggunakan pertanyaan yang membutuhkan banyak sekali bolak-balik antara front-end dan database).
Dari perspektif sistem Linux, pertama-tama saya akan mencari packet loss pada antarmuka jaringan ethtool -S ethX
.
Sebagian besar waktu, meningkatkan buffer cincin dengan ethtool -G ethX rx VALUE
menyelesaikan ini.
Terkadang interupsi tidak menyeimbangkan karena sistem kehilangan layanan irqbalance, jadi lihat chkconfig
(EL) atau update-rc
(Debuntu) untuk melihat apakah layanan ini berjalan. Anda dapat mengetahui apakah interupsi tidak menyeimbangkan karena /proc/interrupts
hanya akan menampilkan Core 0 yang melayani semua saluran IRQ.
Gagal ini, Anda mungkin perlu meningkatkan net.core.netdev_max_backlog
jika sistem melewati lebih dari beberapa gigabit lalu lintas, dan mungkin net.core.netdev_budget
.
Jika itu tidak berhasil, Anda bisa mengubah nilai penggabungan interupsi dengan ethtool -C
.
Jika tidak ada tetes paket pada antarmuka jaringan, lihat netstat -s
dan lihat apakah ada penurunan dalam buffer soket, ini akan dilaporkan dengan statistik seperti " pruned from receive queue
" dan " dropped from out-of-order queue
".
Anda dapat mencoba meningkatkan buffer soket default dan maks untuk protokol yang sesuai (misalnya: net.ipv4.tcp_rmem
untuk TCP).
Jika aplikasi menetapkan ukuran buffer socket sendiri, maka aplikasi mungkin perlu perubahan konfigurasi. Jika aplikasi Anda memiliki ukuran buffer soket hard-coded, komplain ke vendor aplikasi Anda.
Secara pribadi saya tidak suka protokol offloading ke NIC (checksumming, segmentasi offload, besar menerima offload) karena tampaknya menyebabkan lebih banyak masalah daripada nilainya. Bermain-main dengan pengaturan ini menggunakan ethtool -K
mungkin layak dicoba.
Lihatlah opsi modul untuk NIC Anda ( modinfo <drivername>
) karena Anda mungkin perlu mengubah beberapa fitur. Untuk memberikan satu contoh yang saya temui, menggunakan Intel Flow Director pada sistem yang menangani satu aliran TCP besar mungkin akan membahayakan efisiensi aliran itu, jadi matikan FDir.
Di luar itu Anda masuk ke sistem tuning khusus ini untuk beban kerjanya yang spesifik, yang saya kira berada di luar cakupan pertanyaan Anda.
Isolasikan, lalu hilangkan.
Temukan subset jalur terkecil dengan masalah. Lakukan ini dengan menguji berbagai kombinasi dan / atau menyaring laporan pengguna. Jangan lupa faktor waktu dalam persamaan. Mungkin hanya packetloss di semua lalu lintas ke jaringan tertentu, atau mungkin hanya klien nirkabel yang menderita. Memperhitungkan jenis lalu lintas yang berbeda (batas tarif untuk ping). Temukan cara yang paling andal dan mudah diulang untuk mengujinya.
Kemudian hilangkan penyebab potensial. Kurangi lalu lintas pada tautan (sementara), hapus sumber gangguan dari spektrum, putuskan sambungan klien tertentu. Akhirnya Anda akan menemukan sumber masalahnya.
Anda kadang-kadang dapat mengambil jalan pintas dengan melihat dump paket atau menebak (itu selalu lebih baik). Juga, beri tahu profesor serverfault Anda hebat.
Ping tidak dapat menampilkan paket loss kecuali Anda mengirim ping besar! Saya mengalami kehilangan paket di jaringan saya yang tidak terlihat sampai saya meningkatkan ukuran paket ping saya.
Untuk windows:
ping -n 30 -l <largevalue> <target>
Karena largevalue
saya menggunakan 40.960 (paket 40k)
Karena target
saya menggunakan beberapa alamat IP pertama daritracert google.com
(yang merupakan router & modem kabel saya). Salah satu perangkat lebih jauh ke bawah rantai mengalami kehilangan paket yang mengerikan (> 60%) untuk paket besar tetapi 0% untuk kecil. Saya memperbaikinya dengan menyalakannya kembali tetapi bisa juga berupa kabel atau sesuatu internal yang perlu diganti.