អាថ៌កំបាំងសំខាន់ៗនៃការតភ្ជាប់ TCP របស់ Network Packet Broker៖ បានបង្ហាញឱ្យឃើញពីតម្រូវការសម្រាប់ការចាប់ដៃគ្នាបីដង

ការដំឡើងការតភ្ជាប់ TCP
នៅពេលដែលយើងរុករកគេហទំព័រ ផ្ញើអ៊ីមែល ឬលេងហ្គេមអនឡាញ ជារឿយៗយើងមិនគិតអំពីការតភ្ជាប់បណ្តាញដ៏ស្មុគស្មាញនៅពីក្រោយវាទេ។ ទោះជាយ៉ាងណាក៏ដោយ វាគឺជាជំហានតូចៗទាំងនេះដែលធានាបាននូវការទំនាក់ទំនងដែលមានស្ថេរភាពរវាងយើង និងម៉ាស៊ីនមេ។ ជំហានសំខាន់បំផុតមួយគឺការដំឡើងការតភ្ជាប់ TCP ហើយស្នូលនៃជំហាននេះគឺការចាប់ដៃគ្នាបីផ្លូវ។

អត្ថបទនេះនឹងពិភាក្សាលម្អិតអំពីគោលការណ៍ ដំណើរការ និងសារៈសំខាន់នៃការចាប់ដៃបីផ្លូវ។ មួយជំហានម្តងៗ យើងនឹងពន្យល់ពីមូលហេតុដែលការចាប់ដៃបីផ្លូវគឺចាំបាច់ របៀបដែលវាធានាបាននូវស្ថេរភាព និងភាពជឿជាក់នៃការតភ្ជាប់ និងសារៈសំខាន់របស់វាសម្រាប់ការផ្ទេរទិន្នន័យ។ ជាមួយនឹងការយល់ដឹងកាន់តែស៊ីជម្រៅអំពីការចាប់ដៃបីផ្លូវ យើងនឹងទទួលបានការយល់ដឹងកាន់តែច្បាស់អំពីយន្តការមូលដ្ឋាននៃការទំនាក់ទំនងបណ្តាញ និងទស្សនៈកាន់តែច្បាស់អំពីភាពជឿជាក់នៃការតភ្ជាប់ TCP។

ដំណើរការចាប់ដៃបីផ្លូវ TCP និងការផ្លាស់ប្តូរស្ថានភាព
TCP គឺជាពិធីការដឹកជញ្ជូនដែលផ្តោតលើការតភ្ជាប់ ដែលតម្រូវឱ្យមានការបង្កើតការតភ្ជាប់មុនពេលបញ្ជូនទិន្នន័យ។ ដំណើរការបង្កើតការតភ្ជាប់នេះត្រូវបានធ្វើឡើងដោយការចាប់ដៃគ្នាបីផ្លូវ។

 ការចាប់ដៃគ្នាបីផ្លូវ TCP

ចូរយើងពិនិត្យមើលឱ្យកាន់តែច្បាស់អំពីកញ្ចប់ TCP ដែលត្រូវបានផ្ញើនៅក្នុងការតភ្ជាប់នីមួយៗ។

ដំបូងឡើយ ទាំងម៉ាស៊ីនភ្ញៀវ និងម៉ាស៊ីនបម្រើត្រូវបានបិទ។ ដំបូង ម៉ាស៊ីនបម្រើស្តាប់យ៉ាងសកម្មលើច្រកមួយ ហើយស្ថិតនៅក្នុងស្ថានភាព LISTEN ដែលមានន័យថាម៉ាស៊ីនបម្រើត្រូវតែចាប់ផ្តើម។ បន្ទាប់មក ម៉ាស៊ីនភ្ញៀវរួចរាល់ដើម្បីចាប់ផ្តើមចូលប្រើគេហទំព័រ។ វាត្រូវបង្កើតការតភ្ជាប់ជាមួយម៉ាស៊ីនបម្រើ។ ទម្រង់នៃកញ្ចប់តភ្ជាប់ដំបូងមានដូចខាងក្រោម៖

 កញ្ចប់ SYN

