Tuesday, July 15, 2008

Traceroute


Computer Network မွာ အလုပ္လုပ္ဖူးသူတုိင္း traceroute command ကုိ တၾကိမ္မက အသုံးျပဳဖူးၾကမွာပါ။ Traceroute command အလုပ္လုပ္ပုံကုိ ေဆြးေႏြးသြားပါမယ္။

TTL and ICMP

Traceroute အေၾကာင္း မစခင္၊ TTL နဲ႔ ICMP ကုိ စေျပာဖုိ႔ လုိပါတယ္။

IP Packet ရဲ့ Header မွာ TTL (Time To Live) ဆုိတဲ့ Field တစ္ခု ပါ၀င္ပါတယ္။ IP Packet တစ္ခုဟာ Router တစ္ခုကုိ ျဖတ္သြားတုိင္း TTL ရဲ့တန္ဖုိး တစ္ခု ေလ်ာ့သြားပါတယ္။ တနည္းေျပာရလ်င္ Router တစ္ခုက ျဖတ္သြားတဲ့ Packet တုိင္းရဲ့ TTL တန္ဖုိးကုိ တစ္ခုႏွုတ္ေပးပါတယ္။ TTL တန္ဖုိး သုည ျဖစ္သြားခဲ့လ်င္ Router က အဲဒီ Packet ကုိ ဖ်က္ဆီးျပစ္လုိက္ျပီး၊ Packet ကုိ လုိရာေရာက္ေအာင္ မပုိ႔ေပးႏုိင္တဲ့အေၾကာင္း စတင္ပုိ႔ေပးတဲ့ ကြန္ပ်ဴတာ (source computer) ကုိျပန္ျပီး သတင္းပုိ႔ေပးပါတယ္။ ဒီလုိ TTL သုည ျဖစ္သြားလုိ႔ Packet မပုိ႔ေပးႏုိင္တဲ့အေၾကာင္းကုိ ICMP (Internetwork Control Message Protocol) ကုိအသုံးျပဳျပီး အေၾကာင္းၾကားပါတယ္။ ဒီလုိလုပ္ရတဲ့ အေၾကာင္းရင္းကေတာ့ အင္တာနက္ထဲမွာ လမ္းစေျပာက္ေနတဲ့ Packet ေတြ မျပီးႏုိင္ မစီးႏုိင္ သြားေနမွာကုိ တားျမစ္ဖုိ႔ ျဖစ္ပါတယ္။

ICMP ရဲ့တာ၀န္က IP Packet ေတြကုိ အမွားျပင္တဲ့ေနရာမွာ အကူအညီေပးဖုိ႔ျဖစ္ပါတယ္။ ICMP မွာ Type နဲ႔ Code ဆုိျပီး IP Packet တစ္ခု ဘယ္လုိ ျပသနာတက္ေနတယ္ဆုိတာ ခြဲျခားေပးထားပါတယ္။ TTL သုညျဖစ္သြားခဲ့လ်င္ -
ICMP Type 11 - Time Exceeded (အခ်ိန္ကုန္သြားျပီ၊)
Code 0 - Time To Live Exceed In Transit (လမ္းခုလတ္မွာ TTL တန္ဖုိး သုည ျဖစ္သြားျပီ၊)
ဆုိျပီး မူလ ကြန္ပ်ဴတာကုိ ျပန္ပုိ႔ ေပးပါတယ္။
Time To Live ဆုိေပမယ့္ အခ်ိန္ (မိနစ္၊ စကၠန္႔) ကုိ ဆုိလုိတာ မဟုတ္ပါဘူး၊ Network မွာ ျဖတ္သြားရမယ့္ Router တစ္ခုတိုင္း (Layer 3 hop to be more specific) ကုိ Time Unit တစ္ခုလုိ႔ တြက္ခ်က္ပါတယ္။ TTL ဆုိတာ ကြန္ပ်ဴတာ တစ္ခုက ထုတ္လုိက္တဲ့ IP Packet တစ္ခု ဘယ္ေလာက္ေ၀းေ၀ သြားလုိ႔ရတယ္ ဆုိတာကုိ သတ္မွတ္ထားတဲ့ နံပါတ္တစ္ခုျဖစ္ပါတယ္။

