بِسْمِ اللَّهِ الرَّحْمَنِ الرَّحِيْم
Introduction
Tulisan ini membahas tentang bagaimana cara kerja traceroute, informasi apa saja yang bisa didapatkan dari hasil traceroute, dan beberapa miskonsepsi mengenai tool ini. Contoh-contoh pada tulisan ini disimulasikan menggunakan GNS3.
Traceroute
Internet terdiri dari banyak sekali Router. Router-router tersebut saling terhubung sehingga membentuk jaringan yang sangat kompleks dan dinamis. Oleh karena itu kita membutuhkan alat yang bisa memetakan jaringan tersebut untuk keperluan analisa jalur yang dilewati oleh data sebelum dia sampai ke tujuannya.
Traceroute adalah network utility yang digunakan untuk memetakan Router-router yang dilewati oleh data pada jaringan dengan menggunakan protokol ICMP atau UDP, dan juga memanfaatkan field TTL (Time to live) pada packet.
TTL (Time to Live)
TTL adalah field pada IP Header yang berfungsi untuk mencegah terjadinya looping tanpa henti pada Layer 3. Isi dari field TTL adalah angka yang akan terus berkurang satu setiap kali packet melewati sebuah Router. Ketika angka ini mencapai 1 atau 0, maka packet tersebut akan di-discard oleh Router yang dilewatinya. Hal inilah yang mencegah dari terjadinya looping permanen pada Layer 3. Yaitu apabila packet terus berpindah dari satu Router ke Router yang lainnya tanpa pernah menemukan tujuannya. Seperti seseorang yang mencari dunia tanpa henti seolah-olah dia tidak akan mati :v.
Ketika TTL pada packet mencapai 1 atau 0, maka Router yang men-discard packet tersebut akan mengirimkan ICMP TTL Exceeded message ke Source IP Address alias si pengirim, yang kurang lebih makna dari ICMP Message tersebut adalah pemberitahuan kepada si pengirim bahwa packet yang dia transmisikan tidak menemukan tujuannya dan telah gugur di tengah jalan. Lalu bagaimana Traceroute memanfaatkan TTL ini dalam memetakan jaringan?
Cara Traceroute Menggunakan TTL
Traceroute bekerja dengan cara mengirimkan beberapa packet ICMP atau UDP ke IP tujuan secara berurutan. Packet pertama yang dikirim oleh traceroute memuat TTL dengan nilai 1. Sehingga Router pertama yang menerima packet dengan TTL 1 tersebut tentu akan men-discard-nya, lalu mengirimkan ICMP Exceeded message yang isinya adalah IP Address Router dan RTT (Round-trip Time) ke si pengirim yang melakukan traceroute. Kemudian traceroute kembali mengirimkan packet, kali ini dengan TTL 2. Packet kemudian diterima oleh Router pertama. Router pertama kemudian meneruskan packet tersebut ke Router kedua. Router kedua menerima packet dengan TTL 1 atau 0, sehingga Router kedua men-discard packet tersebut dan mengirimkan ICMP message serupa seperti yang dikirimkan oleh Router pertama kepada si pengirim.
Traceroute akan terus mengirimkan packet dengan penambahan satu pada TTL, sehingga setiap Router yang dilewati oleh packet tersebut akan mengirimkan ICMP TTL Exceeded message kepada si pengirim. Ketika packet tersebut sudah sampai ke tujuan, lalu tujuan mengirimkan reply kepada si pengirim, maka traceroute pun selesai.
Contoh Menggunakan GNS3

