Apa proses Linux yang bertanggung jawab untuk merespons ping?

39

Saya memiliki pengontrol proses berbasis Linux yang kadang-kadang mengunci sampai titik di mana Anda tidak dapat melakukan ping (yaitu saya dapat melakukan ping, maka ia tidak lagi dapat di-ping tanpa modifikasi pengaturan jaringan).

Saya ingin tahu, proses / sistem apa yang bertanggung jawab untuk benar-benar merespons ping? Tampaknya proses ini macet.

Izzo
sumber
Masih bisakah Anda ssh ke dalamnya sementara itu tidak menanggapi ping? Atau apakah sesi SSH yang ada terkunci?
Peter Cordes
@PeterCordes Seluruh sistem terkunci dan pada dasarnya adalah batu bata hingga memaksa reboot.
Izzo
3
Ok, itu biasanya satu-satunya cara mesin akan berhenti merespons ping. Akan aneh jika ping berhenti bekerja tetapi hal-hal lain tetap bekerja, karena penanganan ping bekerja bahkan jika ruang pengguna disemprot dan semuanya diblokir pada disk I / O ke disk mati atau NFS mount atau apa pun. Coba sambungkan monitor ke sistem Anda dan lihat apakah ada pesan konsol saat terkunci. (Dan jika Anda dapat menggunakan urutan keyboard SysRQ ajaib untuk membuang info, atau menulis ulang hanya baca, sinkronkan paksa disk + reboot.
Peter Cordes
2
Meskipun pertanyaan Anda menarik, ping bukan sumber masalah sistem Anda, melainkan konsekuensi dari sistem yang tidak stabil. Periksa log untuk memahami apa yang salah.
Pedro Lobito
@PedroLobito Log apa yang khusus?
Izzo

Jawaban:

56

Tumpukan jaringan kernel sedang menangani pesan ICMP, yang dikirim oleh pingperintah.

Jika Anda tidak mendapatkan balasan, selain masalah jaringan atau pemfilteran, dan pemfilteran berbasis host / pembatasan-batas / black-holing / dll. itu berarti mesin mungkin kelebihan beban oleh sesuatu, yang bisa sementara, atau kernel crash, yang jarang terjadi tetapi dapat terjadi (perangkat keras rusak, dll.), belum tentu karena lalu lintas ICMP (tetapi mencoba untuk membebani itu dengan lalu lintas seperti itu) bisa menjadi ujian yang baik di awal kehidupan server untuk melihat bagaimana hal itu menopang hal-hal). Dalam kasus kernel crash nanti, Anda harus memiliki informasi yang cukup di file log atau di konsol.

Perhatikan juga itu ping hampir selalu alat yang salah untuk memeriksa apakah suatu layanan online atau tidak. Untuk berbagai alasan, tetapi sebagian besar karena tidak meniru lalu lintas aplikasi nyata, menurut definisi. Misalnya jika Anda perlu memeriksa bahwa server web masih hidup, Anda harus melakukan permintaan HTTP untuk itu (TCP port 80 atau 443), jika Anda perlu memeriksa server surat Anda melakukan permintaan SMTP (TCP port 25), jika server DNS, UDP, dan permintaan TCP ke port 53, dll.

