Thursday, December 27, 2012

TCP/IP

https://dl.dropbox.com/u/94729309/TCPIP%2821Nov2012%29.docx

CHAPTER 3
INTERNETWORKING PROTOCOLS
          ဒီအခန္းမွာ protocol ၄ ခုအေၾကာင္း overview ေျပာပါမယ္။
1.    Internet Protocol (IP)
datagram addressing, routing and delivery ကိုလုပ္ေပးတယ္။
2.    Internet Control Message Protocol (ICMP)
error ေတြကို detect လုပ္ျပီး report လုပ္ေပးတယ္။
3.    Address Resolution Protocol (ARP)
IP address နဲ႕ physical address ၾကား resolve လုပ္ေပးတယ္။
4.    Dynamic Host Configuration Protocol (DHCP)
dynamic address configuration လုပ္ေပးတယ္။


3.1. Internet Protocol (IP)
          IP ဟာ unreliable, best-effort, and connectionless packet delivery protocol တစ္ခုျဖစ္တယ္။ သူဟာ reliable မျဖစ္ဘူး။ ဒါေပမယ့္ အစြမး္ကုန္ၾကိဳးစာအားထုတ္ျပီး data ေတြကိုပို႕ေပးတယ္။ IP ကပို႕လိုက္တဲ့ packet ေတြဟာ လမ္းမွာေပ်ာက္သြားႏုိင္တယ္။ ေရွ႕ေနာက္အစီအစဥ္တက်မဟုတ္ဘဲလည္း ေရာက္သြားႏုိင္တယ္။ ေရာက္ျပီးသား packet တစ္ခုဟာ ေနာက္တစ္ၾကိမ္ ထပ္ေရာက္သြားတာမ်ိဳးလည္းျဖစ္ႏုိင္တယ္။ ဒီျပသနာေတြကို သူ႕အထက္မွာရွိတဲ့ upper layer protocol (ဥပမာ-TCP) ကေျဖရွင္းေပးရတယ္။

3.1.1. IP addressing
          IP address ေတြဟာ 32-bit ရွိတဲ့ unsigned binary value ေတြဘဲ။ dotted decimal format နဲ႕ေဖာ္ျပေလ့ရွိတယ္။ ဥပမာ- 9.167.5.8. ဒီလုိ numeric form မ်ိဳးကို IP software ကအသံုးျပဳတယ္။ လူေတြကေတာ့ ဖတ္ရလြယ္တဲ့အမည္ေတြကိုသံုးေလ့ရွိတယ္။ ဥပမာ- www.google.com. numeric form နဲ႕ အမည္ၾကားဆက္စပ္ေပးတာကေတာ့ Domain Name System (DNS) ပါ။
The IP address
          Internet ခ်ိတ္ဆက္ထားတဲ့ host တစ္ခုကို identify လုပ္ဘုိ႕ဆုိရင္ host တုိင္းကို address ေတြေပးထားရတယ္။ အဲဒီ address ကို IP address or Internet address လုိ႕ေခၚတယ္။ host တစ္ခုဟာ network တစ္ခုထက္ပိုျပ
ီးခ်ိတ္ဆက္ထားျပီဆိုရင္ အဲဒီ host ကို multihomed host လုိ႕ေခၚတယ္။ အဲဒီ host ဟာ network ၂ခုနဲ႕ခ်ိတ္ဆက္ထားရင္ IP address ၂ခုရွိတယ္။ IP address တစ္ခုမွာ ၂ပိုင္းပါတယ္။ network number နဲ႕ host number ဆုိျပီးေတာ့ေပါ့။ ဥပမာ- 128.2.7.9 မွာ 128.2 ဟာ network number ျဖစ္ျပီး 7.9 ဟာ host number ျဖစ္တယ္။ အိမ္နံပါတ္တစ္ခုကိုေျပာရာမွာ 8/403 ဆိုရင္ တုိက္နံပါတ္က ၈၊ အခန္းနံပါတ္က ၄၀၃ ဆိုတဲ့သေဘာမ်ိဳးေပါ့။

Class-based IP addresses
          IP address တစ္ခုမွာ ဘယ္အပိုင္းက network number လည္း၊ ဘယ္အပိုင္းက host number လည္းခြဲျခားဘုိ႕လုိပါတယ္။ IP address ရဲ႕ ေရွ႕ဆံုးက bit ေတြကိုၾကည့္ျပီး ဘယ္အပိုင္းက network number၊ ဘယ္အပိုင္းက host number ဆိုတာခြဲျခားနုိင္ပါတယ္။ IP address ကို class ၅မ်ိဳးခြဲႏုိင္တယ္။ Class A, B, C, D and E.
          ေရွ႕ဆံုးက bit ဟာ  0 စရင္ Class A ပါ။ Class A ဟာ network number အတြက္ 7 bits သံုးတယ္။ host number အတြက္ 24 bits သံုးတယ္။ ဒါေၾကာင့္ Class A address မွာ network 126 ခုထိရွိႏုိင္ျပီး network တစ္ခုဆီမွာ host ေပါင္း 16777214 ခုထိရွိႏုိင္တယ္။
          ေရွ႕ဆံုး bit ဟာ 10 နဲ႕ စရင္Class B ပါ။ Class B မွာ ေရွ႕က 14 bits ဟာ network number ျဖစ္ျပီး ေနာက္က 16 bits ဟာ host number ျဖစ္တယ္။  ဒါေၾကာင့္ Class B address မွာ network 16382 ခုထိရွိႏုိင္ျပီး network တစ္ခုဆီမွာ host ေပါင္း 65534 ခုထိရွိႏုိင္တယ္။
ေရွ႕ဆံုး bit ဟာ 110 နဲ႕ စရင္Class C ပါ။ Class C မွာ ေရွ႕က 21 bits ဟာ network number ျဖစ္ျပီး ေနာက္က 8 bits ဟာ host number ျဖစ္တယ္။  ဒါေၾကာင့္ Class C address မွာ network 2097150 ခုထိရွိႏုိင္ျပီး network တစ္ခုဆီမွာ host ေပါင္း 254 ခုထိရွိႏုိင္တယ္။
ေရွ႕ဆံုး bit ဟာ 1110 နဲ႕ စရင္Class D ပါ။ multicasting အတြက္ reserve ထားတာပါ။
ေရွ႕ဆံုး bit ဟာ 1111 နဲ႕ စရင္Class C ပါ။ future use နဲ႕ experimental use အတြက္ reserve ထားတာပါ။
Network တစ္ခုမွာခ်ိတ္ဆက္မယ့္ host အေရအတြက္ သိပ္မ်ားလြန္းရင္ Class A address ကိုသံုးသင့္ပါတယ္။ ခ်ိတ္ဆက္မယ့္ host အေရအတြက္ သိပ္နည္းရင္ေတာ့ Class C အမ်ိဳးအစား address ကိုသံုးသင့္ပါတယ္။ အလယ္အလတ္ host အေရအတြက္ဆိုရင္ေတာ့ Class B သံုးေပါ့။

