این گزارش نسخهٔ قبلی است. نسخهٔ فعلی: Adaptive Connect 4.0

گزارش فنی · 20 اکتبر 2026

Colitu Adaptive Connect 3.0

فقط بازیابی اتصال نیست: انتخاب مسیر درست در نخستین تلاش، دیدن قطعی در عرض چند ثانیه و گرفتن تصمیم یکسان در هر چهار برنامه.

از 20 اکتبر 2026، Adaptive Connect 3.0 در نسخه‌های فعلی برنامه‌های Android، Windows و iOS برای همه در دسترس است. در Linux تشخیص سریع قطعی و قواعد مشترک وجود دارد؛ راهنمایی‌های شبکه و مجموعهٔ بازیابی هنوز غیرفعال‌اند.

تاریخ انتشار
نویسنده
Colitu
منابع
RFC 8305 · RFC 9000 · RFC 5482
محدودهٔ کاربرد
Colitu برای Android (از جمله تلویزیون)، Windows و iOS؛ در Linux به‌صورت جزئی

0چکیده

Adaptive Connect 2.0 به برنامه‌ها یاد داد مسیری را که در حین اتصال خراب می‌شود تشخیص دهند و ترافیک را به مسیر پشتیبان آماده منتقل کنند. داده‌های میدانی سه نقطهٔ ضعف را نشان دادند: تشخیص یک قطعی ده‌ها ثانیه طول می‌کشید، برنامه در شبکه‌ای که نمی‌شناخت کورکورانه تلاش می‌کرد، و چون یک منطق واحد در چهار پلتفرم جداگانه نوشته شده بود، تصمیم‌ها از هم فاصله گرفته بودند. Adaptive Connect 3.0 این سه نقطه را هدف می‌گیرد: راهنمایی‌های شبکه که از داده‌های تجمیعی ناشناس به دست می‌آیند تا کار در نخستین تلاش با حالت اتصال درست آغاز شود؛ مجموعهٔ بازیابی که حتی وقتی به API دسترسی نیست سرور کارآمد پیدا می‌کند؛ ناظری که قطعی را در حدود 11 ثانیه تشخیص می‌دهد؛ و مجموعه قواعد مشترک با 46 بردار که هر چهار برنامه از آن پیروی می‌کنند. این گزارش معماری 3.0، عرضهٔ مرحله‌ای و اندازه‌گیری‌های آن را شرح می‌دهد و بخش‌هایی را که هنوز آلفا یا فقط برنامه‌ریزی‌شده‌اند جدا نگه می‌دارد.

1چرا 3.0؟

در هفتهٔ نخست پس از انتشار 2.0 از دو منبع داده جمع کردیم: اجراهای آزمایشگاهی همراه با تزریق خطا و تله‌متری ناشناس اتصال که برنامه‌ها می‌فرستند (ساختار آن در بخش حریم خصوصی آمده است). در اندازه‌گیری پایهٔ آزمایشگاهی 2.0 در برابر 29 سرور، 85.2 % از پروب‌ها موفق بودند؛ مشکلات روی انواع مشخصی از خطا متمرکز بود (گزارش آزمایشگاه).

یافتهمنبعنتیجه
تشخیص کند قطعیتله‌متری میدانیمیانگین فاصلهٔ تشخیص تا بازیابی: 54 ثانیه در Android و 34 ثانیه در Windows
دنبالهٔ طولانی اتصال در Windowsتله‌متری میدانی + رایانهٔ آزموناتصال‌های موفق در نخستین تلاش به‌طور میانگین 14.9 ثانیه طول می‌کشیدند؛ علت ریشه‌ای: در حالی که قطع‌کن اضطراری (Kill Switch) نگه داشته می‌شد، نشانی‌های API فقط در حافظه بودند
مسیر پشتیبان آماده گاهی اصلاً کار را تحویل نمی‌گرفتآزمایشگاهچون ترافیک پس‌زمینه از آستانه می‌گذشت، رفتن به مسیر پشتیبان آماده بی‌پایان به تعویق می‌افتاد
شروع کور در شبکهٔ جدیدتله‌متری میدانیدر شبکه‌ای که حافظه‌ای دربارهٔ آن نبود، برنامه حالت‌ها را با ترتیب ثابت امتحان می‌کرد
پلتفرم‌ها از هم فاصله گرفته بودندبازبینی کدیک قاعدهٔ واحد در چهار زبان جداگانه نوشته شده بود؛ در Windows و Linux تفاوت‌هایی در رتبه‌بندی و تجزیهٔ راهنمایی‌ها وجود داشت

