מבוא לרשתות - תרגול מס' 11 Transparent Bridges גשרים: מוטיבציה המטרה: חיבור של כמה רשתות מקומיות ) LAN -ים( לרשת מורחבת אחת על מנת לאפשר תקשורת בין מחשבים שאינם מחוברים לאותה רשת מקומית.?)ports עם מס' repeater( hub מדוע לא לחבר את הרשתות ע"י LAN1 C LAN2 HUB1 LAN3 A LAN4 HUB2 LAN5 B LAN6 HUB3 כל הודעה הנשלחת על אחד ה- LAN -ים בהכרח תגיעה לכל ה- LAN -ים ברשת המורחבת. למשל, ההודעות בין התחנות A ו- B מגיעות אפילו עד LAN5 ו- LAN6. זה גורם להתנגשויות מיותרות. היינו רוצים שהרכיב המחובר ל- LAN3 לא יעביר את ההודעות הנשלחות בין A ל- B ל- LAN1 ו- LAN2. גם לא רצוי של- LAN2 יגעו הודעות הנשלחות בין A ו- C. בעצם מה שאנו צריכים זה שהרכיבים המחברים בין ה- LAN םי- יתנהגו כאילו הם יודעים איפה כל תחנה נמצאת.
Transparent Bridges קיימים שני חלקים בלתי תלויים: 1. יצירת עץ גשרים: פרוטוקול בו הגשרים מדברים ביניהם ודואגים ליצירת עץ גשרים המחברים בין הרשתות. 2. ניתוב בעץ הגשרים: הגשר מניח קיום עץ ובמידה ונבחר להיות גשר בעץ, מנתב הודעות של תחנות בין הרשתות ולומד תוך כדי את טופולוגית הרשת. אלגוריתם לבנית עץ פורס המטרה: לקבוע את זהות השורש של העץ. 1. לקבוע גשר אחראי bridge( )designated עבור כל.LAN 2. שורש העץ נבחר עפ"י זהותו. למשל: הגשר בעל כתובת ה- MAC הכי קטנה יהיה השורש. גשר נקבע להיות אחראי על LAN עפ"י מרחקו מהשורש: מבין כל הגשרים הקשורים ישירות ל- LAN מסוים נבחר גשר הכי קרוב לשורש. בהינתן מידע מדויק על השורש וה- bridges,designated הגשרים ידעו לנתק את ה- port -ים הלא חיוניים על מנת ליצור עץ פורש. בתחילת הרצת האלגוריתם הגשרים מתעוררים באופן אסינכרוני ומתחילים לשלוח הודעות בקרה על ה- LAN -ים שאליהם הם קשורים ישירות וחושבים שהם אחראים עליהם.
כל גשר מכיל את המשתנים הבאים:.1 myid זהות הגשר. 2. rootid זהות השורש הנבחר של העץ. 3. rootcost המרחק אל השורש הנבחר. 4. rootport ה port- המוביל אל השורש. 5. portcosts[] מערך המכיל את מחירי שידור על ה- LAN םי- הקשורים ישירות לגשר 6. designatedonlan[] מערך דגלים בו כל כניסה מציינת האם הגשר הוא designated bridge של ה- LAN המתאים. מדי פעם גשר )ער( שולח הודעת בקרה המכילה: myid.1 rootid.2 rootcost.3 איתחול: wakeup(){ myid = getid(); rootid = myid; // I don t know any other bridge rootcost = 0; // because I think I am the root initportcosts(portcosts); setalltrue(designatedonlan); // For now, I am the // designated bridge of all LANs I am attached to rootport = -1;
כאשר מתקבלת הודעת בקרה מ- LAN מסוים: controlmessagereceived(msg,srcport){ // check whether the source bridge knows // a better root if (MSG.rootID < rootid) { rootid = MSG.rootID; rootcost = MSG.rootCost + portcosts[srcport]; rootport = srcport; setalltrue(designatedonlan); //Why is this necessary? // in case we agree on the root identity, and the source bridge // knows a better route to root. else if ((MSG.rootID == rootid) and (rootcost > MSG.rootCost+portCosts[srcPort])) { rootcost = MSG.rootCost+portCosts[srcPort]; rootport = srcport; // check whether the source bridge should be the // designated bridge of the LAN attached to srcport if ( (rootcost > MSG.rootCost) or ((rootcost == MSG.rootCost) and (myid > MSG.srcID))) { designatedonlan[srcport] = false; else { designatedonlan[srcport] = true;
דוגמא לבניית עץ פורש LAN1 b2 b1 LAN3 b3 LAN2 b5 b4 LAN5 LAN4 נניח b1 מתעורר ושולח הודעת בקרה )שבה הוא מציע עצמו כשורש( על LAN1 ו- LAN2. b3 b2, ו- b5 קובעים לעצמם כי b1 הוא השורש החדש וקובעים את ה- port root אליו. ו- LAN4. שולח הודעת בקרה על LAN5 b5 שולח הודעת בקרה על.LAN5 b3 ושולח הודעת בקרה על.LAN3 מקבל הודעת בקרה של b5 b4 על.LAN5 designated bridge נקבע כ- b3 על.LAN4 designated bridge נקבע כ- b5 על.LAN3 designated bridge נקבע כ- b4 ברור כי b1 הוא designated bridge על LAN1 ו- LAN2 כי המחיר שלו לעצמו הוא הנמוך ביותר! עתה יש לקבוע עבור כל גשר מה הם ה- ports המשתתפים בניתוב. זה נעשה עבור כל גשר B עפ"י האלגוריתם הבא: o אם B איננו designated bridge של אף LAN אז אף port שלו לא פעיל. )בדוגמא: b2) o אחרת, כל ה- ports של B שמובילים ל- LANs ש- B הוא ה- bridge designated שלהם וכן ה- port root של B הנם פעילים. )בדוגמא: ה- ports העליון והימני של b5 פעילים, אבל התחתון לא.(.1.2.3.4.5.6.7
שאלה: Transparent Bridges with Multicast Multicast הנה פעולה שמאפשרת לתחנה לשלוח הודעה זהה לקבוצת תחנות. Multicast MAC address הנה כתובת MAC שמגדירה קבוצה של אפס או יותר תחנות. כל תחנה בקבוצה המזהה מסגרת שבה ה- destination address מכיל את הכתובת של הקבוצה תתיחס אל מסגרת זו כאל מסגרת שנשלחה אליה. לדוגמא, אם ברשת Ethernet הכתובת X מגדירה קבוצה המכילה את התחנות a ו- b, ואם תחנה s שולחת מסגרת אל X, אז המסגרת תזוהה על ידי כל תחנות הרשת )כי ברשת הנ"ל כל התחנות מקבלות את כל המסגרות המשודרות(, אולם רק תחנות a ו- b תעתקנה את המסגרות לחוצץ מקומי ותעבדנה אותו. שימו לב שתחנה יכולה להיות שייכת לכמה קבוצות. כמו כן שימו לב שכתובת Multicast לא יכולה להיות רשומה בשדה ה- source של מסגרת שנשלחת. הציעו הרחבה מינימלית לפרוטוקול של Transparent Spanning Tree שיאפשר לבצע multicast ברשת המורכבת מכמה LAN -ים המחוברים זה לזה באמצעות גשרים. הרחבה זו אמורה לאפשר לתחנת המקור לשלוח הודעה אחת שעותק ממנה יתקבל על ידי כל אחת מתחנות קבוצת היעד, גם אם הן מפוזרות ב- LAN -ים שונים. תשובה: כל תחנה D שרוצה לקבל הודעות המיועדות לקבוצה X צריכה מדי פעם לעשות Broadcast של הודעת subscribe המיועדת לקבוצה X. כל גשר שרואה הודעה זו שהגיעה אליו דרך port מסוים, יכניס לטבלאות שלו רשומה האומרת שהודעות של X יש לשלוח גם לאותו ה- port. בקבלת הודעה שאיננה הודעת subscribe המיועדת ל- X, הגשר ישלח אותה רק על ה- ports שקיבל מהם הודעות.subscribe כל רשומה מהסוג החדש נזרקת אחרי תקופה מסוימת )ולכן התחנה צריכה לחדש את המנוי שלה לקבוצה מדי פעם(. אופטימיזציה אפשרית: תחנה ששומעת על ה- LAN שלה הודעת subscribe לקבוצה X של תחנה אחרת באותו ה- LAN, לא תשלח הודעת subscribe נוספת לאותה הקבוצה, שכן הגשר ממילא יעביר הודעות של X לאותו.LAN