Reserved IP address
          IP address တစ္ခုရဲ႕ network number ေတြ host number ေတြမွာ 0 ေတြခ်ည္းျဖစ္ေနတာ 1 ေတြခ်ည္းျဖစ္ေနတာဟာလည္း အေၾကာင္းရွိပါတယ္။ host number မွာ 0 ေတြခ်ည္းျဖစ္ေနရင္ အဓိပါယ္က this host ပါတဲ့။ network number မွာ 0 ေတြခ်ည္းျဖစ္ေနရင္ ဒါဟာ this network လုိ႕ေျပာတာပါ။ host တစ္ခုဟာ network တစ္ခုကို ျဖတ္ျပီး communicate လုပ္ခ်င္တယ္ဆုိပါစုိ႕။ ဒါေပမယ့္ အဲဒီ host ဟာ သူျဖတ္ရမယ့္ network ရဲ႕ IP address ကိုမသိဘူးဆိုရင္ သူပို႕မယ့္ packet ရဲ႕ network number ကို 0 လုိ႕ေပးလုိက္ရမယ္။ အဲဒီ network ေပၚမွာရွိေနတဲ့ ့host ေတြက network number 0 နဲ႕ ေရာက္လာတဲ့ packet ကို ဒါ ငါတုိ႕ network ကို ပို႕တဲ့ packet ဘဲလို႕သတ္မွတ္တယ္။ (this network) ကိုပို႕တာလုိ႕သတ္မွတ္လုိက္တာေပါ့။ အဲဒီ host ေတြဟာ sender ဆီ reply ျပန္တဲ့အခါမွာ network address ကို ထည့္ျပီးျပန္ေပးလုိက္ၾကတယ္။ အဲဒီအခါ sender က network address ကိုသိသြားျပီး ေနာက္ထပ္ packet ေတြပို႕ခ်င္တဲ့အခါ 0 ကိုသံုးစရာမလုိေတာ့ဘဲ သူအခုသိသြားျပီျဖစ္တဲ့ network address ကို သံုးလုိ႕ရသြားျပီေပါ့။
          Network number မွာပါတဲ့ bit ေတြဟာ အားလံုး 1 ေတြခ်ည္းဘဲျဖစ္ေနရင္ all network ပါတဲ့။ host number မွာပါတဲ့ bit ေတြအားလံုး 1 ျဖစ္ေနရင္ all host လုိ႕ဆိုလုိပါတယ္။ ဥပမာ-128.2.255.255 (Class B) address မွာ 128.2 ဟာ network number ပါ။ 255.255 က host number ပါ။ host number ေတြကို binary form ေျပာင္းၾကည့္ရင္ 11111111.11111111 ပါ။ ဆိုလိုတာက host number က all one ျဖစ္ေနပါတယ္။ ဆိုလိုတာက network number 128.2 နဲ႕ခ်ိတ္ဆက္ထားတဲ့ host ေတြအားလံုးကို ရည္ညႊန္းတာပါ။ တစ္နည္းအားျဖင့္ 128.2 network ေပၚမွာရွိတဲ့ host ေတြအားလံုးကို broadcast လုပ္တာပါ။
          Class A network 127.0.0.0 ကိုေတာ့ loopback address လုိ႔ေခၚတယ္။ ဒါကေတာ့ကိုယ့္ host ကို က္ုိယ္ျပန္ညြန္းတဲ့အခါသံုးပါတယ္။
          အေပၚမွာ network and host အေရအတြက္ေတြတြက္တဲ့အခါမွာ 2 ကိုႏႈတ္ခဲ့တာသတိထားမိမွာေပါ့။ ဒါဟာ all 0 တစ္ခုနဲ႕ all 1 တစ္ခု စုစုေပါင္း 2 ခုကိုႏႈတ္ခဲ့တာပါ။ host ရဲ႕ IP address ကိုသတ္မွတ္တဲ့အခါ all 0 ေတြ all 1 ေတြသတ္မွတ္လို႕မရဘူးေလ။ ဒါေၾကာင့္ ၂ ခုစီေလ်ာ့ေနတာ။

3.1.2. IP subnets
          Internet ခ်ိတ္ဆက္တဲ့ host အေရအတြက္ေတြတစ္ေန႕ထက္ တစ္ေန႕မ်ားလာတာေၾကာင့္ IP address ေတြကို ထပ္ျပီး ခြဲစိတ္ဘုိ႕လိုလာပါတယ္။ ဒါေၾကာင့္ IP subnet ရယ္လို႕ျဖစ္လာတယ္။ IP address ရဲ႕ host number အပို္င္းကိုဘဲ second network number နဲ႕ host number လုိ႕ထပ္ျပီးခြဲလုိ္က္တာပါ။ second network number ကို subnetwork or subnet လုိ႕ေခၚပါတယ္။ main network မွာ ေနက္ထပ္ subnet ေတြရွိလာတာေပါ့။ ဥပမာ 8/403(A) and 8/403(B) ဆိုပါေတာ့။ တုိက္ ၈ မွာ အခန္းအမွတ္ ၄၀၃ ဆိုတာရွိတယ္။ တုိက္ ၈ က network number ဆိုပါေတာ့။ အခန္း ၄၀၃ က host number ဆုိပါေတာ့။ အခု host number 403 ကိုဘဲ A နဲ႕ B ဆိုျပီးထပ္ခြဲလုိက္တယ္။ A နဲ႕ B ဟာ subnet ေတြေပါ့။ ခုဆို တုိက္ ၈ မွာ A နဲ႕ B ဆိုတဲ့subnet ၂ခုရွိသြားျပီ။ ဒီသေဘာမ်ိဳးပါ။
<network number><subnet number><host number>
          Subnet number and host number တြဲထားတာကို local address or IP address ရဲ႕ local portion လုိ႕ေခၚတယ္။
          IP address တစ္ခုမွာ ဘယ္အပိုင္းထိက network number လည္း၊ ဘယ္အပို္င္းက host number လည္းဆိုတာကို address ရဲ႕ ေရွ႕ဆံုးက bit ေတြကိုၾကည့္ျပီးသိႏုိင္တယ္ဆိုတာ အထက္မွာေျပာခဲ့ပါတယ္။ subnet ခြဲထားတဲ့ address ကိုေရာ ဘယ္လိုခြဲျခားျပီးသိႏုိင္မလည္း။ ဒါကိုေတာ့ subnet mask ကိုၾကည့္ျပီးသိႏုိင္ပါတယ္။ သာမန္အားျဖင့္ Class A အတြက္ subnet mask က 255.0.0.0 ပါ။ Class B အတြက္က 255.255.0.0 ပါ။ Class C အတြက္ကေတာ့ 255.255.255.0 ပါ။ ဆိုလုိတာက subnet mask ကို binary form ေျပာင္းလုိ္က္ရင္ 0 နဲ႕ 1 သာပါတဲ့ bit stream တစ္ခုရပါမယ္။ အဲဒီထဲကမွ 1 ေတြက network number ကိုေဖာ္ျပျပီး 0 ေတြကေတာ့ host number ကိုေဖာ္ျပပါတယ္။
