مقاله آموزشی Trunk

fashion img

Trunk Mode


در این مقاله می پردازیم به یک مبحث بسیار مهم در سوییچینگ یعنی مبحث Trunk. در مقاله ی مربوط به VLAN ها در رابطه با ساختار ویلن ها آشنا شدیم، اینکه چیست، برای چه هدفی بوجود آمده و ما چگونه می توانیم از ویلن ها در شبکه ی خود استفاده کنیم. همانطور که در مقاله ی مربوط به ویلن هم گفته شد تا زمانی که اینترفیسی را عضو یک ویلن نکنیم عملا آن ویلن بلا استفاده می باشد. بصورت پیش فرض تمامی اینترفیس های یک سوییچ عضو ویلن شماره ی 1 می باشند و طبق صحبت هایی که در مقاله ی ویلن ها داشتیم میدانیم که کلاینت هایی که عضو یک ویلن مشابه می باشند به شرط اینکه رنج آدرس IP های یکسانی نیز داشته باشند می توانند با یکدیگر ارتباط برقرار کنند. درنتیجه بصورت پیش فرض هر کلاینتی که به یک سوییچ متصل شود می تواند با کلاینت های دیگری که به آن سوییچ متصل می باشند ارتباط برقرار کند. به تصویر 1 دقت کنید.

تصویر 1  ارتباط بین کلاینت هایی که به یک سوییچ متصل شده اند

در تصویر 1 هیچ تنظیماتی بر روی سوییچ انجام نشده است و تمامی پیکربندی های سوییچ بصورت پیش فرض می باشند. بصورت پیش فرض تمامی اینترفیس های یک سوییچ عضو ویلن 1 می باشند در تصویر1 هر سه کلاینت در صورت داشتن آدرس IP در یک رنج مشابه می توانند بایکدیگر ارتباط برقرار کنند. پس متوجه می شویم کلاینت هایی که در یک ویلن مشابه قرار گرفته اند می توانند با یکدیگر ارتباط برقرار کنند. اما حال به تصویر 2 توجه کنید.

 تصویر 2  ارتباط بین کلاینت هایی که در چند سوییچ قرار دارند

در تصویر 2 هیچ تنظیماتی بر روی سوییچ ها انجام نشده و تمامی پیکربندی های سوییچ ها بصورت پیش می باشد. درنتیجه در این سناریو نیز تمامی اینترفیس هایی سوییچ ها عضو ویلن 1 می باشند. یعنی دو اینترفیس SW-1 و دو اینترفیس SW-2 عضو ویلن 1 هستند. به نظر شما آیا PC1 می تواند با  PC2 ارتباط برقرار کند؟ به احتمال زیاد پاسخ شما مثبت است. بله درسته کلاینت های می توانند با یکدیگر ارتباط برقرار کنند، اما چگونه؟ فرض کنیم PC1 قصد دارد دیتایی را به سمت PC2 ارسال کند. دیتایی که PC1 ارسال می کند بر روی اینترفیس سوییچ SW-1 دریافت می شود و از آنجایی که می دانیم ارتباط بین اینترفیس هایی که عضو ویلن یکسان می باشند برقرار است SW-1 دیتا را بر روی اینترفیس خود که به SW-2 متصل می باشد ارسال می کند. زمانی که SW-2 دیتا را دریافت می کند براساس جدول MAC Address خود می داند که باید دیتا را به PC2 تحویل دهد و به دلیل اینکه PC2 نیز در ویلن 1 قرار دارد بدون مشکل دیتا را دریافت می کند و ارتباط بین کلاینت ها برقرار می شود. حال بیاید سوییچ ها را از حالت پیش فرض در بیاوریم و یکسری پیکربندی های جدید بر روی سوییچ ها اعمال کنیم. به تصویر 3 دقت کنید.

تصویر 3 ایجاد ویلن 10 بر روی سوییچ ها