Traceroute in action

ကၽြန္ေတာ့အိမ္က ကြန္ပ်ဴတာက www.google.com ကုိ traceroute လုပ္ထားတာကုိၾကည့္ၾကည့္ရေအာင္၊

[kyaw31@bart ~]# traceroute www.google.com
traceroute to www.google.com (64.233.169.103), 30 hops max, 40 byte packets
1 homer (10.19.184.1) 8.737 ms 8.946 ms 13.098 ms
2 vl4.aggr1.nyw.ny.rcn.net (208.59.246.1) 15.053 ms 15.461 ms 15.724 ms
3 tge1-2.border1.nyw.ny.rcn.net (207.172.19.110) 15.278 ms 15.547 ms 15.807 ms
4 core1-0-2-0.lga.net.google.com (198.32.160.130) 16.070 ms 16.189 ms 15.887 ms
5 72.14.236.215 (72.14.236.215) 18.521 ms 18.744 ms 216.239.49.34 (216.239.49.34) 28.942 ms
6 66.249.94.235 (66.249.94.235) 24.129 ms 16.170 ms 209.85.248.216 (209.85.248.216) 18.162 ms
7 64.233.175.111 (64.233.175.111) 17.986 ms 18.260 ms 72.14.236.200 (72.14.236.200) 17.688 ms
8 216.239.49.149 (216.239.49.149) 20.581 ms 216.239.49.145 (216.239.49.145) 24.182 ms 25.188 ms
9 yo-in-f103.google.com (64.233.169.103) 21.938 ms 22.055 ms 22.462 ms
[kyaw31@bart ~]#

အဆင့္ ၁။
(က) ကၽြန္ေတာ့ကြန္ပ်ဴတာက TTL တန္ဖုိး ၁ ပါတဲ့ IP Packet တစ္ခုကုိ www.google.com ပုိ႔လုိက္တယ္။
(ခ) ကၽြန္ေတာ့အိမ္က Router (homer / 10.19.184.1) က TTL ကုိ ၁ ႏွုတ္လုိက္တဲ့အခါ၊ TTL သုညျဖစ္သြားတယ္။ ဒါေၾကာင့္ အိမ္က Router က ICMP Time Exceeded (Type 11), Time To Live Exceed In Transit (0) ဆုိတဲ့သတင္းကုိ ကၽြန္ေတာ့ ကြန္ပ်ဴတာကုိ ျပန္ပုိ႔ေပးတယ္။

အဆင့္ ၂။
(က) ကၽြန္ေတာ့ကြန္ပ်ဴတာက TTL တန္ဖုိး ၂ ပါတဲ့ IP Packet တစ္ခုကုိ www.google.com ပုိ႔လုိက္တယ္။
(ခ) ကၽြန္ေတာ့အိမ္က Router က TTL ကုိ ၁ ႏွုတ္လုိက္တဲ့အခါ၊ TTL ၁ ျဖစ္သြားတယ္။ ဒါေၾကာင့္ ေနာက္တဆင့္မွာရွိတဲ့ ကၽြန္ေတာ့ ISP ရဲ့ Router (vl4.aggr1.nyw.ny.rcn.net / 208.59.246.1) ဆီကုိ လက္ဆင့္ကမ္းေပးလုိက္တယ္။
(ဂ) ISP Router က TTL ကုိ ၁ ႏွုတ္လုိက္တဲ့အခါ၊ TTL သုညျဖစ္သြားတယ္။ ဒါေၾကာင့္ ISP Router က ICMP Time Exceeded (Type 11), Time To Live Exceed In Transit (0) ဆုိတဲ့သတင္းကုိ ကၽြန္ေတာ့ ကြန္ပ်ဴတာကုိ ျပန္ပုိ႔ေပးတယ္။