پس هدف 3.0 پروتکل جدید نیست، کیفیت تصمیم است: تلاش کمتر، مدت کوری کوتاه‌تر، تصمیم یکسان در هر پلتفرم. هیچ داده اضافه‌ای از کاربر جمع‌آوری نمی‌شود و مکانی که دستی انتخاب شده هرگز تغییر نمی‌کند.

2معماری: هفت مؤلفه

3.0 از ابتدا به‌صورت چارچوبی با هفت مؤلفه طراحی شد. همهٔ آن‌ها در یک سطح از پختگی نیستند؛ جدول زیر وضعیت فعلی هر مؤلفه را بی‌پرده نشان می‌دهد.

مؤلفهچه می‌کند؟وضعیت
راهنمایی‌های جمعی شبکهاز داده‌های تجمیعی ناشناس نتیجه می‌گیرد کدام حالت اتصال در یک شبکه کار می‌کندفعال
شروع پیش‌بینانهدر شبکه‌ای که نمی‌شناسد، برنامه با حالتِ ذکرشده در راهنمایی شروع می‌کند؛ بر قواعد تکیه دارد و یادگیری ماشین در کار نیستفعال
بازیابی خودمختارحتی وقتی به API دسترسی نیست، با مجموعهٔ بازیابی ذخیره‌شده روی دستگاه و نشانی‌های ذخیره‌شده متصل می‌شودفعال
تشخیص سریع قطعیقطعی را در حین اتصال در حدود 11 ثانیه تشخیص می‌دهد و تصمیم می‌گیرد چه زمانی سرور را ترک کندفعال
آزمایشگاه شبکهبسته‌های تزریق خطا و بردارهای آزمون مشترک بین پلتفرم‌هافعال (ابزار داخلی)
موتور تداوم (CSL)لایهٔ نشستی که حتی وقتی تونل عوض می‌شود نشست را زنده نگه می‌دارد؛ چند خط حاملآلفا (Windows، حساب‌های آزمایشی)
استتار تطبیقیانتخاب شکل ترافیک و تنظیمات انتقال بر اساس شبکهبرنامه‌ریزی‌شده

راهنمایی‌های شبکه، نسخهٔ 2

برنامه‌ها نتیجهٔ هر تلاش اتصال را (حالت، موفقیت یا شکست، مدت) به‌صورت ناشناس گزارش می‌کنند. پنل این گزارش‌ها را به مجموع‌های روزانه برای هر شبکه تبدیل می‌کند، یعنی در سطح کشور + سامانهٔ خودمختار (ASN). اگر دربارهٔ یک شبکه داده کافی باشد، همراه با فهرست سرورها یک ترتیب `preferred` برمی‌گردد: حالت‌هایی که در 24 ساعت گذشته روی آن شبکه کار کرده‌اند، با نرخ موفقیت بالاتر در ابتدا. وقتی شبکه عوض می‌شود، برنامه فهرست را دوباره می‌گیرد و از راهنمایی شبکهٔ جدید استفاده می‌کند.

در اندازه‌گیری 16 اکتبر، در هفت روز گذشته 89 شبکهٔ متفاوت دیده شد؛ برای 44 شبکه داده به اندازهٔ کافی برای تصمیم‌گیری بود و برای 40 شبکه ترتیب ترجیحی ساخته شد. در برخی شبکه‌ها نرخ موفقیت Hysteria2 مبتنی بر UDP برابر 92 % بود، در حالی که حالت‌های TCP در بازهٔ 44–54 % قرار داشتند؛ ترتیب ثابت در این شبکه‌ها در هر اتصال وقت تلف می‌کرد.

مجموعهٔ بازیابی