ဥပမာ- Class A address တစ္ခု
10.0.0.1 ဆိုပါေတာ့။ binary form က
00001010.00000000.00000000.00000001 ပါ။
subnet mask က
255.0.0.0 ပါ။ အဲဒါကို binary form ေျပာင္းရင္ 11111111.00000000.00000000.00000000 ျဖစ္ပါတယ္။ အဲဒီမွာ ေရွ႕ဆံုးက 11111111 က network number ကိုေဖာ္ညႊန္းပါတယ္။ ဒါဆို 10 (00001010) က network number ေပါ့။ ေနာက္ဆံုးက 00000000.00000000.00000000 က host number ကိုရည္ညြန္းပါတယ္။ ဒါဆို (0.0.1)00000000.00000000.00000001 က host number ေပါ့။
IP Address
10
00001010
0
00000000
0
00000000
1
00000001
Subnet Mask
255
11111111
0
00000000
0
00000000
0
00000000
(ခုထိ သာမန္ IP address ကို subnet mask သံုးျပီး network number and host number ခြဲျပတာဘဲပါေသးတယ္။ subnet ခြဲထားတဲ့ address ေတြကိုခြဲျပတာမပါေသးပါဘူး။)

Types of subnetting
          Subnetting ၂မ်ိဳးရွိတယ္။ static နဲ႕ variable length ပါ။ variable length က static ထက္ပိုျပီး flexible ျဖစ္ပါတယ္။

Static subnetting
          Static subnetting ဆိုတာက network တစ္ခုက ခြဲထားတဲ့ subnet ေတြအားလံုးဟာ same subnet mask ကိုဘဲအသံုးျပဳရပါတယ္။ ဒါက implement လုပ္ရတာလည္းလြယ္တယ္။ maintain လုပ္ရတာလည္းလြယ္တယ္။ ဒါေပမယ့္ small network ေတြ (host အနည္းငယ္သာခ်ိတ္ဆက္ထားတဲ့ network ေတြ) မွာဆိုရင္ေတာ့ address space ေတြကို waste ျဖစ္ေစတယ္။ ဥပမာ- host ၄ ခုသာပါတဲ့ network တစ္ခုဆိုပါေတာ့။ အျခား subnet က 255.255.255.0 သံုးထားရင္ သူလည္း 255.255.255.0 ကိုဘဲသံုးရမယ္။ ဒီ subnet  mask နဲ႕  host ေပါင္း ၂၅၄ ခုထိသံုးႏုိင္ပါရက္နဲ႕ ၄ ခုသာသံုးတဲ့အတြက္ IP address ေပါင္း ၂၅၀ ဟာ waste ျဖစ္သြားပါတယ္။

Static subnetting example
          Class A network တစ္ခုကိုစဥ္းစားၾကည့္ရေအာင္။

IP address က ေအာက္ပါအတုိင္းဆိုပါေတာ့။

IP address က 9.67.38.1 (Class A) ပါ။ network address က 9 ပါ။ host address က 67.38.1 ပါ။ network administrator အေနနဲ႕ bit position (ဘယ္ဘက္က စေရတြက္ပါ)  8 ကေန 25 ထိကို subnet address အျဖစ္သတ္မွတ္ခ်င္တယ္ဆိုပါစို႕။ ဒါဆို bit 26 to 31 က host address ေပါ့။

သူ႕ရဲ႕ subnet mask က 255.255.255.192 ျဖစ္ရပါမယ္။ binary နဲ႕ဆိုရင္
11111111.11111111.11111111.11000000 ပါ။
indicates
  netID      subnet number             hostID
Class A ျဖစ္တဲ့အတြက္ bit 1 to 7 က netID ပါ။ subnet mask က 1 ေတြရွိေနတဲ့အပို္င္းက sutnet number ပါ။ ဒီမွာဆို bit 8 to 25 ေပါ့။ 0 ေတြက host ညြန္ျပပါတယ္။ bit 26 to 31 က hostID ေပါ့။

Variable length subnetting
          ဒီနည္းနဲ႕ဆိုရင္ေတာ့ network တစ္ခုကေန ခြဲထားတဲ့ subnet ေတြရဲ႕ subnet mask ေတြဟာ တူစရာမလုိပါဘူး။ small subnet (host အနည္းငယ္သာခ်ိတ္ဆက္ထားတဲ့ subnet) ဟာ သူလိုတဲ့ mask ကိုသံုးႏုိင္ပါတယ္။ host ေတြအမ်ားၾကီးခ်ိတ္ထားတဲ့ subnet ဆိုရင္လည္း သူလိုအပ္တဲ့ mask ကိုသံုးႏုိင္ပါတယ္။ small subnet ေရာ big subnet ေရာ same network ကေနခြဲထုတ္တားတာေပမယ့္ သူတို႕အသီးသီးရဲ႕ subnet mask ေတြဟာ မူလ network ရဲ႕ subnet mask နဲ႕ တူစရာမလုိပါဘူး။ ဒါေၾကာင့္ address space ေတြ waste ျဖစ္တာမ်ိဳးမရွိပါဘူး။