تصویر 3 همان تصویر 2 می باشد اما با کمی تغییر. بر روی سوییچ های SW-1 و SW-2 ویلن شماره 10 ایجاد شده و اینترفیس F0/0 هر دو سوییچ عضو ویلن شماره ی 10 شده اند. در نتیجه PC1 و PC2 همچنان عضو یک ویلن مشابه می باشند. اما سوالی که وجود دارد این است که آیا همچنان PC1 می تواند با PC2 ارتباط برقرار کند؟؟ این بار پاسخ منفی است و کلاینت ها نمی توانند با یکدیگر ارتباط برقرار کنند، اما چرا؟ با نگاهی دقیق تر می توانیم به راحتی به پاسخ مورد نظر برسیم. همانگونه که قبلتر نیز گفتیم تمامی اینترفیس های یک سوییچ بصورت پیش فرض عضو ویلن 1 می باشند که ما در اینجا اینترفیس F0/0 هر دو سوییچ را از حالت پیش فرض در آورده ایم و در ویلن 10 قرار داده ایم. نکته ی قابل توجه اینجا می باشد که هنوز اینترفیس F0/1 بر روی هر دو سوییچ عضو ویلن 1 می باشد. حالا بیاید به سناریو یکبار دیگر نگاهی بی اندازیم. PC1 پیامی را به سمت PC2 ارسال می کند. SW-1 پیام PC1 را بر روی اینترفیس F0/0 خود که در ویلن 10 قرار گرفته دریافت می کند و باید آن پیام را بر روی اینترفیس F0/1 خود ارسال کند، اما از آنجایی که F0/1 در ویلن 1 قرار دارد و طبق گفته های ما تنها اینترفیس هایی که عضو ویلن های مشابه می باشند می توانند با یکدگیر ارتباط برقرار کنند. پس SW-1 نمی تواند پیام PC1 را که در ویلن 10 قرار دارد بر روی اینترفیس F0/1 که در ویلن 1 قرار دارد ارسال کند. به نظر شما پس چرا در تصویر 2 ارتباط بین کلاینت ها برقرار شد؟؟ پاسخ ساده است به این دلیل که اینترفیس بین سوییچ ها عضو ویلن 1 بود و کلاینت ها نیز عضو ویلن 1 بودند، درنتیجه می توانستند با یکدیگر ارتباط برقرار کنند.
اما راه حل چیست؟ چگونه می توانیم ارتباط بین دو کلاینت را برقرار کنیم؟ پاسخ بسیار ساده است. تنها کافیست اینترفیس بین دو سوییچ یعنی اینترفیس F0/1 را نیز عضو ویلن 10 کنیم. با اینکار ارتباط بین دو کلاینت به راحتی برقرار می شود. حال فرض کنید ده کلاینت به SW-1 متصل شده اند که هرکدام در یک ویلن متفاوت قرار دارند. همچنین ده کلاینت به SW-2 متصل شده باشند که در ویلن های متفاوت از یکدیگر قرار گرفته باشند. به عنوان مثال یک کلاینت که به سوییچ SW-1 متصل شده در ویلن 20 قرار بگیرد در مقابل نیز یک کلاینت به سوییچ SW-2 متصل شود و در ویلن 20 قرار بگیرد. حالا برای کلاینت هایی که در یک ویلن مشابه قرار دارند بتوانند با یکدگیر ارتباط برقرار کنند باید چه کنیم؟؟ از آنجایی که تنها یک اینترفیس بین سوییچ ها قرار دارد و ما میدانیم یک اینترفیس نمی تواند همزمان عضو چند ویلن باشد پس ارتباط بین تمامی کلاینت برقرار نخواهد شد. راه حل چیست؟ می توانیم به ازای هر ویلن یک اینترفیس بین دو سوییچ اضافه کنیم و آن را عضو ویلن مورد نظر کنیم. در این مثال که 10 ویلن داریم باید 10 اینترفیس بین دو سوییچ قرار دهیم و هر اینترفیس را عضو یک ویلن کنیم تا تمامی کلاینت ها بتوانند با یکدیگر ارتباط برقرار کنند. اما آیا این راه درستی است؟ فرض کنید به جای 10 ویلن، 100 ویلن وجود داشته باشد. به هیچ عنوان این کار شدنی نیست. برای اینکه بتوانیم ارتباط بین ویلن های مشابه در سوییچ های متفاوت را برقرار کنیم راه حلی تحت عنوان Trunk مطرح شد.
Trunk یک مود در اینترفیس می باشد که از یک پروتکل برای برقرار ارتباط ویلن های مشابه در سوییچ های متفاوت استفاده می کند. در ادامه به پروتکل هایی که ترانک از آنها استفاده می کنند می پردازیم اما درحال حاضر قصد داریم ببینیم چگونه ترانک این برقراری ارتباط را میسر می سازد.
زمانی که از VLAN ها در شبکه بین چندین سوییچ مختلف استفاده کنیم برای برقراری ارتباط بین ویلن های مشابه در سوییچ های متفاوت باید اینترفیسی که بین سوییچ ها قرار میگیرد را از نوع ترانک تعریف کنیم. ترانک براساس Tag (برچسب) فعالیت می کند. 
تصویر 4 مثالی را نشان می دهد که ویلن ها بر روی سوییچ های متفاوتی وجود دارند اما برای ارتباط بین کلاینت هایی که در هر ویلن می باشند از مبحث ترانک استفاده نمی کند. قبل از هر چیز طراحی اینگونه نشان می دهد که دو ویلن 10 و 20 بر روی سوییچ ها ایجاد شده است. در هر سوییچ دو پورت عضو هر یک از ویلن ها می باشد. بنابراین الزامی است که هر دو ویلن بر روی سوییچ ها وجود داشته باشند. از آنجایی که نیاز می باشد کلاینت هایی که در VLAN 10 قرار دارند با یکدیگر ارتباط برقرار کنند، بین دو سوییچ یک لینک که عضو ویلن 10 می باشد اضافه شده است. همچنین برای ویلن 20 نیز یک پورت جدا در نظر گرفته شده و آن پورت عضو ویلن 20 می باشد. بنابراین درحال حاضر ارتباط بین کلاینت هایی که در یک ویلن مشابه قرار گرفته اند برقرار می باشد.

 