در 2.0 اگر فهرست سرورها از API گرفته نمی‌شد، برنامه جایی برای اتصال نداشت. در 3.0 برنامه، تا وقتی API پاسخ می‌دهد، تقریباً روزی یک بار یک مجموعهٔ بازیابی کوچک را دانلود می‌کند و روی دستگاه نگه می‌دارد: پروفایل‌های کامل برای چند سرور در کشورهای مختلف که اعتبارشان بسیار طولانی‌تر از پیکربندی معمولی است. نخست سرورهایی انتخاب می‌شوند که این دستگاه در روزهای اخیر به آن‌ها رسیده است، سپس از هر کشور یک سرور؛ بنابراین حتی اگر دسترسی به سرورهای یک کشور قطع شود، بقیه می‌مانند. مجموعه فقط وقتی به کار می‌رود که هیچ‌یک از نشانی‌های API پاسخ ندهد و حافظهٔ نهان معمولی هم نتواند متصل شود؛ پس از برقراری اتصال، برنامه از داخل تونل به API می‌رسد و همه‌چیز را تازه می‌کند.

افزون بر این، برنامه‌های Windows و Linux اکنون نشانی‌های API را روی دیسک نگه می‌دارند و به‌صورت موازی تازه می‌کنند. وقتی قطع‌کن اضطراری از اجرای قبلی باقی مانده بود (اتصال خودکار پس از کرش یا راه‌اندازی مجدد)، DNS سیستم بسته بود، پس 2.0 نشانی‌ها را یکی‌یکی حل می‌کرد و از راه‌اندازی تا اتصال 21 تا 25 ثانیه می‌گذشت.

تشخیص سریع قطعی

ناظر مسیر اصلی را هر یک ثانیه با مهلت سه‌ثانیه‌ای بررسی می‌کند. یک تلفات منفرد هنوز تصمیم نیست؛ وقتی تلفات پیاپی تأیید شود، در حدود 11 ثانیه حکم قطعی صادر می‌شود. اینکه پس از حکم چه کاری انجام شود به دامنهٔ قطعی بستگی دارد:

وضعیتتصمیم
فقط مسیر اصلی افتاد، مسیر پشتیبان آماده کار می‌کندترافیک روی مسیر پشتیبان آماده می‌ماند؛ ابتدا حالت‌های دیگر همان سرور امتحان می‌شوند
مسیر اصلی و مسیر پشتیبان آماده با هم افتادند، دستگاه آنلاین استدر حالت خودکار، سرور برای این شبکه 30 دقیقه به پس‌زمینه می‌رود و به سرور بعدی می‌رود
اینترنت خود دستگاه رفتهیچ حالت یا سروری مقصر شمرده نمی‌شود؛ وقتی شبکه برگردد دوباره متصل می‌شود
مکان انتخاب‌شده به‌صورت دستیسرور عوض نمی‌شود؛ فقط بین حالت‌های همان مکان جابه‌جا می‌شود

یک اشکال 2.0 هم بسته شد: وقتی در پس‌زمینه دائماً ترافیک کمی وجود داشت، رفتن به مسیر پشتیبان آماده به بهانهٔ «مشغول بودن» بی‌پایان به تعویق می‌افتاد. در 3.0 تعویق حداکثر به دو دقیقه یا 32 KB محدود است.

هویت فوری دستگاه

هر دستگاه در هر سرور هویت اختصاصی خودش را دارد. در 2.0 هویت جدید فقط در همگام‌سازی منظم 15 ثانیه‌ای به سرور می‌رسید؛ برای همین نخستین اتصال یک کاربر جدید می‌توانست 15 تا 30 ثانیه ناموفق باشد. اکنون تغییر هویت فوراً به سرورها منتقل می‌شود؛ درخواست پیکربندی مدت کوتاهی صبر می‌کند و اگر هویت هنوز آماده نباشد، برنامه این را می‌داند و با فاصلهٔ دو ثانیه دوباره تلاش می‌کند.

3قواعد تصمیم مشترک و موتور Go