នៅពេលដែលអតិថិជនចាប់ផ្តើមការតភ្ជាប់ វាបង្កើតលេខលំដាប់ដំបូងចៃដន្យ (client_isn) ហើយដាក់វានៅក្នុងវាល "លេខលំដាប់" នៃបឋមកថា TCP។ ក្នុងពេលជាមួយគ្នានេះ អតិថិជនកំណត់ទីតាំងទង់ SYN ទៅ 1 ដើម្បីបង្ហាញថាកញ្ចប់ចេញគឺជាកញ្ចប់ SYN។ អតិថិជនបង្ហាញថាវាចង់បង្កើតការតភ្ជាប់ជាមួយម៉ាស៊ីនមេដោយផ្ញើកញ្ចប់ SYN ដំបូងទៅម៉ាស៊ីនមេ។ កញ្ចប់នេះមិនមានទិន្នន័យស្រទាប់កម្មវិធីទេ (នោះគឺទិន្នន័យដែលបានផ្ញើ)។ នៅចំណុចនេះ ស្ថានភាពរបស់អតិថិជនត្រូវបានសម្គាល់ថា SYN-SENT។

កញ្ចប់ SYN+ACK

នៅពេលដែលម៉ាស៊ីនមេទទួលបានកញ្ចប់ SYN ពីអតិថិជន វានឹងចាប់ផ្តើមលេខស៊េរីរបស់វាដោយចៃដន្យ (server_isn) ហើយបន្ទាប់មកដាក់លេខនោះនៅក្នុងវាល "លេខស៊េរី" នៃបឋមកថា TCP។ បន្ទាប់មក ម៉ាស៊ីនមេបញ្ចូល client_isn + 1 នៅក្នុងវាល "លេខទទួលស្គាល់" ហើយកំណត់ប៊ីត SYN និង ACK ទាំង 1។ ជាចុងក្រោយ ម៉ាស៊ីនមេផ្ញើកញ្ចប់ទៅអតិថិជន ដែលមិនមានទិន្នន័យស្រទាប់កម្មវិធី (និងគ្មានទិន្នន័យសម្រាប់ម៉ាស៊ីនមេផ្ញើ)។ នៅពេលនេះ ម៉ាស៊ីនមេស្ថិតនៅក្នុងស្ថានភាព SYN-RCVD។

កញ្ចប់ ACK

នៅពេលដែលអតិថិជនទទួលបានកញ្ចប់ពីម៉ាស៊ីនមេ វាត្រូវអនុវត្តការបង្កើនប្រសិទ្ធភាពដូចខាងក្រោមដើម្បីឆ្លើយតបទៅនឹងកញ្ចប់ឆ្លើយតបចុងក្រោយ៖ ដំបូង អតិថិជនកំណត់ប៊ីត ACK នៃបឋមកថា TCP នៃកញ្ចប់ឆ្លើយតបទៅ 1; ទីពីរ អតិថិជនបញ្ចូលតម្លៃ server_isn + 1 នៅក្នុងវាល "បញ្ជាក់លេខចម្លើយ"; ជាចុងក្រោយ អតិថិជនផ្ញើកញ្ចប់ទៅម៉ាស៊ីនមេ។ កញ្ចប់នេះអាចផ្ទុកទិន្នន័យពីអតិថិជនទៅម៉ាស៊ីនមេ។ នៅពេលបញ្ចប់ប្រតិបត្តិការទាំងនេះ អតិថិជននឹងចូលទៅក្នុងស្ថានភាព ESTABLISHED។

នៅពេលដែលម៉ាស៊ីនបម្រើទទួលបានកញ្ចប់ឆ្លើយតបពីអតិថិជន វាក៏ប្តូរទៅស្ថានភាព ESTABLISHED ផងដែរ។