.
.
အဆင့္ ၈။
(က) ကၽြန္ေတာ့ကြန္ပ်ဴတာက TTL တန္ဖုိး ၈ ပါတဲ့ IP Packet တစ္ခုကုိ www.google.com ပုိ႔လုိက္တယ္။
(ခ) 216.239.49.149 က Google ရဲ့ Router ျဖစ္ျပီး၊ အထက္မွာေရးျပတဲ့အတုိင္း TTL ႏွုတ္၊ ICMP ျပန္ပုိ႔ထပ္ျဖစ္ပါမယ္။

အဆင့္ ၉။
(က) ကၽြန္ေတာ့ကြန္ပ်ဴတာက TTL တန္ဖုိး ၉ ပါတဲ့ IP Packet တစ္ခုကုိ www.google.com ပုိ႔လုိက္တယ္။
(ခ) ဒီအဆင့္မွာေတာ့ google.com ရဲ့ server ဆီကုိေရာက္သြားပါတယ္။ Google server မွာ traceroute က ေတာင္းဆုိတဲ့ UDP Port မွာ နားေထာင္မေနတဲ့အတြက္ေၾကာင့္ ICMP Destination Unrechable (Type 3), Port Unrecheable (code 3) ကုိ ကၽြန္ေတာ့ ကၽြန္ပ်ဴတာဆီ ျပန္ပုိ႔ေပးပါတယ္။

Traceroute options

Linux မွာ Default အေနနဲ႔ UDP ကုိသုံးပါတယ္။
ICMP သုံးခ်င္လ်င္ -I option နဲ႔သုံးလုိ႔ရပါတယ္။ (traceroute -I www.google.com)
ေနာက္ပုိုင္းထြက္တဲ့ Linux မွာ TCP ကုိ -T Option နဲ႔သုံးလုိ႔ရပါတယ္။ ဘယ္ Linux version က စခဲ့တယ္မသိပါဘူး။ ဥပမာ (Red Hat 4.1.2-33) မွာ TCP option သုံးလုိ႔ရျပီး၊ (Ubuntu 4.1.2-0ubuntu4) မွာ မရပါဘူး။ (traceroute -T www.google.com)

Windows မွာ Default အေနနဲ႔ ICMP ကုိသုံးပါတယ္။ UDP သုိ႔မဟုတ္ TCP ေျပာင္းသုံးလုိ႔မရပါဘူး။
Cisco IOS မွာ Default အေနနဲ႔ UDP ကုိသုံးပါတယ္။ တျခားေျပာင္းသုံးလုိ႔မရပါဘူး။

Firewall တုိ႔၊ Packet filtering device တုိ႔ ၾကားထဲမွာ ခံေနခဲ့ရင္ TCP နဲ႔ Traceroute လုပ္မွရႏုိင္ပါမယ္။ မ်ားေသာအားျဖင့္ firewall ေတြဟာ UDP နဲ႔ ICMP ကုိ တားျမစ္ထားေလ့ရွိပါတယ္။

တကယ္တမ္း RFC-1393 အလုိအရဆုိလ်င္ ICMP ကုိသံုးရမွာပါ။ Microsoft က ႏုိင္ငံတကာ Standard ကုိတေသြမတိမ္းလုိက္နာျပီး၊ Linux Community က ထင္ရာလုပ္ေနတာ ေတြ႔ရခဲပါတယ္။

Traceroute မွာ Default အေနနဲ႔ UDP ကုိသုံးျပီး UDP Port Number 33434 ကစျပီး 33534 အထိ နံပါတ္ တစ္ခုစီ တက္သြားပါတယ္။ Google.com ကုိ traceroute လုပ္စဥ္မွာ Sniffer မွာ ေတြ႔ရမယ့္ UDP Packet ေတြကုိၾကည့္ရင္သိႏုိင္ပါတယ္။
 