تصویر 4  برقراری ارتباط بین ویلن های مختلف در چند سوییچ بدون استفاده از ترانک

در تصویر 4 ارتباط بین کلاینت هایی که عضو ویلن مشابهی می باشند برقرار می باشد. برای مثال PC12 قصد دارد پیامی را به PC14 ارسال کند. پیام PC12 به سوییچ می رسد و سوییچ آن پیام را بر روی لینک بالایی خود که عضو ویلن 10 می باشد ارسال می کند. در آن سمت سوییچ SW2 پیام را بر روی اینترفیس بالایی خود دریافت می کند و به مقصد تحویل می دهد. این عملکرد برای ویلن 20 نیز صادق است.
در تصویر 4 همه چیز بصورت کاملا درست کار می کند و ارتباطات برقرار می باشد، اما نکته ی قابل اهمیت این است که به ازای هر ویلنی که بر روی سوییچ ها ایجاد می شود و کلاینتی عضو ویلن مورد نظر می شود باید یک پورت جداگانه  در نظر گرفت که این باعث می شود اگر تعداد ویلن ها زیاد باشد اینکار غیرممکن شود.

 

مفهوم Tag در VLAN


برای رفع مشکلی که در تصویر 4 وجود داشت مبحثی تحت عنوان ترانک بوجود آمد. ترانک یک لینک بین دو سوییچ ایجاد می کند که این لینک از چندین ویلن بصورت همزمان پشتیبانی می کند. ترانک به گونه ای با لینک رفتار می کند که انگار همزمان آن لینک عضو چندین ویلن می باشد اما در سوییچ ترافیک هر ویلن را از دیگر ویلن ها جدا نگه می دارد. پس به عنوان مثال یک لینک ترانک که ترافیک 5 ویلن را همزمان ارسال می کند انگار 5 لینک فیزیکی می باشد که هر لینک عضو یک ویلن می باشد. ترافیک های هر ویلن بر روی لینک ترانک با استفاده از یک شماره که به هر ترافیک براساس ویلن آن اختصاص داده می شود از دیگر ویلن ها متمایز می شود. تصویر 5 همان تصویر 4 را نشان می دهد که این بار از ترانک استفاده شده است.

تصویر 5 برقراری ارتباط بین ویلن های مختلف در چند سوییچ با استفاده از ترانک