ដូចដែលអ្នកអាចមើលឃើញពីដំណើរការខាងលើ នៅពេលអនុវត្តការចាប់ដៃបីផ្លូវ ការចាប់ដៃលើកទីបីត្រូវបានអនុញ្ញាតឱ្យផ្ទុកទិន្នន័យ ប៉ុន្តែការចាប់ដៃពីរដំបូងមិនត្រូវបានអនុញ្ញាតឱ្យផ្ទុកទិន្នន័យទេ។ នេះជាសំណួរដែលត្រូវបានសួរជាញឹកញាប់នៅក្នុងការសម្ភាសន៍។ នៅពេលដែលការចាប់ដៃបីផ្លូវត្រូវបានបញ្ចប់ ភាគីទាំងពីរចូលទៅក្នុងស្ថានភាព ESTABLISHED ដែលបង្ហាញថាការតភ្ជាប់ត្រូវបានបង្កើតឡើងដោយជោគជ័យ ដែលនៅពេលនោះអតិថិជន និងម៉ាស៊ីនមេអាចចាប់ផ្តើមផ្ញើទិន្នន័យទៅគ្នាទៅវិញទៅមក។

ហេតុអ្វីបានជាចាប់ដៃបីដង? មិនមែនពីរដងទេ បួនដង?
ចម្លើយទូទៅគឺ "ពីព្រោះការចាប់ដៃគ្នាបីផ្លូវធានានូវសមត្ថភាពក្នុងការទទួល និងផ្ញើ"។ ចម្លើយនេះគឺត្រឹមត្រូវ ប៉ុន្តែវាគ្រាន់តែជាហេតុផលផ្ទៃប៉ុណ្ណោះ មិនបានលើកយកហេតុផលចម្បងមកបង្ហាញនោះទេ។ ខាងក្រោមនេះ ខ្ញុំនឹងវិភាគមូលហេតុនៃការចាប់ដៃគ្នាបីផ្លូវពីទិដ្ឋភាពបីយ៉ាង ដើម្បីធ្វើឲ្យការយល់ដឹងរបស់យើងអំពីបញ្ហានេះកាន់តែស៊ីជម្រៅ។

ការចាប់ដៃបីផ្លូវអាចជៀសវាងការចាប់ផ្តើមនៃការតភ្ជាប់ដដែលៗជាប្រវត្តិសាស្ត្រ (មូលហេតុចម្បង) បានយ៉ាងមានប្រសិទ្ធភាព
ការចាប់ដៃបីផ្លូវធានាថាភាគីទាំងពីរបានទទួលលេខលំដាប់ដំបូងដែលអាចទុកចិត្តបាន។
ការចាប់ដៃគ្នាបីផ្លូវជៀសវាងការខ្ជះខ្ជាយធនធាន។

ហេតុផលទី 1: ជៀសវាងការភ្ជាប់ទិន្នន័យស្ទួនជាប្រវត្តិសាស្ត្រ
សរុបមក មូលហេតុចម្បងនៃការចាប់ដៃគ្នាបីផ្លូវគឺដើម្បីជៀសវាងការភាន់ច្រឡំដែលបណ្តាលមកពីការចាប់ផ្តើមការតភ្ជាប់ស្ទួនចាស់។ នៅក្នុងបរិយាកាសបណ្តាញស្មុគស្មាញ ការបញ្ជូនកញ្ចប់ទិន្នន័យមិនតែងតែត្រូវបានផ្ញើទៅកាន់ម៉ាស៊ីនគោលដៅស្របតាមពេលវេលាដែលបានកំណត់នោះទេ ហើយកញ្ចប់ទិន្នន័យចាស់អាចមកដល់ម៉ាស៊ីនគោលដៅមុនគេដោយសារតែការកកស្ទះបណ្តាញ និងហេតុផលផ្សេងៗទៀត។ ដើម្បីជៀសវាងបញ្ហានេះ TCP ប្រើការចាប់ដៃគ្នាបីផ្លូវដើម្បីបង្កើតការតភ្ជាប់។

ការចាប់ដៃបីផ្លូវជៀសវាងការតភ្ជាប់ស្ទួនប្រវត្តិសាស្ត្រ

នៅពេលដែលអតិថិជនផ្ញើកញ្ចប់បង្កើតការតភ្ជាប់ SYN ច្រើនជាបន្តបន្ទាប់ ក្នុងស្ថានភាពដូចជាការកកស្ទះបណ្តាញ ចំណុចខាងក្រោមអាចកើតឡើង៖

