یک کاربرد دستور route (ویندوز)

موقعی که گوشی رو به PC به اصطلاح Tether میکردم، یعنی گوشی و رایانه با هم شبکه میشد که رایانه بتونه از اینترنت گوشی استفاده کنه، این سوال برای من پیش آمد که چه چیزی باعث میشه که اتصال شبکهء گوشی بر اتصال کارت شبکهء خود رایانه که به مودم ADSL وصل بود ترجیح داده میشه. چون بعضی وقتا هدف از Tether کردن این نبود که ارتباطات اینترنت از گوشی عبور کنه، و این دردسرساز میشد. بعضی وقتا هم به دلایلی میخواستم بتونم بین اینترنت ADSL و گوشی به سرعت سویچ کنم؛ با گزینه های خود گوشی این کار اونقدری که میخواستم سریع نبود و اذیت میکرد.

ابتدا فکر کردم گفتم شاید چون اتصال شبکه گوشی بعد از اتصال شبکه مودم ADSL ایجاد شده، ویندوز اون رو بر اتصال قبلی ترجیح میده و منطقش اینطوریه. اما با خاموش و روشن کردن مودم ADSL، که باعث حذف و ایجاد مجدد اتصال شبکهء اون میشد، همچنان چیزی تغییری نکرد.
نکتهء دیگری که از ابتدا بهش توجه کردم البته این بود که سرعت کانکشن برای اتصال گوشی که توی ویندوز نشان میداد ‎425.9 Mbps بود، که از سرعت ‎100 Mbps که برای اتصال شبکهء استاندارد سیستم بود بیشتره. بنابراین فکر کردم شاید ویندوز اون اتصال شبکه ای رو که سرعت اسمی بیشتری داره بعنوان اتصال پیشفرض برای اینترنت استفاده میکنه. گرچه این سرعت اسمی هست و سرعت کانال رابط بین دو دستگاه هست و عملا سرعت شبکه یا اینترنت گوشی با رایانه به این سرعت حتی نزدیک هم نیست.
اما در همهء اینها ابهاماتی وجود داشت و ضمنا من دنبال روشی بودم که بتونم این مسائل رو خودم کنترل کنم. پس از یکسری سرچ با کیوردهای مناسب که البته سرچ راحتی نبود و باید کاملا حرفه ای عمل میکردی، بالاخره شانس آوردم و علت و روش این کار رو توی منابعی که پیدا و مطالعه کردم فهمیدم!
بله علت و روش کار همانا همه با دستوری بنام route در ویندوز مشخص میشه! حتما اصطلاح routing table تاحالا به گوشتون خورده. بله این جدول در پروتکل IP جدولی است که در هر ماشین و گره در اینترنت، مسیرهایی رو که بسته های با آدرسهای مختلف باید به/از هرکدام از اونا ارسال بشن مشخص میکنن. در کامپیوتر شما هم طبیعتا چنین جدولی وجود داره که مشخص میکنه هر آدرس یا محدوده ای از آدرسهای IP باید از طریق کدام کارت شبکه ارسال بشن و خلاصه به چه مسیری هدایت بشن.
با این دستور:
route print
میتونید لیست Entry های این جدول رو در رایانه خودتون مشاهده کنید.
اگر از ساختار آدرسها و مباحثی مثل Netmask و آدرسهای خاص مثل آدرس Broadcast و این حرفها اطلاعات کافی داشته باشید، با کمی دقت و صرف وقت میتونید معنای تمام اطلاعات این جدول رو کم و بیش متوجه بشید.
البته در این مورد خاص خوشبختانه کار ما ساده است و نیاز به این همه اطلاعات و پیچیدگی نیست. چیزی که ما در اینجا باهاش کار داریم مسیر پیشفرض (Default route) است که آدرس 0.0.0.0 رو داره. خب فکر میکنم تقریبا از اسمش مشخص باشه که چیه. هر بستهء IP که آدرس مقصدش با آدرس مقصد route های دیگر سازگار نباشه، از طریق این route ارسال میشه.
یک نمونه از خروجی دستور route print قبل از اینکه گوشی رو با PC شبکه کنم:
Active Routes:
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 192.168.1.1 192.168.1.33 20
127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1
192.168.1.0 255.255.255.0 192.168.1.33 192.168.1.33 20
192.168.1.33 255.255.255.255 127.0.0.1 127.0.0.1 20
192.168.1.255 255.255.255.255 192.168.1.33 192.168.1.33 20
224.0.0.0 240.0.0.0 192.168.1.33 192.168.1.33 20
255.255.255.255 255.255.255.255 192.168.1.33 4 1
255.255.255.255 255.255.255.255 192.168.1.33 5 1
255.255.255.255 255.255.255.255 192.168.1.33 2 1
255.255.255.255 255.255.255.255 192.168.1.33 192.168.1.33 1
Default Gateway: 192.168.1.1

