Saya pikir, prinsip umum pemecahan masalah jaringan adalah:
- Cari tahu pada level apa tumpukan TCP / IP (atau tumpukan lainnya) terjadi masalah.
- Memahami apa perilaku sistem yang benar, dan apa penyimpangan dari keadaan sistem normal
- Cobalah untuk mengungkapkan masalahnya dalam satu kalimat atau dalam beberapa kata
- Menggunakan informasi yang diperoleh dari sistem buggy, pengalaman Anda sendiri dan pengalaman orang lain (google, berbagai forum, dll.), Cobalah untuk menyelesaikan masalah hingga berhasil (atau gagal)
- Jika Anda gagal, tanyakan orang lain tentang bantuan atau saran
Bagi saya, saya biasanya mendapatkan semua informasi yang diperlukan menggunakan semua alat yang diperlukan, dan mencoba mencocokkan informasi ini dengan pengalaman saya. Menentukan level tumpukan jaringan yang mengandung bug membantu untuk memotong varian yang tidak biasa. Menggunakan pengalaman orang lain membantu menyelesaikan masalah dengan cepat, tetapi sering kali mengarah ke situasi, bahwa saya dapat menyelesaikan 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. Tampaknya ada beberapa fungsi ajaib di otak saya yang dinamai SolveNetworkProblem(information_about_system_state, my_experience, people_experience)
, yang kadang-kadang bisa mengembalikan jawaban yang tepat, dan juga kadang-kadang bisa gagal (seperti di sini TCP mati di laptop Linux ).
Saya biasanya menggunakan utils dari set ini untuk debugging jaringan:
ifconfig
(atau ip link
, ip addr
) - untuk mendapatkan informasi tentang antarmuka jaringan
ping
- untuk memvalidasi, jika host target dapat diakses dari mesin saya. ping
juga dapat digunakan untuk diagnosa DNS dasar - kita dapat melakukan ping host dengan alamat IP atau nama hostnya dan kemudian memutuskan apakah DNS berfungsi sama sekali. Dan kemudian traceroute
atau tracepath
atau mtr
untuk melihat apa yang terjadi di perjalanan ke sana.
dig
- mendiagnosis segalanya DNS
dmesg | less
atau dmesg | tail
atau dmesg | grep -i error
- untuk memahami pendapat kernel Linux tentang beberapa masalah.
netstat -antp
+ | grep smth
- Penggunaan perintah netstat saya yang paling populer, yang menunjukkan informasi tentang koneksi TCP. Seringkali saya melakukan beberapa penyaringan menggunakan grep. Lihat juga ss
perintah baru (dari iproute2
rangkaian standar baru alat jaringan Linux) dan lsof
seperti pada lsof -ai tcp -c some-cmd
.
telnet <host> <port>
- Sangat berguna untuk berkomunikasi dengan berbagai layanan TCP (misalnya pada SMTP, protokol HTTP), juga kita dapat memeriksa peluang umum untuk terhubung ke beberapa port TCP.
iptables-save
(di Linux) - untuk membuang tabel iptables lengkap
ethtool
- dapatkan semua parameter kartu antarmuka jaringan (status tautan, kecepatan, parameter pembongkaran ...)
socat
- alat tentara swiss untuk menguji semua protokol jaringan (UDP, multicast, SCTP ...). Terutama berguna (lebih daripada telnet) dengan beberapa -d
opsi.
iperf
- untuk menguji ketersediaan bandwidth
openssl
( s_client
, ocsp
, x509
...) untuk debug semua masalah SSL / TLS / PKI.
wireshark
- alat yang ampuh untuk menangkap dan menganalisis lalu lintas jaringan, yang memungkinkan Anda untuk menganalisis dan menangkap banyak bug jaringan.
iftop
- Tampilkan pengguna besar di jaringan / router.
iptstate
(di Linux) - tampilan saat ini dari pelacakan koneksi firewall.
arp
(atau yang baru (Linux) ip neigh
) - menunjukkan status tabel ARP.
route
atau yang lebih baru (di Linux) ip route
- menunjukkan status tabel perutean.
strace
(atau truss
, dtrace
atau tusc
tergantung pada sistem) - adalah alat yang berguna yang menunjukkan apa panggilan sistem melakukan proses masalah, itu juga menunjukkan kode kesalahan (errno) ketika panggilan sistem gagal. Informasi ini sering mengatakan cukup untuk memahami perilaku sistem dan menyelesaikan masalah. Atau, menggunakan breakpoint pada beberapa fungsi jaringan di gdb
dapat membiarkan Anda mengetahui kapan mereka dibuat dan dengan argumen mana.
- untuk menyelidiki masalah firewall di Linux:
iptables -nvL
menunjukkan berapa banyak paket yang cocok dengan masing-masing aturan ( iptables -Z
menjadi nol penghitung). The LOG
Target dimasukkan dalam rantai firewall berguna untuk melihat mana paket menjangkau mereka dan bagaimana mereka telah berubah ketika mereka sampai di sana. Untuk lebih jauh NFLOG
(terkait dengan ulogd
) akan mencatat paket lengkap.