«دانلودهای بزرگ را دور از VPN بفرست و پاسخ‌های کوچک را روی آن نگه دار» شبیه یک سیاست مسیریابی است، ولی نیست. مسیریاب با اطلاعاتی تصمیم می‌گیرد که در همان لحظه در دسترس است: نشانی‌ها، درگاه‌ها، پروتکل، نشانه‌های firewall، جریان شناسایی‌شده. اندازه نهایی پاسخ در آن مجموعه نیست، چون هنوز نرسیده است، و تا زمانی که مسیریاب بتواند بایت‌ها را بسنجد، در حال حمل آن‌هاست. اگر هدایت بر پایه کار می‌خواهید، تصمیم باید به نقطه‌ای منتقل شود که کار را می‌شناسد، و فهرست بررسی زیر نشان می‌دهد آیا طراحی شما چنین نقطه‌ای دارد.

چرا مسیریاب نمی‌تواند اندازه پاسخ را بسنجد

در لحظه‌ای که بسته‌ای به مسیر نیاز دارد، مسیریاب حداکثر چند بسته نخست یک جریان را دیده است. می‌تواند بگوید چه کسی با چه کسی سخن می‌گوید، با چه پروتکلی، با چه نشانه‌ای، و چه اندازه بایت تا کنون گذشته است. بایت‌های تا کنون گذشته را توصیف می‌کنند. اندازه پاسخ ویژگی پاسخی است که هنوز تولید نشده، و در پاسخ‌های تکه‌تکه یا جریانی ممکن است هرگز از پیش دانستنی نباشد.

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

بررسی 1: آیا نقطه تصمیمی وجود دارد که بتواند مسیر انتخاب کند؟

مؤلفه‌ای را که انتخاب را انجام می‌دهد نام ببرید، سپس بگویید در لحظه انتخاب چه می‌داند. به‌روزرسانی که از مجموعه‌ای مستند از میزبان‌ها می‌گیرد، پیش از آغاز انتقال هدف خود را می‌داند. سرویس دانلودی که فراداده را بررسی و سپس درخواست را باز می‌کند، پیش از وجود اتصال کار را می‌داند. proxy همکار می‌تواند سیاست سطح درخواست را اعمال کند یا پاسخ را در حافظه نهان نگه دارد، بدون آنکه خود را مسیریاب جا بزند.

اگر پاسخ «دروازه» باشد، فهرست بررسی از پیش شکست خورده است. دروازه می‌تواند جریان‌های شناخته‌شده را بر پایه مقصد، نشانه یا بخش مشتری دسته‌بندی کند و آن‌ها را از نخستین بسته در مسیری معین بفرستد، که برای به‌روزرسان تأییدشده غالباً کافی است و برای اندازه پاسخ ناشناخته هرگز کافی نیست.

بررسی 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

پرداختن به نشانه به این شکل تصمیم خروجی را همان‌جا می‌گذارد که سیاست امنیتی گذاشته بود، و با یک فرمان بازگشت‌پذیر است. تغییر خروجی برای یک کلاس کامل از ترافیک تغییری در سیاست است با پیامدهایی برای احراز هویت، ثبت رویداد و قواعد دسترسی، پس نباید نخستین ابزار برای شکایت از تأخیر باشد.

اگر نیاز واقعاً خروجی اینترنت دیگری است، آن را با همین واژه‌ها بگویید و در مرزی پشتیبانی‌شده پیاده کنید: اتصالی تازه از گردش‌کاری تأییدشده، یا برنامه‌ای که درخواست خود را از خروجی انتخابی باز می‌کند. سپس ثبت کنید کدام کارها از کدام خروجی استفاده می‌کنند، تا نفر بعدی مجبور نباشد آن را از جدول مسیریابی استنتاج کند.

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

مقالات مرتبط