ဥပမာ-
Class C address 165.214.32.0 ကို ရထားတဲ့ corporation တစ္ခုကိုစဥ္းစားၾကည့္ရေအာင္။ သူက network 5 ခု ခြဲခ်င္တယ္ဆိုပါေတာ့။ host 5 ခုစီပါတဲ့ subnet က ၃ခု၊ host 30 စီပါတဲ့ subnet က ၂ ခုဆိုပါေတာ့။ ဒါဆို static subnetting နဲ႕မရေတာ့ဘူး။ ဘာေၾကာင့္လည္းဆိုေတာ့ Class C ဆိုေတာ့ hostID က bit 24 to 31. Subnet ၅ခုခြဲဘုိ႕ဆို အနည္းဆံုး bit 24 to 26 ကို subnet number အျဖစ္သတ္မွတ္ရမယ္။ (24 to 25 ဆိုရင္ 2 bits ထဲမို႕ subnet 4 ခုဘဲရမယ္။ လုိခ်င္တာက ၅ခု)။ (24 to 26 ဆိုရင္ 3 bits မုိ႕ subnet 8 ခုထိခြဲႏုိင္မယ္။ ဒါေပမယ့္ hostID က 27 to 31 (5 bits) က်န္ေတာ့မယ္။ ဒါဆို subnet တစ္ခုမွာ host 32 ခုဘဲခ်ိတ္ႏုိင္ေတာ့မယ္။ လုိခ်င္တာက 50 hosts နဲ႕ 30 hosts တုိ႕ေလ။ 30 hosts ေတြအတြက္အဆင္ေျပေပမယ့္ 50 hosts ခ်ိတ္ခ်င္တဲ့ network အတြက္အဆင္မေျပျပန္ဘူး။) static subnetting ရဲ႕ကန္႕သတ္ခ်က္ေၾကာင့္ 50 hosts လိုတဲ့ subnet ေတြအတြက္ subnet mask ကတစ္မ်ိဳး 30 hosts လုိတဲ့ subnet ေတြအတြက္ subnet mask ကတစ္မ်ိဳးထားလုိ႕မရဘူးေလ။ same subnet mask ကိုဘဲသံုးရမယ္လို႕သတ္မွတ္ထားတယ္။ ဒါေၾကာင့္ variable length subnetting ကိုသာအသံုးျပဳျပီးခြဲရေတာ့မယ္။
          Subnet mask 255.255.255.192 (11111111.11111111.11111111.11000000) ကိုသံုးျပီးခြဲပါမ့ယ္။ subnet ၄ ခုရပါမယ္။  subnet တစ္ခုမွာ host 64 ခုခ်ိတ္ႏိုင္ပါမယ္။ စတုတၳေျမာက္ subnet ကို ေနာက္ထပ္ subnet 2ခုထပ္ခြဲပါမယ္။ (subnet တစ္ခုကေန ေနာက္ထပ္ subnet ေတြထပ္ခြဲနုိင္တယ္ဆိုတာျမင္ႏုိင္ပါတယ္။) ေနာက္ထပ္ခြဲထားတဲ့ subnet တစ္ခုမွာ host ၃၂ ခုစီခ်ိတ္ႏုိင္ပါမယ္။ အသံုးျပဳမယ့္ subnet mask ကေတာ့ 255.255.255.224 (11111111.11111111.11111111.11100000) ပါ။ (တကယ္ရႏုိင္တာက subnet 8 ခုပါ။ ဒါေပမယ့္ ၂ခုဘဲလုိတာမို႕ ၂ခုလုိ႕ဘဲေျပာတာပါ။) ခုဆုိရင္ Subnet mask 255.255.255.192 ကိုသံုးျပီး host 64 ခုပါ subnet 3 ခုနဲ႕ host 32 ခုပါ subnet ၂ ခုကိုရပါျပီ။ လုိအပ္တာက (host 50 ပါ subnet ၃ခု)နဲ႕ (host 30 ပါ subnet ၂ခု)ဆိုေတာ့ waste ျဖစ္တာသိပ္မရွိေတာ့ဘဲအဆင္ေျပသြားပါျပီ။ (subnet ေတြအေၾကာင္းရွင္းျပတုိင္း သိပ္နားမလည္ၾကတာကိုအေတြ႕အၾကံဳအရသိထားပါတယ္။ ဒါေၾကာင့္ဒီစာဖတ္ျပီးမရွင္းလင္းတာရွိရင္ comment ခ်န္ထားေပးပါ။ နားမလည္တဲ့အပို္င္းကိုထပ္ရွင္းေပးပါမယ္။)

Determining the subnet mask
          သာမန္အားျဖင့္ဆုိရင္ subnet mask ေတြကို configuration file မွာသိမ္းထားေလ့ရွိပါတယ္။ ဒါေပမယ့္ diskless workstation ေတြမွာေတာ့ မသိမ္းႏုိင္ဘူးေပါ့။ ICMP မွာဆိုရင္ address mask request နဲ႕ address mask reply ဆိုတဲ့ message ၂ခုပါတယ္။ ဒီ message ေတြသံုးျပီး subnet mask ေတြကို server ကေနရယူႏုိင္တယ္။ address mask request message က server ထံမွ subnet mask ကိုေတာင္းခံတဲ့ message ေပါ့။ address mask reply ကေတာ့ server က reply ျပန္ေပးတဲ့ message ေပါ့။

3.1.3. IP routing
          IP layer ရဲ႕ အေရးၾကီးတဲ့ function ကေတာ့ IP routing ပါဘဲ။ physical network ေတြကိုအျပန္အလွန္ခ်ိတ္ဆက္ေပးဘုိ႕ router ေတြကိ IP routing ကိုသံုးရပါတယ္။ routing ဆိုတာ packet တစ္ခုကို သူသြားခ်င္တဲ့ destination ကိုေရာက္ေအာင္ သြားနုိင္တဲ့ လမ္းေတြအမ်ားၾကီးရွိတဲ့အနက္ အသင္ေတာ္ဆံုးလမ္းေၾကာင္းကိုေရြးေပးတာပါဘဲ။ ဒါကို router ေတြကလုပ္ေပးရတာပါ။ device တစ္ခုဟာ သာမန္ host တစ္ခုအေနနဲဲ႕ေရာ router တစ္ခုအျဖစ္ပါ တစ္ျပိဳင္နက္ေဆာင္ရြက္ေပးႏုိင္ပါတယ္။ ဒီလို router မ်ိဳးကို router with partial routing information လုိ႕ေခၚပါတယ္။         Full function router တစ္ခုျဖစ္ဘုိ႕ဆုိရင္ေတာ့ ေနာက္ထပ္ protocol ေတြလိုေသးတာေပါ့။ IP routing မွာ direct နဲ႕ indirect routing ဆိုျပီး ၂ မ်ိဳးရွိတယ္။
Direct routing
          Destination host နဲ႕ source host တုိ႕ဟာ physical network တစ္ခုထဲမွာခ်ိတ္ဆက္ထားတာဆိုရင္ IP datagram ေတြကို တုိက္ရိုက္ပို႕ယူႏုိင္ပါတယ္။ ပို႕ခ်င္တဲ့ IP datagram ကုိ physical network ထဲမွာ encapsulate (ထည့္)           
ျပီးပို႕ယံုပါဘဲ။ ဒါကိုိ direct delivery လို႔ေခၚျပီး direct routing လို႕ေခၚပါတယ္။

Indirect routing
          Destination host နဲ႕ source host တုိ႕ဟာ network တစ္ခုထဲမွာခ်ိတ္ဆက္ထားတာမ်ိုးမဟုတ္တဲ့အခါ indirect routing နဲ႕ပို႕ရပါမယ္။ ဒီလိုအေျခအေနမ်ိဳးမွာ destination ကိုေရာက္ဘုိ႕ဆိုရင္ ၾကားထဲက IP gateway (router) တစ္ခု သို႕မဟုတ္ တစ္ခုထက္ပိုတဲ့ IP gateway ေတြကတစ္ဆင့္ပို႕ရပါမယ္။ ပထမဆံုးပို႕ရမယ့္ gateway ရဲ႕ address ကို indirect route လုိ႕ေခၚပါတယ္။ source host ဟာ packet တစ္ခုကို destination host ကုိပို႕ဘုိ႕အတြက္ လုိအပ္တဲ့ information ဆိုလုိ႕ first gateway ရဲ႕ address သာျဖစ္ပါတယ္။ gateway အားလံုးရဲ႕ address ေတြကိုသိဘုိ႕မလုိပါဘူး။
          Physical network တစ္ခုမွာ subnet ေတြခြဲထားတယ္ဆိုပါေတာ့။ source နဲ႕ destination host ေတြဟာ ဒီ physical network တစ္ခုထဲမွာရွိေနေသာ္လည္း subnet မတူဘူးဆုိရင္ indirect routing နဲ႕ဘဲပို႕လို႕ရေတာ့မယ္။ subnet ၂ခုၾကားမွာ router ခံရေတာ့မယ္။

IP routing table
          Host တစ္ခုစီမွာ
·         Destination IP network addresses
·         Routes to next gateways
ဆိုတဲ့ information ေတြရွိပါတယ္။ ဒီ Information ေတြကို IP routing table ထဲမွာသိမ္းထားပါတယ္။

