Thursday, July 17, 2008

IP Fragmentation




ပုံမွာပါတဲ့ Host0 နဲ႔ Router0 ကုိ Ethernet နဲ႔ ဆက္သြယ္ထားျပီး၊ Router0 နဲ႔ Router1 ကုိ X.25 နဲ႔ဆက္ထားတယ္ဆုိပါစုိ႔။ ၁၉၉၅ ခုႏွစ္ေလာက္က ဗမာျပည္မွာရွိတဲ့ Network တစ္ခုေပါ့။ :)
Ethernet ေပၚမွာ သြားလုိ႔ရတဲ့ အၾကီးဆုံး Frame အရြယ္အစားက ၁၅၀၀ bytes ျဖစ္ျပီး၊ X.25 ေပၚမွာ သြားလုိ႔ရတဲ့ အၾကီးဆုံး Frame အရြယ္အစားက ၅၇၆ bytes ျဖစ္ပါတယ္။ ဒီအရြယ္အစားကုိ အၾကီးဆုံးပုိ႔ေပးႏုိင္တဲ့ယူနစ္ (Maximum Transfer Unit or MTU) လုိ႔ေခၚပါတယ္။ MTU ဆုိတာ OSI 2nd Layer မွာရွိတဲ့ Framing ကေန သတ္မွတ္ထားတဲ့ တန္ဖုိးျဖစ္ျပီး၊ တန္ဖုိး အမ်ဳိးမ်ဳိး ရွိပါတယ္။
၀ီကီပီးဒီးယားက ဇယားမွာ ၾကည့္ၾကည့္ပါ။

Host0 ကေန Host2 ဆီကုိ IP packet ေတြပုိ႔တာကုိစဥ္းစာၾကည့္ရေအာင္။ Host0 က Ethernet နဲ႔ တုိက္ရုိက္ခ်ိတ္ထားတာဆုိေတာ့ ၁၅၀၀ bytes အရြယ္ packet ကုိ ပုိ႔ေပးလုိက္တယ္။ Router0 ဆီေရာက္ေတာ့ အဲဒီ packet ကုိ Router1 ပို႔တဲ့ေနရာမွာ MTU အရြယ္မတူတဲ့ အတြက္ေၾကာင့္ packet ကုိ အပုိင္းပုိင္း ျဖတ္ျပီးမွ ပုိ႔ေပးလုိ႔ရပါတယ္။ အဲလုိ အပုိင္းပုိင္းျဖတ္တာကုိ fragment လုပ္တယ္လုိ႔ေခၚပါတယ္။ ကၽြန္ေတာ္ေပးတဲ့ ဥပမာမွာဆုိရင္ Host0 က ၁၅၀၀ bytes packet ကုိ ၃ ပုိင္း ျဖတ္ျပီးမွ Router0 ကေန Router1 ဆီကုိပုိ႔ေပးလုိ႔ ရပါမယ္။

Router1 က packet ၃ ခုကုိရတဲ့အခါမွာ ၁၅၀၀ bytes packet ျဖစ္ေအာင္ ျပန္ျပီး မတြဲေပးပါဘူး။ Packet ၃ ခုကုိ ဒီအတုိင္းဘဲ Host1 ဆီကုိ ပုိ႔ေပးလုိက္ပါတယ္။ Host1 ကမွ ရတဲ့ packet ၃ ခုကုိ နဂုိအတုိင္းျပန္ျဖစ္ေအာင္ ျပန္တြဲေပးပါတယ္။ အဲလုိလုပ္တာကုိ packet reassembly လုပ္တယ္လုိ႔ ေခၚပါတယ္။

IP packet fragmentation နဲ႔ reassembly ဆုိတာ လုိအပ္လုိ႔ တီထြင္ခဲ့တာျဖစ္ေပမယ့္၊ တတ္ႏုိင္သေလာက္ ေရွာင္ၾကဥ္သင့္ပါတယ္။ ဘာေၾကာင့္လဲဆုိရင္
၁၊ Router ေတြဟာ packet ကုိျမန္ျမန္ပုိ႔ေပးရမည့္အစား၊ fragmentation အလုပ္ ပုိလုပ္ေနရတယ္၊
၂၊ Packet ေတြကုိ လက္ခံတဲ့ကြန္ပ်ဴတာကလည္း၊ data ကုိ ခ်က္ျခင္းသုံးလုိ႔မရဘဲ reassembly လုပ္ေနရတယ္၊

