«أرسل التنزيلات الكبيرة حول VPN وأبقِ الردود الصغيرة عليه» يبدو كسياسة توجيه، لكنه ليس كذلك. يقرّر الموجّه بمعلومات متاحة في تلك اللحظة: العناوين والمنافذ والبروتوكول وعلامات جدار الحماية والتدفق المحدَّد. الحجم النهائي للاستجابة ليس ضمن هذه المجموعة، لأنه لم يصل بعد، وحين يصبح بوسع الموجّه قياس البايتات يكون قد بدأ بنقلها. إذا أردت التوجيه حسب المهمة، فعلى القرار أن ينتقل إلى نقطة تعرف المهمة، وقائمة التحقق أدناه هي طريقة معرفة ما إذا كان تصميمك يملك هذه النقطة.

لماذا لا يستطيع الموجّه تقدير حجم الاستجابة

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

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

الفحص 1: هل توجد نقطة قرار تستطيع اختيار مسار؟

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

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

الفحص 2: ماذا تخبرك البيانات الوصفية فعلًا؟

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

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

الفحص 3: هل التدفق موجود بالفعل؟

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

conntrack -L -p tcp --dport 443 | head -5
ip route get 203.0.113.10
ss -tn state established dst 203.0.113.10

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

الفحص 4: هل المطلب الحقيقي هو الكمون لا المخرج؟

كثير جدًا من الطلبات التي تقول «أرسل حركة الكميات الكبيرة إلى مكان آخر» هي في الحقيقة شكاوى من أن نقلًا كبيرًا يجعل العمل التفاعلي يبدو بطيئًا. تلك مسألة جدولة، ولها جواب في الجدولة: الانتظار العادل أو سياسة نطاق ترددي مدعومة على المسار الحالي تمنع تدفقًا كبيرًا من تجويع رسالة دردشة دون نقل أي منهما.

tc qdisc replace dev eth0 root cake bandwidth 100mbit

معالجة العَرَض بهذه الطريقة تُبقي قرار المخرج حيث وضعته سياسة الأمان، وهي قابلة للعكس بأمر واحد. أما تغيير المخرج لفئة كاملة من الحركة فهو تغيير سياسة له تبعات على المصادقة والتسجيل وقواعد الوصول، لذا لا ينبغي أن يكون أول أداة يُلجأ إليها عند شكوى تتعلق بالكمون.

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

احتفظ بقائمة التحقق في سجل التغيير: نقطة القرار، والحقل أو المهمة التي تقودها، وهل التدفق موجود بالفعل، وهل العَرَض المقاس كان كمونًا أم مخرجًا. أربعة أسئلة، والسياسة التي تجيب على الأربعة كلها سياسة يمكنك تشغيلها بدلًا من الدفاع عنها.

مقالات ذات صلة