ဒီ network အတြက္ Host D ရဲ႕ routing table ကိုေလ့လာၾကည့္ရေအာင္။

D ဟာ 128.15.0.0 network နဲ႕တုိက္ရုိက္ခ်ိတ္ထားတယ္။ ဒါေၾကာင့္ အဲဒီ network ကို packet ပို႕ဘုိ႕ဆို direct route နဲ႕သြားနုိင္တယ္။ ဒါေပမယ့္ 129.7.0.0 နဲ႕ 128.10.0.0 ကိုိိပို႕ဘုိ႕ဆိုရင္ေတာ့ E တုိ႕ B တုိ႕ကိုအသီးသီးသံုးျပီး indirect rout နဲ႕ပို႕ရမယ္။

3.1.9. IP datagram
IP network မွာ data ေတြကို transfer လုပ္တဲ့ unit ကို IP datagram လို႕ေခၚတယ္။ datagram တစ္ခုမွာ header နဲ႕ data ဆိုျပီး ၂ပိုင္းပါတယ္။

IP datagram ကို physical frame ရဲ႕ data portion မွာထည့္ျပီး transmit လုပ္ရပါတယ္။ ပံုမွာျပထားတဲ့အတုိင္းပါ။
Datagram ေတြကိုလိုအပ္ရင္ fragment လုပ္ရပါတယ္။ ျပီးရင္ reassemble ျပန္လုပ္ရပါတယ္။ ဒါကို IP ကလုပ္ေပးတာပါ။ IP datagram တစ္ခုရဲ႕ maximum length က 65535 octets ျဖစ္ပါတယ္။ IP host တုိင္းဟာ အနည္းဆံုး 576 octets ရွိတဲ့ datagram ေတြကို fragmentation မလုပ္ဘဲ ကိုင္တြယ္ႏုိင္ရပါမယ္။
Datagram တစ္ခုရဲ႕ အစိတ္အပိုင္းေတြျဖစ္တဲ့ fragment တုိင္းမွာ မူရင္း datagram ရဲ႕ header ပါရွိပါတယ္။ ဒါေၾကာင့္ fragment တစ္ခုကို သာမန္ datagram တစ္ခုအျဖစ္နဲ႕မွတ္ယူေပးပို႕ရပါတယ္။ fragment တစ္ခု lost ျဖစ္သြားရင္ datagram တစ္ခုလံုး lost ျဖစ္သြားပါတယ္။ ဆိုလိုတာက datagram တစ္ခုကို fragment 10 ခု ခြဲျပီးပို႕တယ္ဆိုပါေတာ့။ fragment 9 ခုကေရာက္တယ္။ က်န္တဲ့ တစ္ခုက lost ျဖစ္သြားတယ္ဆုိရင္ ေရာက္တဲ့ fragment 9 ခုကိုပါ discard (ျဖဳတ္ခ်)ပစ္လုိက္ရတယ္။ ဒါေၾကာင့္ အနည္းဆံုး fragment တစ္ခု lost ျဖစ္တာနဲ႕ datagram တစ္ခုလံုး lost ျဖစ္သြားပါတယ္။

IP datagram format
          IP datagram ရဲ႕ header ဟာအနည္းဆံုး 20 octets ရွိရပါတယ္။

·         VERS: IP protocol version ပါ။ 4, 5, 6 အစရွိသျဖင့္ေပါ့။
·         HLEN: IP header ရဲ႕ length ပါ။
·         Service Type: quality of service ပါ။
·         Total length: datagram ရဲ႕ header ေရာ data ေရာ ၂ခုေပါင္းရဲ႕ length ပါ။
·         Identification: fragment ေတြကို datagram အျဖစ္ reassemble လုပ္ရမွာ အသံုးျပဳဘို႕အတြက္ sender က ေပးရတဲ့ number ပါ။ datagram တစ္ခုက ခြဲထားတဲ့ fragment တုိင္းရဲ႕ identification number ဟာ တူတူဘဲျဖစ္ရပါမယ္။
·         Flags:

DF field က 0 ဆုိရင္ ဒီ datagram ကို fragment လုပ္ခြင့္ျပဳတယ္။ 1 ဆိုရင္ ခြင့္မျပဳဘူး။
MF field က 0 ဆိုရင္ ဒီ fragment ဟာ datagram ရဲ႕ ေနာက္ဆံုးအပိုင္းျဖစ္တယ္။ 1 ဆိုရင္ ဒီ fragment ေနာက္မွာ ေနာက္ထပ္ fragment ေတြရွိေသးတယ္။
 ·         Fragment Offset: reassemble လုပ္ဘုိ႕သံုးတယ္။ ဒီ fragment ေလးဟာ မူရင္း datagram ရဲ႕ဘယ္ေနရာမွာရွိတယ္ဆိုတာေဖာ္ျပတယ္။ မူရင္း datagram ရဲ႕ ပထမဆံုး fragment ဆိုရင္ ဒီ field မွာ 0 ေပါ့။
·         Time to live: datagram ရဲ႕ network ထဲမွာေနခြင့္ရတဲ့အခ်ိန္ပါ။ seconds နဲ႕သတ္မွတ္ပါတယ္။ သီအိုရီအရ ဒီ datagram ကို process လုပ္တဲ့ router ဟာ သူ႕ရဲ႕ processing time ကုိ ဒီ field ထဲမွာပါတဲ့ တန္ဘိုးထဲကႏႈတ္ေပးရမွာပါ။ (Time to Live value – processing time)။ လက္ေတြ႕မွာေတာ့ router တစ္ခုက datagram တစ္ခုကို process လုပ္တာ 1 second ေလာက္ဘဲၾကာပါတယ္။ ဒါေၾကာင့္ datagram တစ္ခုဟာ router တစ္ခုကို ေရာက္သြားတုိင္း time to live value ထဲက 1 ခုေလ်ာ့သြားပါတယ္။ ဒီလုိနဲ႕ TTL ဟာ အခ်ိန္မဟုတ္ေတာ့ဘဲ hop-count (number of routers) ျဖစ္သြားပါတယ္။ ဒီ value zero ျဖစ္သြားရင္ေတာ့ ဒီ datagram ကို discard လုပ္ျပစ္ရပါတယ္။
·         Protocol Number:
·         Header Checksum: header မွာပါတဲ့ information ေတြရဲ႕ checksum value ပါ။ header checksum နဲ႕ contents ကိုက္ညီမႈမရွိရင္ datagram ကို discard လုပ္ပါတယ္။
·         Source IP Address: datagram ကို ပို႕တဲ့ sender ရဲ႕ 32-bit IP address ပါ။
·         Destination IP address: ဒီ datagram ေရာက္ရမယ့္ host ရဲ႕ 32-bit IP address ပါ။
·         Options:
·         Padding: option ကုိသံုးျဖစ္ျပီး option က 32 bits ရဲ႕ integer multiple မျဖစ္ရင္ ျဖစ္ေအာင္ 0 ေတြျဖည့္ေပးရပါတယ္။
·         Data: အမွန္တကယ္ပို႕ခ်င္တဲ့ data ကို ဒီ field မွာထည့္ရပါတယ္။

