End-to-End در شبکهکاری دقیقاً چه معنی دارد؟
تجزیهوتحلیل عملی اتصال end-to-end، دلایل نقص آن در شبکههای واقعی، و نحوه تست آن با traceroute و بررسی MTU.
وقتی مردم میگویند یک اتصال «end to end» است، منظورشان این است که دادهها از اپلیکیشن منبع تا اپلیکیشن مقصد بدون اینکه یک middlebox در میان مسیر بهطور خاموش آن را بازنویسی یا قطع کند، سفر میکند. تا زمانی که مسیر یک بسته واقعی را از طریق NAT، firewall، load balancer و proxy ها ردیابی نکنید، ساده به نظر میرسد.
اصل end-to-end
این ایده از مقالهای در سال ۱۹۸۴ توسط Saltzer، Reed و Clark میآید که استدلال میکردند برخی توابع مانند قابلیت اطمینان و رمزگذاری متعلق به نقاط پایانی شبکه است، نه وسط. شبکه اصلی فقط باید بستهها را ارسال کند. نقاط پایانی مسئول بررسی خطا، ارسال مجدد و ترتیب دادن هستند.
TCP واضحترین نمونه است. Router های وسط، شمارههای توالی یا تایید segment ها را ردیابی نمیکنند. این کار دو میزبانی است که TCP stack های آنها را اجرا میکنند. لایه شبکه (IP) فقط تحویل بهترین تلاش را انجام میدهد، و TCP در هر انتها آنچه که گم شده یا مرتبشدگیاش خراب است را اصلاح میکند.
جایی که end-to-end امروزه فروپاشی میکند
شبکههای مدرن این اصل را مدام نقض میکنند، معمولاً به دلایل عملیاتی خوب:
- NAT IP منبع و port را بازنویسی میکند، بنابراین بستهای که سرور میبیند بستهای نیست که کلاینت فرستاد.
- TLS-terminating proxy ها و load balancer ها (مثل AWS ALB یا nginx reverse proxy) یک جلسه TCP/TLS را پایان میدهند و جلسهی جدیدی را شروع میکنند. نقطه پایانی واقعی کلاینت proxy است، نه سرور اپلیکیشن.
- Stateful firewall ها وضعیت اتصال را ردیابی میکنند و میتوانند بستههایی را که با دنبالههای مورد انتظار مطابقت ندارند، حذف کنند و بهطور موثر خود را در گفتوگو تزریق کنند.
- CGNAT در شبکههای ISP به این معنی است که بسیاری از مشتریان یک IP عمومی را به اشتراک میگذارند، فرض را شکستهاند که IP به یک میزبان نگاشت شود.
این بخش عملی هنگام رفعایرادات مهم است. اگر یک کاربر گزارش دهد «اتصال قطع شد»، باید بدانید که آیا در laptop آنها، home router آنها، ISP، CDN edge node، load balancer یا سرور origin قطع شد. تفکر end-to-end شما را مجبور میکند تمام زنجیره را ردیابی کنید، نه صرفاً بررسی log های سرور خود.
تست اتصال end-to-end
ابزارهایی که واقعاً مسیر را نشان میدهند، نه فقط موفقیت/شکست:
# مسیر را hop به hop ردیابی کنید
traceroute 8.8.8.8
# در Linux، MTR آمار مداوم در هر hop میدهد
mtr google.com
# بررسی مسائل MTU که بستهها را قطعهبندی یا بهطور خاموش حذف میکند
ping -M do -s 1472 8.8.8.8
آخرین دستور شایستهی شناخت خوب است. شکستهای Path MTU discovery یک مسئلهی کلاسیک «شبیه اتصال end-to-end به نظر میرسد اما در واقع نیست» هستند. بستههای کوچک مثل TCP SYN خوب عبور میکند، اما وقتی یک payload تماماندازه ارسال میکنید، برخی hop ها در میان مسیر بهطور خاموش آن را حذف میکنند زیراخیلی بزرگ است و ICMP «fragmentation needed» توسط یک firewall مسدود میشود. اتصال آویزان میماند و همه اپلیکیشن را سرزنش میکنند.
برای TCP بهطور خاص، tcpdump یا ss -ti در هر دو انتها به شما میگوید که آیا دو میزبان حتی موافق هستند که یک اتصال باز دارند:
ss -ti dst 203.0.113.5
اگر یک سمت تصور کند اتصال ESTABLISHED است و دیگری چیزی نشان ندهد، چیزی در میان (معمولاً یک firewall که اتصالات غیرفعال را timeout میکند) بهطور خاموش آن را کشته است.
چرا این برای امنیت مهم است
رمزگذاری end-to-end نسخهی امنیتیرو این همان مفهوم است. TLS بین یک مرورگر و یک CDN edge همانند TLS بین مرورگر و سرور origin شما نیست. اگر CDN TLS را پایان دهد و plaintext را (یا یک اتصال TLS تازه) به backend خود ارسال دهد، دو hop رمزگذاریشدهی جداگانه دارید، نه یک کانال رمزگذاریشدهی پیوسته. برای بیشتر موارد خوب است، اما اگر چیزی حساس را مدیریت میکنید، باید دقیقاً بدانید که رمزگشایی کجا اتفاق میافتد و کیا میتواند plaintext را در هر hop ببیند.
منطق مشابه برای VPN های اعمال میشود. یک VPN «full tunnel» رمزگذاری end-to-end را از دستگاه شما تا گرهی خروج VPN فراهم میکند، اما اتصال از گرهی خروج تا سرور مقصد واقعی یک hop جداگانه با خصوصیات امنیتیی خود است.
نتیجه عملی
وقتی کسی میگوید یک مسیر شبکه end to end است، بپرسید: دقیقاً بین کدام دو نقطه end to end است؟ کلاینت و load balancer؟ load balancer و سرور اپلیکیشن؟ نامگذاری نقاط پایانی واقعی ادعای شبکهای مبهم را به چیزی تبدیل میکند که میتوانید با packet capture تست کنید.
اگر میخواهید دربارهی ردیابی traffic واقعی و خواندن packet capture ها عمیقتر بروید، قسمتهای Wireshark و TCP/IP fundamentals را در پلتفرم DEFENSE_GRID Korra Studio بررسی کنید.
با کمک هوش مصنوعی نوشتهشده، بازبینی و منتشرشده توسط Michal Pilch (CISSP)، Korra Studio.
این یکی از یادداشتهای پایگاه دانش Korra Studio است — پلتفرم هر موضوع را با مربی یکبهیک جفت میکند.
شروع رایگانarrow_forward