ابدأ الآن سيريا بروكسي syriaproxy أول خدمة بروكسي مختصة بسوريا

سرعة البروكسي: زمن الاستجابة والإنتاجية

سرعة البروكسي ليست رقماً واحداً، بل ثلاثة: زمن الاستجابة، والإنتاجية، وزمن وصول أول بايت. البروكسي يضيف مسافة إلى طريق اتصالك فيرفع زمن الاستجابة، وتحدّ أبطأ حلقة في السلسلة إنتاجيته. وتستطيع قياس كل مرحلة على حدة بأمر curl واحد.

ثلاثة مقاييس مختلفة

الصفحات والطلبات الصغيرة تتأثر بزمن الاستجابة أكثر من غيره. أما تنزيل ملف كبير فتحكمه الإنتاجية.

ماذا يحدث قبل أول بايت

هذا تسلسل طلب HTTPS عبر بروكسي HTTP على اتصال جديد:

  1. جهازك يفتح اتصال TCP بالبروكسي: رحلة كاملة بينك وبين البروكسي.
  2. يرسل أمر CONNECT باسم الموقع. البروكسي يحلّ الاسم ويفتح اتصالاً بالموقع، ثم يرد بالموافقة. هذه رحلة إلى البروكسي، ومعها رحلة بين البروكسي والموقع. شرح الأمر في بروكسي HTTPS وأمر CONNECT.
  3. مصافحة TLS بينك وبين الموقع عبر النفق. في TLS 1.3 تأخذ رحلة كاملة واحدة على الطريق كله، كما في RFC 8446، وفي الإصدار 1.2 رحلتين.
  4. الطلب نفسه: رحلة كاملة أخرى على الطريق كله، يضاف إليها وقت معالجة الخادم.

مثال حسابي: إن كانت الرحلة بينك وبين البروكسي 80 ms وبين البروكسي والموقع 20 ms، فالطريق كله 100 ms. يصل أول بايت بعد نحو 380 ms زائد وقت الخادم: 80 للاتصال، و100 لـCONNECT، و100 لـTLS، و100 للطلب.

مع SOCKS5 تختلف الخطوة الثانية فقط. يحدد RFC 1928 تبادلاً لاختيار طريقة المصادقة، ثم المصادقة إن وُجدت، ثم طلب الاتصال بالموقع. وعلى اتصال مفتوح مسبقاً تختفي الخطوات الثلاث الأولى، ويبقى الطلب وحده.

لماذا لا تكفي سرعة خطك

الإنتاجية عبر البروكسي لا تتجاوز أبطأ الحلقات: خطك، ثم الطريق إلى البروكسي، ثم خط البروكسي نفسه، ثم الطريق إلى الموقع. وزمن الاستجابة يدخل هنا أيضاً، لا في أول بايت وحده.

يشرح RFC 6349 السبب: بروتوكول TCP لا يرسل أكثر من حجم النافذة قبل أن يصله تأكيد الاستلام. فالإنتاجية القصوى تساوي حجم النافذة مضروباً في 8 ومقسوماً على زمن الرحلة. وكمية البيانات التي يجب أن تكون «في الطريق» لملء الخط هي حاصل ضرب عرض النطاق في زمن الرحلة (BDP).

مثال: نافذة 64 KB مع رحلة 200 ms تحدّ الاتصال الواحد بنحو 2.6 Mbit/s، مهما كان الخط سريعاً. ولملء خط 12 Mbit/s مع الرحلة نفسها تحتاج نافذة 300 KB على الأقل. ولهذا يكون البروكسي البعيد أبطأ في التنزيل من القريب، حتى بخطوط متساوية. وفقدان الحزم، الشائع في الشبكات اللاسلكية، يخفض الإنتاجية أكثر.

خصوصية المخارج الخلوية

في الشبكة الخلوية يضاف إلى الطريق جزء لاسلكي بين الجهاز والمحطة. زمن الاستجابة فيه يتغيّر مع قوة الإشارة وعدد المستخدمين على المحطة نفسها. لذلك تتفاوت القياسات على مخرج خلوي أكثر مما تتفاوت على خادم في مركز بيانات.