Fragmentation
          IP datagram တစ္ခုဟာ host တစ္ခုကေန အျခား host တစ္ခုကို သြားတဲ့အခါၾကားထဲမွာ physical network အမ်ိဳးမိ်ဳးကိုျဖတ္သြားရတယ္။ Physical network တစ္ခုစီမွာ သူတုိ႕ကိုယ္တြယ္ေပးႏုိင္တဲ့ maximum frame size ရွိတယ္။ ဒါကို maximum transmission unit (MTU) လုိ႕ေခၚတယ္။
          Datagram တစ္ခုရဲ႕ size ဟာ သူျဖတ္သြားရမယ့္ network က ေဆာင္ရြက္ေပးႏုိင္တဲ့ MTU ထက္ၾကီးေနျပီဆိုရင္ အဲဒီ datagram ကို fragment လုပ္ေပးရမယ္။ fragme တစ္ခုခ်င္းရဲ႕ size ဟာ MTU ထက္မၾကီးရဘူး။ receiving host ကသူ႕ဆီေရာက္လာတဲ့ fragment ေတြကို datagram ျပန္ျဖစ္ေအာင္ reassemble ျပန္လုပ္ေပးရတယ္။ MTU ဟာ အနည္းဆံုး 68 octets ရွိဘို႕ေတာ့လုိတယ္။ ဒါက အေသးဆံုး datagram တစ္ခုမွာပါ၀င္မယ့္ IP header အတြက္ 60 octets နဲ႕ အနည္းဆံုး data ပမာဏ 8 octets အတြက္ပါ။
          Fragment မလုပ္ထားတဲ့ datagram တစ္ခုရဲ႕ fragment information field ဟာ 0 ေတြဘဲျဖစ္တယ္။ ဆိုလုိတာက more fragments flag bit ကလည္း 0 fragment offset field ကလည္း 0 ဘဲေပါ့။ datagram တစ္ခုကို fragment လုပ္ဘုိ႕ဆိုရင္
1.    Fragmentation လုပ္ခြင့္ျပဳမျပဳဆိုတာသိဘုိ႕ DF flag bit ကို ၾကည့္ရတယ္။ DF flag bit က 1 ျဖစ္ရင္ လုပ္ခြင့္မျပဳဘူးဆိုတဲ့သေဘာဘဲ။ fragment မလုပ္ရင္လည္း ပို႕လို႕ကမရဘူး။ ဒီေတာ့ အဲဒီ datagram ကုိ discard လုပ္ျပီး sender ဆီကို ICMP error massage ျပန္ပို႕လုိက္ရတယ္။
2.    DF flag bit က 0 ဆုိရင္ေတာ့ MTU size ေပၚမူတည္ျပီး data ကို ႏွစ္ပိုင္း သို႕မဟုတ္ လုိသေလာက္ပိုင္းရတယ္။ အသစ္ပိုင္းလုိ္က္တဲ့ data (fragmment) ရဲ႕ length ဟာ 8 octets ရဲ႕ multiple ေတာ့ျဖစ္ရမယ္။ ေနာက္ဆံုးအပိုင္းကေတာ့ 8 octets ရဲ႕ multiple ျဖစ္ခ်င္မွျဖစ္မယ္။
3.    ပိုင္းလုိ႕ရလာတဲ့ fragment တစ္ခုစီကို IP datagram ရဲ data portion ထဲထည့္ရတယ္။ header portion မွာေတာ့ မူလ datagram ရဲ႕့header ကိုဘဲျပန္ထည့္တယ္။ နည္းနည္းေျပာင္းရတာေလးေတာ့ရွိတယ္။
a.    ေနာက္ဆံုး fragment ကလြဲျပီး က်န္တဲ့ fragment တုိင္းရဲ႕ more fragment flag bit ကို 1 ထားရတယ္။
b.    Fragment offset field မွာေတာ့ ဒီ fragment ေလးရဲ႕ original datagram မွာ ေနရာယူခဲ့တဲ့ location ကိုထည့္ရတယ္။
c.    မူလ datagram မွာ options ပါခဲ့တယ္ဆိုရင္ option type byte ရဲ႕ high order bit ကိုၾကည့္ျပီး ဒီ information ကို fragment အားလံုးမွာထည့္မလား သို႕မဟုတ္ ပထမဆံုး fragment မွာဘဲထည့္မလားဆိုတာကိုဆံုးျဖတ္ရတယ္။ source route options ဆိုရင္ေတာ့ ဒီ information ကို fragment အားလံုးမွာထည့္ရမယ္။
d.    အသစ္ျဖစ္လာတဲ့ datagram ရဲ႕ header length ကို set လုပ္ရတယ္။
e.    အသစ္ျဖစ္လာတဲ့ datagram ရဲ႕ total length ကို set လုပ္ရတယ္။
f.     Header checksum field ကို ျပန္တြက္ရတယ္။
4.    ဒီ fragment ေလးေတြကို datagram အျဖစ္ ေဆာင္ရြက္ျပီးေနာက္မွာ သာမန္ datagram တစ္ခုအျဖစ္ forward လုပ္ပါတယ္။ သက္ဆုိင္ရာ destination ကိုေရာက္ဘို႕အတြက္ router အသီးသီးကိုျဖတ္သြားႏုိင္တယ္။ ျဖတ္သြားရာလမ္းေၾကာင္းမွာရွိတဲ့ network ေတြရဲ႕ MTU ဟာ ဒီ fragment ကိုသယ္ေဆာင္လာတဲ့ datagram length ထက္ငယ္ေနတယ္ဆိုရင္ ထပ္ျပီး fragment လုပ္ႏုိင္ေသးတယ္။ destination host ကိုေရာက္ျပီဆိုရင္ေတာ့ fragment ေတြအားလံုးျပန္ေပါင္းျပီး မူလ datagram တစ္ခုျဖစ္ေအာင္ျပန္ုလုပ္ရတယ္။ destination host ကို ပထမဆံုး fragment တစ္ခုေရာက္လာျပီဆိုတာနဲ႕ storage buffer တစ္ခုသတ္မွတ္ျပီး timer ကို လည္းစတင္လုိက္တယ္။ ေရာက္လာသမွ် fragment ေတြကို buffer ထဲမွာ ထားတယ္။ ေနရာအစီအစဥ္ကေတာ့ fragment offset field ကိုၾကည့္ရတာေပါ့။ အားလံုးစံုရင္ မူလ datagram ျပန္ရျပီေပါ့။ တကယ္လုိ႕မ်ား timer expire ျဖစ္သြားတဲ့အထိ အခ်ိဳ႕ fragment ေတြေရာက္လာဘူးဆိုရင္ေတာ့ ေရာက္ေနတဲ့ fragment ေတြကို discard လုပ္လုိက္ရတဲ့အတြက္ datagram တစ္ခုလံုး lost ျဖစ္သြားပါေရာ။ netstar command ကိုသံုးျပီး fragmentation နဲ႕ပတ္သက္ျပီး အေသးစိတ္ကို ၾကည့္ႏုိင္ပါတယ္။