با استفاده از ترانک می توان ترافیک ویلن های مختلف را بر روی یک لینک فیزیکی با اضافه کردن یک هدر کوچک به هدر اترنت عبور داد. برای مثال در تصویر 6، PC11 یک پیام برادکست بر روی اینترفیس Fa 0/1 خود ارسال می کند. در قدم اول زمانی که سوییچ پیام برادکست را دریافت می کند باید آن را به سمت SW2 ارسال کند. از آنجایی که PC11 عضو ویلن 10 می باشد SW1 باید به گونه ای مشخص کند که پیامی که به SW2 ارسال کرده در ویلن 10 قرار دارد. نتیجه ی این موضوع این می باشد که دیگر پیام به کلاینت هایی که در ویلن 20  قرار دارند نمی رسد و به عبارت ساده ترافیک های هر ویلن از دیگر ویلن ها متمایز می باشد. در قدم دوم برای اینکه SW1 بتواند مشخص کند که پیام باید به ویلن 10 تحویل داده شود، زمانی که از کلاینت پیام را دریافت می کند یک برچسب (Tag) با شماره ی همان ویلن یعنی شماره ی 10 به پیام اضافه کرده و بر روی لینک ترانک خود ارسال می کند.

تصویر 6 لینک ترانک بین دو سوییچ 

 حال زمانی که SW2 پیام را بر روی لینک ترانک خود دریافت کند با استفاده از آن برچسب متوجه می شود که پیام مربوط به ویلن 10 می باشد.در قدم سوم SW2 برچسب را از پیام حذف کرده و پیام را بر روی اینترفیس هایی که عضو ویلن 10 می باشند ارسال می کند. حال بیاید کمی جزئی تر به مبحث ترانک نگاه کنیم.
زمانی که اینترفیس بین دو سوییچ را از نوع ترانک انتخاب کنیم رفتار سوییچ با Frame ها کمی متفاوت می شود. زمانی که یک کلاینت دیتایی را به سمت سوییچ ارسال می کند، سوییچ براساس اینکه کلاینت در چه ویلنی قرار گرفته یک Tag یا به عبارت ساده یک برچسب با همان شماره ویلنی که کلاینت عضو آن می باشد به دیتا اضافه می کند. سپس دیتا را همراه با Tag مربوطه بر روی اینترفیس ترانک خود برای سوییچ مقابل ارسال می کند. سوییچ مقابل زمانی که دیتای حاوی Tag را بر روی اینترفیس ترانک خود دریافت می کند، ابتدا به Tag موجود در دیتا مراجعه می کند و براساس آن متوجه می شود که دیتا باید به چه ویلنی تحویل داده شود. بعد از آنکه سوییچ متوجه شد باید دیتا را به چه ویلنی تحویل دهد آن Tag را ار روی دیتا حذف کرده و دیتا را بر روی اینترفیسی که عضو همان شماره ویلن می باشد به کلاینت مقصد ارسال می کند.
برای درک بهتر نحوه ی عملکرد ترانک به تصویر 7 توجه کنید.

 

تصویر 7  ارتباط بین ویلن های مشابه در سوییچ ها متفاوت با ترانک

در تصویر 7، PC1 دیتایی را به مقصد PC2 ارسال می کند. دیتا بر روی اینترفیس F0/0 سوییچ SW-1 دریافت می شود. از آنجایی که اینترفیس F0/1 سوییچ SW-1 به عنوان ترانک پیکربندی شده، SW-1 به محض دریافت دیتا براساس اینکه دیتا از چه اینترفیسی دریافت شده و آن اینترفیس عضو چه ویلنی می باشد به دیتا یک Tag با همان شماره ویلن اضافه می کند. در اینجا کلاینت عضو ویلن 10 می باشد پس دیتا بر روی اینترفیسی که عضو ویلن 10 می باشد توسط سوییچ دریافت شده است، پس سوییچ Tag شماره ی 10 را به دیتا اضافه کرده و سپس آن را بر روی اینترفیس ترانک خود به سمت SW-2 ارسال می کند. زمانی که SW-2 دیتا را به همراه Tag بر روی اینترفیس ترانک خود دریافت می کند، با استفاده از جدول MAC Address خود مقصد را پیدا کرده و متوجه می شود دیتا باید بر روی اینترفیس F0/0 خود که عضو ویلن 10 می باشد ارسال شود، سپس Tag را از روی دیتا حذف کرده و دیتا را به سمت کلاینت بر روی اینترفیس F0/0 خود ارسال میکند. اینگونه ارتباط بین کلاینت ها برقرار می شود. حال اگر به جای یک ویلن صد ویلن هم وجود داشته باشد باز نیز تفاوتی ندارد و با استفاده از ترانک ارتباط بین ویلن ها برقرار می شود.

