کوییک (پروتکل) کیست؟ توضیح بده.
کوییک یک پروتکل لایهٔ انتقال است که در سال ۲۰۱۲ توسط جیم روسکایند در گوگل پیاده‌سازی و در سال ۲۰۱۳ منتشر شد. این پروتکل، برای بیش از نیمی از اتصالات گوگل کروم به سرورهای گوگل استفاده می‌شود. علاوه بر این مرورگرهای ماکروسافت اج، فایرفاکس و سافاری نیز از این پروتکل پشتیبانی می‌کنند.کوییک، عملکرد پروتکل پیشین خود، یعنی پروتکل هدایت انتقال را بهبود می‌بخشد. این کار، با استفاده از پروتکل داده‌نگار کاربر به عنوان پایه‌ای برای برقراری ارتباط بین دو نقطهٔ پایانی در لایهٔ انتقال انجام می‌شود. علاوه بر این، کوییک به کاهش تاخیر و جلوگیری از ازدحام در شبکه کمک می‌کند.در سال ۲۰۲۱، کارگروه مهندسی اینترنت پروتکل کوییک را استانداردسازی کرد.ویژگی‌ها.در خصوص پشتیبانی از پروتکل امن انتقال ابرمتن (HTTPS)، کوییک همانند پروتکل هدایت انتقال (TCP) عمل می‌کند، ولی تاخیر کمتری ارائه می‌دهد و به شکلی بهینه‌تر بسته‌های گم شده را بازیابی می‌کند. این بهبودها به سبب دو تفاوت عمده بین این کوییک و TCP به وجود آمده‌اند.اولین تفاوت، کاهش زمان لازم برای اتصال اولیه در کوییک است. با توجه به این که بیشتر اتصالات HTTPS نیازمند پروتکل امنیتی لایهٔ انتقال (TLS) هستند، کوییک بخشی از اطلاعات لازم برای این پروتکل را در دست‌دهی اولیه منتقل می‌کند. تا پیش از این، لازم بود تا در ابتدا یک اتصال TCP برقرار شود، سپس اطلاعات لازم برای پروتکل‌های امنیتی رد و بدل شوند.دومین تفاوت، استفاده از پروتکل داده‌نگار کاربر (UDP) به عنوان پایهٔ انتقال اطلاعات است. برای جبران خدماتی که UDP ارائه نمی‌دهد (مانند بازیابی بسته‌ها)، کوییک خود در جریانی متفاوت از UDP این خدمات را پیاده‌سازی می‌کند. این تفاوت جریان باعث می‌شود که در صورت خطا در یکی از پروتکل‌ها، پروتکل دیگر کمتر تحت تاثیر قرار می‌گیرد.اگر چه در ابندا نام آن به عنوان مخفف "اتصالات اینترنتی UDP سریع" انتخاب شد ، اما در استفاده IETF از کلمه QUIC مخفف نیست .بلکه فقط نام پروتکل است. QUIC عملکرد برنامه های وب مبتنی بر اتصال کهدر حال حاضر از پروتکل کنترل انتقال (TCP)استفاده می کنند را بهبود می بخشد. این کار را با برقراریتعدادی اتصال چندگانه بین دو نقطه پایان با استفاده از پروتکل UDP (Datagram User) انجام می دهدو برای بسیاری از برنامه ها طراحی شده است تا پروتکل TCP را در الیه حمل برای بسیاری از برنامه هامنسوخ کند و به همین دلیل به پروتکل گاه به گاه "/2TCP "نامگذاری می شود.QUIC همراه با اتصالات چندگانه /3HTTP کار می کند که امکان رسیدن داده های چند جریان به تمامنقاط پایان را به طور مستقل فراهم می کند و بنابراین مستقل از از دست دادن بسته های داده مربوط بهجریان های دیگر است. در مقابل، /2HTTP که بر روی TCP میزبانی می شود، ممکن است با تاخیرهایمسدود کننده خط اول مواجه شود اگر چندین جریان روی یک اتصال TCP چندگانه متعدد شوند و هر یکاز بسته های TCP در آن اتصال تاخیر یا از دست بروند.اهداف فرعی.اهداف فرعی QUIC شامل کاهش تاخیر اتصال و حمل و نقل و تخمین پهنای باند در هر جهت برایجلوگیری از تراکم است. همچنین، این پروتکل الگوریتم های کنترل تراکم را به فضای کاربر در هر دو نقطهپایان منتقل می کند، به جای فضای هسته، که ادعا می شود این امکان را به الگوریتم ها می دهد تا بهبودبیشتری داشته باشند. عالوه بر این، این پروتکل می تواند با استفاده از اصالح خطاهای پیش بینی شده(FCE) عملکرد را بهبود بخشد و این به عنوان مرحله بعدی در تکامل پروتکل در نظر گرفته می شود. طراحی شده است تا از تصلب پروتکل جلوگیری کند تا به عنوان TCP که تصلب قابل توجهی داشته است،قابل توسعه باقی بماند.در ژوئن ،2015 یک پیش نویس اینترنتی از یک مشخصه برای QUIC به IETF برای استاندارد سازی ارسالشد. یک گروه کاری QUIC در سال 2016 تشکیل شد. در اکتبر ،2018 گروه های کاری HTTP و QUICIETF به طور مشترک تصمیم گرفتند که نگاشت HTTP روی QUIC را "/3HTTP "نامگذاری کنند قبلاز آنکه آن را به عنوان یک استاندارد جهانی اغلام کنند. در ماه مه ،2021 QUIC IETF را در 9000 RFCاستاندارد سازی کرد، که توسط 8999 RFC، 9001 RFC و 9002 RFC پشتیبانی می شود. -DNSQUIC-over نیز یک برنامه دیگر است.پس زمینه.پروتکل کنترل انتقال یا TCP به هدف فراهم کردن یک رابط برای ارسال جریان های داده بین دو نقطه پایاناست. داده به سیستم TCP تحویل داده میشود که اطمینان میدهد داده به همان شکل به سمت دیگریمنتقل شود و در غیر این صورت اتصال خطا را نشان میدهد. برای این کار، TCP داده را به بسته های شبکهتقسیم میکند و مقادیر کوچکی را به هر بسته اضافه میکند. این داده اضافی شامل یک شماره توالی استکه برای تشخیص بسته های گم شده یا به ترتیب نرسیده استفاده میشود و یک چکسازی که امکانتشخیص خطاهای داخل داده بسته را فراهم میکند. هنگامی که هر یک از این مشکلات رخ میدهد، TCPاز درخواست تکرار خودکار تکراری (ARQ)استفاده میکند تا به فرستنده بگوید بسته گم شده یا آسیبدیده را مجدداً ارسال کند.در بیشتر پیاده سازی ها، TCP هر خطا در یک اتصال را به عنوان یک عملیات مسدود کننده میبیند که تازمان حل خطا یا اتصال به عنوان ناموفق در نظر گرفته میشود، انتقال های بعدی متوقف میشود. اگر یکاتصال تنها برای ارسال چندین جریان داده استفاده شود، همانطور که در پروتکل /2HTTP رخ میدهد،تمام این جریان ها مسدود میشوند، اگرچه تنها یکی از آنها ممکن است مشکل داشته باشد. به عنوان مثال،اگر در حین بارگیری یک تصویر GIF برای استفاده در favicon یک خطا رخ دهد، صفحه به طور کاملمنتظر میماند تا این مشکل حل شود. این پدیده به عنوان مسدود شدن سر خط شناخته میشود.از آنجا که سیستم TCP طراحی شده است تا شبیه یک "لوله داده" یا جریان باشد ، قصداً درک کمی ازداده هایی که انتقال میدهد، دارد. اگر این داده نیازهای اضافی مانند رمزگذاری با استفاده از TLS داشتهباشد، باید توسط سیستم هایی که روی TCP اجرا میشوند و با نرم افزار مشابه در سمت دیگر اتصال برقرارمیکنند، تنظیم شود. هر یک از این نوع وظایف تنظیم نیاز به فرآیند دست دادن دارد. این اغلب نیازمندچندین درخواست و پاسخ است تا اتصال برقرار شود. به دلیل تاخیر ذاتی ارتباطات در فواصل بلند، اینمیتواند به هزینه اضافی به انتقال کلی اضافه کند.TCP از تصلب پروتکل رنج میبرد، به دلیل اینکه تصویر سیم آن در قالب متن روشن است و بنابراین قابلمشاهده و قابل تغییر توسط میان جعبه ها است. یک اندازه گیری نشان داد که یک سوم مسیرها در سراسراینترنت با حداقل یک واسطه مواجه میشوند که متادیتای TCP را تغییر میدهد و 6.5 درصد مسیرها ازتأثیرات تصلب آسیب زا از واسطه ها رنج میبرند. توسعه هایی برای TCP تحت تأثیر قرار گرفته اند: طراحیMPTCP (TCP Multipath ) به دلیل رفتار میان جعبه ها محدود شده است و استقرار Open Fast TCPنیز به همین دلیل متعذر شده است.ویژگی ها.در زمینه پشتیبانی از ترافیک HTTP رمزنگاری شده، QUIC نقش مشابهی با TCP دارد، اما با کاهش تاخیردر فرآیند برقراری ارتباط و بازیابی از دست رفتگی های کارآمدتر هنگامی که چندین جریان HTTP را دریک ارتباط تکرار می کند. این کار را اصولا از طریق دو تغییر انجام می دهد که بر اساس درک رفتار ترافیکHTTP استوار است.تغییر اول، کاهش قابل توجهی در هزینه در فرآیند برقراری ارتباط است. زیرا اکثر ارتباطات HTTP نیاز بهTLS دارند، QUIC تبادل کلیدهای راه اندازی و پروتکل های پشتیبانی شده را به عنوان بخشی از فرآینداصلی دست دادن انجام می دهد. هنگامی که یک کلاینت یک ارتباط باز می کند، بسته پاسخ شامل دادههای مورد نیاز برای استفاده از رمزنگاری برای بسته های آینده است. این باعث حذف نیاز به برقراری ارتباطTCP و سپس مذاکره پروتکل امنیتی از طریق بسته های اضافی می شود. پروتکل های دیگر نیز می توانندبه همین روش خدمات دهند، ترکیب چندین مرحله را در یک جفت درخواست-پاسخ تکمیل می کنند. اینداده ها می توانند همچنین برای درخواست های بعدی در تنظیم اولیه و همچنین درخواست های آینده کهدر غیر این صورت به عنوان ارتباط های جداگانه مذاکره می شوند، استفاده شوند.تغییر دوم استفاده از UDP به جای TCP به عنوان پایه آن است که شامل بازیابی از دست رفتگی نمی شود.به جای آن، هر جریان QUIC به طور جداگانه کنترل جریان می شود و داده های از دست رفته در سطحQUIC و نه UDP مجدداً ارسال می شوند. این بدان معنی است که اگر خطا در یک جریان رخ دهد، مانندمثال favicon بالا ، پشته پروتکل می تواند به طور مستقل از سرویس دهی به جریان های دیگر ادامه دهد. این می تواند در بهبود عملکرد در لینک های خطاپذیر بسیار مفید باشد، زیرا در اکثر موارد ممکن است قبلاز اینکه TCP توجه کند که یک بسته از دست رفته یا خراب شده است، داده های قابل توجهی اضافیدریافت شود و تمام این داده ها در حالت بلاک شده یا حتی فلاش شده است در حالی که خطا اصلاح میشود. در QUIC، این داده ها آزاد است برای پردازش در حالی که جریان تکرار شده تعمیر می شود.QUIC شامل تعدادی تغییر دیگر است که بهبود کلی تاخیر و توانایی ارتباط را بهبود می بخشد. به عنوانمثال، بسته ها به صورت جداگانه رمزنگاری می شوند، به طوری که منجر به انتظار داده های رمزنگاری شدهبرای بسته های جزئی نمی شود. این به طور کلی در TCP ممکن نیست، جایی که رکوردهای رمزنگاری دریک جریان بایتی هستند و پشته پروتکل از مرزهای لایه بالاتردر این جریان آگاه نیست. این می تواندتوسط لایه هایی که روی آن اجرا می شوند مذاکره شود، اما هدف QUIC این است که همه این کارها را دریک فرآیند دست دادن تکمیل کند.هدف دیگری از سیستم QUIC بهبود عملکرد در رویدادهای تغییر شبکه است، مانند زمانی که کاربردستگاه تلفن همراه از یک هات اسپات WiFi محلی به یک شبکه تلفن همراه منتقل می شود. در این حالتدر TCP، یک فرآیند طولانی آغاز می شود که در آن هر ارتباط موجود به ترتیب زمانی منقضی می شود وسپس بر اساس درخواست مجدد برقرار می شود. برای حل این مشکل، QUIC شناسه اتصالی را شامل میشود تا به صورت یکتا اتصال را به سرور شناسایی کند، بدون توجه به منبع. این امکان را می دهد که اتصالبه سادگی با ارسال یک بسته مجدد برقرار شود، که همیشه شامل این شناسه است، زیرا شناسه اتصال اصلیهنوز معتبر است حتی اگر آدرس IP کاربر تغییر کند.QUIC میتواند در فضای برنامه ها پیاده سازی شود، به جای اینکه در هسته سیستم عامل باشد. این به طورکلی هزینه اضافی را به دنبال دارد به دلیل تعویض های متنی زمانی که داده ها بین برنامه ها منتقل میشوند. با این حال، در مورد QUIC ، پشته پروتکل قرار است توسط یک برنامه تکی استفاده شود ، به طوری که هربرنامه های که از QUIC استفاده میکند، اتصالات خود را روی UDP دارد.در نهایت تفاوت ممکن است بسیار کوچک باشد زیرا بخش های زیادی از پشته /2HTTP به طور کلی دربرنامه ها ( یا کتابخانه های آنها، بیشتر به کار میروند) قرار دارند. قرار دادن بخش های باقیمانده در آنکتابخانه ها، به طور جزئی اصلاح خطا، تأثیر کمی بر اندازه یا پیچیدگی کل پشته /2HTTP ندارد.این سازماندهی امکان تغییرات آینده را به راحتی فراهم میکند زیرا برای به روزرسانی ها نیازی به تغییرات درهسته ندارد. یکی از اهداف بلندمدت QUIC اضافه کردن سیستم های جدید برای اصلاح خطا به جلو (FEC)و کنترل بهبود یافته از ازدحام است.یکی از نگرانی ها درباره انتقال از TCP به UDP این است که TCP به طور گسترده پذیرفته شده است وبسیاری از "جعبه های وسط" در زیرساخت اینترنت برای TCP تنظیم شده اند و ممکن است سرعت یا حتیUDP را محدود کنند یا مسدود کنند.گوگل تعدادی آزمایش اکتشافی انجام داد تا این را مشخص کند و پی برد که تنها تعداد کمی از اتصالات بهاین روش مسدود شده اند. این منجر به استفاده از یک سیستم سریع برگشت به TCP شد؛ پشته شبکهکرومیوم همزمان یک اتصال QUIC و یک اتصال سنتی TCP باز میکند، که به آن امکان میدهد که باتأخیر قابل توجهی به TCP برگردد.QUIC به طور خاص برای قابل اجرا، تکامل پذیر و دارای ویژگیه ای ضد-استخوان گذاری طراحی شده است؛این اولین پروتکل انتقال IETF است که به طور عمدی تصویر سیم خود را برای این اهداف کمینه کردهاست. غلاوه بر هدرهای رمزنگاری شده، آن 'روغن دار' است و دارای ویژگی های پروتکل به صورت صریحمشخص شده است.گوگل.پروتکلی که توسط گوگل ایجاد شده و تحت عنوان QUIC به IETF منتقل شده است ( قبلا در سال 2012حول نسخه 20 QUIC )کاملا متفاوت از QUIC است که در IETF ادامه یافته و بهبود یافته است. QUICاصلی گوگل برای بودن یک پروتکل چند منظوره طراحی شده بود، اگرچه ابتدا به عنوان یک پروتکل برایپشتیبانی از S(HTTP) در کرومیوم پیاده سازی شد. تکامل کنونی پروتکل QUIC IETF یک پروتکل حمل ونقل چند منظوره است. توسعه دهندگان کرومیوم ادامه دادند به پیگیری تکامل تلاش های استانداردسازیQUIC IETF برای اتخاذ و کاملا پیروی از استانداردهای اینترنت جدیدتر برای QUIC در کرومیوم.برنامه های کاربردی.QUIC با در نظر گرفتن HTTP توسعه یافته است و /3HTTP اولین برنامه ای است که از آن استفاده میکند.[34][35] QUIC-over-DNS یک برنامه از QUIC برای رزولوشن نام است که امنیت برای انتقالداده ها بین رزولورها را فراهم می کند مشابه IETF[36].TLS-over-DNS در حال توسعه برنامه هایکاربردی QUIC برای تونلینگ امن شبکه[35] و تحویل رسانی رسانه های جریانی است.[37]XMPP بهصورت تجربی به QUIC تطبیق داده شده است.استفاده کنید.[38] برنامه دیگر QUIC over SMB است که طبق گفته مایکروسافت می تواند "یکVPN SMB "را بدون تأثیر بر تجربه کاربر ارائه دهد.[39] مشتریان SMB به طور پیش فرض از TCPاستفاده می کنند و در صورت عدم موفقیت تلاش TCP یا در صورت نیاز قصد داشتن QUIC، تلاش میکنند.پشتیبانی مرورگر.کد QUIC به صورت تجربی در Chrome Google از سال 2012 توسعه یافته است [4] و به عنوانبخشی از نسخه 29 Chromium( منتشر شده در 20 اوت 2013 ) اغلام شد.[18] در حال حاضر به صورتپیش فرض در Chromium و Chrome فعال است.[40]پشتیبانی در Firefox در ماه مه 2021 رسید.[41][12]پل در آوریل 2020 پشتیبانی تجربی را در موتور WebKit از طریق Preview Technology Safari104 اضافه کرد.پشتیبانی رسمی در 14 Safari اضافه شد که در Sur Big macOS و 14 iOS گنجانده شده است.[43]ما برای استفاده از این ویژگی باید به صورت دستی آن را فعال کنید.[44] بعدها به صورت پیش فرض در16 Safari فعال شد.[13]پشتیبانی مشتری.کتابخانه cronet برای QUIC و سایر پروتکل ها به عنوان یک ماژول قابل بارگذاری از طریق GoogleServices Play برای برنامه های اندروید در دسترس است.[45]7.66 cURL که در تاریخ 11 سپتامبر 2019 منتشر شد، پشتیبانی از /3HTTP( و بنابراین QUIC )رادارد.[46][47]در اکتبر ،2020 فیس بوک اعلام کرد[48] که برنامه های خود، از جمله اینستاگرام، و زیرساخت سرور خودرا به QUIC با موفقیت انتقال داده است و در حال حاضر ٪75 از ترافیک اینترنت خود را با استفاده ازQUIC دارد. تمام برنامه های موبایل از گوگل از QUIC پشتیبانی می کنند، از جمله یوتیوب و50[49].Gmail]برنامه موبایل Uber نیز از QUIC استفاده می کند.[50]پشتیبانی سرور.به عنوان ،2017 چندین پیاده سازی فعال وجود دارد. سرورهای گوگل پشتیبانی از QUIC و گوگل یکسرور نمونه منتشر کرده است.[51] شرکت Technologies Akamai از ژوئیه 2016 پشتیبانی از QUICرا ارائه می دهد.[52][53] یک پیاده سازی Go به نام [[54]go-quic ]نیز در دسترس است و پشتیبانیتجربی QUIC را در سرور Caddy تأمین می کند.[55] در تاریخ 11 ژوئیه 2017 شرکت LiteSpeedTechnologies رسماً پشتیبانی از QUIC را در توزیع کننده بار خود [56[(WebADC ]و محصولات Server Web LiteSpeed آغاز کرد.[57] به عنوان اکتبر ،2019 ٪88.6 از وب سایت های QUIC ازLiteSpeed و ٪10.8 از Nginx استفاده می کنند.[58] اگرچه در ابتدا تنها سرورهای گوگل از اتصالات QUIC-over-HTTP پشتیبانی می کردند، فیس بوک نیز در سال 2018 این تکنولوژی را راه اندازیکرد.[18]و Cloudflare از سال 2018 پشتیبانی QUIC را به صورت آزمایشی ارائه می دهد [59] بارگذاری HAProxy در مارس 2022 پشتیبانی تجربی برای QUIC را اضافه کرد[60]و در مارس 2023 آن را آماده تولید اعلام کرد.[61] به عنوان آوریل ،2023 ٪8.9 از تمام وب سایت ها ازQUIc استفاده می کنند،[62] که در مارس 2021 از ٪5 افزایش یافته است. Windows Microsoft2022 Server هر دو پروتکل [[63]/3HTTP ]و [64]QUIC over SMB را از طریق MsQuicپشتیبانی می کند. کنترل کننده تحویل برنامADC Citrix (Citrix،NetScaler )می تواند به عنوان یک پروکسی QUIC عمل کند از نسخه 13 به بعد.[66][65]علاوه براین، چندین پروژه جامعه خاموش وجود دارد: [[67]libquic]توسط استخراج پیاده سازی Chromium ازQUIC ایجاد شده است و به منظور کاهش نیازهای وابستگی آن تغییر داده شده است و[68]goquic ]بسته بندی های Go از libquic را فراهم می کند. در نهایت، -reverse-quic69]proxy ]یک تصویر Docker است که به عنوان یک سرور پروکسی معکوس عمل می کند ودرخواست های QUIC را به HTTP ساده ترجمه می کند که توسط سرور منبع قابل درک است.5. NET پشتیبانی تجربی برای QUIC با استفاده از کتابخانه MsQuic را معرفی می کند.[70]