قواعد Adaptive Connect در چهار برنامه و به چهار زبان مختلف زندگی می‌کنند: Kotlin (Android)، C# (Windows و Linux)، Dart و Swift (iOS). با 3.0 این قواعد به یک منبع واحد بسته شدند: بردارهای آزمون مشترک. هر بردار شامل یک ورودی (سرورها، اندازه‌گیری‌ها، حافظه، راهنمایی‌ها) و تصمیم مورد انتظار است؛ مجموعه‌های آزمون چهار برنامه همین فایل‌ها را اجرا می‌کنند.

فایل برداردامنه
rankingرتبه‌بندی سرورها در حالت خودکار: آخرین سرور کارآمد، پینگ، جریمه‌ها، قاعدهٔ کشور خودی (19 مورد)
transportترتیب پایهٔ حالت‌های اتصال، شروع با راهنمایی، علامت‌های نادیده‌گرفته‌شده
hintsتجزیهٔ پاسخ راهنمایی‌ها
recoveryتصمیم بازیابی، زمان تازه‌سازی، خواندن مجموعه، سرور بعدی

در چهار فایل در مجموع 46 مورد وجود دارد. اگر قاعده‌ای در یک برنامه تغییر کند و یکی از بردارها نتیجهٔ متفاوتی بدهد، مجموعهٔ آزمون آن برنامه شکست می‌خورد.

نخستین اجرای بردارها تفاوت‌های واقعی را پیدا کرد: Windows و Linux قاعدهٔ عقب‌راندن کشور خودی را برای همهٔ کشورها اعمال می‌کردند؛ در این دو برنامه مقدار راهنمایی که عدد نبود می‌توانست خواندن کل فهرست سرورها را مختل کند؛ Linux حالت‌های TCP را فقط بر اساس تأخیر مرتب می‌کرد. همه در یک مجموعه قاعده ادغام شدند.

همین قواعد در یک بستهٔ متن‌باز Go هم پیاده‌سازی شد و همان 46 بردار را با موفقیت می‌گذراند. موتور در برنامه‌های Android، Windows و Linux در حالت سایه تعبیه شده است: هنگام اتصال، تصمیم خود برنامه با تصمیم موتور مقایسه می‌شود و اگر تفاوتی باشد ثبت می‌شود، اما تصمیم با برنامه است. اگر موتور خطا بدهد ده دقیقه غیرفعال می‌شود. وقتی تفاوت‌ها در حالت سایه به صفر برسد، تصمیم به موتور واگذار خواهد شد؛ موتور هنوز در iOS تعبیه نشده است.

4عرضهٔ مرحله‌ای

بخش برنامهٔ 3.0 به‌گونه‌ای به نسخه‌ها اضافه شد که تصمیم عرضه از راه دور گرفته شود: Android 2.9.2، Windows 2.9.7، Linux 1.5.3 و سری iOS 5.9. پنل در پاسخ فهرست سرورها پرچم `features.adaptive_connect_3` را برمی‌گرداند. اینکه کدام دستگاه در گروه عرضه قرار بگیرد با یک سطل پایدار تعیین می‌شود که از چکیدهٔ SHA-256 هویت دستگاه به دست می‌آید؛ تا وقتی درصد عوض نشود، همان دستگاه در همان گروه می‌ماند. برنامه آخرین پرچم را ذخیره می‌کند و تا وقتی به API نمی‌رسد از آن استفاده می‌کند.

تاریخنسبتپلتفرم‌ها
16 اکتبر 202610 %Android، Windows، iOS
17 اکتبر 202615 %Android، Windows، iOS
20 اکتبر 2026100 %Android، Windows، iOS

بخش‌هایی که از راه دور فعال می‌شوند، شروع با راهنمایی شبکه و مجموعهٔ بازیابی هستند. تشخیص سریع قطعی، قاعدهٔ ترک سرور، نشانی‌های ذخیره‌شدهٔ API و قواعد مشترک همراه با نسخه به دست همهٔ کاربران رسید. Linux آگاهانه از عرضهٔ از راه دور کنار گذاشته شد: شمار کاربران برای مقایسه کافی نیست و در نسخهٔ 1.5.3 افزایشی در خطاهای اتصال وجود داشت که به 3.0 ربطی نداشت. بازگشت با یک تنظیم انجام می‌شود و به به‌روزرسانی برنامه نیاز ندارد.