[kyaw31@bart ~]# tcpdump -i eth0 udp
20:10:15.394884 IP 172.16.31.66.41753 > yo-in-f147.google.com.33434: UDP, length 40
20:10:15.394913 IP 172.16.31.66.43257 > yo-in-f147.google.com.33435: UDP, length 40
20:10:15.394936 IP 172.16.31.66.45438 > yo-in-f147.google.com.33436: UDP, length 40
20:10:15.394956 IP 172.16.31.66.41551 > yo-in-f147.google.com.33437: UDP, length 40
20:10:15.394977 IP 172.16.31.66.51521 > yo-in-f147.google.com.33438: UDP, length 40
20:10:15.394998 IP 172.16.31.66.58529 > yo-in-f147.google.com.33439: UDP, length 40
20:10:15.395019 IP 172.16.31.66.59242 > yo-in-f147.google.com.33440: UDP, length 40
20:10:15.395043 IP 172.16.31.66.41370 > yo-in-f147.google.com.33441: UDP, length 40


Traceroute History

Traceroute program ကုိ ၁၉၈၇ ႏွစ္မွာ Van Jacobson က C နဲ႔ ေရးခဲ႔ပါတယ္။ ပထမဦးဆံုး ICMP ကုိသံုးျပီးေရးပါတယ္။ ဒါေပမယ့္ အဲဒီအခ်ိန္က Router ေတြမွာ ICMP Echo Request ကုိ TTL တန္ဖုိး သုညေရာက္တဲ့အခါမွာ ICMP Time Exceeded သတင္းျပန္ပုိ႔တဲ့ အလုပ္ မလုပ္ၾကပါဘူး။ ဒါေၾကာင့္ Van က Traceroute ကုိ UDP နဲ႔ျပန္ေရးခဲ့ပါတယ္။ ၁၉၉၉ ခုႏွစ္မွာ Van ကုိဒါနဲ႔ပတ္သက္လုိ႔ေမးတာ ျပန္ေျဖထားတဲ့ e-mail ကုိ ေအာက္မွာဖတ္ၾကည့္ပါ။

 
From: van@ee.lbl.gov (Van Jacobson)
Newsgroups: comp.protocols.tcp-ip
Subject: Re: traceroute history: why UDP?
Date: 8 Feb 1999 08:36:20 GMT
Organization: Lawrence Berkeley National Laboratory, Berkeley CA
Message-ID: <79m7m4$reh$1@dog.ee.lbl.gov>
References: <79lub9$8e81@oberon.sweden.hp.com>

In article <79lub9$8e81@oberon.sweden.hp.com>,
stevesk@sweden.hp.com (Kevin Steves) writes:
> Were ICMP probes considered in 1988 when Van wrote traceroute?

The very first traceroute (never released) used icmp echo. RFC792 (the
icmp spec) contains the words:

The ICMP messages typically report errors in the processing of
datagrams. To avoid the infinite regress of messages about messages
etc., no ICMP messages are sent about ICMP messages.

During the first night of testing I found that more than half the
router vendors of the time had taken this at face value & would not
return an ICMP Time Exceeded for an ICMP Echo. That's when I changed
to UDP.

- Van



Van Jacobson (person who wrote original traceroute)



စာႂကြင္း
traceroute ရဲ့ source code ကုိဖတ္လုိသူမ်ား၊ compile လုပ္လုိသူမ်ား Lawrence Berkeley National Laboratory ကေန FTP download လုပ္ယူလုိ႔ရပါတယ္။
FTP site က ftp.ee.lbl.gov ျဖစ္ျပီး၊ ေနာက္ဆုံး update လုပ္ထားတာက ဒီဇင္ဘာ ၁၈၊၂၀၀၀ ေန႔ကျဖစ္ပါတယ္။ Filename က ေတာ့ traceroute-1.4a12.tar.gz ျဖစ္ျပီး၊ Filesize က 74917 bytes ျဖစ္ပါတယ္။ Download လုပ္လုိ႔မရလ်င္ Blog မွာ e-mail ေပးခဲ့ပါ၊ ကၽြန္ေတာ္ e-mail attachment ျပန္ပုိ႔ေပးပါမယ္။

Post a Comment