Routing pada topologi di atas dikonfigurasi menggunakan static route satu arah. Jadi packet yang dikirimkan oleh PC1 (Linux) ke PC2 (Linux) akan melewati R1 sampai R5. Packet yang dikirimkan oleh PC2 ke PC1 akan melewati R5 sampai R1. Topologi ini hanya digunakan untuk pembelajaran, sehingga kemungkinan besar tidak akan ditemukan di dunia nyata.
Selanjutnya kita akan mengirim traceroute dari PC1 ke PC2 sambil menjalankan packet capture menggunakan Wireshark pada interface PC1. Hal penting yang perlu kita pahami, bahwa ada 2 tool pada Linux yang sering digunakan untuk melakukan traceroute. Yang pertama adalah “traceroute” dan yang kedua adalah “mtr”. Command traceroute secara default mengirimkan packet UDP, sedangkan command mtr mengirimkan packet ICMP. Keduanya dapat menampilkan rute yang berbeda ketika digunakan di Internet. Hal ini karena kompleks dan dinamisnya jaringan Internet, sehingga jenis packet TCP, UDP, dan ICMP mungkin akan ditransmisikan melalui jalur yang berbeda-beda. Informasi tambahan, command “tracert” pada Windows menggunakan ICMP. Dan pada contoh ini kita akan menggunakan MTR.
Contoh 1

Di atas adalah hasil yang keluar ketika command mtr 172.16.1.22 dijalankan dari PC1, 172.16.1.22 adalah IP dari PC2. Router pertama yang ditampilkan adalah _gateway (R1), lalu 10.0.2.1 (R2), 10.0.3.1 (R3), 10.0.4.1 (R4), 10.0.5.1 (R5), kemudian IP PC2 sebagai tujuan.
Cara kerja traceroute di atas dapat digambarkan sebagai berikut:

- Command mtr 172.16.1.22 dijalankan dari PC1
- PC1 mengirimkan packet pertama dengan dst-address 172.16.1.22 dengan TTL=1
- R1 menerima packet pertama, men-discard-nya karena TTL=1, lalu mengirimkan ICMP TTL Exceeded ke PC1
- PC1 mengirim packet kedua dengan TTL=2
- R1 menerima packet kedua, mengurangi 1 TTL pada packet, lalu meneruskannya ke R2
- R2 menerima packet kedua dengan TTL=1, men-discard-nya, dan mengirimkan ICMP TTL Exceeded ke PC1
- PC1 mengirim packet ketiga dengan TTL=3
- R1 menerima packet ketiga, mengurangi 1 TTL, lalu meneruskannya ke R2
- R2 menerima packet ketiga, mengurangi 1 TTL, lalu meneruskannya ke R3
- R3 menerima packet ketiga, men-discard-nya karena TTL=1, lalu mengirimkan ICMP TTl Exceeded ke PC
- Proses di atas terus diulangi sampai packet diterima oleh PC2, yang kemudian mengirimkan ICMP Echo Reply ke PC1
Perhatikan hasil packet capture pada interface PC1 berikut:

Dari hasil packet capture di atas, kita bisa melihat packet pertama yang dikirimkan oleh IP 172.16.0.11 (PC1) ke IP 172.16.1.22 (PC2) dengan TTL=1. Packet selanjutnya memuat TTL=2. Begitu seterusnya sampai packet diterima oleh PC2. Setelah itu MTR me-reset dengan mengirimkan packet TTL=1 kembali.
Cara Membaca Hasil Traceroute
Perhatikan kembali Gambar 2. Poin penting yang harus dicatat ketika membaca hasil traceroute adalah rute Router yang dilewati, Packet Loss, dan Ping Average pada IP tujuan. Pada Gambar 2, Packet Loss=0%, dan Ping Avg=9.5ms. Adapun Packet Loss dan Ping Avg pada router-router yang dilewati sebelum IP tujuan, maka ini tidaklah penting.
Kesimpulan yang bisa diambil dari Gambar 2 adalah, bahwa data ICMP yang dikirimkan oleh PC1 ke PC2 melewati 5 router. Dan Packet Loss=0% dan Ping Avg yang kecil menunjukkan hasil traceroute ini normal.
Miskonsepsi Mengenai Traceroute
Beranggapan bahwa packet yang dikirimkan dan yang diterima melewati rute yang sama (simetris)
Internet adalah jaringan yang sangat kompleks dan dinamis. Ketika kita melakukan traceroute, informasi yang bisa kita dapatkan adalah jalur dari packet yang kita keluarkan dari jaringan kita. Akan tetapi kita tidak mungkin untuk mengetahui jalur mana yang diambil oleh packet yang masuk ke jaringan kita. Oleh karena itu dalam mendiagnosa masalah jaringan, kita sangat memerlukan hasil traceroute dari kedua end-point. Misalnya traceroute dari PC1 ke PC2, dan juga traceroute dari PC2 ke PC1.
Untuk membuktikan hal ini, mari kita lihat hasil traceroute dari PC2 ke PC1.