១- កញ្ចប់ SYN ចាស់ៗមកដល់ម៉ាស៊ីនមេមុនកញ្ចប់ SYN ចុងក្រោយបំផុត។
២- ម៉ាស៊ីនបម្រើនឹងឆ្លើយតបកញ្ចប់ SYN + ACK ទៅកាន់អតិថិជនបន្ទាប់ពីទទួលបានកញ្ចប់ SYN ចាស់។
៣- នៅពេលដែលអតិថិជនទទួលបានកញ្ចប់ SYN + ACK វាកំណត់ថាការតភ្ជាប់គឺជាការតភ្ជាប់ប្រវត្តិសាស្ត្រ (លេខលំដាប់ផុតកំណត់ ឬអស់ពេល) យោងទៅតាមបរិបទរបស់វា ហើយបន្ទាប់មកផ្ញើកញ្ចប់ RST ទៅម៉ាស៊ីនមេដើម្បីបញ្ឈប់ការតភ្ជាប់។

ជាមួយនឹងការតភ្ជាប់ទ្វេភាគី គ្មានវិធីដើម្បីកំណត់ថាតើការតភ្ជាប់បច្ចុប្បន្នជាការតភ្ជាប់ប្រវត្តិសាស្ត្រឬអត់នោះទេ។ ការចាប់ដៃបីភាគីអនុញ្ញាតឱ្យអតិថិជនកំណត់ថាតើការតភ្ជាប់បច្ចុប្បន្នជាការតភ្ជាប់ប្រវត្តិសាស្ត្រឬអត់ដោយផ្អែកលើបរិបទនៅពេលដែលវារួចរាល់ដើម្បីផ្ញើកញ្ចប់ទីបី៖

១- ប្រសិនបើវាជាការតភ្ជាប់ប្រវត្តិសាស្ត្រ (លេខលំដាប់ផុតកំណត់ ឬអស់ពេល) កញ្ចប់ដែលបានផ្ញើដោយការចាប់ដៃលើកទីបី គឺជាកញ្ចប់ RST ដើម្បីបញ្ឈប់ការតភ្ជាប់ប្រវត្តិសាស្ត្រ។
២- ប្រសិនបើវាមិនមែនជាការតភ្ជាប់ប្រវត្តិសាស្ត្រទេ កញ្ចប់ដែលបានផ្ញើជាលើកទីបីគឺជាកញ្ចប់ ACK ហើយភាគីទំនាក់ទំនងទាំងពីរបង្កើតការតភ្ជាប់ដោយជោគជ័យ។

ដូច្នេះ មូលហេតុចម្បងដែល TCP ប្រើការចាប់ដៃបីផ្លូវគឺវាចាប់ផ្តើមការតភ្ជាប់ដើម្បីការពារការតភ្ជាប់ប្រវត្តិសាស្ត្រ។

ហេតុផលទី 2: ដើម្បីធ្វើសមកាលកម្មលេខលំដាប់ដំបូងនៃភាគីទាំងពីរ
ភាគីទាំងសងខាងនៃពិធីការ TCP ត្រូវតែរក្សាលេខលំដាប់ ដែលជាកត្តាសំខាន់ដើម្បីធានាបាននូវការបញ្ជូនដែលអាចទុកចិត្តបាន។ លេខលំដាប់ដើរតួនាទីយ៉ាងសំខាន់នៅក្នុងការតភ្ជាប់ TCP។ ពួកវាធ្វើដូចខាងក្រោម៖

ឧបករណ៍ទទួលអាចលុបបំបាត់ទិន្នន័យស្ទួន និងធានាបាននូវភាពត្រឹមត្រូវនៃទិន្នន័យ។

ឧបករណ៍ទទួលអាចទទួលកញ្ចប់តាមលំដាប់លេខរៀង ដើម្បីធានាបាននូវភាពសុចរិតនៃទិន្នន័យ។

● លេខលំដាប់អាចកំណត់អត្តសញ្ញាណកញ្ចប់ទិន្នន័យដែលត្រូវបានទទួលដោយភាគីម្ខាងទៀត ដែលអាចឱ្យមានការបញ្ជូនទិន្នន័យដែលអាចទុកចិត្តបាន។

