تنظیم اتصال TCP
وقتی وب را مرور می کنیم ، یک ایمیل ارسال می کنیم یا یک بازی آنلاین بازی می کنیم ، اغلب در مورد اتصال شبکه پیچیده در پشت آن فکر نمی کنیم. با این حال ، این مراحل به ظاهر کوچک است که ارتباط پایدار بین ما و سرور را تضمین می کند. یکی از مهمترین مراحل ، تنظیم اتصال TCP است و هسته اصلی آن دست زدن به سه طرفه است.
در این مقاله در مورد اصل ، فرآیند و اهمیت دست زدن به سه طرفه به تفصیل مورد بحث قرار خواهد گرفت. گام به گام ، ما توضیح خواهیم داد که چرا دست زدن به سه طرفه مورد نیاز است ، چگونه می تواند ثبات و قابلیت اطمینان اتصال را تضمین کند و چقدر برای انتقال داده ها مهم است. با درک عمیق تر از دست دادن سه طرفه ، ما درک بهتری از مکانیسم های اساسی ارتباطات شبکه و دید واضح تر از قابلیت اطمینان اتصالات TCP کسب خواهیم کرد.
فرآیند دستی سه طرفه TCP و انتقال حالت
TCP یک پروتکل حمل و نقل محور است که قبل از انتقال داده نیاز به ایجاد اتصال دارد. این فرآیند تأسیس اتصال با یک دست سه طرفه انجام می شود.
بیایید نگاهی دقیق تر به بسته های TCP که در هر اتصال ارسال می شود ، بیندازیم.
در ابتدا هم مشتری و هم سرور بسته می شوند. اول ، سرور به طور فعال در پورت گوش می دهد و در حالت گوش دادن قرار دارد ، به این معنی که سرور باید شروع شود. در مرحله بعد ، مشتری آماده است تا دسترسی به صفحه وب را شروع کند. این نیاز به برقراری ارتباط با سرور دارد. قالب اولین بسته اتصال به شرح زیر است:
هنگامی که مشتری یک اتصال را آغاز می کند ، یک شماره توالی اولیه تصادفی (client_isn) ایجاد می کند و آن را در قسمت "شماره دنباله" عنوان TCP قرار می دهد. در عین حال ، مشتری موقعیت SYN FLAG را 1 تنظیم می کند تا نشان دهد که بسته خروجی یک بسته SYN است. مشتری نشان می دهد که با ارسال اولین بسته SYN به سرور ، مایل به برقراری ارتباط با سرور است. این بسته حاوی داده های لایه برنامه (یعنی داده های ارسال شده) نیست. در این مرحله ، وضعیت مشتری به عنوان SAN-SENT مشخص شده است.
هنگامی که یک سرور یک بسته SYN را از مشتری دریافت می کند ، به طور تصادفی شماره سریال خود (Server_ISN) را آغاز می کند و سپس آن شماره را در قسمت "شماره سریال" هدر TCP قرار می دهد. در مرحله بعد ، سرور وارد Client_ISN + 1 در قسمت "شماره تأییدیه" می شود و هر دو بیت SYN و ACK را به 1. تنظیم می کند. سرانجام ، سرور بسته را به مشتری ارسال می کند ، که حاوی داده های لایه برنامه (و داده ای برای ارسال سرور) نیست. در این زمان ، سرور در حالت SYN-RCVD قرار دارد.
هنگامی که مشتری بسته را از سرور دریافت کرد ، برای پاسخ به بسته پاسخ نهایی باید بهینه سازی های زیر را انجام دهد: ابتدا ، مشتری بیت ACK از عنوان TCP بسته پاسخ را به 1 تنظیم می کند. دوم ، مشتری در قسمت "تأیید شماره پاسخ" وارد Value Server_ISN + 1 می شود. سرانجام ، مشتری بسته را به سرور ارسال می کند. این بسته می تواند داده ها را از مشتری به سرور منتقل کند. پس از اتمام این عملیات ، مشتری وارد کشور مستقر خواهد شد.
هنگامی که سرور بسته پاسخ را از مشتری دریافت کرد ، به حالت تعیین شده نیز تغییر می یابد.
همانطور که از روند فوق می بینید ، هنگام انجام یک دست سه طرفه ، دست زدن سوم به حمل داده ها مجاز است ، اما دو دست اول نیست. این سوالی است که اغلب در مصاحبه ها پرسیده می شود. پس از اتمام دست دادن سه طرفه ، هر دو طرف وارد حالت تعیین شده می شوند و نشان می دهند که این اتصال با موفقیت برقرار شده است ، در این مرحله مشتری و سرور می توانند ارسال داده ها را به یکدیگر شروع کنند.
چرا سه دست دست؟ نه دو بار ، چهار بار؟
پاسخ متداول این است: "زیرا دست زدن به سه طرفه امکان دریافت و ارسال را تضمین می کند." این پاسخ صحیح است ، اما این فقط دلیل سطح است ، دلیل اصلی را مطرح نمی کند. در ادامه ، دلایل دست زدن سه گانه را از سه جنبه برای تعمیق درک ما از این موضوع تجزیه و تحلیل خواهم کرد.
دست زدن سه طرفه می تواند به طور موثری از ابتدای اتصالات مکرر تاریخی جلوگیری کند (دلیل اصلی)
دست دادن سه طرفه تضمین می کند که هر دو طرف یک شماره توالی اولیه قابل اعتماد دریافت کرده اند.
دست دادن سه طرفه از هدر رفتن منابع جلوگیری می کند.
دلیل 1: از پیوندهای تکراری تاریخی خودداری کنید
به طور خلاصه ، دلیل اصلی دست زدن به سه طرفه جلوگیری از سردرگمی ناشی از اولیه سازی اتصال تکراری قدیمی است. در یک محیط پیچیده شبکه ، انتقال بسته های داده همیشه مطابق با زمان مشخص به میزبان مقصد ارسال نمی شود و بسته های داده قدیمی ممکن است به دلیل احتقان شبکه و دلایل دیگر ، ابتدا به میزبان مقصد برسند. برای جلوگیری از این امر ، TCP از یک دست سه طرفه برای برقراری ارتباط استفاده می کند.
هنگامی که مشتری چندین بسته اتصال اتصال SAN را به صورت پشت سر هم ارسال می کند ، در شرایطی مانند احتقان شبکه ، موارد زیر ممکن است رخ دهد:
1- بسته های قدیمی SYN قبل از آخرین بسته های SYN به سرور می رسند.
2- سرور پس از دریافت بسته قدیمی SYN ، یک بسته SYN + ACK را به مشتری پاسخ می دهد.
3- هنگامی که مشتری بسته SYN + ACK را دریافت می کند ، تعیین می کند که اتصال یک اتصال تاریخی (شماره توالی منقضی شده یا زمان بندی) مطابق با متن خاص خود است و سپس بسته اول را به سرور ارسال می کند تا اتصال را سقط کند.
با یک اتصال دو دستی ، هیچ راهی برای تعیین اینکه آیا ارتباط فعلی یک ارتباط تاریخی است یا خیر ، وجود ندارد. دست دادن سه طرفه به مشتری اجازه می دهد تا مشخص کند که آیا اتصال فعلی یک اتصال تاریخی است که بر اساس زمینه در هنگام آماده شدن برای ارسال بسته سوم است:
1- اگر این یک اتصال تاریخی باشد (شماره دنباله منقضی شده یا زمان بندی) ، بسته ارسال شده توسط دست سوم یک بسته اول برای قطع ارتباط تاریخی است.
2- اگر این یک ارتباط تاریخی نباشد ، بسته ارسال شده برای بار سوم یک بسته ACK است و دو حزب برقراری ارتباط با موفقیت ارتباط را برقرار می کنند.
بنابراین ، دلیل اصلی استفاده از TCP از دست سه طرفه این است که اتصال را برای جلوگیری از اتصالات تاریخی آغاز می کند.
دلیل 2: برای همگام سازی تعداد توالی اولیه هر دو طرف
هر دو طرف پروتکل TCP باید یک شماره دنباله را حفظ کنند ، که این یک عامل اصلی برای اطمینان از انتقال قابل اعتماد است. اعداد توالی نقش مهمی در اتصالات TCP دارند. آنها موارد زیر را انجام دهید:
گیرنده می تواند داده های تکراری را از بین ببرد و از صحت داده ها اطمینان حاصل کند.
گیرنده می تواند بسته ها را به ترتیب شماره دنباله دریافت کند تا از یکپارچگی داده ها اطمینان حاصل کند.
● شماره دنباله می تواند بسته داده ای را که توسط طرف مقابل دریافت شده است شناسایی کند و انتقال داده های قابل اعتماد را امکان پذیر می کند.
بنابراین ، پس از برقراری اتصال TCP ، مشتری بسته های SYN را با شماره توالی اولیه ارسال می کند و به سرور نیاز دارد تا با یک بسته ACK پاسخ دهد که نشانگر پذیرش موفقیت آمیز از بسته SYN مشتری است. سپس ، سرور بسته SYN را با شماره دنباله اولیه به مشتری ارسال می کند و منتظر است تا مشتری پاسخ دهد ، یک بار و برای همیشه ، اطمینان حاصل کند که شماره های توالی اولیه با اطمینان هماهنگ می شوند.
اگرچه برای همگام سازی قابل اعتماد با تعداد توالی اولیه هر دو طرف ، یک دست چهار طرفه نیز امکان پذیر است ، می توان مراحل دوم و سوم را در یک مرحله واحد ترکیب کرد و در نتیجه یک دست سه طرفه ایجاد می شود. با این حال ، این دو دست فقط می توانند تضمین کنند که تعداد توالی اولیه یک طرف با موفقیت توسط طرف مقابل دریافت می شود ، اما هیچ تضمینی وجود ندارد که تعداد توالی اولیه هر دو طرف قابل تأیید باشد. بنابراین ، دست زدن به سه طرفه بهترین انتخاب برای اطمینان از ثبات و قابلیت اطمینان اتصالات TCP است.
دلیل 3: از هدر رفتن منابع خودداری کنید
اگر فقط یک "دو دستی" وجود داشته باشد ، وقتی درخواست مشتری SYN در شبکه مسدود شده است ، مشتری نمی تواند بسته ACK ارسال شده توسط سرور را دریافت کند ، بنابراین SYN نارضایتی خواهد کرد. با این حال ، از آنجا که هیچ دست دستی سوم وجود ندارد ، سرور نمی تواند تعیین کند که آیا مشتری تأیید ACK را برای برقراری اتصال دریافت کرده است یا خیر. بنابراین ، سرور فقط می تواند پس از دریافت هر درخواست SYN ، ارتباط برقرار کند. این به موارد زیر منجر می شود:
ضایعات منابع: اگر درخواست SYN مشتری مسدود شود ، در نتیجه انتقال مکرر بسته های SYN متعدد ، سرور پس از دریافت درخواست ، چندین اتصالات نامعتبر را ایجاد می کند. این منجر به اتلاف غیر ضروری منابع سرور می شود.
حفظ پیام: به دلیل عدم وجود یک دست سوم ، سرور هیچ راهی برای دانستن اینکه مشتری به درستی تأیید ACK را برای برقراری ارتباط دریافت کرده است ، ندارد. در نتیجه ، اگر پیام ها در شبکه گیر بیفتند ، مشتری بارها و بارها درخواست های SAN را ارسال می کند و باعث می شود سرور به طور مداوم اتصالات جدیدی برقرار کند. این باعث افزایش احتقان و تأخیر شبکه می شود و بر عملکرد کلی شبکه تأثیر منفی می گذارد.
بنابراین ، برای اطمینان از ثبات و قابلیت اطمینان اتصال شبکه ، TCP از دست سه طرفه برای برقراری ارتباط برای جلوگیری از بروز این مشکلات استفاده می کند.
خلاصه
درکارگزار بسته شبکهتأسیس اتصال TCP با یک دست سه طرفه انجام می شود. در حین دستیابی به سه طرفه ، مشتری ابتدا یک بسته با پرچم SYN را به سرور می فرستد و نشان می دهد که می خواهد اتصال برقرار کند. سرور پس از دریافت درخواست از مشتری ، بسته ای را با پرچم های SYN و ACK به مشتری پاسخ می دهد و نشان می دهد که درخواست اتصال پذیرفته شده است و شماره توالی اولیه خود را ارسال می کند. سرانجام ، مشتری با پرچم ACK به سرور پاسخ می دهد تا نشان دهد این اتصال با موفقیت برقرار شده است. بنابراین ، دو طرف در حالت مستقر قرار دارند و می توانند ارسال داده ها را به یکدیگر شروع کنند.
به طور کلی ، فرآیند دستی سه طرفه برای ایجاد اتصال TCP برای اطمینان از ثبات و قابلیت اطمینان اتصال ، جلوگیری از سردرگمی و هدر دادن منابع از طریق اتصالات تاریخی طراحی شده است و اطمینان حاصل می کند که هر دو طرف قادر به دریافت و ارسال داده هستند.
زمان پست: ژانویه -08-2025