TCP ချိတ်ဆက်မှု စနစ်ထည့်သွင်းခြင်း
ကျွန်ုပ်တို့ ဝဘ်ကြည့်ရှုသည့်အခါ၊ အီးမေးလ်ပို့သည့်အခါ သို့မဟုတ် အွန်လိုင်းဂိမ်းကစားသည့်အခါတွင် ၎င်း၏နောက်ကွယ်ရှိ ရှုပ်ထွေးသောကွန်ရက်ချိတ်ဆက်မှုအကြောင်းကို မကြာခဏ မစဉ်းစားမိကြပါ။ သို့သော်၊ ကျွန်ုပ်တို့နှင့် ဆာဗာအကြား တည်ငြိမ်သောဆက်သွယ်မှုကို သေချာစေသည့် ဤသေးငယ်သည်ဟုထင်ရသော ခြေလှမ်းများဖြစ်သည်။ အရေးကြီးဆုံးခြေလှမ်းများထဲမှတစ်ခုမှာ TCP ချိတ်ဆက်မှုတည်ဆောက်ခြင်းဖြစ်ပြီး ၎င်း၏အဓိကအချက်မှာ သုံးလမ်းသွားလက်ဆွဲနှုတ်ဆက်ခြင်းပင်ဖြစ်သည်။
ဤဆောင်းပါးတွင် three-way handshake ၏ မူ၊ လုပ်ငန်းစဉ်နှင့် အရေးပါမှုကို အသေးစိတ်ဆွေးနွေးပါမည်။ three-way handshake အဘယ်ကြောင့် လိုအပ်သည်၊ ၎င်းသည် ချိတ်ဆက်မှုတည်ငြိမ်မှုနှင့် ယုံကြည်စိတ်ချရမှုကို မည်သို့သေချာစေသည်၊ ဒေတာလွှဲပြောင်းမှုအတွက် မည်မျှအရေးကြီးသည်ကို တစ်ဆင့်ချင်းစီ ရှင်းပြပါမည်။ three-way handshake ကို ပိုမိုနက်ရှိုင်းစွာ နားလည်ခြင်းဖြင့် ကွန်ရက်ဆက်သွယ်ရေး၏ အခြေခံယန္တရားများကို ပိုမိုနားလည်လာမည်ဖြစ်ပြီး TCP ချိတ်ဆက်မှုများ၏ ယုံကြည်စိတ်ချရမှုကို ပိုမိုရှင်းလင်းစွာ မြင်တွေ့နိုင်မည်ဖြစ်သည်။
TCP သုံးလမ်းသွား လက်ဆွဲနှုတ်ဆက်ခြင်း လုပ်ငန်းစဉ်နှင့် အခြေအနေ အကူးအပြောင်းများ
TCP သည် ချိတ်ဆက်မှုကိုဦးတည်သော သယ်ယူပို့ဆောင်ရေးပရိုတိုကောတစ်ခုဖြစ်ပြီး ဒေတာပို့လွှတ်ခြင်းမပြုမီ ချိတ်ဆက်မှုတည်ဆောက်ရန် လိုအပ်ပါသည်။ ဤချိတ်ဆက်မှုတည်ဆောက်ခြင်းလုပ်ငန်းစဉ်ကို သုံးလမ်းသွားလက်ဆွဲခြင်းဖြင့် လုပ်ဆောင်သည်။
ချိတ်ဆက်မှုတစ်ခုစီတွင် ပို့လွှတ်သော TCP packets များကို အနီးကပ်ကြည့်ကြပါစို့။
အစပိုင်းမှာတော့ client နဲ့ server နှစ်ခုစလုံး CLOSED ဖြစ်နေပါတယ်။ ပထမဦးစွာ server က port တစ်ခုကို actively listens လုပ်ပြီး LISTEN state မှာ ရှိနေပါတယ်၊ ဆိုလိုတာက server ကို start လုပ်ရပါမယ်။ ပြီးရင် client က webpage ကို access လုပ်ဖို့ အဆင်သင့်ဖြစ်ပါပြီ။ server နဲ့ connection တစ်ခု တည်ဆောက်ဖို့ လိုအပ်ပါတယ်။ ပထမဆုံး connection packet ရဲ့ format က အောက်ပါအတိုင်းပါ။
client တစ်ခုက ချိတ်ဆက်မှုတစ်ခုစတင်တဲ့အခါ၊ ၎င်းသည် ကျပန်း ကနဦး sequence number (client_isn) တစ်ခုကို ထုတ်ပေးပြီး TCP header ရဲ့ "Sequence number" field မှာ ထည့်ပါတယ်။ တစ်ချိန်တည်းမှာပဲ၊ client က ထွက်သွားတဲ့ packet ဟာ SYN packet ဖြစ်ကြောင်း ဖော်ပြဖို့ SYN flag position ကို 1 လို့ သတ်မှတ်ပါတယ်။ client က ပထမဆုံး SYN packet ကို server ဆီ ပို့ခြင်းအားဖြင့် server နဲ့ ချိတ်ဆက်မှုတစ်ခု တည်ဆောက်လိုကြောင်း ဖော်ပြပါတယ်။ ဒီ packet မှာ application layer data (ဆိုလိုတာက ပို့လိုက်တဲ့ data) မပါဝင်ပါဘူး။ ဒီအချိန်မှာ client ရဲ့ status ကို SYN-SENT အဖြစ် မှတ်သားထားပါတယ်။
server တစ်ခုသည် client ထံမှ SYN packet တစ်ခုကို လက်ခံရရှိသောအခါ၊ ၎င်း၏ကိုယ်ပိုင် serial number (server_isn) ကို ကျပန်း initialize လုပ်ပြီးနောက် ထိုနံပါတ်ကို TCP header ၏ "Serial number" field တွင်ထည့်ပါ။ ထို့နောက် server သည် "Acknowledgement number" field တွင် client_isn + 1 ကိုရိုက်ထည့်ပြီး SYN နှင့် ACK bits နှစ်ခုလုံးကို 1 သို့သတ်မှတ်သည်။ နောက်ဆုံးတွင် server သည် packet ကို client ထံပေးပို့သည်၊ ၎င်းတွင် application-layer data မပါဝင်ပါ (နှင့် server ပို့ရန် data မပါဝင်ပါ)။ ဤအချိန်တွင် server သည် SYN-RCVD state တွင်ရှိသည်။
client သည် server မှ packet ကိုလက်ခံရရှိပြီးသည်နှင့် နောက်ဆုံး reply packet ကိုတုံ့ပြန်ရန် အောက်ပါ optimization များကိုလုပ်ဆောင်ရန် လိုအပ်သည်- ပထမဦးစွာ client သည် reply packet ၏ TCP header ၏ ACK bit ကို 1 သို့သတ်မှတ်သည်။ ဒုတိယအနေဖြင့် client သည် "Confirm answer number" field တွင် server_isn + 1 တန်ဖိုးကိုထည့်သွင်းသည်။ နောက်ဆုံးတွင် client သည် packet ကို server သို့ပေးပို့သည်။ ဤ packet သည် client မှ server သို့ data များကိုသယ်ဆောင်နိုင်သည်။ ဤလုပ်ဆောင်ချက်များပြီးဆုံးသည်နှင့် client သည် ESTABLISHED state သို့ဝင်ရောက်လိမ့်မည်။
server သည် client ထံမှ reply packet ကို လက်ခံရရှိသည်နှင့် ESTABLISHED state သို့လည်း ပြောင်းသွားပါသည်။
အထက်ပါ လုပ်ငန်းစဉ်မှ မြင်တွေ့ရသည့်အတိုင်း three-way handshake ပြုလုပ်သည့်အခါ တတိယအကြိမ် handshake သည် data သယ်ဆောင်ခွင့်ပြုသော်လည်း ပထမနှစ်ကြိမ် handshake မှာ မရှိပါ။ ဤမေးခွန်းသည် အင်တာဗျူးများတွင် မကြာခဏ မေးလေ့ရှိသော မေးခွန်းတစ်ခုဖြစ်သည်။ three-way handshake ပြီးဆုံးသွားသည်နှင့် နှစ်ဖက်စလုံးသည် ESTABLISHED state သို့ ဝင်ရောက်ပြီး ချိတ်ဆက်မှု အောင်မြင်စွာ တည်ဆောက်ပြီးဖြစ်ကြောင်း ညွှန်ပြပြီး client နှင့် server တို့သည် အပြန်အလှန် data ပေးပို့နိုင်ပြီဖြစ်သည်။
ဘာလို့ သုံးကြိမ် လက်ဆွဲနှုတ်ဆက်ရတာလဲ။ နှစ်ကြိမ်မဟုတ်ဘူး၊ လေးကြိမ်လား။
အများသိကြတဲ့ အဖြေကတော့ "သုံးလမ်းသွား လက်ဆွဲနှုတ်ဆက်ခြင်းက လက်ခံပေးပို့နိုင်စွမ်းကို အာမခံပေးလို့ပါပဲ" ပါ။ ဒီအဖြေက မှန်ကန်ပေမယ့် အပေါ်ယံအကြောင်းပြချက်သာဖြစ်ပြီး အဓိကအကြောင်းရင်းကို တင်ပြထားတာ မဟုတ်ပါဘူး။ နောက်တစ်ခုမှာတော့ ဒီပြဿနာအပေါ် ကျွန်ုပ်တို့ရဲ့ နားလည်မှုကို ပိုမိုနက်ရှိုင်းစေဖို့အတွက် ရှုထောင့်သုံးခုကနေ သုံးလမ်းသွား လက်ဆွဲနှုတ်ဆက်ခြင်းရဲ့ အကြောင်းရင်းတွေကို ခွဲခြမ်းစိတ်ဖြာပါမယ်။
သုံးလမ်းသွား လက်ဆွဲနှုတ်ဆက်ခြင်းသည် သမိုင်းကြောင်းအရ ထပ်ခါတလဲလဲ ချိတ်ဆက်မှုများ (အဓိကအကြောင်းရင်း) ကို ထိရောက်စွာ ရှောင်ရှားနိုင်သည်။
သုံးလမ်းသွား လက်ဆွဲနှုတ်ဆက်ခြင်းက နှစ်ဖက်စလုံးသည် ယုံကြည်စိတ်ချရသော ကနဦး အစီအစဉ်နံပါတ်တစ်ခုကို လက်ခံရရှိကြောင်း အာမခံပါသည်။
သုံးပွင့်ဆိုင်လက်ဆွဲနှုတ်ဆက်ခြင်းသည် အရင်းအမြစ်များ အလဟဿဖြစ်ခြင်းကို ရှောင်ရှားသည်။
အကြောင်းရင်း ၁: သမိုင်းဝင် ထပ်တူချိတ်ဆက်မှုများကို ရှောင်ရှားပါ
အကျဉ်းချုပ်ပြောရရင် three-way handshake ရဲ့ အဓိကအကြောင်းရင်းကတော့ connection initialization အဟောင်းကြောင့် ဖြစ်ပေါ်လာတဲ့ ရှုပ်ထွေးမှုတွေကို ရှောင်ရှားဖို့ပါ။ ရှုပ်ထွေးတဲ့ network environment မှာ data packet တွေ ပို့လွှတ်တာကို သတ်မှတ်ထားတဲ့ အချိန်အတိုင်း destination host ကို အမြဲတမ်း မပို့ပါဘူး။ network congestion နဲ့ တခြားအကြောင်းတွေကြောင့် data packet အဟောင်းတွေဟာ destination host ကို အရင်ရောက်နိုင်ပါတယ်။ ဒီလိုမဖြစ်အောင် TCP က three-way handshake ကို အသုံးပြုပြီး connection တည်ဆောက်ပါတယ်။
ကွန်ရက်ပိတ်ဆို့မှုကဲ့သို့သော အခြေအနေများတွင် client သည် SYN ချိတ်ဆက်မှုတည်ဆောက်ရေး packet များစွာကို ဆက်တိုက်ပေးပို့သောအခါ အောက်ပါတို့ဖြစ်ပေါ်နိုင်သည်။
၁- SYN packets အဟောင်းများသည် နောက်ဆုံးပေါ် SYN packets များထက် ဆာဗာသို့ ရောက်ရှိသည်။
၂- SYN packet အဟောင်းကို လက်ခံရရှိပြီးနောက် server သည် client သို့ SYN + ACK packet ကို reply ပြန်လိမ့်မည်။
၃- client သည် SYN + ACK packet ကိုလက်ခံရရှိသောအခါ၊ ၎င်းသည် ၎င်း၏ကိုယ်ပိုင်အခြေအနေအရ ချိတ်ဆက်မှုသည် သမိုင်းဝင်ချိတ်ဆက်မှု (sequence number သက်တမ်းကုန်ဆုံးသွားခြင်း သို့မဟုတ် အချိန်ကုန်သွားခြင်း) ဖြစ်ကြောင်း ဆုံးဖြတ်ပြီးနောက် ချိတ်ဆက်မှုကို ရပ်တန့်ရန် RST packet ကို server သို့ပေးပို့သည်။
two-handshake connection ဖြင့် လက်ရှိ connection သည် historical connection ဟုတ်မဟုတ် ဆုံးဖြတ်ရန် နည်းလမ်းမရှိပါ။ three-way handshake သည် client အား တတိယ packet ကို ပေးပို့ရန် အဆင်သင့်ဖြစ်သည့်အခါ context အပေါ်အခြေခံ၍ လက်ရှိ connection သည် historical connection ဟုတ်မဟုတ် ဆုံးဖြတ်နိုင်စေပါသည်။
၁- ၎င်းသည် သမိုင်းဝင်ချိတ်ဆက်မှုတစ်ခုဖြစ်ပါက (sequence နံပါတ်သက်တမ်းကုန်ဆုံးသွားခြင်း သို့မဟုတ် အချိန်ကုန်သွားခြင်း)၊ တတိယအကြိမ် handshake မှပေးပို့သော packet သည် သမိုင်းဝင်ချိတ်ဆက်မှုကို ရပ်တန့်ရန် RST packet ဖြစ်သည်။
၂- ၎င်းသည် သမိုင်းဝင်ချိတ်ဆက်မှု မဟုတ်ပါက၊ တတိယအကြိမ် ပေးပို့သော packet သည် ACK packet ဖြစ်ပြီး ဆက်သွယ်သည့် နှစ်ဖက်စလုံးသည် ချိတ်ဆက်မှုကို အောင်မြင်စွာ တည်ဆောက်နိုင်မည်ဖြစ်သည်။
ထို့ကြောင့် TCP သည် three-way handshake ကိုအသုံးပြုရသည့် အဓိကအကြောင်းရင်းမှာ သမိုင်းဝင်ချိတ်ဆက်မှုများကို ကာကွယ်ရန် ချိတ်ဆက်မှုကို initialize လုပ်ခြင်းကြောင့်ဖြစ်သည်။
အကြောင်းရင်း ၂: နှစ်ဖက်စလုံးရဲ့ ကနဦး အစီအစဉ်နံပါတ်တွေကို ထပ်တူကျအောင်လုပ်ဖို့
TCP protocol ရဲ့ နှစ်ဖက်စလုံးဟာ sequence number တစ်ခုကို ထိန်းသိမ်းထားရမှာဖြစ်ပြီး၊ ဒါဟာ ယုံကြည်စိတ်ချရတဲ့ transmission ကို သေချာစေဖို့ အဓိကအချက်တစ်ခု ဖြစ်ပါတယ်။ Sequence number တွေဟာ TCP connection တွေမှာ အရေးကြီးတဲ့ အခန်းကဏ္ဍကနေ ပါဝင်ပါတယ်။ ၎င်းတို့ဟာ အောက်ပါတို့ကို လုပ်ဆောင်ပါတယ်-
လက်ခံကိရိယာသည် ထပ်နေသောဒေတာများကို ဖယ်ရှားပြီး ဒေတာ၏တိကျမှုကို သေချာစေနိုင်သည်။
ဒေတာ၏ တည်တံ့မှုကို သေချာစေရန်အတွက် လက်ခံသူသည် အစီအစဉ်နံပါတ်အတိုင်း ပက်ကေ့ခ်ျများကို လက်ခံရရှိနိုင်သည်။
● အစီအစဉ်နံပါတ်သည် တစ်ဖက်လူလက်ခံရရှိသော ဒေတာပက်ကက်ကို ဖော်ထုတ်နိုင်ပြီး ယုံကြည်စိတ်ချရသော ဒေတာထုတ်လွှင့်မှုကို ဖြစ်စေသည်။
ထို့ကြောင့် TCP ချိတ်ဆက်မှုတစ်ခု တည်ဆောက်ပြီးသည်နှင့် client သည် ကနဦး sequence နံပါတ်ပါသော SYN packets များပေးပို့ပြီး client ၏ SYN packet ကို အောင်မြင်စွာလက်ခံရရှိကြောင်းဖော်ပြသည့် ACK packet ဖြင့် ပြန်လည်ဖြေကြားရန် server ကို တောင်းဆိုသည်။ ထို့နောက် server သည် ကနဦး sequence နံပါတ်ပါသော SYN packet ကို client ထံပေးပို့ပြီး ကနဦး sequence နံပါတ်များကို ယုံကြည်စိတ်ချစွာ synchronize လုပ်ကြောင်းသေချာစေရန် client မှ အပြီးအပိုင် ပြန်လည်ဖြေကြားရန် စောင့်ဆိုင်းသည်။
နှစ်ဖက်စလုံးရဲ့ ကနဦး sequence number တွေကို ယုံကြည်စိတ်ချစွာ synchronize လုပ်ဖို့အတွက် four-way handshake လည်းဖြစ်နိုင်ပေမယ့် ဒုတိယနဲ့ တတိယအဆင့်တွေကို တစ်ဆင့်တည်းအဖြစ် ပေါင်းစပ်ပြီး three-way handshake ကို ရရှိစေပါတယ်။ ဒါပေမယ့် handshake နှစ်ခုက တစ်ဖက်ရဲ့ ကနဦး sequence number ကို တစ်ဖက်က အောင်မြင်စွာလက်ခံရရှိမယ်လို့သာ အာမခံနိုင်ပေမယ့် နှစ်ဖက်စလုံးရဲ့ ကနဦး sequence number ကို အတည်ပြုနိုင်မယ်လို့တော့ အာမမခံနိုင်ပါဘူး။ ဒါကြောင့် TCP ချိတ်ဆက်မှုတွေရဲ့ တည်ငြိမ်မှုနဲ့ ယုံကြည်စိတ်ချရမှုကို သေချာစေဖို့ three-way handshake ဟာ အကောင်းဆုံးရွေးချယ်မှုပါပဲ။
အကြောင်းရင်း ၃: အရင်းအမြစ်များကို အလဟဿ မဖြုန်းတီးပါနှင့်
"two-handshake" သာရှိပါက၊ client SYN request ကို network တွင်ပိတ်ဆို့ထားသောအခါ၊ client သည် server မှပေးပို့သော ACK packet ကိုလက်ခံရရှိနိုင်မည်မဟုတ်ပါ၊ ထို့ကြောင့် SYN ကိုပြန်လည်ပေးပို့ပါမည်။ သို့သော်၊ တတိယ handshake မရှိသောကြောင့်၊ client သည် connection တည်ဆောက်ရန် ACK acknowledgement ကိုလက်ခံရရှိခြင်းရှိမရှိ server သည်ဆုံးဖြတ်နိုင်မည်မဟုတ်ပါ။ ထို့ကြောင့်၊ server သည် SYN request တစ်ခုစီကိုလက်ခံရရှိပြီးနောက်တွင်သာ connection ကိုကြိုတင်တည်ဆောက်နိုင်သည်။ ၎င်းသည် အောက်ပါတို့ကိုဖြစ်ပေါ်စေသည်-
အရင်းအမြစ်များ အလဟဿဖြစ်ခြင်း- client ၏ SYN တောင်းဆိုမှုကို ပိတ်ဆို့ထားပြီး SYN packet များစွာကို ထပ်ခါတလဲလဲ ပို့လွှတ်ခြင်း ဖြစ်ပေါ်ပါက server သည် တောင်းဆိုမှုကို လက်ခံရရှိပြီးနောက် redundant invalid connection များစွာကို တည်ဆောက်မည်ဖြစ်သည်။ ၎င်းသည် server အရင်းအမြစ်များကို မလိုအပ်ဘဲ အလဟဿဖြစ်စေသည်။
မက်ဆေ့ချ်ထိန်းသိမ်းမှု- တတိယအကြိမ်လက်ဆွဲနှုတ်ဆက်ခြင်းမရှိသောကြောင့်၊ client သည် ချိတ်ဆက်မှုကိုတည်ဆောက်ရန် ACK အသိအမှတ်ပြုချက်ကို မှန်ကန်စွာရရှိခဲ့ခြင်းရှိမရှိ server သည် မသိနိုင်ပါ။ ရလဒ်အနေဖြင့်၊ မက်ဆေ့ချ်များသည် network တွင်ရပ်တန့်နေပါက client သည် SYN တောင်းဆိုမှုများကို ထပ်ခါတလဲလဲပေးပို့နေမည်ဖြစ်ပြီး server သည် ချိတ်ဆက်မှုအသစ်များကို အဆက်မပြတ်တည်ဆောက်နေစေမည်ဖြစ်သည်။ ၎င်းသည် network ပိတ်ဆို့မှုနှင့် နှောင့်နှေးမှုကို တိုးမြင့်စေပြီး network စွမ်းဆောင်ရည်တစ်ခုလုံးကို ဆိုးကျိုးသက်ရောက်စေမည်ဖြစ်သည်။
ထို့ကြောင့် ကွန်ရက်ချိတ်ဆက်မှု၏ တည်ငြိမ်မှုနှင့် ယုံကြည်စိတ်ချရမှုကို သေချာစေရန်အတွက် TCP သည် ဤပြဿနာများမဖြစ်ပွားစေရန် ချိတ်ဆက်မှုကို တည်ဆောက်ရန် three-way handshake ကို အသုံးပြုသည်။
အနှစ်ချုပ်
ထိုကွန်ရက်ပက်ကက် ပွဲစားTCP ချိတ်ဆက်မှုတည်ဆောက်ခြင်းကို three-way handshake ဖြင့် ပြုလုပ်သည်။ three-way handshake လုပ်နေစဉ်အတွင်း client သည် SYN flag ပါသော packet တစ်ခုကို server သို့ ဦးစွာပေးပို့ပြီး ၎င်းသည် ချိတ်ဆက်မှုတစ်ခု တည်ဆောက်လိုကြောင်း ဖော်ပြသည်။ client ထံမှ request ကိုလက်ခံရရှိပြီးနောက် server သည် client ထံ SYN နှင့် ACK flag များပါသော packet တစ်ခုကို reply လုပ်ကာ ချိတ်ဆက်မှု request ကိုလက်ခံကြောင်း ဖော်ပြပြီး ၎င်း၏ကိုယ်ပိုင် initial sequence number ကိုပေးပို့သည်။ နောက်ဆုံးတွင် client သည် connection အောင်မြင်စွာတည်ဆောက်ပြီးဖြစ်ကြောင်း ဖော်ပြရန် server သို့ ACK flag ဖြင့် reply လုပ်သည်။ ထို့ကြောင့် နှစ်ဖက်စလုံးသည် ESTABLISHED state တွင်ရှိနေပြီး အပြန်အလှန် data များပေးပို့နိုင်ပါပြီ။
ယေဘုယျအားဖြင့် TCP ချိတ်ဆက်မှုတည်ဆောက်ရန်အတွက် three-way handshake လုပ်ငန်းစဉ်ကို ချိတ်ဆက်မှုတည်ငြိမ်မှုနှင့် ယုံကြည်စိတ်ချရမှုကို သေချာစေရန်၊ သမိုင်းဝင်ချိတ်ဆက်မှုများကြောင့် ရှုပ်ထွေးမှုနှင့် အရင်းအမြစ်များ အလဟဿဖြစ်မှုကို ရှောင်ရှားရန်နှင့် နှစ်ဖက်စလုံးသည် ဒေတာများကို လက်ခံပေးပို့နိုင်ကြောင်း သေချာစေရန် ဒီဇိုင်းထုတ်ထားသည်။
ပို့စ်တင်ချိန်: ၂၀၂၅ ခုနှစ်၊ ဇန်နဝါရီလ ၈ ရက်






