Dari waktu ke waktu pengguna Linux dan Unix dihadapkan pada berbagai masalah jaringan. Banyak dari masalah ini disajikan di sini dan di beberapa forum pemecahan masalah lainnya, tetapi masalah ini sangat konkret dan berisi banyak informasi teknis tambahan, dan terkadang agak sulit untuk memahami poin utama dan alasan sebenarnya dari perilaku sistem kereta.
Dengan mengajukan pertanyaan ini, niat saya adalah untuk memulai wiki komunitas halaman yang memungkinkan generalisasi pengalaman pemecahan masalah dan debugging jaringan kami. Saya berharap pengguna Linux dan Unix dapat lebih mudah mengenali dan memecahkan ("membagi dan menaklukkan") masalah jaringan mereka menggunakan halaman ini.
Induk halaman ini harus menjadi Praktik terbaik untuk mendiagnosis masalah. Tapi di sini kita harus fokus pada pemecahan masalah masalah jaringan dari pengguna dan ruang kernel.
Saya kira, jika Anda:
- Bagikan informasi tentang penggunaan beberapa alat diagnostik jaringan yang hebat dengan contoh penggunaan nyata dan contoh bug jaringan, yang membantu mereka menangkapnya.
- Bagikan tautan ke tutorial jaringan hebat yang terkait dengan subjek ini
- Ceritakan tentang metode atau resep umum yang memungkinkan untuk mengatasi beberapa kelas masalah jaringan
- Berbagi informasi tentang set alat Anda untuk debugging dan pemecahan masalah jaringan
itu akan sangat cocok untuk topik ini.
Saya akan mulai dari membagikan tautan ke alat diagnostik varios dan tutorial sederhana berusia 12 tahun. Juga tutorial archlinux tampaknya memiliki informasi aktual tentang subjek kita. Dan untuk menyelami jaringan linux, kita pasti perlu mengunjungi Linux Networking-HOWTO.
Jawaban yang Diterima:
Menurut saya, prinsip umum pemecahan masalah jaringan adalah:
- Cari tahu pada level apa tumpukan TCP/IP (atau tumpukan lain) yang mengalami masalah.
- Pahami apa perilaku sistem yang benar, dan apa yang menyimpang dari status sistem normal
- Cobalah untuk mengungkapkan masalah dalam satu kalimat atau beberapa kata
- Menggunakan informasi yang diperoleh dari sistem buggy, pengalaman Anda sendiri dan pengalaman orang lain (google, berbagai forum, dll.), mencoba menyelesaikan masalah sampai berhasil (atau gagal)
- Jika Anda gagal, mintalah bantuan atau saran kepada orang lain
Bagi saya, saya biasanya mendapatkan semua informasi yang diperlukan menggunakan semua alat yang diperlukan, dan mencoba mencocokkan informasi ini dengan pengalaman saya. Memutuskan tingkat tumpukan jaringan yang berisi bug membantu untuk memotong varian yang tidak mungkin. Menggunakan pengalaman orang lain membantu menyelesaikan masalah dengan cepat, tetapi sering kali mengarah pada situasi, bahwa saya dapat memecahkan beberapa masalah tanpa pemahamannya dan jika masalah ini terjadi lagi, tidak mungkin bagi saya untuk mengatasinya lagi tanpa Internet.
Dan secara umum, saya tidak tahu bagaimana saya memecahkan masalah jaringan. Sepertinya ada beberapa fungsi ajaib di otak saya yang bernama SolveNetworkProblem(information_about_system_state, my_experience, people_experience)
, yang terkadang dapat mengembalikan jawaban yang tepat, dan terkadang juga dapat gagal (seperti di sini TCP mati pada laptop Linux).
Saya biasanya menggunakan utils dari set ini untuk debugging jaringan:
ifconfig
(atauip link
,ip addr
) – untuk mendapatkan informasi tentang antarmuka jaringanping
– untuk memvalidasi, jika host target dapat diakses dari mesin saya.ping
juga dapat digunakan untuk diagnostik DNS dasar – kita dapat melakukan ping ke host dengan alamat IP atau dengan nama hostnya dan kemudian memutuskan apakah DNS berfungsi sama sekali. Dan kemudiantraceroute
atautracepath
ataumtr
untuk melihat apa yang terjadi dalam perjalanan ke sana.dig
– mendiagnosa semua DNSdmesg | less
ataudmesg | tail
ataudmesg | grep -i error
– untuk memahami apa yang dipikirkan kernel Linux tentang beberapa masalah.netstat -antp
+| grep smth
– penggunaan perintah netstat saya yang paling populer, yang menampilkan informasi tentang koneksi TCP. Seringkali saya melakukan beberapa pemfilteran menggunakan grep. Lihat jugass
. yang baru perintah (dariiproute2
standar yang baru rangkaian alat jaringan Linux) danlsof
seperti padalsof -ai tcp -c some-cmd
.telnet <host> <port>
– sangat berguna untuk berkomunikasi dengan berbagai layanan TCP (misalnya pada SMTP, protokol HTTP), kami juga dapat memeriksa peluang umum untuk terhubung ke beberapa port TCP.iptables-save
(di Linux) – untuk membuang penuh tabel iptablesethtool
– dapatkan semua parameter kartu antarmuka jaringan (status tautan, kecepatan, parameter pembongkaran…)socat
– alat tentara swiss untuk menguji semua protokol jaringan (UDP, multicast, SCTP…). Sangat berguna (lebih dari telnet) dengan beberapa-d
pilihan.iperf
– untuk menguji ketersediaan bandwidthopenssl
(s_client
,ocsp
,x509
…) untuk men-debug semua masalah SSL/TLS/PKI.wireshark
– alat canggih untuk menangkap dan menganalisis lalu lintas jaringan, yang memungkinkan Anda menganalisis dan menangkap banyak bug jaringan.iftop
– tampilkan pengguna besar di jaringan/router.iptstate
(di Linux) – tampilan terkini dari pelacakan koneksi firewall.arp
(atau yang baru (Linux)ip neigh
) – menampilkan status tabel ARP.route
atau yang lebih baru (di Linux)ip route
– menampilkan status tabel perutean.strace
(atautruss
,dtrace
atautusc
tergantung pada sistem) – adalah alat yang berguna yang menunjukkan panggilan sistem apa yang melakukan proses masalah, itu juga menunjukkan kode kesalahan (errno) ketika panggilan sistem gagal. Informasi ini sering mengatakan cukup untuk memahami perilaku sistem dan memecahkan masalah. Atau, menggunakan breakpoint pada beberapa fungsi jaringan digdb
dapat memberi tahu Anda kapan dibuat dan dengan argumen apa.- untuk menyelidiki masalah firewall di Linux:
iptables -nvL
menunjukkan berapa banyak paket yang cocok dengan setiap aturan (iptables -Z
ke nol penghitung).LOG
target yang dimasukkan ke dalam rantai firewall berguna untuk melihat paket mana yang mencapainya dan bagaimana paket tersebut telah diubah ketika mereka sampai di sana. Untuk mendapatkanNFLOG
lebih lanjut (terkait denganulogd
) akan mencatat paket lengkap.