البته من فقط بخشی از خروجی رو گذاشتنم که route ها رو نشون میده. اطلاعات بیشتری هم بود که چندان مرتبط نبودن و به دلایل مختلف حذف کردم.
خب همونطور که مشاهده میکنید اون خط که آدرس Destination اون 0.0.0.0 و Netmask اون هم 0.0.0.0 است، همون Default route است که مشخص میکنه بسته های IP که آدرس اونا با route های دیگر هماهنگ نیست باید به کدام مسیر ارسال بشن. مشاهده میکنیم که آدرس Gateway اون 192.168.1.1 است که همون آدرس پیشفرض همیشگی و آشنای مودم ADSL است که معرف حضور همگان است. ممکنه بپرسید که پس اون آدرس Interface چیه؛ باید بگم که آدرس Interface همون آدرس کارت شبکهء خودتونه دیگه! الان مودم ADSL و PC شما با هم تشکیل یک شبکهء LAN رو دادن درواقع، و بنابراین هرکدام IP خودشون رو دارن. البته یک سیستم ممکنه بیش از یک اینترفیس و بیش از یک IP هم داشته باشه.
خب حالا خروجی دستور route print رو بعد از اینکه گوشی تلفن همراه رو با رایانه Tether کردم میذارم:
Active Routes:
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 192.168.1.1 192.168.1.33 20
0.0.0.0 0.0.0.0 192.168.42.129 192.168.42.26 10
127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1
192.168.1.0 255.255.255.0 192.168.1.33 192.168.1.33 20
192.168.1.33 255.255.255.255 127.0.0.1 127.0.0.1 20
192.168.1.255 255.255.255.255 192.168.1.33 192.168.1.33 20
192.168.42.0 255.255.255.0 192.168.42.26 192.168.42.26 10
192.168.42.26 255.255.255.255 127.0.0.1 127.0.0.1 10
192.168.42.255 255.255.255.255 192.168.42.26 192.168.42.26 10
224.0.0.0 240.0.0.0 192.168.1.33 192.168.1.33 20
224.0.0.0 240.0.0.0 192.168.42.26 192.168.42.26 10
255.255.255.255 255.255.255.255 192.168.1.33 192.168.1.33 1
255.255.255.255 255.255.255.255 192.168.1.33 4 1
255.255.255.255 255.255.255.255 192.168.1.33 5 1
255.255.255.255 255.255.255.255 192.168.1.33 2 1
255.255.255.255 255.255.255.255 192.168.42.26 192.168.42.26 1
Default Gateway: 192.168.42.129