CHAPTER 4
TRANSPORT LAYER PROTOCOLS
protocol ဆိုတာ a set of rules တဲ့။ ဘယ္လုိ rule ေတြလည္းဆိုေတာ့ လူအခ်င္းခ်င္း၊ ႏုိင္ငံအခ်င္းခ်င္း၊ ကြန္ပ်ဴတာအခ်င္းခ်င္းအဆင္ေျပေျပ ဆက္သြယ္ႏုိင္ေအာင္ ႏွစ္ဘက္စလံုးကလုိက္နာရမယ့္ rule ေတြပါ။ ဥပမာ-A က B ကို phone ေခၚခ်င္ရင္ B ရဲ႕ နံပါတ္ကိုႏွိပ္ျပီးေခၚရပါတယ္။ B က ဖုန္းကိုလက္ခံရပါတယ္။ ဒါဆို သူတုိ႕ ၂ ေယာက္ၾကားမွာ ဆက္သြယ္ေရးလုိင္းတစ္ခုပြင့္သြားပါျပီ။ B ကစျပီး hello လုိ႕ေျပာရပါတယ္။ အဲဒီအခါမွာ A က သူဟာဘယ္သူဘယ္၀ါျဖစ္တယ္ဆိုတာ ေျပာျပီး တစ္လွည့္ဆီစကားေျပာရပါတယ္။ ျပီးရင္ျပီးေၾကာင္းတစ္ဘက္က စ ေျပာရပါတယ္။ က်န္တစ္ဘက္ကလည္း ျပီးဆံုးေၾကာင္းအသိအမွတ္ျပဳရပါတယ္။ ျပီးမွ ဖုန္းကို အသီးသီးခ်ျပီးဆက္သြယ္မႈျပီးဆံုးပါတယ္။ ဒါဟာ လူတစ္ေယာက္နဲ႕တစ္ေယာက္ ဖုန္းနဲ႕ဆက္သြယ္ရမွာ လိုက္နာရမယ့္ rule ေတြပါဘဲ။ ကိုယ္ေျပာခ်င္တာေျပာျပီး ဖုန္းခ်လုိက္ရင္ တစ္ဘက္သူက စိတ္ဆိုးျပီးဖုနး္ခ်သြားတာလား။ ဖုန္းလုိင္းပ်က္သြားတာလား မေ၀ခြဲႏုိင္ျဖစ္တတ္ပါတယ္။
ကြန္ပ်ဴတာအခ်င္းခ်င္းဆက္သြယ္ရာမွာလည္း အဆင္ေျပေအာင္ ႏွစ္ဘက္လံုးက လုိက္နာရမယ့္ rule ေတြရွိပါတယ္။ အဲဒါကို protocol လုိ႕ေခၚတာပါ။ အင္တာနတ္မွာအသံုးျပဳတဲ့ protocol က TCP/IP ပါ။ ဒီ protocol ၂ခုဘဲရွိတာေတာ့မဟုတ္ပါဘူး။ TCP/IP protocol suite  လို႕ေျပာရမွာပါ။ အျခား protocol ေတြလညး္အမ်ားၾကီးရွိပါေသးတယ္။ ဒါေပမယ့္ ဒီ၂ခုက အေျခခံက်ျပီး အေရးအၾကီးဆံုးမို႕အမည္တပ္ျပီးေျပာရတာပါ။

4.1. Ports and Sockets (Sockets အေၾကာင္းေတာ့ေနာက္မွေရးမယ္)
IP (Internet Protocol)ရဲ႕အလုပ္က data ေတြကို မွန္ကန္တဲ့ လမ္းေၾကာင္းေပၚေရာက္ေအာင္ေဆာင္ရြက္ေပးဘုိ႕ပါ။ ဥပမာ- computer A က computer B မွာရွိေနတဲ့ application တစ္ခုထံ data M ကိုပို႕ခ်င္တယ္ဆိုရင္ computer B ဆီကို data M ေရာက္သြားေအာင္ပို႕ေပးဘို႕က IP ရဲ႕တာ၀န္ပါ။ အင္တာနတ္မွာ ဒီေလာက္ computer ေတြအမ်ားၾကီးထဲက B ကိုဘယ္လို identify လုပ္မလည္းဆိုရင္ေတာ့ IP address နဲ႕ identify လုပ္တာပါ။ အင္တာနတ္ခ်ိတ္ဆက္ထားတဲ့ ကြန္ပ်ဴတာတုိင္းမွာ IP address ရွိပါတယ္။ ဒီ IP address ေတြဟာ unique ျဖစ္ပါတယ္။ ဆုိလုိတာက အင္တာနတ္ခ်ိတ္ဆက္ထားတဲ့ ကြန္ပ်ဴတာတစ္လံုးရဲ႕ IP address ဟာ အျခား computer တစ္လံုးရဲ႕ address နဲ႕တူလို႕မရပါဘူး။ Computer B ကိုေရာက္သြားတာနဲ႕ IP ရဲ႕တာ၀န္ျပီးဆံုးပါတယ္။
ဒါေပမယ့္ computer B ဟာ ultimate destination မဟုတ္ေသးပါဘူး။ computer B မွာ application ေတြအမ်ားၾကီးရွိပါေသးတယ္။ အဲဒီ application ေတြထဲမွာမွ A ကပို႕ခ်င္တဲ့ application ဆီကုိ ေရာက္ေအာင္ ေဆာင္ရြက္ေပးဘုိ႕လုိပါေသးတယ္။ အဲဒါကို တာ၀န္ယူရတဲ့ protocol က TCP (Transmission Control Protocol) ပါ။ ဒီေလာက္ application ေတြအမ်ားၾကီးထဲက A ပို႕ခ်င္တဲ့ application ကို အျခား application ေတြနဲ႕ဘယ္လုိခြဲျခားသလဲဆုိေတာ့ port numberနဲ႕ခြဲျခားတာပါ။ application တစ္ခုခ်င္းဆီမွာ port number ေတြေပးထားပါတယ္။

4.1.1. Ports
Port number ဆိုတာ 16 bits ရွိတဲ့ integer value တစ္ခုပါ။ port ၂မ်ိဳးရွိတယ္။ Well-known port နဲ႕ Ephemeral ပါ။ Well-known port number ေတြဟာ ၁ ကေန ၁၀၂၃ ထိရွိပါတယ္။ server အမ်ားစုက port တစ္ခုသာလိုေပမယ့္ အခ်ိဳ႕ server ေတြကေတာ့ port 2 ခုသံုးေလ့ရွိပါတယ္။ ဥပမာ- BOOTP server ဆိုရင္ port number 67 and 68 ကိုသံုးတယ္။ FTP server ဆိုရင္ port number 20 and 21 ကိုသံုးတယ္။ well-known port ေတြကို Internet Assigned Number Authority (IANA) က သတ္မွတ္ေပးျပီး အဲဒီအဖြဲ႕ကဘဲ control လုပ္တယ္။
Ephemeral port number ေတြကေတာ့ ၁၀၂၃ ရဲ႕အထက္က number ေတြေပါ့။ ၁၀၂၄ ကေန ၆၅၅၃၅ ထိရွိတယ္။ Ephemeral port ေတြကိုေတာ့ IANA က control လုပ္တာမဟုတ္ဘူး။