وحين يمتلئ الخط بتنزيل كبير، تتراكم الحزم في ذاكرات الانتظار على الطريق، فيرتفع زمن الاستجابة لكل الاتصالات الأخرى. فإن كان تنزيل يعمل في الخلفية، فتوقّع أن تبطؤ الصفحات معه. وسرعة الرفع في الشبكات الخلوية أقل عادةً من سرعة التنزيل.

القياس بتوقيتات curl

الخيار -w في curl يطبع توقيت كل مرحلة بعد انتهاء الطلب:

curl -s -o /dev/null -x http://HOST:PORT --proxy-user USER:PASS \
  -w 'connect   %{time_connect}\ntls       %{time_appconnect}\nfirstbyte %{time_starttransfer}\ntotal     %{time_total}\n' \
  https://example.com/

كل القيم بالثواني، وكلها تُحسب من بداية الطلب لا من نهاية المرحلة السابقة. هذه معانيها كما في دليل curl:

المتغيرما يقيسهملاحظة مع البروكسي
time_namelookupحتى انتهاء حلّ الاسمالبروكسي هو من يحلّ اسم الموقع، فيقيس هذا اسم البروكسي فقط
time_connectحتى اكتمال اتصال TCP بالمضيف أو بالبروكسيهنا هو الاتصال بالبروكسي، أي المسافة بينك وبينه
time_appconnectحتى اكتمال مصافحة TLS مع المضيف البعيديشمل فتح النفق واتصال البروكسي بالموقع
time_starttransferحتى وصول أول بايتهذا هو زمن أول بايت
time_totalمدة العملية كلهايشمل النقل كاملاً
speed_downloadمتوسط سرعة التنزيل بالبايت في الثانيةاضربه في 8 لتحصل على البت في الثانية

الفروق بين القيم تحدد موضع البطء:

ولقياس الإنتاجية نزّل ملفاً كبيراً، مئة ميغابايت مثلاً، واطبع %{speed_download}. الملفات الصغيرة لا تكفي، لأن TCP يبدأ بطيئاً ثم يكبّر نافذته تدريجياً.

كيف تقيس قياساً يُعتمد عليه

  1. كرّر كل قياس عشر مرات على الأقل، وخذ الوسيط لا المتوسط، لأن قيمة شاذة واحدة تفسد المتوسط.
  2. قِس الأمر نفسه دون -x، فالفرق بين النتيجتين هو كلفة البروكسي.
  3. فرّق بين الاتصال الجديد والاتصال المعاد استخدامه، فالأول يدفع كلفة المصافحات كلها.
  4. اختبر في أوقات مختلفة من اليوم، وعلى الموقع الذي ستستخدمه فعلاً.

كيف تحسّن السرعة

في syriaproxy يخرج اتصالك من شبكة سيريتل للجيل الرابع داخل سوريا، بسرعة تصل إلى 12 Mbit/s. زمن الاستجابة يشمل الطريق منك إلى سوريا ثم إلى الموقع. لذلك تكون المواقع والخدمات السورية أسرع استجابة من المواقع البعيدة عن سوريا.

أسئلة شائعة

لماذا تبدو نتيجة اختبار السرعة عالية والصفحات بطيئة؟

اختبارات السرعة تقيس الإنتاجية بملفات كبيرة. أما الصفحات فتتكون من طلبات صغيرة كثيرة، وكل اتصال جديد بينها يدفع كلفة الرحلات، فيحكمها زمن الاستجابة.

ما الفرق بين Mbit/s وMB/s؟

البايت ثمانية بتات. فـ12 Mbit/s تعادل نحو 1.5 MB/s، وهذا ما يظهر عادةً في برامج التنزيل.

هل بروكسي HTTP أسرع من SOCKS5؟

الفرق صغير في الغالب. SOCKS5 مع المصادقة يحتاج تبادلات أكثر قليلاً عند فتح الاتصال، لكن بعد ذلك ينقل البيانات بالسرعة نفسها. والمسافة إلى البروكسي أهم من البروتوكول.

لماذا يكون القياس الأول أبطأ مما يليه؟

لأن الطلب الأول يدفع كلفة كل شيء: حلّ الأسماء، والاتصال، والمصافحات. الطلبات التالية تستفيد من ذاكرة الأسماء المؤقتة، وقد تستأنف جلسة TLS سابقة أو تعيد استخدام الاتصال نفسه.

قِس زمن استجابة بروكسيك بأداة فحص البروكسي المجانية، دون سطر أوامر.