در کارگاه بستهبندی نارون در شهرک صنعتی کاوه، کامپیوتر دفتر اداری نمیتواند دستگاه حضور و غیاب را که سی متر آنطرفتر روی دیوار است باز کند، و دستگاه هم گزارشش را برای همان کامپیوتر نمیفرستد. هر دو به اینترنت میرسند، هر دو نشانی دارند، و به کسی که برای تعمیر آمده گفتهاند شبکه قطع است، که آشکارا نیست. ماسک تعیین میکند کدام نشانی محلی است و کدام باید از مسیریاب رد شود، و در این ساختمان دو دستگاه دو جواب متفاوت به همین یک پرسش میدادند.
این خرابی همان چیزی است که اعتماد بیشتر آدمها به شبکه را تمام میکند، و دلیلش یکی است: نشانی و نام و مسیر را سه واقعیت جدا یاد گرفتهاند و یک خرابی واقعی پرسشِ «کدامیک از اینها دارد دروغ میگوید» است. چیزی که اینجا ارزش دارد یک ترتیب پرسیدن است، نه فهرست بلندتری از تعریفها.
عددی که تصمیم میگیرد چه کسی محلی است
کامپیوتر اداری روی 192.168.0.20 نشسته با ماسک 255.255.254.0، و دستگاه حضور و غیاب روی 192.168.1.50 با ماسک 255.255.255.0. ماسک دوم یعنی فقط سه عدد اول شبکه محلی است، پس دستگاه، کامپیوتر را بیرونی میبیند و بسته را به دروازه خودش تحویل میدهد، و آن دروازه هرگز چیزی درباره شبکه اداری نشنیده. ماسک اول یعنی دو عدد اول و نیمی از سومی، پس کامپیوتر همان دستگاه را محلی میبیند و به جای تحویل دادن، روی سیم صدایش میزند، جایی که کسی نیست تا جواب بدهد. هر دو دقیقا همان کاری را میکنند که پیکربندیشان میگوید.
هیچکس هم چیزی را عوض نکرده بود. دستگاه حضور و غیاب را پیمانکار دیگری نصب کرده بود و آن پیمانکار مودم خودش را با محدوده جداگانهای آورده بود، که همان کاری است که در بیشتر کارگاهها با دوربین مداربسته هم میشود: هر پیمانکار محدوده خودش را میآورد و هیچکس مالک کل نقشه نیست. نتیجه ساختمانی است با دو شبکه که هرکدام به تنهایی بیعیباند.
ترتیب پرسیدن، و دستوری که هر لایه را متهم میکند
ip neigh show 192.168.1.50- میدهد
192.168.1.50 dev eth0 FAILED
ip neigh show برای نشانیای که کسی جوابش نداده FAILED مینویسد، و این تنها دستوری است که میگوید دستگاه شما اصلا سراغ مسیریاب نرفته. یک نشانی که در این فهرست FAILED است یعنی روی سیم محلی دنبالش گشتهاید، یعنی ماسکتان آن را محلی دانسته، و اگر واقعا محلی نباشد همینجا پرونده بسته میشود بیآنکه لازم باشد کسی به سراغ نامها یا برنامهها برود. همان نشانی روی دستگاهی که ماسک درست دارد به جای FAILED یک نشانی سختافزاری برمیگرداند.
پرسش بعدی این است که مسیر کجا تمام میشود. traceroute میگوید مسیر کجا ایستاده، نه چه کسی خرابش کرده، و همین تمایز است که آن را مفید میکند به جای گمراهکننده: مسیری که روی جهش سوم میمیرد فقط میگوید بسته به سوم رسیده و به چهارم نرسیده. نمیگوید دستگاه سوم خراب است، و بارها دستگاه سوم سالم است و صرفا حاضر نیست میان دو شبکهای که چیزی دربارهشان نمیداند مسیریابی کند. خواندن درست همین خروجی بیشترِ پیدا کردن اینکه کدام لایه خراب است است.
خرابیای که شبیه کندی است
یک خرابی هم هست که هیچ خطایی تولید نمیکند: درخواستهای کوچک جواب میگیرند، بزرگها میمانند، و نشانهاش سایتی است که بعضی صفحههایش باز میشود و بعضی نه. ping -M do -s 1472 بستهای میفرستد که تکه نمیشود، و همان MTU را میآزماید؛ عدد را با سرآیندها جمع بزنید به ۱۵۰۰ میرسد، که اندازه معمول یک قاب اترنت است. اگر این یکی جواب ندهد و همان دستور با عدد کوچکتر جواب بدهد، تشخیص کامل شده. روی هر تونلی که یک لایه بستهبندی اضافه میکند این اتفاق عادی است، و هیچ ابزاری که فقط بسته کوچک میفرستد آن را نمیبیند.
لایهای که در متنهای انگلیسی وجود ندارد
یک ردیف دیگر هم اینجا به پشته اضافه میشود: مسیر بیرون، و رفتاری که برای هر مقصد فرق میکند. یک نام روی دو دستگاه دو نشانی میگیرد اگر دو حلکننده متفاوت جواب داده باشند، و این حالت اینجا استثنا نیست. کسی که برای رسیدن به منابع توسعهدهنده حلکنندهای مثل شکن را روی کارت شبکهاش گذاشته، برای همان نام جوابی میگیرد که همکار کناریاش نمیگیرد، و هر دو مطمئناند شبکه یکی است. آزمونش دو دستور است: dig +short panel.example @192.168.1.1 و همان نام با نشانی یک حلکننده دیگر پس از @، و دو جواب متفاوت یعنی بحث کردن درباره سرویس بیفایده است. نامگذاری و شمارهگذاری دستگاهها همان خوشهای است که این دو را از هم جدا میکند.
یک بسته، یک پرسش
دوراهی هر بسته، که عددی تصمیمش را میگیرد و کسی نگاهش نمیکند
هر دو شاخه بیعیب کار میکنند. اینکه یک دستگاه کدام را میرود ماسکش تعیین میکند، و ماسک اشتباه شبکهای میسازد که هیچ ایرادی ندارد و کار هم نمیکند.
- ماسک میگوید بلهروی سیم محلی صدایش کنهیچ مسیریابی در کار نیست و بسته از سوییچ بیرون نمیرود
- حتی وقتی مسیریابی غلط تنظیم شده باشد کار میکند
- همان لحظهای میشکند که دو دستگاه واقعا روی دو شبکه باشند
- کاری که کامپیوتر اداری با ماسک پهنترش میکرد
- ماسک میگوید نهتحویلش بده به دروازهحالا یک مسیریاب باید از هر دو شبکه خبر داشته باشد، و نداشت
- رفتار درست است، و بسته جلوتر دور ریخته میشود
- traceroute روی همان جهشی میایستد که چیزی به آن نگفتهاند
- کاری که دستگاه حضور و غیاب با ماسک باریکترش میکرد
شکل نمیگوید کدام ماسک درست است، چون هیچکدام نیست. خرابی این است که به دو گروه دستگاه در یک ساختمان دو جواب متفاوت به یک پرسش داده شده.
جایی که کار میایستد
ایست اینجا یک آزمون است که همه میزنند و هیچ چیز را رد نمیکند: پینگ گرفتن از یک نشانی بیرونی. پینگ به 8.8.8.8 جواب میدهد و نتیجهای که از آن گرفته میشود «شبکه سالم است» است، در حالی که تنها چیزی که ثابت شده این است که یک مسیر پیشفرض هست و یک مقصد خاص جواب میدهد. درباره سیم محلی چیزی نمیگوید، درباره ماسک هیچ، و درباره مقصدی که واقعا لازم است هم هیچ. در کارگاه نارون همین یک آزمون سه بار زده شده بود و هر سه بار جواب داده بود.
ایست دوم بیسیم است و مسئلهای فیزیکی است که لباس شبکه پوشیده. لینکی که پای میز کار میکند و کنار درِ بارگیری نمیکند پیکربندیاش عوض نشده، و هیچ مقدار دانش پروتکل کمکش نمیکند؛ دیوار آجری و بتنی ضخیم و باند ۲٫۴ گیگاهرتزی که هر مودم و هر دوربین ساختمان روی آن نشسته توضیح بیشتری میدهند تا هر لاگی. به همین دلیل رادیو، و هرچه با آن تداخل میکند خوشهای جداست و نه یک بخش، و جعبههایی که قرار بود میان دو شبکه نارون مسیریابی کنند در جعبههای میان دستگاهها هستند.
چه چیزی امروز باز میشود
mtr جای اجرای مکرر traceroute و چشمی مقایسه کردن خروجیها را گرفت: مسیر را پیوسته میگیرد و برای هر جهش درصد از دست رفتن را نگه میدارد، که تفاوت میان جهشی که خراب است و جهشی که فقط جواب پینگ نمیدهد را نشان میدهد. رایگان و متنباز است و در مخزن هر توزیع هست. tcpdump روی سروری که میزکار ندارد از قبل نصب است و همان کار را بدون هیچ نصبی میکند، و خروجیاش را میشود در فایل ریخت و جای دیگری خواند.
وقتی دستورها با هم اختلاف پیدا کنند، Wireshark نشان میدهد واقعا روی سیم چه بوده و بحث را تمام میکند. رایگان و متنباز است، جای حدس زدن از روی فایلهای لاگ و بحث میان دو تیم را گرفت، و خواندن یک ضبط مهارتی است که یک بعدازظهر شروع کردنش میارزد. مدلی که به همه اینها ترتیب میدهد در مدلی که بقیه چیزها به آن ارجاع میدهند است، و تنظیم کردن همان جعبهها به جای فقط نام بردنشان در پیکربندی جعبهها، نه فقط نام بردنشان.
پرسشی که بعد از این میآید این است: وقتی مسیر درست شد و کسی عمدا از همان مسیر استفاده کرد، چه چیزی جلویش را میگیرد و چه چیزی نمیگیرد. دفاع از سیستمها، و اول از همه فهمیدن حملهها از همینجا شروع میشود؛ و اگر خود دستگاهی که باید جواب بدهد مشکوک باشد، ماشینهایی که به درخواستها جواب میدهند یک لایه بالاتر است و لایهای میان سختافزار و هرچه اجرا میکنید یک لایه پایینتر. ترتیبی که این سه را از هم جدا میکند در کامپیوتر، شبکه، و زیرساخت زیر بقیه چیزها از کف تا بالا نوشته شده.