5اندازه‌گیری‌ها

اندازه‌گیری2.03.0چگونه اندازه‌گیری شد؟
تشخیص قطعی54 ثانیه (Android)، 34 ثانیه (Windows)، میانگین میدانیحدود 11 ثانیهآهنگ ناظر؛ آزمون‌های واحد و رایانهٔ آزمون
قطعی کل وقتی ترافیک به سمت سرور 45 ثانیه قطع می‌شود50 ثانیه22.4 ثانیهرایانهٔ آزمون Windows، با قاعدهٔ دیوار آتش روی دستگاه
از راه‌اندازی تا اتصال وقتی قطع‌کن اضطراری نگه داشته شده است21–25 ثانیه5.1–5.2 ثانیهرایانهٔ آزمون Windows، راه‌اندازی مجدد مکرر
نخستین اتصال در شبکه‌ای بدون حافظهترتیب ثابت حالت‌ها1.6 ثانیه (با حالتِ راهنمایی)دستگاه آزمون Android
اتصال وقتی به API دسترسی نیستجایی برای اتصال نبود12 ثانیه پس از لمس متصل استدستگاه آزمون Android، API مسدود، حافظهٔ نهان نادیده گرفته شد

در میدان، در روزهای پس از 16 اکتبر، موفقیت اتصال در Android در بازهٔ 98.3–98.6 % اندازه‌گیری شد (در هفته‌های پیشین روز به روز بین 80 % و 98 % تغییر می‌کرد)؛ در Windows 2.9.8 برابر 97.4 % بود. این تفاوت را فقط به 3.0 نسبت نمی‌دهیم: چون تله‌متری از نظر ساختار ناشناس است، دستگاه‌های گروه 3.0 از بقیه جدا نمی‌شوند و در همان نسخه‌ها اصلاحات دیگری هم منتشر شد. در طول عرضه، هیچ شکایت یا افت موفقیتی که به 3.0 نسبت داده شود دیده نشد؛ تصمیم‌های عرضه بر همین معیار تکیه داشتند.

6حریم خصوصی

بخش‌های یادگیرندهٔ 3.0 به هیچ داده جدیدی از کاربر نیاز ندارند. تله‌متری اتصال از نظر ساختار ناشناس است: رویدادها فقط به‌صورت مجموع‌های روزانه در دو جدول جدا که سطر مشترکی ندارند نوشته می‌شوند.

  • جدول شبکه: کشور + ASN (از توکن امضاشدهٔ شبکه)، حالت، شمار نتایج. سرور ندارد.
  • جدول سرور: سرور × کشور کلاینت، شمار نتایج. ASN ندارد.
  • در هیچ جدولی حساب، هویت دستگاه یا نشانی IP وجود ندارد؛ با ترکیب دو جدول نمی‌توان به یک کاربر رسید.
  • حافظهٔ آخرین سرور کارآمد، علامت‌های توقف و جریمه‌ها روی دستگاه نگه داشته می‌شود و با پنل به اشتراک گذاشته نمی‌شود.
  • سطل عرضه از چکیدهٔ یک‌طرفهٔ هویت دستگاه محاسبه می‌شود؛ اینکه کدام دستگاه در کدام گروه است ذخیره نمی‌شود.

جزئیات در گزارش امنیتی و سیاست حریم خصوصی آمده است.

7موتور تداوم: CSL آلفا

لایهٔ نشست Colitu یا Colitu Session Layer (CSL) همان لایهٔ نشستی است که در گزارش 2.0 به‌عنوان کار آینده از آن یاد شد. هدف آن این است که اتصال‌های باز حتی وقتی تونل زیر آن‌ها عوض می‌شود قطع نشوند: نشست روی چند خط حامل (lane) پیش می‌رود و اگر یک خط بمیرد، نشست روی خط دیگر ادامه می‌یابد. کد منبع با مجوز Apache-2.0 باز است: github.com/colitu/csl.