Fragmentation လုပ္တဲ့ Router မွာေရာ၊ လက္ခံတဲ့ကြန္ပ်ဴတာမွာ ရွိတဲ့ CPU နဲ႔ Memory ကုိ ပုိသုံးရတယ္။
ကြန္ပ်ဴတာ သုံးစြဲသူအတြက္ကေတာ့ Host0 ကေန Host1 ကုိ ဖုိ္င္တစ္ခုပုိ႔ရင္ လုိတာထက္ပုိေႏွးမွာျဖစ္ျပီး၊ email ဖတ္တာ၊ web browse လုပ္တာေတြ ပုိေႏွးေစမွာျဖစ္ပါတယ္။

ဒီျပသနာကုိ ေျဖရွင္းဖုိ႔ အလြယ္ဆုံးနည္းကေတာ့ Network မွာရွိတဲ့ အငယ္ဆုံး MTU အရြယ္အစားကုိ သိေအာင္လုပ္ျပီး၊ ကြန္ပ်ဴတာေတြ အားလုံးရဲ့ default MTU တန္ဖုိးကုိ လုိက္ျပင္ဖုိ႔ျဖစ္ပါတယ္။ Linux မွာ MTU ကုိ configuration ဖုိင္မွာျပင္လုိ႔ရျပီး၊ Windows မွာေတာ့ Registry တန္ဖုိးကုိျပင္ရပါတယ္။ Linux မ်ဳိးစုံ၊ Windows မ်ဳိးစုံဆုိေတာ့ file နာမည္ နဲ႔ registry key value ေတြက အမ်ဳိးမ်ဳိး ကြဲေနပါတယ္။ Windows မွာ အလြယ္တကူျပင္လုိ႔ရတဲ့ Dr. TCP ဆုိတဲ့ program ကုိ http://www.dslreports.com/drtcp မွာ download လုပ္ႏုိင္ပါတယ္။

ဒီမွာ ခင္ဗ်ားတုိ႔ေမးစရာ ေမခြန္းအခ်ဳိ.ရွိမယ္။
၁၊ MTU ေသးသြာေတာ့ packet ေတြပုိမ်ားလာျပီး Router ေတြနဲ႔၊ လက္ခံရတဲ့ကြန္ပ်ဴတာ ပုိအလုပ္မရွုပ္ဖူးလား ?
၂၊ Network ခပ္ေသးေသးဆုိရင္ ထားပါေတာ့၊ အင္တာနက္ေပၚမွာရွိတဲ့ Router ေသာင္းေျခာက္ေထာင္ ရဲ့ MTU တန္ဖုိးေတြကုိ ဘယ္လုိလုပ္ သိႏုိင္ပါ့မလဲ?

အေျဖ ၁၊
ပုိအလုပ္ရွုပ္တယ္ဆုိတာမွန္ပါတယ္။ ဒါေပမယ့္ Router ေတြက Packet ေတြအျမန္ဆုံးပုိ႔ႏုိင္ေအာင္ တီထြင္ထားတာျဖစ္လုိ႔ fragment လုပ္ရရင္ အားလုံးေႏွးသြားပါမယ္။ MTU တန္ဖုိးကုိ ေရြးတဲ့အခါမွာ အေသးဆုံး ဂဏန္းထက္ ပုိမေသးေအာင္ေရြးဖုိ႔ အေရးၾကီးပါတယ္။ အထက္ကေျပာခဲ့တဲ့ ဥပမာမွာ MTU ကုိ ၅၇၆ bytes အစား၊ ၁၀၀ bytes လုုိ႔ေရြးခဲ့မယ္ဆုိရင္ - fragment အလုပ္ခံရတဲ့ packet 3 ခု အစား packet 15 ခုျဖစ္သြားမယ္။ ဒီလုိဆုိရင္ေတာ့ ေတာ္ေတာ္မုိက္မဲတဲ့ အင္ဂ်င္နီယာ ျဖစ္သြားျပီ။

အေျဖ ၂၊
Network ၾကီးၾကီး သုိ႔မဟုတ္ အင္တာနက္မွာ အေသးဆုံး MTU ကုိ အလုိေလ်ာက္ လုိက္ရွာတာ ကုိ လြန္ခဲ့တဲ့ ၁၉၉၀ မွာ အၾကံျပဳ တီထြင္ခဲ့ ပါတယ္။ အဲဒီ နည္းလမ္းကုိ Path MTU Discovery လုိ႔ေခၚပါတယ္။ RFC-1191 မွာဖတ္ၾကည့္ႏုိင္ပါတယ္။ Path MTU-D အေၾကာင္းကုိ မၾကာခင္ ေရးသြားပါမယ္။

Post a Comment