Perhatikan dan bandingkan hasil traceroute dari PC1 ke PC2 (Gambar 2), dan hasil traceroute dari PC2 ke PC1 (Gambar 5). Ternyata keduanya menggunakan jalur yang sama sekali berbeda. Ini adalah simulasi yang hasilnya dapat kita kontrol, sedangkan Internet jauh lebih kompleks dari ini. Ketika kita menggunakan traceroute, packet kita ditransmisikan dari satu Router ke Router lainnya sampai ke IP tujuan. Dan setiap Router yang dilewati yang mengirimkan packet ICMP TTL Exceeded ke kita, maka masing-masing Router tersebut akan mengirimkan packet berdasarkan Routing Policy mereka masing-masing.
Terfokus pada Packet Loss atau Ping yang tinggi pada Router yang dilewati sebelum mencapai IP tujuan
Ketika melakukan traceroute, setiap Router yang dilewati yang mengirimkan packet ICMP TTL Exceeded ke kita, maka masing-masing Router tersebut akan mengirimkan packet berdasarkan Routing Policy mereka masing-masing. Artinya adalah, apabila salah satu Router tersebut timed out, atau terjadi packet loss, atau Ping-nya tinggi, maka hal ini tidak ada hubungannya dengan IP tujuan kita. Karena packet-packet yang kita kirimkan hanya melewati Router-router tersebut. Selama IP tujuan memberikan packet loss=0%, dan Ping yang kecil, maka hasil traceroute tersebut adalah normal. Perhatikan contoh berikut:

Pada contoh ini kita melakukan traceroute dari PC1 ke PC2. Akan tetapi hop ke-4 (R4) tidak menampilkan IP Address dari Router tersebut, alias timed out. Ini karena R4 dikonfigurasi untuk men-drop packet ICMP yang dikeluarkan oleh Router itu sendiri. Sehingga ICMP TTL Exceeded yang seharusnya dikirimkan oleh R4 ke PC1, tidak jadi dikirimkan. Akan tetapi packet traceroute dari PC1 ke PC2 tetap di-forward oleh R4 ke Router selanjutnya.
Perhatikan contoh berikutnya:

Pada contoh di atas, kita mendapati Packet Loss pada hop ke-3 sebesar 23.1%. Dan timed out pada hop ke-4. Lalu apakah hal ini berdampak pada koneksi dari PC1 ke PC2? Jawabannya adalah tidak. Packet loss dari R3, dan timed out dari R4 ke arah PC1 tidak ada hubungannya dengan koneksi PC1 ke PC2. Karena Router-router tersebut pada case ini hanya berfungsi untuk meneruskan packet dari PC1 ke PC2.
Kesimpulan
Jaringan Internet bersifat asimetris. Artinya jika suatu data berangkat dari titik A ke titik C melewati titik B, maka perjalanan data dari titik C ke titik A belum tentu melewati titik B. Bisa jadi X atau Y. Sehingga untuk analisa yang tepat, maka dibutuhkan hasil traceroute dari kedua end-point yang terlibat. Karena traceroute hanya bisa memetakan jalur dari pengirim ke tujuan, bukan sebaliknya.
Terakhir, timed out dan Packet Loss yang terjadi pada salah satu Router atau lebih sebelum mencapai IP tujuan, tidak menjadi indikasi adanya masalah pada koneksi antara Source IP dan Destination IP. Ini karena masing-masing Router yang dilewati akan mengirimkan packet ICMP ke Source IP berdasarkan Routing Policy mereka masing-masing.