CSL امروز در مرحلهٔ آلفا است: از طریق گزینهٔ «Seamless session (alpha)» در حالت پیشرفتهٔ برنامهٔ Windows فقط روی حساب‌های آزمایشی و یک سرور آزمایشی جداگانه در دسترس است. برای هر دستگاه یک شناسهٔ نشست جداگانه ساخته می‌شود؛ سمت سرور فقط به‌صورت محلی گوش می‌دهد. وقتی CSL خاموش باشد یا شکست بخورد، برنامه به اتصال معمولی برمی‌گردد. برای دسترسی عمومی تاریخی نمی‌دهیم.

8محدودیت‌ها

  • قواعد، نه مدل. شروع «پیش‌بینانه» یعنی قواعدی که از تجمیع‌های ناشناس به دست آمده‌اند، نه یک مدل آماری. در شبکه‌هایی که داده کمی دارند راهنمایی وجود ندارد و رفتار 2.0 اعمال می‌شود.
  • دامنهٔ اندازه‌گیری‌ها. نتایج آزمایشگاهی با یک رایانهٔ آزمون و یک تلفن آزمون و با خطاهای تولیدشده روی دستگاه به دست آمد؛ روی سرورهایی که کاربران واقعی دارند آزمون خطا انجام نشد. نمی‌توان آن را به هر شبکه‌ای تعمیم داد.
  • موتور Go در حالت سایه است. تصمیم هنوز در کد خود هر برنامه است؛ در iOS موتوری وجود ندارد.
  • در Linux راهنمایی‌های شبکه و مجموعهٔ بازیابی هنوز غیرفعال‌اند.
  • جریان‌های باز TCP تا زمانی که CSL به‌طور عمومی در دسترس نباشد ممکن است هنگام تغییر مسیر قطع شوند؛ مرورگرها و برنامه‌ها معمولاً خودشان دوباره متصل می‌شوند.

9گام‌های بعدی

  • واگذاری تصمیم‌ها به موتور Go پس از بسته شدن تفاوت‌های حالت سایه؛ افزودن موتور به iOS.
  • بردن CSL به مرحلهٔ بتا: Android، پشتیبانی از دیتاگرام UDP و «حالت تماس» که ترافیک حیاتی تماس‌های صوتی و تصویری را همزمان روی دو خط می‌فرستد.
  • استتار تطبیقی: برای هر شبکه انتخاب از میان تنظیمات انتقال موجود.
  • وارد کردن Linux به عرضه پس از راستی‌آزمایی بیشتر.

این موارد یک نقشهٔ راه‌اند، نه وعدهٔ تاریخ یا نتیجه. با عرضهٔ هر یک، این گزارش به‌روز خواهد شد.

10نتیجه‌گیری

2.0 اصل «مسیر خراب‌شونده را تشخیص بده و بازیابی کن» را بنا نهاد. 3.0 آن را در سه جهت گسترش می‌دهد: تلاش کور کمتر با راهنمایی‌های ناشناس شبکه، اتصال مستقل از API با مجموعهٔ بازیابی و نشانی‌های ذخیره‌شده، و قطعی‌هایی که در حدود 11 ثانیه تشخیص داده می‌شوند. بردارهای آزمون مشترک تضمین می‌کنند که چهار برنامه در وضعیت یکسان تصمیم یکسان بگیرند. بخش تداوم و استتار هنوز در ابتدای راه است؛ دربارهٔ آن‌ها با نتایج اندازه‌گیری‌شده گزارش خواهیم داد. طراحی نسخهٔ پیشین و یک آزمون خطای یک‌ساعته در گزارش Adaptive Connect 2.0 آمده است.

·منابع

  1. RFC 8305, Happy Eyeballs Version 2: Better Connectivity Using Concurrency.
  2. RFC 9000, QUIC: A UDP-Based Multiplexed and Secure Transport.
  3. RFC 5482, TCP User Timeout Option.
  4. گزارش فنی Colitu Adaptive Connect 2.0، 10 اکتبر 2026.
  5. Colitu Lab، آزمون رگرسیون خطای Adaptive Connect (faultlab).
  6. کد منبع Colitu Session Layer (CSL)، github.com/colitu/csl.