Traceroute - setiap paket memiliki TTL == 1

17

Saya sedang mengerjakan Wireshark lab-IP di jaringan komputer - Pendekatan top down dan saya tidak mengerti mengapa setiap paket yang biasanya berakhir memiliki TTL 1.

Ini adalah file tangkap Wireshark saya. https://www.dropbox.com/s/rr5wgze9j20gzvu/traceroute-56.pcapng?dl=0

Saya menangkap eksekusi tracerouteprogram di Linux (dengan opsi 56 byte), seperti dieksekusi dengan perintah berikut:

traceroute http://gaia.cs.umass.edu 56

Anda dapat melihat bahwa sebagian besar TTL paket == 1 dan saya tidak tahu mengapa, karena saya mengetahui bahwa setiap hop berikutnya memiliki TTL +1 (atau lebih).

PS:

  • Saya menggunakan Lubuntu di VMware dengan jaringan bridged ke host.
  • Saya menangkapnya dengan wireshark di mesin host (Windows)
  • Saya terhubung ke AP nirkabel menggunakan server DHCP itu sendiri di atas protokol NAT
ksp0422
sumber

Jawaban:

14

Biarkan saya mencoba menjawab ini, karena itu sedikit lebih rumit yang mungkin terlihat pada awalnya.

Tampaknya Anda sudah mengetahui operasi dasar traceroutetetapi sebelum hal lain di sini adalah rekap yang sangat kecil:

traceroutemencoba menentukan semua langkah di antara host Anda ke host tujuan, atau hanya jarak, yaitu jumlah hop, dari host Anda ke host tujuan. Untuk melakukan itu mulai mengirim paket ke host tujuan dengan nomor port tujuan "acak" dan TTL yang dimulai dari 1 dan terus meningkat.
Idenya adalah bahwa setiap router di antara mengurangi TTL oleh 1. Jadi, jika TTL mencapai 0 (pada kenyataannya tidak pernah dilakukan karena router yang akan menurunkannya menjadi 0 menghasilkan kesalahan sebelum itu), router akan mengembalikan ICMP Pesan kesalahan " Waktu-ke-hidup terlampaui ", mis. Nomor paket 24 dalam file tangkapan Anda. Apa yang Anda dapatkan dari itu adalah bahwa tujuan Anda lebih jauh dan inilah mengapa Anda terus meningkatkan TTL.
Ketika paket Anda memiliki TTL yang cukup besar untuk mencapai tujuan, Anda akan mendapatkan pesan kesalahan ICMP yang berbeda: " Destination Unreachable (Port Unreachable) ", mis. Nomor paket 208 di file tangkap Anda. Apa yang Anda dapatkan dari itu adalah bahwa TTL yang terakhir digunakan memang jumlah lompatan antara Anda dan node tujuan. Alasan Anda mendapatkan kesalahan adalah hanya karena Anda mengirim pesan ke port "acak" yang tidak didengar oleh node tujuan.

Sekarang masuk ke spesifik untuk file tangkapan Anda:
Dari halaman manual traceroutekita dapat melihat bahwa setiap TTL digunakan 3 kali (opsi '-q') dan protokol default yang digunakan adalah UDP (opsi '-P'). Dengan memeriksa 3 paket UDP pertama, yaitu paket 8-9-10 , kita dapat melihat memang bahwa TTL adalah 1 . 3 berikutnya, yaitu 11-12-13 , memiliki TTL 2 dan seterusnya. Jadi dari perspektif sumber semuanya tampak baik-baik saja.

Kemudian, setelah beberapa waktu tergantung pada keterlambatan jaringan, kami mulai mendapatkan pesan kesalahan yang diantisipasi. Dengan demikian kita dapat melihat bahwa paket 24-25-26 adalah paket kesalahan " Waktu untuk hidup terlampaui " dan dengan demikian berarti bahwa tujuan lebih jauh.

Bolak-balik upaya dan kesalahan ini berlanjut, hingga akhirnya paket 208 dan Anda dapat melihat pesan kesalahan " Port Unreachable ", yang berarti tujuan Anda telah tercapai.

Dengan menghitung paket yang Anda kirim dan tanggapan Anda benar-benar dapat mengetahui bahkan dari jejak mana TTL benar-benar bekerja tetapi tugas yang membosankan :)

Harapan itu membantu

George
sumber
Penjelasan super
ksp0422
14

Klien Anda hanya mengirim tiga paket pertama dengan TTL 1. Tiga berikutnya dikirim dengan TTL 2. Tiga berikutnya dikirim dengan TTL 3. Dan seterusnya dan seterusnya.

Cara yang lebih mudah untuk melihat ini adalah mengatur bidang IP TTL sebagai kolomnya sendiri di Wireshark. Cukup klik kanan pada nilai TTL dalam paket apa pun, dan pilih "Terapkan sebagai Kolom": Setel TTL sebagai Kolom di Wireshark

Dari sana, Anda dapat melihat bahwa paket 8,9,10 memiliki TTL 1. Dan paket 11,12,13 memiliki TTL 2. Dan seterusnya dan seterusnya. TTL dalam Traceroute

Ini terjadi karena ini adalah cara kerja Traceroute. Ini mengambil keuntungan dari apa yang dilakukan oleh Router ketika menurunkan TTL menjadi 0. Daripada meneruskan paket, ia mengirim kembali ke klien asli "ICMP TTL Expired in Transit message" (lihat paket # 24 dalam tangkapan Anda) .

Jadi sebagai klien, saat Anda mengirim paket pertama dengan TTL 1, router pertama di jalur merespons dengan pesan TTL Kedaluwarsa. Anda kemudian mengukur berapa lama untuk menerima pesan Kedaluwarsa TTL terhadap saat Anda mengirim pesan awal, dan itu memberi Anda tiga nilai pertama Anda dalam output Traceroute.

Kemudian Anda mengirim satu set tiga paket dengan TTL 2. Router pertama di jalur ini mengurangi 1, dan kemudian meneruskannya ke router berikutnya di jalur. Setelah penerimaan, ketika router kedua mendapatkannya, ia menurunkan TTL menjadi 0, yang mendorongnya untuk menjatuhkan paket dan mengirimi Anda TTL yang kadaluarsa dalam perjalanan.

Proses ini berlanjut sampai klien Anda menerima (yah, tiga) pesan TTL Expired dari setiap router yang sedang transit antara Anda dan tujuan akhir yang Anda gunakan untuk menjalankan traceroute Anda.

Eddie
sumber
terbaik dijelaskan secara visual
ksp0422
@ Eddie, Ini mungkin tidak relevan dengan pertanyaan ini, tetapi ini sangat sedikit detail yang saya pikir bertanya dalam komentar. Bisakah Anda menentukan apa yang terjadi jika host (bukan router) menerima datagram dengan bidang TTL 1?
Vimal Patel
1
@VimalPatel. Jika paket itu ditakdirkan untuk tuan rumah, tuan rumah hanya menerima paket. Menjatuhkan paket jika TTL mencapai 0 adalah fungsi router.
Eddie