Patrick Mevzek
sumber
4
@Outurnate Uji layanan aplikasi lain akan gagal atau dalam batas waktu sehingga hasil akhir yang diamati akan sama. Saya tidak pernah melewatkan kesempatan untuk memberi kuliah tentang penggunaan pingkarena hal ini menciptakan terlalu banyak kesalahan positif dalam pemecahan masalah, jadi saya pikir pengguna tidak tahu persis apa yang ping dan bagaimana bisa memberikan hasil yang menyesatkan harus menempel pada hal lain.
Patrick Mevzek
2
Dalam kebanyakan situasi kelebihan beban, satu-satunya hal yang masih merespons adalah yang dilakukan oleh kernel. Itu berarti mesin biasanya akan merespons ping terlepas dari seberapa kelebihannya. Upaya untuk mencapai port tertutup akan merespons dengan RST untuk TCP dan kesalahan ICMP dalam kasus UDP. Dan beberapa upaya pertama untuk mencapai port TCP terbuka akan menyelesaikan jabat tangan. Kegagalan disk dapat menyebabkan gejala yang hampir sama.
kasperd
@kasperd Saya telah melihat (sangat) kelebihan beban server (yang bertukar secara khusus) juga tidak membalas permintaan ICMP. Dan tentu saja tidak ada yang lain juga. Kernel tidak crash, itu hanya sibuk di disk I / O stuff.
Patrick Mevzek
2
@Nacht Yup. Antarmuka jaringan adalah perangkat HW; karena itu ada driver kernel untuk berinteraksi dengannya. Lapisan kedua kemudian menyediakan API manajemen / komunikasi umum. (Ini tidak unik untuk jaringan: ada ALSA untuk pengembang audio, video out menggunakan KMS API, USB memiliki {U, E, X} HCI, lalu usb_storage, usbhid, dll.) Tabel routing jaringan, aturan firewall (via iptables ), handshaking, paket assembly, transmisi ulang, dll. semuanya di-kernel. Karena ICMP adalah protokol bagi dirinya sendiri, tanpa payload dan tanpa pemrosesan di luar "response or not", kernel menangani respons ICMP secara langsung untuk overhead yang minimal.
FeRD
5
@ Kapal: Ini bukan tentang arsitektur komputer yang mendasar; itu pilihan implementasi. Microkernels akan menangani ICMP dalam proses OS.
MSalters
11

Tidak ada proses userland yang bertanggung jawab untuk merespons ping. Ping hanyalah sebuah utilitas untuk mengirim paket gema ICMP. Ini diterima dan diproses oleh tumpukan jaringan kernel

Mengungguli
sumber
9

Kernel itu sendiri (bukan proses pengguna apa pun) bertanggung jawab untuk mengirim pesan balasan gema ICMP sebagai respons terhadap pesan permintaan gema ICMP . Jadi, jika tuan rumah berhenti merespons ping, biasanya karena beberapa alasan berikut:

  • konektivitas jaringan antara Anda dan host yang sedang di-ping mungkin terputus. Bisa jadi karena banyak alasan itu sendiri: kerusakan fisik pada kabel, kebisingan dalam kasus nirkabel, tabel rute yang rusak, Anda berada di bawah serangan DDoS, router / switch bermasalah di antara dll. Anda akan mulai memecahkan masalah dalam kasus ini dengan menggunakan ethtool(8), iwconfig(8), route(8), ping(8)router nya, tcpdump(8)dsb di host target.

  • pengaturan firewall pada host target (atau router / firewall di antara Anda dan host target) mungkin membatasi jumlah ping (atau jumlah lalu lintas lalu lintas). Bisa juga karena alat seperti fail2ban(8)firewall hal-hal sesuai permintaan. Lihat iptables(8)untuk memeriksa.

  • telah terjadi kerusakan perangkat lunak / perangkat keras pada host target. Modul kernel jaringan pada host target mungkin telah OOPS dan / atau menjadi bingung, atau bahkan seluruh kernel mungkin memiliki PANICked. Anda akan melihat pesan tentang in in dmesg(8)pada host target, atau sebagai output layar pada konsol fisik (jika akses fisik tidak praktis, mesin lain dengan konsol serial dapat membantu.) Jika kernel OOPS / PANIC adalah masalahnya, kernel yang lebih baru dengan driver yang lebih baik mungkin bantuan, atau Anda bisa menyelinap di sekitar penguncian sistem dengan watchdog(8)dan driver pembantu. Atau Anda dapat mengubah bagian perangkat keras.

Matija Nalis
sumber
2
Untuk yang berminat, inilah kode kernel yang relevan untuk menangani permintaan gema ICMP.
Ruslan
Anda juga harus menyebutkan beban yang sangat tinggi (khusus CPU)
Guilherme Bernal
@GuilhermeBernal tidak, bahkan beban pengguna CPU yang sangat tinggi (dalam ribuan) tidak akan menyebabkan hilangnya ICMP (karena disajikan dalam kernel, sebelum proses pengguna mendapatkan kesempatan untuk menjalankan). Tingkat PPS jaringan yang sangat tinggi dalam kombinasi dengan perangkat keras kelas bawah dapat menyebabkan hilangnya paket, tetapi DDoS tersebut termasuk dalam kategori "konektivitas jaringan"
Matija Nalis