اینترنت در واقع یه شبکه بزرگ و یکپارچه نیست؛ از هزاران شبکه مختلف تشکیل شده که هر کدوم متعلق به یه ISP، اپراتور، دیتاسنتر، شرکت بزرگ یا سازمانه. به هر کدوم از این شبکههای مستقل میگیم AS یا Autonomous System. مثلاً یه ISP یه AS داره، یه اپراتور موبایل یه AS دیگه و یه شرکت بزرگ هم ممکنه AS خودش رو داشته باشه.
حالا مشکل اینجاست که این شبکهها باید بدونن برای رسیدن به شبکههای دیگه از چه مسیری برن. مثلاً فرض کن یه ISP توی ایران میخواد به یه سرور توی دیتاسنتر آلمان وصل بشه. ISP باید بدونه Prefix مربوط به اون سرور از کدوم شبکه قابل دسترسیه و برای رسیدن به اون باید بسته رو به کدوم شبکه بعدی تحویل بده. اینجاست که BGP وارد میشه.
در اصل زبان ارتباطی بین شبکههای مستقله. شبکهها با BGP به هم اعلام میکنن که «من به این Prefixها دسترسی دارم». مثلاً یه شبکه اعلام میکنه که Prefix زیر متعلق به منه و میتونم ترافیک مربوط بهش رو دریافت کنم:
203.0.113.0/24شبکههای اطراف این Route رو یاد میگیرن و ممکنه اون رو به شبکههای دیگه هم اعلام کنن. این اطلاعات کمکم بین ASهای مختلف پخش میشه و شبکهها متوجه میشن برای رسیدن به Prefixهای مختلف چه مسیرهایی وجود داره.
مثلاً فرض کن سه شبکه داریم:
AS100 → AS200 → AS300AS300
صاحب یه Prefix خاصه. AS300 اون Prefix رو به AS200 اعلام میکنه، AS200 هم متوجه میشه برای رسیدن به اون Prefix باید از AS300 استفاده کنه. بعد همین Route ممکنه به AS100 هم برسه. در نتیجه AS100 میفهمه برای رسیدن به اون Prefix میتونه از مسیر
AS100 → AS200 → AS300 استفاده کنه.حالا ممکنه فقط یه مسیر وجود نداشته باشه. مثلاً AS100 برای رسیدن به AS300 دو مسیر مختلف داشته باشه:
AS100 → AS200 → AS300یا:
AS100 → AS400 → AS500 → AS300اینجا BGP قرار نیست صرفاً بگه «هر کدوم کوتاهتره همونو انتخاب کن». BGP بر اساس یه سری Attribute و Policy تصمیم میگیره کدوم Route ترجیح داده بشه. چیزهایی مثل LOCAL_PREF، AS_PATH، MED و نوع Route میتونن روی انتخاب مسیر تأثیر بذارن.
یکی از قسمتهای مهم BGP هم AS_PATH هست. هر Route وقتی از یک AS عبور میکنه، شماره اون AS به مسیر اضافه میشه. مثلاً:
AS100 → AS200 → AS300حالا اگر AS100 یه Route رو دوباره دریافت کنه و داخل AS_PATH ببینه که خودش یعنی
AS100 قبلاً توی مسیر وجود داشته، میفهمه این مسیر میتونه باعث Loop بشه و اون Route رو قبول نمیکنه. این یکی از مکانیزمهای مهم BGP برای جلوگیری از Loop بین ASهاست.یه نکته خیلی مهم هم اینه که BGP فقط برای پیدا کردن مسیر نیست؛ Policy توی BGP خیلی مهمه. یعنی صاحب شبکه میتونه تعیین کنه چه Routeهایی رو به چه شبکهای Advertise کنه و برای انتخاب مسیرهای مختلف چه ترجیحی داشته باشه.
مثلاً یه ISP ممکنه دو تا Provider اینترنت داشته باشه. میتونه با Policyهای BGP کاری کنه که ترافیک بعضی Prefixها از Provider اول عبور کنه و ترافیک بعضی مقصدهای دیگه از Provider دوم. پس BGP فقط یه نقشه ساده از اینترنت نیست؛ در واقع شبکهها باهاش روی نحوه تبادل و انتخاب مسیر هم سیاستگذاری میکنن.
حالا وقتی تو از خونه میخوای به یه سایت خارجی وصل بشی، بستهات ممکنه از چندین شبکه مختلف عبور کنه. هر شبکه در مسیر، بر اساس Routing Table خودش تصمیم میگیره بسته رو به کدوم Next-Hop بفرسته. BGP هم کمک کرده این شبکهها اطلاعات لازم درباره Prefixهای شبکههای دیگه رو داشته باشن.
پس خیلی خلاصه اگر بخوایم قضیه رو جمع کنیم، DNS معمولاً اسم دامنه رو به IP تبدیل میکنه، BGP به شبکههای مستقل کمک میکنه بفهمن Prefixهای مختلف از چه مسیرهایی قابل دسترسی هستن، و IP Routing داخل هر شبکه تصمیم میگیره بسته رو به کدوم Next-Hop بفرسته.
مثلاً وقتی میزنی:
example.comاول باید IP مقصد مشخص بشه. بعد بسته از شبکه خودت وارد مسیر اینترنت میشه و روترها بر اساس Routeهایی که دارن تصمیم میگیرن بسته رو به کجا بفرستن. این Routeها در مقیاس بین شبکههای مستقل، بخش مهمی از اطلاعاتشون رو از BGP میگیرن.
به خاطر همین هم BGP یکی از پایههای اصلی اینترنت محسوب میشه. چون اینترنت از هزاران شبکه مستقل تشکیل شده و این شبکهها باید somehow بتونن مسیرهای خودشون رو به هم اعلام کنن و درباره Reachability شبکههای مختلف اطلاعات داشته باشن.
یه مثال خیلی ساده بخوایم بزنیم: اینترنت رو مثل یه سیستم بزرگ از شهرها و جادهها در نظر بگیر. هر AS مثل یه شهر یا مجموعه جادهای مستقله، Prefixها مثل محدودههای مقصد هستن و BGP مثل سیستمیه که به شبکهها میگه برای رسیدن به مقصدهای مختلف چه مسیرهایی وجود داره و کدوم مسیر طبق Policyهای شبکه ترجیح داده میشه.
@Netwo0rk