مشاهده میکنید که حالا یک Default route دیگر هم اضافه شده که آدرس Gateway اون 192.168.42.129 است که این همیشه IP گوشی منه در این حالت.
اما در این مورد مشاهده میکنیم که دو مسیر با آدرس و ماسک 0.0.0.0 وجود داره. یعنی انگار دوتا Default route داریم! حالا سیستم بر چه اساسی مسیر گوشی رو بعنوان مسیر پیشفرض انتخاب میکنه؟
جواب این سوال در پارامتر Metric نهفته است. سیستم اون مسیری رو انتخاب میکنه که Metric کمتری داره. همونطور که مشاهده میکنید عدد Metric پایین تری به مسیر گوشی اختصاص داده شده. میشه گفت Metric پارامتری هست که هزینهء ارسال بسته ها از طریق اون مسیر رو معرفی میده. پس اگر هزینه کمتر باشه، اون مسیر ترجیح داده میشه. البته در اینجا درواقع مثلا اینترنت خود گوشی نسبت به اینترنت ADSL نمیشه گفت هزینهء کمتری داره یا کیفیت بیشتری داره؛ درواقع بعکس از هر جهت بخوای درنظر بگیری معمولا اینترنت ADSL از کیفیت بیشتری از اینترنت موبایل برخورداره و حتی اگر بحث هزینهء مالی هم بخوایم بکنیم معمولا ارزان تر هم درمیاد!! ولی خب بهرحال رایانه که اینقدر هوشمند نیست و اینا رو نمیدونه و بعدم بهرحال ما با Tether کردن داریم مجبورش میکنیم که از این مسیر استفاده کنه! حالا اینکه این عدد Metric رو سیستم از کجا میاره، احتمالا بر اساس سرعت اینترفیس/اتصال که گفتم سرعت اسمی اتصال گوشی بیشتر از کارت شبکه و LAN و اترنت معمولی سیستم هست، لابد بخاطر اونه، ولی شاید منشاء و معیارهای دیگری هم داشته باشه.
حالا بحث و هدف اصلی ما این بود که بتونیم مسیر پیشفرض رو، و بنابراین اتصال اینترنت رو، خودمون از درون رایانه کنترل کنیم. ما میتونیم این کار رو با دستکاری کردن Default route از طریق دستور route انجام بدیم.
من یک نمونه میذارم:
route add 0.0.0.0 mask 0.0.0.0 192.168.1.1 metric 5
من اینجا اومدم و مسیر پیشفرضی رو که به مودم ADSL منتهی میشه به Routing table اضافه کردم و چون Metric رو 5 دادم که عددش کمتر از Metric مسیر گوشی است، بنابراین از حالا سیستم از این مسیر بعنوان مسیر پیشفرض و بنابراین دسترسی به اینترنت استفاده خواهد کرد.
البته این کار رو به روشهای دیگر با این دستور هم میشه انجام داد. مثلا میشه بجای دستور add و اضافه کردن یک route جدید، از دستور change استفاده کنیم و مقدار Metric مسیر مربوط به گوشی رو افزایش بدیم. بهرحال نتیجه یکیه. البته در عمل یک مقدار نکات و رفتارهای غیرمنتظره ممکنه دیده بشه که دیگه خودتون هربار که دستوری رو تست میکنید و بعدش هم با route print ببینید که موجب چه تغییراتی در جدول مسیرها شده، و اونوقت دستتون میاد که دقیقا از چه خط فرمانی استفاده کنید.
پس حالا وقتی ما این خط فرمانها رو داشته باشیم، میتونیم براحتی و سرعت بین دو یا چند کانکشن اینترنت سویچ کنیم. مثلا بین موبایل و ADSL همونطور که تاحالا بر اساسش مثال زدم. این میتونه یه وقتایی واقعا مفید و کار راه اندازه باشه به دلایل مختلف. مثلا من گاهی ADSL که از کار میفته یا مختل میشه از گوشی استفاده میکنم، ولی ممکنه این اختلالات به تناوب پیش بیاد، و چون سرعت و کیفیت ADSL بهتره و هزینهء کمتری هم داره میخوام مدام وضعیتش رو تست کنم و اگر درست شده بود به ADSL سویچ کنم. گاهی هم بخاطر نیاز به فیلترشکن که نسخهء روی گوشی دم دسته و راحتتر کار میکنه به گوشی سویچ میکنم. یه وقتا هم که گفتم اصلا گوشی رو Tether کردم و مثلا با SSH بهش وصل شدم ولی نمیخوام اینترنت از گوشی عبور کنه؛ در اینطور مواقع هم این فرمانها به درد میخورن. گاهی هم شاید بخاطر تستهایی و دور زدن بعضی مشکلات یا محدودیت ها در اینترنت و غیره. خلاصه سناریوهای ممکنی هست و بستگی به میزان خلاقیت و حرفه ای بودن آدم داره که چطوری چکار کنه.
راستی فکر کردم شاید در گام بعدی یه برنامه GUI با پایتون بنویسم که برای سویچ کردن بین گوشی و ADSL نیاز به کار با خط فرمان نباشه و براحتی بصورت گرافیکی بشه این کار رو انجام داد. این برنامه میتونه Default route های موجود در سیستم و آدرسهای IP لازم و اینها رو هم خودش بصورت خودکار تشخیص بده و ارائه کنه. بهرحال در پشت پرده این برنامه هم از همون دستور خط فرمان route برای خواندن و تغییر دادن Routing table سیستم استفاده خواهد کرد، مگر اینکه یک کتابخانه و API برنامه نویسی پیدا کنم که ساده تر باشه و مستقیما از اون API های سیستم عامل استفاده کنم. بهرحال مهم اینه که در هر شرایطی آدم بتونه از هر ابزار در دسترس و بهینه در اون شرایط استفاده کنه و هدف اصلی و نهایی رو به انجام برسونه. مثلا من اگر نمیتونستم با خط فرمان کار کنم الان به این نتایج و اطلاعات هم نرسیده بودم و کارم راه نیافتاده بود و شاید این مقاله هم هیچوقت نوشته نمیشد، چون برای یادگیری و شروع کار بصورت دم دستی و در شرایط محدودیت وقت و اولویت، خط فرمان از API ها و روش برنامه نویسی خیلی راحتتر و سریعتره. برای همه چیز هم که برنامه و اینترفیس گرافیکی نیست یا گاهی هم میشه اما نه به اون راحتی و سرعت روش خط فرمان (مثلا بخاطر عمومی تر بودن و پیچیدگی و چند مرحله ای بودن رابط گرافیکی).

1 دیدگاه در “یک کاربرد دستور route (ویندوز)

  1. بازپینگ: علم خوره

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

*

شما می‌توانید از این دستورات HTML استفاده کنید: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>