4.1.2. Sockets (ေနာက္မွေရးပါမယ္။)

4.2. User Datagram Protocol (UDP)
Transport layer မွာ အလုပ္လုပ္တဲ့ protocol ၂ခု ကေတာ့ TCP နဲ႕ UDP ပါ။ TCP ကို အင္တာနတ္မွာသံုးျပီး UDP ကိုေတာ့ LAN မွာသံုးေလ့ရွိတယ္။ LAN မွာ TCP လည္းသံုးလုိ႕ရပါတယ္။ ကြာျခားခ်က္ကေတာ့ TCP က reliable ျဖစ္တယ္။ UDP ကေတာ့ unreliable ေပါ့။ UDP datagram ေတြကိုပို႕တဲ့အခါ IP datagram ရဲ႕ data portion မွာထည့္ျပီးပို႕တယ္။ transmission လုပ္တဲ့အခါ IP datagram ေတြကို fragment လုပ္ျပီးပို႕ရေလ့ရွိတယ္။ ပို႕ခ်င္တဲ့ IP datagram က ျဖတ္သြားရမယ့္ network ရဲ႕ MTU (Maximum Trasfer Unit) ထက္ပိုေနရင္ေပါ့။ fragment လုပ္တယ္ဆိုတာ datagram ကို အပိုင္းေလးေတြပိုင္းလုိက္တာပါ။ လက္ခံရရွိတဲ့ စက္မွာရွိတဲ့ IP က reassemble (မူလ datagram အတုိင္းျဖစ္ေအာင္) ျပန္လုပ္ေပးရတယ္။ ျပီးမွ သူ႕အထက္ (Transport Layer)မွာရွိတဲ့ UDP ဆီကိုပို႕ေပးရတယ္။

4.2.1. UDP datagram format
UDP datagram ရဲ႕ header မွာ field က ၄ ခုရွိတယ္။ field တစ္ခုကို 2-byte ႏႈန္းနဲ႕ စုစုေပါင္း 8-byte ေပါ့။ ပထမ field က Source Port တဲ့။ ဒီ field မွာ sending process (application) ရဲ႕ port number ထည့္ရတယ္။ ဒါမွ reply ျပန္တဲ့အခါ ဘယ္ port ကိုျပန္ရမယ္ဆိုတာသိမွာေပါ့။ စာေရးတဲ့အခါ ပို႕ခ်င္တဲ့လိပ္စာသာမက ပို႕တဲ့သူရဲ႕လိပ္စာကိုပါထည့္ေပးေလ့ရွိတဲ့သေဘာေပါ့။ ေနာက္တစ္ခုက  Destination Port ပါ။ ဒီ filed ထဲမွာေတာ့ ကိုပို႕ခ်င္တဲ့ destination process ရဲ႕ port number ကိုထည့္ေပးရတယ္။ ေနာက္တစ္ခုက Length filed။ UDP datagram ရဲ႕ length ကိုထည့္ေပးရတယ္။ data ေရာ header ေရာ ၂ခုလံုးရဲ႕ length ေပါ့။ ေနာက္တစ္ခုက checksum field။ pseudo-header, UDP header နဲ႕ UDP data ေတြရဲ႕one’s complement sum ကို one’s complement လုပ္ထားတဲ့ 16-bit ရွိတဲ့ number တစ္ခုပါ။
Pseudo-header မွာ source and destination IP address, protocol and UDP length ေတြပါတယ္။ Checksum တြက္တဲ့အခါသာ pseudo-header ကိုထည့္တြက္ေပမယ့္ တကယ္တမ္းပို႕တဲ့အခါ သူ႕ကိုထည့္မပို႕ဘူး။
          UDP ေရာ IP ပါ delivery, flow-control, error recovery ေတြကို guarantee မေပးႏုိင္ဘူး။  ဒါေၾကာင့္ application ေတြမွာ ဒါေတြထည့္ေရးေပးထားရတယ္။ TCP ကေတာ့ ဒါေတြကို guarantee ေပးႏုိင္တယ္။ ဒါေၾကာင့္ TCP ကိုသံုးတဲ့ application ေတြအတြက္ application programmer ေတြဟာ flow-control, error recovery ေတြကိုထည့္ေရးေပးစရာမလုိလို႕ သက္သာမႈရေစတယ္။ ေျပာရရင္ UDP and IP က unreliable ပါ။ TCP ကေတာ့ reliable ျဖစ္တယ္။ ဒါေၾကာင့္ TCP implementation ကပိုရႈပ္ေထြးတယ္။ သူက reliable ျဖစ္ေအာင္ function ေတြအမ်ားၾကီးထပ္ထည့္ေပးရတာဆိုေတာ့ေလ။

4.2.2. UDP application programming interface
          UDP ကို အသံုးျပဳတဲ့ application ေတြကေတာ့
·         Trivial File Transfer Protocol (TFTP)
·         Domain Name System name server
·         Remote Procedure Call (RPC) (Network File System ကအသံုးျပဳတာ)
·         Simple Network Management Protocol (SNMP)
·         Lightweight Directory Access Protocol (LDAP)


4.3. Transmission Control Protocol (TCP)
        TCP က UDP ထက္ facility ပိုမ်ားတယ္။ UDP မွာမပါတဲ့ error recovery, flow control နဲ႕ reliability ေတြေပးႏုိင္တယ္။ TCP ဟာ connection-oriented protocol ျဖစ္တယ္။ UDP ကေတာ့ connectionless ေပါ့။ Telnet တုိ႕ FTP တုိ႕ဟာ TCP ကိုအသံုးျပဳတယ္။

4.3.1. TCP concept
        TCP ရဲ႕မူလရည္ရြယ္ခ်က္က process ၂ခုၾကား reliable ျဖစ္တဲ့ connection တစ္ခုကို တည္ေဆာက္ေပးႏုိင္ဘုိ႕႔ပါ။ သူလုပ္ေပးတာေတြက
Stream data transfer:        TCP ဟာ data ေတြကို ပို႕တဲ့အခါ contiguous stream of bytes အျဖစ္နဲ႕ပို႕ေပးတယ္။ application အေနနဲ႕ data ေတြကို block ေတြ datagram ေတြျဖစ္ေအာင္ ပို္င္းေပးဘုိ႕မလိုေတာ့ဘူး။  TCP ကဘဲ data ေတြကို TCP segmet ေလးေတြအျဖစ္ လုပ္ေပးတယ္။ အဲဒီ segment ေလးေတြကို lower layer (Network layer) မွာရွိတဲ့ IP layer ကိုပို႕ေပးတယ္။ data ေတြကို segment ေတြျဖစ္ေအာင္ဘယ္လိုပိုင္းမလဲဆိုတာကို TCP ကသူ႕ဘာသာဆံုးျဖတ္တယ္။ (ဆက္ရန္)
          

No comments:

Post a Comment