Mengapa beberapa implementasi traceroute umum default untuk menggunakan probe UDP?

18

Saya baru-baru ini memecahkan masalah meta konektivitas jaringan, karena saya tahu tujuan tertentu dapat dicapai, tetapi saya tidak dapat menunjukkannya dengan traceroutekarena jalurnya menjadi dingin setelah sejumlah hop. Mengingat bahwa hop terakhir yang diamati hanya berada di hulu dari node yang diminati, saya mengendus lalu lintas, berharap untuk mengkonfirmasi bahwa probe telah mencapainya dan untuk mengetahui aturan filter mana yang menghalangi mereka. Benar saja, saya mengetahui bahwa probe adalah datagram UDP yang ditujukan untuk port tinggi (dan beragam) yang saya miliki, tentu saja, diblokir untuk lalu lintas masuk.

Ini mengejutkan saya, karena saya berasumsi bahwa semua tracerouteprobe akan default ke ICMP, karena jawabannya adalah ICMP. Saya melakukan survei dokumentasi dan menemukan bahwa implementasi yang berbeda membuat pilihan yang berbeda, dan beberapa tidak memungkinkan pengguna untuk membuat pilihan non-default.

Abstraksi dari metode penyelidikan Traceroute dan penerusan jalur IP maju mendukung intuisi saya bahwa penyelidikan ICMP akan lebih sering berhasil mencapai tujuan.

Membiarkan metode penyelidikan yang berbeda tampaknya merupakan ide bagus, tetapi melakukan default pada sesuatu selain ICMP sepertinya merupakan ide yang buruk. Adakah yang bisa menjelaskan alasan di balik mengapa lebih baik menggunakan UDP secara default?

neirbowj
sumber

Jawaban:

20

Versi pertama tracerouteditulis oleh Van Jacobson dan menggunakan ICMP tetapi tidak bekerja dengan baik. Interpretasi vendor tentang ICMP di RFC792 adalah bahwa router tidak boleh mengirim pesan kesalahan ICMP sebagai respons terhadap paket ICMP (lihat edit catatan di bawah). Oleh karena itu sebagian besar router tidak akan mengirim pesan "waktu terlampaui" dalam menanggapi permintaan gema dengan TTL 1 atau 0. Jadi dia mengubahnya untuk menggunakan UDP dan lihatlah itu bekerja dengan baik dan ada banyak sukacita (dan adopsi). The traceroutealat pada Linux dan FreeBSD (dan saya menganggap Cisco) didasarkan pada pekerjaan Van Jacobson.

Spesifikasi kemudian diubah menjadi "sebagai respons terhadap paket kesalahan ICMP ." Dunia berkembang, vendor membuat perubahan pada tumpukan mereka memungkinkan pesan kesalahan ICMP dalam menanggapi permintaan gema, dan dengan munculnya firewall dan ACL, paket-paket UDP yang sesekali kadang-kadang diblokir, tetapi permintaan gema ICMP bisa melewatinya. Tentu saja, kesuksesan Anda hari ini sangat bervariasi. Saya harapkan tracertdan alat-alat lain ditulis pada saat menggunakan respon gema ICMP tidak begitu bermasalah.

Saat ini Anda tidak dapat mengatakan bahwa UDP lebih baik daripada ICMP. Atau salah satu dari itu lebih baik daripada TCP. Ini sepenuhnya tergantung pada jalur yang Anda lalui dan kebijakan keamanan yang berlaku. Anda mungkin perlu mencoba satu, keduanya, atau ketiga implementasi.

Sumber:

http://ftp.arl.army.mil/~mike/ping.html http://www.inetdaemon.com/tutorials/troubleshooting/tools/traceroute/definition.shtml

Edit :

Mengubah RFC dari IP (RFC791) ke ICMP (RFC792) yang mengatakan dalam intro:

Untuk menghindari kemunduran tak terbatas pesan tentang pesan, dll., Tidak ada pesan ICMP yang dikirim tentang pesan ICMP.

Itulah yang menyebabkan vendor tidak mengirim kesalahan "Waktu Berlalu" untuk permintaan gema.

RFC1122, Persyaratan untuk Host Internet, di bagian 3.2.2. adalah pembaruan yang mengatakan bahwa host tidak boleh menanggapi pesan kesalahan ICMP .

Karyhead
sumber
FYI sekarang Anda memiliki reputasi yang cukup untuk meninggalkan komentar pada pertanyaan yang Anda kirimi email tentang saya
Mike Pennington
Sudah selesai dilakukan dengan baik. Saya terutama menyukai cerita di tautan pertama tentang komputer yang berteriak, "Ping! Ping! Ping!" di bagian atas paru-parunya.
neirbowj
Mike, yeah, saya mulai memahami cara kerja situs ini :-)
karyhead