ដូច្នេះ នៅពេលបង្កើតការតភ្ជាប់ TCP អតិថិជនផ្ញើកញ្ចប់ SYN ជាមួយលេខលំដាប់ដំបូង ហើយតម្រូវឱ្យម៉ាស៊ីនមេឆ្លើយតបជាមួយកញ្ចប់ ACK ដែលបង្ហាញពីការទទួលកញ្ចប់ SYN របស់អតិថិជនដោយជោគជ័យ។ បន្ទាប់មក ម៉ាស៊ីនមេផ្ញើកញ្ចប់ SYN ជាមួយលេខលំដាប់ដំបូងទៅអតិថិជន ហើយរង់ចាំអតិថិជនឆ្លើយតប ម្តងហើយម្តងទៀត ដើម្បីធានាថាលេខលំដាប់ដំបូងត្រូវបានធ្វើសមកាលកម្មដោយភាពជឿជាក់។

ធ្វើសមកាលកម្មលេខស៊េរីដំបូងនៃភាគីទាំងពីរ

ទោះបីជាការចាប់ដៃគ្នាបួនផ្លូវក៏អាចធ្វើទៅបានដើម្បីធ្វើសមកាលកម្មលេខលំដាប់ដំបូងនៃភាគីទាំងពីរដោយភាពជឿជាក់ក៏ដោយ ជំហានទីពីរ និងទីបីអាចត្រូវបានផ្សំទៅជាជំហានតែមួយ ដែលនាំឱ្យមានការចាប់ដៃគ្នាបីផ្លូវ។ ទោះជាយ៉ាងណាក៏ដោយ ការចាប់ដៃគ្នាទាំងពីរអាចធានាបានតែលេខលំដាប់ដំបូងនៃភាគីមួយត្រូវបានទទួលដោយជោគជ័យដោយភាគីមួយទៀត ប៉ុន្តែមិនមានការធានាថាលេខលំដាប់ដំបូងនៃភាគីទាំងពីរអាចត្រូវបានបញ្ជាក់នោះទេ។ ដូច្នេះ ការចាប់ដៃគ្នាបីផ្លូវគឺជាជម្រើសដ៏ល្អបំផុតដើម្បីធានាបាននូវស្ថេរភាព និងភាពជឿជាក់នៃការតភ្ជាប់ TCP។

ហេតុផលទី 3: ជៀសវាងការខ្ជះខ្ជាយធនធាន
ប្រសិនបើមានតែ "ការចាប់ដៃគ្នាពីរដង" នៅពេលដែលសំណើ SYN របស់អតិថិជនត្រូវបានរារាំងនៅក្នុងបណ្តាញ អតិថិជនមិនអាចទទួលបានកញ្ចប់ ACK ដែលផ្ញើដោយម៉ាស៊ីនមេបានទេ ដូច្នេះ SYN នឹងត្រូវបានផ្ញើឡើងវិញ។ ទោះជាយ៉ាងណាក៏ដោយ ដោយសារតែមិនមានការចាប់ដៃគ្នាលើកទីបី ម៉ាស៊ីនមេមិនអាចកំណត់ថាតើអតិថិជនបានទទួលការទទួលស្គាល់ ACK ដើម្បីបង្កើតការតភ្ជាប់ឬអត់នោះទេ។ ដូច្នេះ ម៉ាស៊ីនមេអាចបង្កើតការតភ្ជាប់បានតែបន្ទាប់ពីទទួលបានសំណើ SYN នីមួយៗប៉ុណ្ណោះ។ នេះនាំឱ្យមានដូចខាងក្រោម៖

ការខ្ជះខ្ជាយធនធាន៖ ប្រសិនបើសំណើ SYN របស់អតិថិជនត្រូវបានរារាំង ដែលបណ្តាលឱ្យមានការបញ្ជូនកញ្ចប់ SYN ច្រើនដងម្តងហើយម្តងទៀត ម៉ាស៊ីនមេនឹងបង្កើតការតភ្ជាប់មិនត្រឹមត្រូវច្រើនបន្ទាប់ពីទទួលបានសំណើ។ នេះនាំឱ្យមានការខ្ជះខ្ជាយធនធានម៉ាស៊ីនមេដែលមិនចាំបាច់។

