چرا بازیهای چندنفره آنلاین TCP را دور میاندازند و به نتکد اختصاصی UDP پناه میبرند؟
برای حفظ تیکریت ۶۰ هرتز سرور بدون تاخیرهای زنجیرهای، بازیهای رقابتی چندنفره پروتکل پیشفرض اینترنت را رها کرده و به سراغ دیتاگرامهای خام میروند. توسعهدهندگان با فدا کردن تحویل تضمینی در ازای سرعت، مشکل مسدود شدن سر خط را حذف کرده و لایههای اطمینان اختصاصی خود را مستقیماً درون برنامه میسازند.
به قلم روکسین بهرامی
این خبر را به اشتراک بگذارید
- مهندسان شبکه
- اولویت دادن به قابلیت اطمینان سفارشی در لایه اپلیکیشن برای حذف مسدود شدن سر خط در محیطهای درنگزمان.
- پژوهشگران دانشگاهی
- تمرکز بر اندازهگیری تجربی کارایی پروتکل، سربار پهنای باند و تاخیر تحت تراکم کنترلشده.
- معماران سیستمهای عمومی
- دفاع از تضمینهای داخلی TCP برای برنامههای غیر درنگزمان که در آنها یکپارچگی دادهها بر تحویل در حد میکروثانیه ارجحیت دارد.
بازیهای چندنفره درنگزمان دادهها را به جای پروتکل کنترل انتقال (TCP) با استفاده از پروتکل دیتاگرام کاربر (UDP) منتقل میکنند؛ زیرا تحویل تضمینی و اجباری TCP به محض از دست رفتن حتی یک بسته، تاخیرهای شدیدی ایجاد میکند که میتواند بازی را خراب کند. وقتی شبکه یک بسته TCP را گم میکند، این پروتکل تمام دادههای ورودی بعدی را متوقف میکند تا اطلاعات از دست رفته با موفقیت دوباره ارسال شوند و در حالی که سرور منتظر است، وضعیت محلی بازی فریز میشود.[1][5]
در یک بازی شوتر رقابتی یا مبارزهای که با تیکریت ۶۰ هرتز سرور اجرا میشود، سرور هر ۱۶.۶ میلیثانیه یک وضعیت جدید از دنیای بازی را ارسال میکند. اگر اتصال بازیکن فقط یکی از این بهروزرسانیها را از دست بدهد، معماری TCP کلاینت را مجبور میکند تا برای یک ارسال مجدد رفتوبرگشتی که اغلب ۵۰ تا ۱۰۰ میلیثانیه طول میکشد منتظر بماند، پیش از آنکه بتواند بستههای جدیدتری را که از قبل رسیدهاند پردازش کند.[1]
گلن فیدلر، برنامهنویس شبکه، در تحلیل بنیادین خود در سال ۲۰۰۸ از شبکهسازی بازیها مینویسد: «مشکل استفاده از TCP برای بازیهای درنگزمان این است که ارتباطات شبکه را به یک جریان داده قابلاعتماد و مرتب انتزاع میکند. اگر بستهای گم شود، TCP متوقف شده و منتظر میماند تا آن بسته دوباره ارسال شود.»[1]
این پدیده که به عنوان مسدود شدن سر خط شناخته میشود، دلیل اصلی این است که صنعت ۱۸۰ میلیارد دلاری بازیسازی، پروتکل انتقال پیشفرض اینترنت را کنار میگذارد. در حالی که TCP با اطمینان از رسیدن هر بایت با ترتیب کامل، صفحات وب را بینقص بارگذاری میکند و ویدیوها را استریم میکند، اما ماهیت زمانی یک محیط چندنفره زنده را اساساً اشتباه میفهمد.[1][5]
در یک مسابقه زنده، دادهها تاریخ انقضای سختگیرانهای دارند. اگر سرور بستهای بفرستد که میگوید بازیکن دشمن در مختصات X و Y قرار دارد و آن بسته در مسیر گم شود، ارسال مجدد آن در ۸۰ میلیثانیه بعد کاملاً بیفایده است. تا زمانی که بسته تاخیردار برسد، دشمن از قبل جابهجا شده است.[4]
پروتکل UDP این مشکل را با حذف کردن تضمینها حل میکند. این یک پروتکل بدون اتصال و از نوع «شلیک کن و فراموش کن» است. یک بسته UDP دارای یک هدر ۸ بایتی است در مقایسه با حداقل ۲۰ بایت در TCP و به سادگی محموله داده را به سمت آدرس IP مقصد پرتاب میکند بدون اینکه منتظر تاییدیه بماند.[5]
اگر یک بسته UDP از دست برود، این پروتکل هیچ اهمیتی نمیدهد. کلاینت بازی به سادگی این فقدان را میپذیرد و دقیقاً بسته بعدی را که میرسد پردازش میکند و با درونیابی آن ۱۶.۶ میلیثانیه حرکت از دسترفته، تجربه بصری را روان نگه میدارد.[1][4]
با این حال، UDP خام برای یک وضعیت کامل بازی بیش از حد پرهرجومرج است. در حالی که یک بهروزرسانی حرکتی از دسترفته به راحتی نادیده گرفته میشود، اما گم شدن بستهای که حاوی شلیک یک تفنگ تکتیرانداز، مصرف یک بسته سلامتی یا ارسال یک پیام چت است، منطق بازی را به کلی نابود میکند.[4]
با این حال، UDP خام برای یک وضعیت کامل بازی بیش از حد پرهرجومرج است.
برای پر کردن این شکاف، مهندسان شبکه لایههای اطمینان اختصاصی را مستقیماً روی UDP میسازند و چیزی را خلق میکنند که صنعت به آن UDP قابلاعتماد (RUDP) میگوید. این رویکرد به توسعهدهندگان اجازه میدهد تا دادهها را در کانالهای مجزا دستهبندی کرده و تحویل تضمینی را فقط برای اقدامات خاصی که به آن نیاز دارند اعمال کنند.[4]
یک مطالعه در سال ۲۰۱۸ که در ژورنال Electronics از MDPI منتشر شد، این رویکرد ترکیبی را کمّیسازی کرد و نشان داد که پیادهسازی RUDP میتواند میانگین تاخیر را در دورههای تراکم شبکه تا ۳۴٪ در مقایسه با یک اتصال خالص TCP کاهش دهد.[3]
در تحلیل فنی iThare آمده است: «با پیادهسازی قابلیت اطمینان در لایه اپلیکیشن، توسعهدهندگان بازی میتوانند دقیقاً تصمیم بگیرند که چه دادههایی باید دوباره ارسال شوند و چه دادههایی را میتوان با خیال راحت دور انداخت.» این ارسال مجدد انتخابی تضمین میکند که یک بسته حرکتی از دسترفته هرگز رویداد حیاتی شلیک سلاح را به تاخیر نمیاندازد.[4]
صرفهجویی در پهنای باند نیز در مقیاس بزرگ به همان اندازه حیاتی است. یک بازی آنلاین چندنفره گسترده یا یک بتل رویال ۱۰۰ نفره ترافیک عظیمی تولید میکند. محققانی که بازیهای آنلاین محبوب را تحلیل کردهاند دریافتند که جریان مداوم بستههای کوچک و حساس به زمان، سربار TCP را از نظر ریاضی برای زیرساخت سرور به شدت طاقتفرسا میکند.[2]
با TCP، هدر اجباری ۲۰ بایتی که به هر انتقال متصل است، روی هم انباشته میشود. در سرعت ۶۰ بسته در ثانیه، آن هدر به تنهایی ۱۲۰۰ بایت در ثانیه به ازای هر کلاینت مصرف میکند. برای سروری که میزبان ۱۰۰ بازیکن است، این یعنی ۱۲۰ کیلوبایت در ثانیه سربار خالص، پیش از آنکه حتی یک بایت از دادههای واقعی بازی منتقل شود.[5]
هدر ۸ بایتی UDP این سربار پایه را تا ۶۰٪ کاهش میدهد. اگرچه قابلیت اطمینان لایه اپلیکیشن بایتهای مخصوص به خود را به محموله داده اضافه میکند، اما توسعهدهنده دقیقاً کنترل میکند که این سربار چگونه و چه زمانی اعمال شود، به جای آنکه مالیات کورکورانه TCP را روی هر انتقال بپذیرد.[4][5]
ارزیابیهای تجربی از عملکرد TCP در بازیهای آنلاین بارها و بارها نامناسب بودن آن را برای مکانیکهای مبتنی بر واکنش سریع تایید کردهاند. مطالعهای که TCP را در محیطهای پرسرعت تحلیل کرده است نشان داد که حتی نرخ افت بسته ۱٪ در یک اتصال پهنباند استاندارد، منجر به پرشهای تاخیری بیش از ۲۰۰ میلیثانیه میشود تاخیری که بازی رقابتی را غیرممکن میسازد.[6]
این امر یک شکاف معماری سختگیرانه را در توسعه بازی تحمیل میکند. بازیهای استراتژی نوبتی، بازیهای کارتی دیجیتال و عناوین موبایلی ناهمگام میتوانند با خیال راحت به TCP تکیه کنند، زیرا تاخیر ۲۰۰ میلیثانیهای در کشیدن یک کارت برای بازیکن غیرقابلتشخیص است.[1][6]
اما برای هر عنوانی که زمان واکنش انسان نتیجه را دیکته میکند جایی که یک برتری ۱۵ میلیثانیهای برنده یک درگیری مسلحانه است معماری شبکه باید تازگی دادهها را بر کامل بودن آنها ترجیح دهد. سرور باید اجازه داشته باشد که گذشته را فراموش کند تا بتواند زمان حال را تحویل دهد.[1][4]
تسلط UDP در بازیهای درنگزمان، پیروزی مهندسی تخصصی بر استانداردهای تعمیمیافته است. توسعهدهندگان با رد کردن تورهای ایمنی داخلی اینترنت، بار عظیم مدیریت افت بستهها، مرتبسازی و کنترل تراکم را خودشان به دوش میکشند.[4][7]
این بار سنگین، هزینه پنهان ورزشهای الکترونیک مدرن است. هر انیمیشن روان کاراکتر، هر شلیکی که ثبت میشود و هر دفاع زمانبندیشده بینقص، به یک پروتکل سفارشی متکی است که در سراسر اینترنت میتازد و دادههایی را که دیگر اهمیتی ندارند دور میریزد تا فریمی را تحویل دهد که واقعاً مهم است.[7]
چرا مهم است
هر انیمیشن روان کاراکتر، هر شلیکی که ثبت میشود و هر دفاع زمانبندیشده در ورزشهای الکترونیک مدرن، به این انتخاب معماری خاص بستگی دارد. درک تفاوت UDP و TCP توضیح میدهد که چرا بازیکنان هنگام افت شبکه به جای فریز شدن کامل بازی، پدیده «رابر بندینگ» را تجربه میکنند.
- 20 bytes
- حداقل اندازه هدر TCP
- 8 bytes
- اندازه هدر UDP
- 16.6 ms
- زمان بین بستهها در ۶۰ هرتز
- 34%
- کاهش تاخیر با استفاده از RUDP در برابر TCP
- 1,200 bytes/sec
- سربار هدر TCP به ازای هر کلاینت در ۶۰ هرتز
منابع
[1]Gaffer On Gamesمهندسان شبکهUDP vs. TCP
مطالعه در Gaffer On Games →
[2]ResearchGateپژوهشگران دانشگاهیA traffic characterization of popular on-line games
مطالعه در ResearchGate →
[3]MDPIپژوهشگران دانشگاهیReliable User Datagram Protocol as a Solution to Latencies in Network Games
مطالعه در MDPI →
[4]iThareمهندسان شبکهWhy do game developers avoid TCP and make UDP reliable in the application level?
مطالعه در iThare →
[5]GeeksforGeeksمعماران سیستمهای عمومیWhen is UDP preferred to TCP?
مطالعه در GeeksforGeeks →
[6]ResearchGateپژوهشگران دانشگاهیAn empirical evaluation of TCP performance in online games
مطالعه در ResearchGate →
[7]تیم سردبیری کوهستانتحلیل تیم سردبیری کوهستان
مطالعه در تیم سردبیری کوهستان →
نظرات
هر زاویه. هر روز.
دریافت بازی و ورزشهای الکترونیک اخبار همراه با پوشش کامل منابع و تحلیل دیدگاهها، مستقیم در صندوق ورودی شما.