توجه – ترانک برای اینکه بتواند در سوییچ های مختلف ارتباطی بین ویلن های یکسان برقرار کند و ترافیک های هر ویلن را از دیگر ویلن ها متمایز کند نیاز به یک پروتکل دارد. برای بحث ترانک دو پروتکل وجود دارد که در ادامه به این پروتکل ها پرداخته شده است.

 

پروتکل های 802.1Q و ISL

 
دیوایس های شرکت سیسکو از دو پروتکل متفاوت برای مبحث ترانک پشتیبانی می کنند : Inter-Switch Link (ISL) و IEEE 802.1Q. قبل از اینکه استاندارد پروتکل IEEE 802.1Q را عرضه کند، سیسکو پروتکل ISL را ایجاد کرد. بنابراین پروتکل ISL پروتکل اختصاصی شرکت سیسکو می باشد. بعد از ISL استاندارد پروتکل IEEE 802.1Q را بوجود آورد که امروزه نیز تمامی دیوایس ها از این پروتکل برای مبحث ترانک استفاده می کنند و پروتکل ISL تقریبا منسوخ شده است.
درحالی که هر دو پروتکل یعنی ISL و 802.1Q به هر پیام یک برچسب (Tag) اضافه می کنند اما در جزئیات با یکدیگر تفاوت هایی دارند. (از آنجایی که پروتکل ISL تقریبا منسوخ شده در نتیجه در این مقاله در رابطه با آن صحبت نمیکنیم.) 
همانطور که در تصویر 8  مشاهده می کنید، پروتکل 802.1Q به هدر اصلی اترنت 4 بایت هدر جدید تحت عنوان  802.1Q Header اضافه می کند. این 4 بایتی که 802.1Q به هدر اصلی اضافه می کند تنها 12 بیت برای قسمت VLAN ID یا همان برچسب ها در نظر گرفته شده است که مورد توجه ما در این مقاله می باشد. این 12 بیت بصورت تئوری از 4096 ویلن پشتیبانی می کند (2^12 = 4096) اما در واقعیت تا 4094 ویلن را پشتیبانی می کند چرا که ویلن های 0 و 4095 رزرو می باشند.

 

تصویر 8  پروتکل 802.1Q

سوییچ های سیسکو رنج ویلن 1 تا 4094 را به دو دسته تقسیم می کنند. ویلن های 1 تا 1005 که تحت عنوان Standard VLAN شناخته می شوند و ویلن های 1006 تا 4094 که تحت عنوان Extended VLAN شناخته می شوند. تمامی سوییچ ها از Standard VLAN ها پشتیبانی می کنند اما تنها برخی از سوییچ ها از Extended VLAN ها پشتیبانی میکند. پشتیبانی از Extended VLAN ها بصورت Per-Platform می باشد و در برخی پلتفرم ها بسته به اینکه از کدام ورژن پروتکل VTP استفاده می شود می توان از Extended VLAN ها استفاده کرد. 
همچنین پروتکل 802.1Q یک شماره ویلن خاص را نیز معرفی می کند که تحت عنوان Native VLAN شناخته می شود (بصورت پیش فرض Native VLAN ویلن شماره ی 1 می باشد). به عبارت ساده 802.1Q هیچ برچسبی به پیام هایی که در Native VLAN قرار دارد اضافه نمی کند. زمانی که یک سوییچ در سمتی دیگر پیامی را بر روی اینترفیس ترانک خود دریافت کند و ببینید که آن پیام هیچ برچسبی ندارد متوجه می شود که آن پیام مربوط به Native VLAN می باشد. از همین رو هر دو سوییچ باید یک ویلن مشابه را به عنوان Native VLAN در نظر بگیرند.
Native VLAN ویژگی منحصر به فردی را به سوییچ ارائه می دهد. به عنوان مثال یک سوییچ سیسکو که از 802.1Q پشتیبانی می کند را به یک سوییچ که از 802.1Q پشتیبانی نمی کند متصل میکنیم. سوییچ سیسکو با استفاده از Native VLAN پیام ها را بدون برچسب برای سوییچی که از 802.1Q پشتیبانی نمی کند ارسال می کند، در نتیجه آن سوییچ می تواند پیام را پردازش کند. Native VLAN این قابلیت را برای سوییچ فراهم می کند که برخی ترافیک ها بتوانند بر روی یک ویلن (Native VLAN) ارسال شوند و بین چند سوییچ یک ارتباط برای مباحثی همچون Telnet برقرار باشد.

 