ការរក្សាទុកសារ៖ ដោយសារតែខ្វះការចាប់ដៃលើកទីបី ម៉ាស៊ីនមេមិនមានវិធីដើម្បីដឹងថាតើម៉ាស៊ីនភ្ញៀវបានទទួលការទទួលស្គាល់ ACK ដើម្បីបង្កើតការតភ្ជាប់បានត្រឹមត្រូវឬអត់នោះទេ។ ជាលទ្ធផល ប្រសិនបើសារជាប់គាំងនៅក្នុងបណ្តាញ ម៉ាស៊ីនភ្ញៀវនឹងបន្តផ្ញើសំណើ SYN ម្តងហើយម្តងទៀត ដែលបណ្តាលឱ្យម៉ាស៊ីនបម្រើបង្កើតការតភ្ជាប់ថ្មីជានិច្ច។ នេះនឹងបង្កើនការកកស្ទះបណ្តាញ និងការពន្យារពេល និងប៉ះពាល់អវិជ្ជមានដល់ដំណើរការបណ្តាញទាំងមូល។

ជៀសវាងការខ្ជះខ្ជាយធនធាន

ដូច្នេះ ដើម្បីធានាបាននូវស្ថេរភាព និងភាពជឿជាក់នៃការតភ្ជាប់បណ្តាញ TCP ប្រើប្រាស់ការចាប់ដៃបីផ្លូវ ដើម្បីបង្កើតការតភ្ជាប់ ដើម្បីជៀសវាងការកើតឡើងនៃបញ្ហាទាំងនេះ។

សេចក្តីសង្ខេប
ទីឈ្មួញកណ្តាលកញ្ចប់បណ្តាញការបង្កើតការតភ្ជាប់ TCP ត្រូវបានធ្វើឡើងដោយការចាប់ដៃគ្នាបីផ្លូវ។ ក្នុងអំឡុងពេលចាប់ដៃគ្នាបីផ្លូវ អតិថិជនផ្ញើកញ្ចប់មួយជាមួយទង់ SYN ទៅកាន់ម៉ាស៊ីនមេជាមុនសិន ដែលបង្ហាញថាវាចង់បង្កើតការតភ្ជាប់។ បន្ទាប់ពីទទួលបានសំណើពីអតិថិជន ម៉ាស៊ីនមេឆ្លើយតបកញ្ចប់មួយជាមួយទង់ SYN និង ACK ទៅកាន់អតិថិជន ដែលបង្ហាញថាសំណើភ្ជាប់ត្រូវបានទទួលយក ហើយផ្ញើលេខលំដាប់ដំបូងរបស់វា។ ជាចុងក្រោយ អតិថិជនឆ្លើយតបជាមួយទង់ ACK ទៅកាន់ម៉ាស៊ីនមេដើម្បីបង្ហាញថាការតភ្ជាប់ត្រូវបានបង្កើតឡើងដោយជោគជ័យ។ ដូច្នេះ ភាគីទាំងពីរស្ថិតនៅក្នុងស្ថានភាព ESTABLISHED ហើយអាចចាប់ផ្តើមផ្ញើទិន្នន័យទៅគ្នាទៅវិញទៅមក។

ជាទូទៅ ដំណើរការចាប់ដៃគ្នាបីផ្លូវសម្រាប់ការបង្កើតការតភ្ជាប់ TCP ត្រូវបានរចនាឡើងដើម្បីធានាបាននូវស្ថេរភាព និងភាពជឿជាក់នៃការតភ្ជាប់ ជៀសវាងការភាន់ច្រឡំ និងការខ្ជះខ្ជាយធនធានលើការតភ្ជាប់ប្រវត្តិសាស្ត្រ និងធានាថាភាគីទាំងពីរអាចទទួល និងផ្ញើទិន្នន័យបាន។


ពេលវេលាបង្ហោះ៖ ខែមករា-០៨-២០២៥