دست دادن سه طرفه یک ارتباط قابل اعتماد بین مشتری و سرور برقرار می کند و برای ارتباطات آنلاین حیاتی است. در اینجا نحوه عملکرد آن آمده است.
در سالهای اولیه اینترنت، پروتکل اینترنت (IP) تنها پروتکلی بود که افراد برای اتصال به اینترنت از آن استفاده می کردند. مشکل IP این بود که میتوانستید پیامی بفرستید و مطمئن نباشید که گیرنده آن را دریافت میکند یا خیر. به همین دلیل TCP/IP ایجاد شد.
TCP/IP تضمین می کند که تمام داده هایی که ارسال می کنید به گیرنده آن می رسد. این کار را با ارائه یک اتصال امن به مشتری و سرور قبل از ارسال داده انجام می دهد. این اتصال ایمن از طریق فرآیندی به نام دست دادن سه طرفه که به عنوان دست دادن TCP/IP نیز شناخته می شود، برقرار می شود.
دست دادن سه طرفه چیست؟
دست دادن سه طرفه (TCP/IP handshake) اولین سه تعامل بین یک کلاینت و یک سرور است که در تلاش برای ایجاد یک اتصال TCP است. این تعاملات اولیه برای ایجاد یک اتصال ایمن ضروری است. در این مرحله، مشتری و سرور هر دو در مورد پارامترهایی که برای بررسی و تأیید بستههای دادههای ورودی و خروجی استفاده میکنند، توافق خواهند کرد. این پارامترها به صورت بخش های TCP خواهند بود.
بخش TCP چیست؟
در یک اتصال TCP/IP، تمام داده های ارسالی باید بریده شده و بر اساس آنچه به عنوان بخش های TCP شناخته می شود، ساختار داده شوند. این بخشها حاوی اطلاعاتی مانند آدرسهای IP، پورتها، بیتهای پرچم، اعداد دنبالهای، اعداد تصدیق و دادههای اختیاری یا محموله هستند.
سه تعامل اول (دست دادن سه طرفه) فقط شامل سرصفحههای بخش TCP بدون بار یا دادههای پیوست میشود. در اینجا یک نمونه از یک بخش TCP است
توجه داشته باشید که تصویر بالا فقط برای TCP است. یک قطعه کامل TCP/IP به هر دو آدرس IP از فرستنده و گیرنده در بالای بخش TCP بالا نیاز دارد.
هر زمان که بسته ای را برای شخصی ارسال می کنید، توسط سرویس تحویل از شما خواسته می شود که یک فرم اطلاعات را پر کنید و سپس آن را قبل از ارسال به بسته پیوست کنید. به طور مشابه، TCP از فرستنده میخواهد قبل از شروع به ارسال بخش (بسته) به گیرنده، یک سر بخش (فرم اطلاعات) را به داده (بسته) متصل کند.
هر زمان که یک کلاینت با یک سرور ارتباط برقرار می کند، هر دو طرف باید تعاملات خود را در قالب یک بخش TCP قالب بندی کنند. یک قطعه TCP شامل یک قسمت TCP است که به دادههایی که میخواهید ارسال کنید متصل شده است. فرستنده باید اطلاعات مورد نیاز بخش را تکمیل کند.
برای یک دست دادن سه طرفه، فرستنده باید موارد زیر را پر کند:
- پورت منبع: پورت فرستنده را مشخص می کند
- Destination Port: پورت گیرنده را مشخص می کند
- Sequence Number: دنباله قطعه را نشان می دهد
- Acknowledgment Number: نشان می دهد که یک بخش با اضافه کردن یک به شماره دنباله داده شده تایید شده است.
جدا از پر کردن فیلدهای سر بخش، فرستنده باید یک بیت پرچم را نیز انتخاب کند. در مجموع شش بیت پرچم وجود دارد، اما برای یک دست دادن سه طرفه، فقط به دو بیت زیر نیاز دارید:
- SYN: یک شماره دنباله می دهد. این شماره دنباله برای شمارش دنباله تمام بخش های ورودی برای بقیه تعامل استفاده می شود.
- ACK: نشان می دهد که گیرنده شماره SYN با افزودن یک (1) به شماره SYN داده شده، درخواست اتصال را می پذیرد.
اکنون که می دانید سگمنت TCP چیست، بیایید ببینیم که چگونه در یک دست دادن سه طرفه استفاده می شود.
چگونه یک دست دادن سه طرفه کار می کند
یک دست دادن سه طرفه زمانی برقرار می شود که مشتری و میزبان هر دو اطلاعات را رد و بدل کرده و اعداد ترتیب یکدیگر را تایید کرده باشند. همانطور که از نام آن پیداست، دست دادن سه طرفه در سه مرحله انجام می شود.
ابتدا، مشتری یک بخش SYN خالص را ارسال می کند که نشان می دهد اتصال می خواهد. دوم، سرور با یک بخش SYN-ACK پاسخ می دهد که به این معنی است که درخواست را تایید کرده و شماره SYN خود را برای تایید مشتری ارسال می کند. سوم، مشتری یک بخش ACK را به سرور می فرستد تا به آن اطلاع دهد که شماره SYN سرور تأیید شده است و برای اتصال بیشتر استفاده خواهد شد.
یک دست دادن سه طرفه چیزی شبیه به این خواهد بود:
بیایید آن را تجزیه کنیم و به بخشها نگاه کنیم تا بدانید هنگام تبادل مشتری و سرور و تأیید شمارههای دنباله دقیقاً چه اتفاقی میافتد.
مرحله 1: مشتری یک بخش SYN ارسال می کند
مشتری با ارسال یک بخش SYN به سرور یک اتصال درخواست ارسال می کند. مشتری از آدرس IP مشتری برای مکان یابی سرور و ارسال بخش TCP استفاده می کند.
برای کاهش پیچیدگی بخش، اجازه دهید چند قسمت بخش را نادیده بگیریم و روی موارد ضروری برای یک اتصال سه طرفه دست دادن تمرکز کنیم. این شامل پورت مبدأ، پورت مقصد، شماره دنباله، شماره تصدیق و نوع بیت پرچم مورد استفاده است.
و با آن، یک بخش SYN/درخواست باید به شکل زیر باشد:
پورت مشتری یک عدد تصادفی بین 49152 و 65536 است. این محدوده پورت محدوده توافق شده ای است که دستگاه های عمومی می توانند به صورت پویا برای اتصال به اینترنت استفاده کنند. محدوده پورت 1024 تا 49151 خصوصی است. آنها باید توسط یک نهاد ثبت شوند تا از یک پورت در محدوده مشخص شده استفاده کنند. شماره پورت های زیر 1024 پورت هایی هستند که برای توابع مختلف و پروتکل های اینترنتی مانند FTP (پورت 20)، SMTP (پورت 25)، DNS (پورت 53) و HTTP (پورت 80) رزرو شده اند.
در زندگی واقعی، یک عدد دنباله ای یک عدد تصادفی است. برای مثال، ما از 0000000000 استفاده کردیم تا تجسم راحتتر شود.
با پیشروی در مراحل، به شماره دنباله توجه کنید. در حال حاضر، 000000000 است. در حال حاضر هیچ شماره تأییدی وجود ندارد زیرا چیزی برای تأیید وجود ندارد.
مرحله 2: پاسخ سرور با یک بخش SYN-ACK
هنگامی که سرور یک بخش SYN را دریافت کرد، با ارسال یک بخش ACK حاوی شماره تأیید پاسخ خواهد داد. شماره تصدیق شماره توالی مشتری به اضافه یک (1) خواهد بود.
به پورت منبع نگاه کنید. این نشان می دهد که بخش از پورت 20 است، که نشان می دهد که از سرور به عنوان یک پاسخ آمده است.
حالا به شماره تاییدیه نگاه کنید. 0000000001 است که شماره دنباله مشتری (0000000000) به اضافه یک (1) است. به این ترتیب یک بخش ردیابی می شود. فرض کنید مشتری یک پاسخ بخش ACK دریافت کرده است که در آن شماره تأیید 0000000002 است. این به مشتری نشان می دهد که بخش 0000000001 وجود ندارد و مشتری باید تا رسیدن آن صبر کند تا با از دست دادن بسته مواجه نشوید.
همانطور که می بینید، دو بیت پرچم فعال می شوند – SYN و ACK.
به غیر از تایید شماره ترتیب مشتری، سرور همچنین شماره دنباله خود را برای مشتری ارسال می کند تا شماره توالی سرور به اضافه یک (1) را تایید کند. در مثال ما از 1111111111 به عنوان شماره توالی سرور استفاده کردیم. باز هم در دنیای واقعی، این عدد تصادفی است.
توجه داشته باشید که شماره های دنباله مشتری و سرور نباید مطابقت داشته باشند. تا زمانی که هر دو طرف شماره توالی منحصر به فرد یکدیگر را تصدیق کنند، اتصال قابل اعتماد خواهد بود.
مرحله 3: مشتری با یک بخش ACK پاسخ می دهد
در نهایت، مشتری شماره توالی سرور را تأیید می کند.
بخش نهایی یک بخش ACK از مشتری است.
همانطور که می توانید مشتری شماره ترتیب سرور را با پاسخ دادن به شماره توالی سرور (1111111111) به اضافه یک (1) که 1111111112 است، تأیید می کند.
کلاینت و سرور دیگر یک شماره دنباله ارسال نمی کنند زیرا شروع توالی قبلاً تأیید شده است. با این حال، هر دو طرف انتظار خواهند داشت که بخشهای تصدیق با اعداد دنبالهای به اضافه یک (1) و تعداد بایتها در طول تعامل همراه باشند. در این حالت، کلاینت انتظار دارد که پاسخ سرور بعدی دارای ACK 0000000002 باشد (اگر هیچ داده پیوستی وجود نداشته باشد).
پس از آن، دست دادن سه طرفه برقرار می شود!
درک نحوه کار اتصالات شبکه
اکنون که نحوه عملکرد یک دست دادن سه طرفه را آموخته اید، درک نحوه عملکرد TCP بعد از دست دادن نیز آسان تر خواهید بود. هنگام برقراری دست دادن، مشتری و سرور شروع به ارسال داده می کنند. این بار از قالب بخش کامل به اضافه داده های اختیاری یا محموله استفاده خواهد شد.
داده ها معمولاً برای انتقال آسان تر به قطعات کوچکتر تقسیم می شوند. هر بخش داده دارای سر بخش مخصوص به خود است که شامل یک شماره دنباله و شماره تأیید است. دلیل شماره دنباله این است که بدانیم توالی قطعات در چه زمانی دوباره جمع می شوند. شمارههای تأیید وجود دارند تا با فرستنده تأیید کنند که بخش او دریافت شده است و با دنباله بخشهای دریافتی مطابقت دارد.
شمارش یک شماره دنباله و تأیید آنها با تأیید این است که چگونه TCP می تواند قطعات عظیمی از داده را بدون هیچ بسته داده از دست رفته به طور قابل اعتماد منتقل کند.
و با آن، شما باید ایده بسیار خوبی از نحوه کار TCP داشته باشید.