Pengertian Traceroute
Traceroute (Tracert) adalah perintah untuk menunjukkan rute yang dilewati paket untuk mencapai tujuan. Ini dilakukan dengan mengirim pesan Internet Control Message Protocol (ICMP) Echo Request Ke tujuan dengan nilai Time to Live yang semakin meningkat. Rute yang ditampilkan adalah daftar interface router (yang paling dekat dengan host) yang terdapat pada jalur antara host dan tujuan.Proses Traceroute
Untuk mengetahui jalur yang ditempuh untuk mencapai suatu node, traceroute mengirimkan 3 buah paket probe tipe UDP dari port sumber berbeda, dengan TTL bernilai 1. Saat paket tersebut mencapai router next-hop, TTL paket akan dikurangi satu sehingga menjadi 0, dan router next-hop akan menolak paket UDP tersebut sembari mengirimkan paket ICMP Time-to-Live Exceeded ke node asal traceroute tersebut. Dengan cara ini, pengirim traceroute tahu alamat IP pertama dari jalur yang ditempuh.Kemudian, sumber traceroute mengirimkan 3 buah paket UDP lagi dengan nilai TTL yang dinaikkan 1 (TTL = 2), sehingga router pertama di jalur menuju tujuan traceroute akan melewatkan paket UDP tersebut ke router selanjutnya. Router hop kedua akan melihat bahwa paket tersebut sudah expired (TTLnya jadi 1, setelah dikurangi oleh router pertama). Maka, seperti halnya router pertama, router tersebut akan mengirimkan paket ICMP Time-to-Live Exceeded ke sumber traceroute. Sekarang, sumber traceroute telah mengetahui hop kedua dari jalur menuju tujuan traceroute.
Sumber traceroute akan mengirimkan lagi paket UDP dengan TTL ditambah 1 (TTL = 3). Router hop ketiga akan membalas dengan paket ICMP Time-to-Live Exceeded ke sumber traceroute, sehingga sumber traceroute mengetahui alamat IP router hop ketiga. Proses ini akan diulang terus paket UDP yang dikirimkan mencapai alamat IP tujuan traceroute. Tiga buah paket UDP traceroute adalah jumlah paket default dari aplikasi traceroute. Inilah mengapa kita melihat tiga buah tampilan latensi saat melihat hasil traceroute yang dijalankan.
Tidak semua aplikasi traceroute menggunakan UDP. Windows menggunakan paket ICMP, sedangkan sejumlah aplikasi tertentu menggunakan paket TCP.
Cara menghitung latensi tiap hop adalah dengan mengukur selisih antara timestamp paket probe yang dikirimkan dengan timestamp dari paket ICMP TTL exceeded yang diterima. Router yang berada sepanjang jalur pengiriman tidak akan melakukan pemrosesan data timestamp. Dari cara ini, yang kita ketahui hanyalah waktu total pulang-pergi dari sumber ke router hop tertentu. Delay yang terjadi sepanjang perjalanan kembali ke sumber juga akan berpengaruh.
Kemudian, alamat IP dari interface manakah yang kita lihat dari hasil traceroute?
Alamat IP yang kita lihat dari hasil traceroute adalah IP dari interface ingress router. Sebenarnya, RFC 1812 menyebutkan bahwa sumber ICMP haruslah dari interface egress. Namun, hal ini akan menyebabkan hasil traceroute menjadi kacau.
Traceroute pada Windows
Cara Melakukan Traceroute :- Klik Start –> Run
- Setelah muncul pop up lalu anda tinggal ketikkan –> CMD
- Lalu munculah gambar seperti di bawah ini , kemudian anda tinggal ketikkan –> tracert (spasi) namadomainanda
Interpretasi DNS dari Hasil Traceroute
Dengan traceroute, kita dapat menganalisis informasi mengenai lokasi router, tipe dan kapasitas interface, tipe dan fungsi router, serta batas-batas network yang dilalui, berdasarkan DNS interface yang dilalui. IUntuk lebih memperjelas, berikut ini adalah contoh hasil traceroute kewww.berkeley.edu:$ traceroute www.berkeley.edu traceroute to amber.Berkeley.EDU (128.32.25.12), 30 hops max, 40 byte packets 1 203.130.216.2 (203.130.216.2) 137 ms 151 ms 151 ms 2 203.130.216.1 (203.130.216.1) 151 ms 137 ms 138 ms 3 192.168.8.49 (192.168.8.49) 137 ms 151 ms 151 ms 4 S12-0-11.kbl.surabaya.telkom.net.id (202.134.3.45) 192 ms 151 ms 151 ms 5 FE0-0-gw3.cibinong.telkom.net.id (202.134.3.134) 165 ms 151 ms 151 ms 6 hssi-gw3.hk.telkom.net.id (202.134.3.1) 659 ms 659 ms 645 ms 7 202.130.129.61 (202.130.129.61) 645 ms 687 ms 659 ms 8 321.ATM5-0-0.XR1.HKG2.ALTER.NET (210.80.3.1) 645 ms 659 ms 645 ms 9 POS1-0-0.TR1.HKG2.Alter.Net (210.80.48.21) 672 ms 646 ms 645 ms 10 384.ATM4-0.IR1.LAX12.Alter.Net (210.80.50.189) 838 ms 796 ms 796 ms 11 137.39.31.222 (137.39.31.222) 810 ms 852 ms 810 ms 12 122.at-5-1-0.TR1.LAX9.ALTER.NET (152.63.10.237) 824 ms 810 ms 810 ms 13 297.at-1-0-0.XR1.LAX9.ALTER.NET (152.63.112.237) 824 ms 838 ms 824 ms 14 191.ATM6-0.BR1.LAX9.ALTER.NET (152.63.113.9) 837 ms 797 ms 810 ms 15 acr1-loopback.Anaheim.cw.net (208.172.34.61) 810 ms 1071 ms 782 ms 16 acr1-loopback.SanFranciscosfd.cw.net (206.24.210.61) 783 ms 810 ms 769 ms 17 BERK-7507--BERK.POS.calren2.net (198.32.249.69) 810 ms 1126 ms 796 ms 18 pos1-0.inr-000-eva.Berkeley.EDU (128.32.0.89) 796 ms 824 ms 796 ms 19 pos5-0-0.inr-001-eva.Berkeley.EDU (128.32.0.66) 796 ms 783 ms 783 ms 20 fast1-0-0.inr-007-eva.Berkeley.EDU (128.32.0.7) 810 ms 810 ms 797 ms 21 f8-0.inr-100-eva.Berkeley.EDU (128.32.235.100) 797 ms 782 ms 769 ms 22 amber.Berkeley.EDU (128.32.25.12) 796 ms 769 ms 810 msTraceroute akan menampilkan titik-titik perantara yang menjembatani anda dan titik tujuan anda, ‘jembatan’ inilah yang biasa disebut dengan router, data yang andakirimkan akan meloncat melewati jembatan-jembatan ini. Ada tiga buah waktu yang menunjukkan berapa waktu yang dibutuhkan oleh paket tersebut untuk berjalan dari komputer anda ke router.Untuk dapat memahami seluruh data yang dihasilkan oleh traceroute tersebut, kita harus memahami bagaimana cara traceroute bekerja.Berikut ini adalah contoh yang lebih kompleks dengan melakukan traceroute ke finland:
% traceroute www.hut.fi traceroute to info-e.hut.fi (130.233.224.28), 30 hops max, 40-byte packets 1 203.130.216.2 (203.130.216.2) 137 ms 124 ms 137 ms 2 203.130.216.1 (203.130.216.1) 137 ms 124 ms 124 ms 3 192.168.8.49 (192.168.8.49) 137 ms 151 ms 151 ms 4 S12-0-11.kbl.surabaya.telkom.net.id (202.134.3.45) 192 ms 151 ms 151 ms 5 FE0-0-gw3.cibinong.telkom.net.id (202.134.3.134) 164 ms 165 ms 151 ms 6 hssi-gw3.hk.telkom.net.id (202.134.3.1) 673 ms 645 ms 645 ms 7 202.130.129.61 (202.130.129.61) 659 ms 646 ms 659 ms 8 321.ATM5-0-0.XR1.HKG2.ALTER.NET (210.80.3.1) 659 ms 645 ms 659 ms 9 POS1-0-0.TR1.HKG2.Alter.Net (210.80.48.21) 659 ms 632 ms 659 ms 10 284.ATM6-0.IR1.SAC2.Alter.Net (210.80.50.1) 797 ms 823 ms 797 ms 11 POS2-0.IR1.SAC1.ALTER.NET (137.39.31.190) 796 ms 1566 ms 810 ms 12 122.at-6-1-0.TR1.LAX9.ALTER.NET (152.63.10.218) 838 ms 823 ms 824 ms 13 297.at-2-0-0.XR1.SAC1.ALTER.NET (152.63.50.133) 933 ms 824 ms 838 ms 14 185.ATM5-0.BR4.SAC1.ALTER.NET (152.63.52.201) 810 ms 824 ms 851 ms 15 137.39.52.86 (137.39.52.86) 810 ms 1071 ms 810 ms 16 sl-bb21-ana-15-0.sprintlink.net (144.232.1.173) 769 ms (ttl=246!) 796 ms (ttl=246!) 783 ms (ttl=246!) 17 sl-bb20-pen-8-0.sprintlink.net (144.232.18.45) 893 ms 851 ms (ttl=245!) 893 ms 18 sl-bb22-pen-11-0.sprintlink.net (144.232.18.78) 893 ms (ttl=244!) 879 ms (ttl=244!) 879 ms (ttl=244!) 19 sl-bb10-nyc-9-0.sprintlink.net (144.232.7.1) 865 ms 879 ms 879 ms 20 sl-bb10-nyc-10-0.sprintlink.net (144.232.13.158) 879 ms 892 ms 893 ms 21 gblon505-tc-p6-3.ebone.net (195.158.229.46) 865 ms 879 ms 920 ms 22 bebru204-tc-p5-0.ebone.net (195.158.232.42) 961 ms 948 ms 934 ms 23 nlams303-tc-p1-0.ebone.net (195.158.225.86) 962 ms 961 ms 934 ms 24 dedus205-tc-p8-0.ebone.net (213.174.70.133) 934 ms 961 ms 947 ms 25 dkcop204-tb-p3-0.ebone.net (213.174.71.50) 975 ms 975 ms * 26 * * * 27 ne-gw.nordu.net (195.158.226.86) 1002 ms 962 ms 1016 ms 28 hutnet-gw.csc.fi (128.214.248.65) 1027 ms (ttl=238!) 1040 ms (ttl=238!) 1026 ms (ttl=238!) 29 hutnet-gw.hut.fi (193.166.43.253) 1020 ms 1037 ms 1023 ms 30 info-e.hut.fi (130.233.224.28) 1091 ms (ttl=46!) 1027 ms (ttl=46!) 1067 ms (ttl=46!) Baris pertama hanya menunjukkan apa yang akan dilakukan oleh traceroute yaitu melakukan trace ke host yang bernama info-e.hut.fi dengan maksimum loncatan 30 dan besar paket yang dikirimkan adalah 40 byte.Hasilnya, paket tersebut melewati 30 router atau 30 kali loncatan. Loncatan yang pertama sampai kelima hanya memakan waktu sekitar 100-200 mili detik adalah loncatan dari komputer penulis ke jaringan milik Telkomnet di Indonesia. Pada loncatan ke enam, waktu yang diperlukan meningkat banyak sekali menjadi sekitar 650 mili detik, ini dikarenakan loncatan tersebut memang jauh, yaitu dari stasiun bumi Telkomnet yang ada di Cibinong ke gateway milik Telkomnet yang ada di Hongkong. Kadang waktu yang diperlukan meningkat banyak sekali karena jarak yang jauh atau jaringan yang dilewati memang sedang padat. Anda harus mencurigai titik-titik dimana waktu yang diperlukan menjadi besar sekali. Jika hal ini terjadi, anda dapat mengeceknya dengan melakukan ping ke router tersebut beberapa kali untuk melihat apakah paket yang kita kirimkan di drop, atau apakah ada variasi waktu yang besar. Kemudian pada loncatan ke 16 sampai 18 anda melihat (ttl=246!) di sebelah kolom waktu. Ini adalah indikasi dari trceroute bahwa TTL yang kembali tidak sesuai dengan sewaktu dikirimkan ini menunjukkan adanya asymmetric path, yaitu router yang dilewati paketsewaktu berangkat tidak sesuai dengan router yang dilewati sewaktu paket tersebutkembali. Tetapi hal itu adalah normal.
Tanda asterik pada loncatan ke 25 dan 26 menandakan bahwa traceroute tidak menerima respon dari komputer tersebut, pada loncatan ke 26 kemungkinan dikarenakan router tersebut tidak mengirimkan paket ICMP, sedangkan pada loncatan ke 25 kemungkinan adalah hasil dari paket ICMP yang dikirimkan oleh router tersebut hilang di perjalanan karena suatu sebab.
Dikombinasikan dengan ping, traceroute menjadi alat analisa jaringan yang baik dengan melihat loncatan mana yang memakan waktu yang besar atau paket yang di drop, kita dapat menentukan dimana titik kritisnya. Kemudian dengan melakukan ping pada titik tersebut dan satu titik sebelumnya, kita dapat menemukan masalah yang ada dalam jaringan.
Impelementasi Traceroute menggunakan Delphi
Desain Form001 | unit fmTraceRouteMainU; |
002 |
003 | interface |
004 |
005 | uses |
006 | {$IFDEF Linux} |
007 | QGraphics, QControls, QForms, QDialogs, QStdCtrls, QComCtrls, QExtCtrls, |
008 | QActnList, |
009 | { $ELSE } |
010 | Windows, Messages, Graphics, Controls, Forms, Dialogs, ComCtrls, ActnList, |
011 | StdCtrls, Spin, ExtCtrls, |
012 | { $ENDIF } |
013 | SysUtils, Classes, IdBaseComponent, IdComponent, IdRawBase, IdRawClient, IdIcmpClient, |
014 | IdAntiFreezeBase, IdAntiFreeze; |
015 |
016 | type |
017 | TfmTracertMain = class (TForm) |
018 | Panel1: TPanel; |
019 | Panel2: TPanel; |
020 | Panel3: TPanel; |
021 | Panel4: TPanel; |
022 | lbLog: TListBox; |
023 | Label1: TLabel; |
024 | Label2: TLabel; |
025 | ActionList1: TActionList; |
026 | edTarget: TEdit; |
027 | seMaxHops: TSpinEdit; |
028 | Button1: TButton; |
029 | acGo: TAction; |
030 | acResolve: TAction; |
031 | acPing: TAction; |
032 | acTrace: TAction; |
033 | lvTrace: TListView; |
034 | IdIcmpClient: TIdIcmpClient; |
035 | IdAntiFreeze1: TIdAntiFreeze; |
036 | Splitter1: TSplitter; |
037 | Button2: TButton; |
038 | acStop: TAction; |
039 | procedure edTargetChange(Sender: TObject); |
040 | procedure acResolveExecute(Sender: TObject); |
041 | procedure acGoExecute(Sender: TObject); |
042 | procedure acPingExecute(Sender: TObject); |
043 | procedure acTraceExecute(Sender: TObject); |
044 | procedure lvTraceCompare(Sender: TObject; Item1, Item2: TListItem; |
045 | Data: Integer ; var Compare: Integer ); |
046 | procedure acStopExecute(Sender: TObject); |
047 | private |
048 | { Private declarations } |
049 | bResolved: Boolean ; |
050 | ResolvedHost: String ; |
051 | Stopped: Boolean ; |
052 | function PingHost(Host: string ; TTL: Integer ): boolean ; |
053 | function FindItem(TTL: Integer ; Add: boolean ): TListItem; |
054 | public |
055 | { Public declarations } |
056 | end ; |
057 |
058 | var |
059 | fmTracertMain: TfmTracertMain; |
060 |
061 | implementation |
062 |
063 | uses idStack, IdException; |
064 | {$IFDEF Linux}{$R *.xfm}{$ELSE}{$R *.DFM}{$ENDIF} |
065 |
066 | procedure TfmTracertMain . edTargetChange(Sender: TObject); |
067 | begin |
068 | bResolved := false ; |
069 | end ; |
070 |
071 | procedure TfmTracertMain . acResolveExecute(Sender: TObject); |
072 | begin |
073 | bResolved := false ; |
074 | lbLog . Items . Append(Format( 'resolving %s' ,[edTarget . text])); |
075 | try |
076 | Application . ProcessMessages; |
077 | ResolvedHost := gStack . WSGetHostByName(edTarget . text); |
078 | bResolved := true ; |
079 | lbLog . Items . Append(format( '%s resolved to %s' ,[edTarget . text, ResolvedHost])); |
080 | except |
081 | on e: EIdSocketError do |
082 | lbLog . Items . text := lbLog . Items . text + e . message; |
083 | end ; |
084 | end ; |
085 |
086 | procedure TfmTracertMain . acGoExecute(Sender: TObject); |
087 | var |
088 | saveCursor: TCursor; |
089 | begin |
090 | saveCursor := Screen . Cursor; |
091 | Screen . Cursor := crHourGlass; |
092 | try |
093 | Stopped := false ; |
094 | acGo . Enabled := false ; |
095 | acStop . enabled := true ; |
096 | acResolve . execute; |
097 | if bResolved and not stopped then |
098 | begin |
099 | acPing . execute; |
100 | if not stopped then |
101 | acTrace . Execute; |
102 | end ; |
103 | acGo . Enabled := true ; |
104 | acStop . enabled := false ; |
105 | finally |
106 | Screen . Cursor := saveCursor; |
107 | end ; { try/finally } |
108 | end ; |
109 |
110 | function TfmTracertMain . PingHost(Host: string ; TTL: Integer ): Boolean ; |
111 | begin |
112 | result := false ; |
113 | IdIcmpClient . Host := Host; |
114 | IdIcmpClient . TTL := TTL; |
115 | IdIcmpClient . ReceiveTimeout := 5000 ; |
116 | IdIcmpClient . Ping; |
117 | case IdIcmpClient . ReplyStatus . ReplyStatusType of |
118 | rsEcho: |
119 | begin |
120 | lbLog . Items . Append(format( 'response from host %s in %d millisec.' , |
121 | [ |
122 | IdIcmpClient . ReplyStatus . FromIpAddress, |
123 | IdIcmpClient . ReplyStatus . MsRoundTripTime |
124 | ])); |
125 | result := true ; |
126 | end ; |
127 | rsError: |
128 | lbLog . Items . Append( 'Unknown error.' ); |
129 | rsTimeOut: |
130 | lbLog . Items . Append( 'Timed out.' ); |
131 | rsErrorUnreachable: |
132 | lbLog . Items . Append(format( 'Host %s reports destination network unreachable.' , |
133 | [ |
134 | IdIcmpClient . ReplyStatus . FromIpAddress |
135 | ])); |
136 | rsErrorTTLExceeded: |
137 | lbLog . Items . Append(format( 'Hope %d %s: TTL expired.' , |
138 | [ |
139 | IdIcmpClient . TTL, |
140 | IdIcmpClient . ReplyStatus . FromIpAddress |
141 | ])); |
142 | end ; // case |
143 | end ; |
144 |
145 | procedure TfmTracertMain . acPingExecute(Sender: TObject); |
146 | begin |
147 | PingHost(ResolvedHost, seMaxHops . value); |
148 | Application . ProcessMessages; |
149 | end ; |
150 |
151 | function TfmTracertMain . FindItem(TTL: Integer ; Add: boolean ): TListItem; |
152 | var |
153 | i: Integer ; |
154 | begin |
155 | result := nil ; |
156 | // Find the TTL item |
157 | if lvTrace . Items . Count < TTL Then |
158 | begin |
159 | for i := 0 to lvTrace . Items . Count - 1 do |
160 | begin |
161 | if StrToIntDef(lvTrace . Items[i].Caption, - 1 ) = TTL then |
162 | begin |
163 | result := lvTrace . Items[i]; |
164 | Break; |
165 | end ; |
166 | end ; |
167 | end ; |
168 | if not assigned( result ) then |
169 | begin |
170 | // Not found, add it |
171 | result := lvTrace . Items . Add; |
172 | result . Caption := IntToStr(TTL); |
173 | end ; |
174 | end ; |
175 |
176 | procedure TfmTracertMain . acTraceExecute(Sender: TObject); |
177 | var |
178 | TTL: Integer ; |
179 | Reached: boolean ; |
180 | aItem: TListItem; |
181 | begin |
182 | TTL := 0 ; |
183 | reached := false ; |
184 | lvTrace . Items . Clear; |
185 | repeat |
186 | inc(TTL); |
187 | IdIcmpClient . Host := ResolvedHost; |
188 | IdIcmpClient . TTL := TTL; |
189 | IdIcmpClient . ReceiveTimeout := 5000 ; |
190 | IdIcmpClient . Ping; |
191 | aItem := FindItem(TTL, True ); |
192 | aItem . SubItems . Clear; |
193 | case IdIcmpClient . ReplyStatus . ReplyStatusType of |
194 | rsEcho: |
195 | begin |
196 | aItem . SubItems . Append(IdIcmpClient . ReplyStatus . FromIpAddress); |
197 | aItem . SubItems . Append(format( 'Reached in : %d ms' , [IdIcmpClient . ReplyStatus . MsRoundTripTime])); |
198 | reached := true ; |
199 | end ; |
200 | rsError: |
201 | begin |
202 | aItem . SubItems . Append(IdIcmpClient . ReplyStatus . FromIpAddress); |
203 | aItem . SubItems . Append( 'Unknown error.' ); |
204 | end ; |
205 | rsTimeOut: |
206 | begin |
207 | aItem . SubItems . Append( '?.?.?.?' ); |
208 | aItem . SubItems . Append( 'Timed out.' ); |
209 | end ; |
210 | rsErrorUnreachable: |
211 | begin |
212 | aItem . SubItems . Append(IdIcmpClient . ReplyStatus . FromIpAddress); |
213 | aItem . SubItems . Append(format( 'Destination network unreachable' , [IdIcmpClient . ReplyStatus . MsRoundTripTime])); |
214 | break; |
215 | end ; |
216 | rsErrorTTLExceeded: |
217 | begin |
218 | aItem . SubItems . Append(IdIcmpClient . ReplyStatus . FromIpAddress); |
219 | aItem . SubItems . Append(format( 'TTL=%d' , [IdIcmpClient . ReplyStatus . TimeToLive])); |
220 | end ; |
221 | end ; // case |
222 | Application . ProcessMessages; |
223 | until reached or (TTL > seMaxHops . value) or Stopped; |
224 | end ; |
225 |
226 | procedure TfmTracertMain . lvTraceCompare(Sender: TObject; Item1, |
227 | Item2: TListItem; Data: Integer ; var Compare: Integer ); |
228 | begin |
229 | Compare := StrToIntDef(Item1 . Caption, - 1 ) - StrToIntDef(Item2 . Caption, - 1 ); |
230 | end ; |
231 |
232 | procedure TfmTracertMain . acStopExecute(Sender: TObject); |
233 | begin |
234 | Stopped := true ; |
235 | acStop . enabled := false ; |
236 | end ; |
237 |
238 | end . | sumber |