Dynamic Trunking Protocol (DTP)


برای اینکه دو سوییچ بتوانند ترافیک ویلن های مختلف را با برچسب به یکدیگر ارسال کنند الزما نیاز دارند تا لینک بینشان ترانک باشد. برای پیکربندی یک لینک به عنوان ترانک دو راه وجود دارد. اولین راه این می باشد که بصورت دستی با دستور switchport mode trunk یک اینترفیس را به عنوان ترانک پیکربندی کنید. راه دوم استفاده از پروتکل DTP می باشد. 
پروتکل DTP با استفاده از پیام هایی به مذاکره بین دو سوییچ می پردازد و مشخص می کند که لینک بین دو سوییچ باید ترانک شود یا خیر. پروتکل DTP از دو Mode استفاده می کند. Mode های Dynamic Desirable و Dynamic Auto. 
اگر یک سمت لینک در مود Desirable پیکربندی شود یک پیام درخواست ترانک شدن به سمت مقابل ارسال می کند و اگر در سمت مقابل یکی از مود های ترانک یعنی Trunk، Desirable و یا Auto پیکربندی شده باشد اینترفیس بصورت کامل ترانک می شود. پس مود Desirable علاوه بر اینکه پیشنهاد ترانک شدن ارسال می کند، اگر پیشنهادی در رابطه با ترانک شدن نیز دریافت کند آن را می پذیرد و اینترفیس ترانک می شود. اگر یک سمت لینک در مود Auto پیکربندی شود تنها زمانی که درخواست ترانک شدن دریافت کند می تواند ترانک شود و خود هیچ درخواستی مبنی بر ترانک شدن نمی تواند ارسال کند. برای اینکه به راحتی بتوانید درک کنید چه زمانی یک اینترفیس ترانک می شود و چه زمانی شرایط ترانک شدن را ندارد از جدول زیر استفاده کنید.

 
پیکربندی ترانک 
 
برای پیکربندی یک اینترفیس به عنوان ترانک از دستورات زیر پیروی کنید:
    • در اولین قدم باید پروتکل ترانک را مشخص کنید که ISL باشد و یا 802.1Q
switch# conf t
Enter configuration commands, one per line.  End with CNTL/Z.
Switch(config)# interface type/number
Switch(config-if)# switchport trunk encapsulation [dot1q | isl]
 
    • پس از مشخص کردن پروتکل مورد نظر باید Mode را برای ترانک مشخص کنید.
Switch# conf t
Enter configuration commands, one per line.  End with CNTL/Z.
Switch(config)# interface type/number
Switch(config-if)# switchport mode [trunk | dynamic {desirable | auto} | access]
 
 
توجه – بصورت پیش فرض پروتکل DTP بر روی اینترفیس های سوییچ های سیسکو فعال می باشد برای غیرفعال سازی پروتکل DTP بر روی یک اینترفیس می توانید از دستور switchport nonegotiate استفاده کنید.
 
مثال زیر پیکربندی ترانک را بر روی اینترفیس Fa 0/12 نشان می دهد.
 

SW1# conf t

Enter configuration commands, one per line.  End with CNTL/Z.

SW1(config)# interface FastEthernet 0/12

SW1(config-if)# switchport mode trunk

 

توجه – برای مشاهده ی اینترفیس های ترانک بر روی یک سوییچ می توانید از دستور show interfaces trunk استفاده کنید. 

مثال زیر خروجی دستور show interfaces trunk را نشان می دهد.

Switch#show interfaces trunk

Port        Mode             Encapsulation  Status        Native vlan
Fa0/0       on               802.1q         trunking      1

Port        Vlans allowed on trunk
Fa0/0       1-4094

Port        Vlans allowed and active in management domain
Fa0/0       1

Port        Vlans in spanning tree forwarding state and not pruned
Fa0/0       none