7 בינו׳ 2011

Routing Protocols - EIGRP




שלום לכולם,
מאמר זה הולך לדבר על פרוטוקול הניתוב EIGRP,
התמונה ממחישה EIGRP על גבי ענן Frame-Relay.
מאמר זה הוא הראשון בסדרה הקשורה לפרוטוקולי הניתוב השונים והם OSPF, BGP, RIP.

אז נתחיל..
כיום קיימים מספר סוגים של פרוטוקלי ניתוב אשר בשימוש והם בעצם הכותרת לפרוטוקולים עצמם והם:

Distance Vector:
פרוטוקולים הנמנים תחת כותרת זו הם BGP,IGRP, RIPv1/v2 - (זהו הפרוטוקול אשר נמצא בשימוש האינטרנט) וכמובן הפרוטוקול שעליו אנו מדברים והוא EIGRP, סיסקו מכנה את EIGRP כפרוטוקול Hybrid וזאת כיוון שקיימים בו תכונות של של פרוטוקולים מסוג Link-State (נרחיב על כך בהמשך..).
פרוטוקולים מסוג DV הם פרוטוקולים אשר מתבססים על "שמועות" ומה זה אומר בעצם..
פרוטוקולים אלו בעצם מעבירים את טבלת הניתוב אל הנתבים השכנים.
מידע בנוגע לטבלת הניתוב נשלח בכל פרק זמן קבוע (בהתאם לפרוטוקול עצמו), במצב זה הנתב מכיר אך ורק את הרשתות שפורסמו אליו ולא מכיר את הרשת כולה.
כל פרוטוקול משתמש בשיטת חישוב הדרך אל היעד בצורה שונה ובכך בעצם מושפעת בחירת הנתיב הטוב ביותר  (Best Route).
לדוגמא פרוטוקול RIP משתמש בשיטת Hop Count בעצם כמה יעדים הוא עובר עד להגעה לנתיב היעד.
פרוטוקול EIGRP לעומת זאת משתמש בחישוב של מספר פרמטרים עליהם נרחיב בהמשך..

Link-State:
פרוטוקולים הנמנים בקבוצה זו הם OSPF, IS-IS.
פרוטוקולים אלו משתמשים בשיטה שונה לגמריי מזו של ה-DV, בשיטה זו כל נתב מכיר את כל היעדים לכל נתב ונתב ברשת ובכך מכיר את כלל הטופולוגיה וע"י כך הוא יודע לבחור את הנתיב הטוב ביותר לרשת היעד.
היתרון בשימוש בשיטה זו הוא מהירות התגובה בעת נפילה של נתב באמצע הדרך.
כיוון שהנתב מכיר את כל הרשתות אל היעד הוא יודע להחליף ניתוב בצורה מהירה מאוד ולהתאושש מנפילה.
פרוטוקולים אלו משתמשים בחישוב רוחב הפס (Cost) על מנת למצוא את הנתיב הטוב ביותר אל היעד (ארחיב על פרוטוקולים אלו במאמר הבא).

מכאן אנו מגיעים לחלוקת הפרוטוקולים לקבוצות וקיימות 2 קבוצות אשר כוללות את כלל הפרוטוקולים והם:


Interior Gateway Protocol - IGP
פרוטוקולים אלו הם בעצם פרוטוקולים אשר משמשים לניתוב פנים ארגוני, משמע הם מחזיקים טבלאות לא גדולות (יחסית) והם מודדים מרחק מנקודה לנקודה בהתאם לפרמטרים שצויינו לעיל, דוגמא לפרוטוקולים אלו הם, OSPF,RIP וכמובן EIGRP.

Exterior Gateway Protocol - EGP
פרוטוקולים אלו אינם משמשים למדידת מרחק מנקודה לנקודה אלא מאפשרים להשפיע על נקודת הכניסה והיציאה מהרשת, פרוטוקולים אלו משמשים את ספקיות האינטרנט על מנת להעביר תעבורה בינהן או לחילופין בין ארגונים גדולים לדוגמא - BGP.

** גם EGP מתחלק ל2 סוגים של תעבורה:
* האחד הוא Transit AS - שהוא בעצם משמש ספקיות אינטרנט בדר"כ.
* או לחילופין Stub AS אשר בדר"כ משמש ארגונים גדולים אשר לא מעבירים דרכם את תעבורת האינטרנט
  אלא משתמשים בו לצרכי הארגון בין הסניפים.

מכאן נמשיך לפרוטוקול שלשמו המאמר - EIGRP

* כפי שציינתי פרוקוטול EIGRP הוא פרוטוקול אשר נמנה עם פרוטוקולי ה-Distance Vector.
  בדומה לפרוטוקול OSPF גם EIGRP ניחן בזמן התכנסות מאוד גבוה ומאפשר חזרה מהירה מקריסה.
  החסרון היחיד של פרוטוקול זה שהוא שייך לסיסקו ולכן ניתן להשתמש בו רק על ציודים של סיסקו.
  מה שסיסקו עשו הם בעצם לקחו את פרוטוקול ה-IGRP ושיפרו אותו ובכך בעצם הפכו אותו לייחודי לסיסקו.

* פרוטוקול זה מוגדר לעבוד בשכבת התעבורה (4) במודל ה-OSI (ראה מאמר קודם),
מספר הפרוטוקול ID שלו בתוך ה-IP Header הוא 88, בנוסף EIGRP מוגדר כפרוטקול אמין Connection Oriented כיוון שהוא מכיל מנגנון ACK משלו, הוא אינו מתבסס על TCP

* EIGRP עובד בכתובת Multicast 224.0.0.10 ליצירת קשרי שכנות ושמירה עליהם, מה שהופך אותו ליעיל ביותר בעת פרסום עדכונים או הקמת קשרי שכנות כיוון שהוא אינו עושה זאת בצורת Broadcast בניגוד לפרוטוקולים אחרים דוגמת RIPV1, יתרון נוסף שקיים לEIGRP הוא שליחת העדכונים רק במצב שקרה משהו לדוגמא רשת נפלה, או שנוסף ניתוב - רק אז EIGRP מוציא עדכון לשכנים מה שנקרא Triggered Updates.

* נוסף על כך פרוטוקול זה מאפשר לבטל את פונקציית ה-Auto Summary ולכן EIGRP
הוא פרוטוקול מסוג Classless משמע הוא מפרסם את ה SM המקורי שהגיע ובכך מאפשר לנו להשתמש ב-VLSM.
במילים פשוטות אם היינו מפרסמים רשת עם SM של 27/ היינו רואים את ה-MASK המקורי ולא את זה של הרשת עצמה.

בקצרה אספר על IGRP:
נתחיל מכך שהוא אינו בשימוש בארגונים יותר, בניגוד ל-EIGRP לא ניתן לבטל את אופציית ה- Auto Summary מה שהופך את IGRP לפרוטוקול מסוג Classfull משמע הוא מפרסם את ה-Class המקורי של הניתוב, לצורך הדוגמא אם לקחנו רשת  10.1.1.0 וחילקנו אותה למספר תתי רשתות, מה שהיה קורה זה שלא משנה לאיזה SM היינו מחלקים הרשת הנתב המרוחק שהיה מקבל את הניתוב היה רואה את הרשת כ- 10.0.0.0/8 דבר שהיה משפיע על הניתוב כיוון שהנתיב מציג את עצמו כאחראי הבלעדי לרשת 10 ולכן לא היינו יכולים למקם אף נתב אחר עם כתובת זו.


נמשיך..

הפעלת פרוטוקול EIGRP היא מאוד פשוטה והיא מתבצעת בפקודה:

Router(config)#router eigrp 1  הספרה 1 מייצגת מספר אוטונומוס סיסטם שחייב להיות דומה בכל הנתבים

אך לפני שאנו ניגשים להסברים איך מפעילים את EIGRP על הממשקים עצמם חובה להכיר מספר תנאים אשר חייבים להתקיים על מנת שיתקיימו קשרי שכנות והם:

1. מספר ה-AS חייב להיות זהה על כל הנתבים.
2. ערכי ה-K-Values (ערכים על-פיהם נקבע הניתוב) חייבים להיות תואמים.
3. כתובת ה-IP חייבת להיות זהה על גבי הממשק - אך אורך ה-SM לא חייב להיות זהה (על בסיס כתובת ה-Primary על גבי הממשק).

* K-Values - ציינתי את ערכים אלו כתנאי ליצירת קשרי שכנות, אז מה זה בעצם K-Values?
נוסחת חישוב ה-Best Route של EIGRP מתבססת על מספר פרמטרים ואלו נקראים K, והם:

Bandwidth
Reliability
Delay
Load
MTU

כאשר לכל ערך יש מיקום בנוסחה, אך חשוב לציין שלא לכל ערך יש משמעות כיוון שלא כולם פעילים בנוסחה.
למעשה סיסקו ממליצה שלא לשנות ערכים אלו כיוון שהם יכולים להשפיע לרעה על ביצועי הנתב.
הערכים שכן נכנסים לנוסחה הם K1 ו- K3 שהם Bandwidth - Delay.
זה מה שנקרא Metric.

אני תמיד הייתי מבלבל בין Administrative Distance ל- Metric, אז ככה להבהרה ה-AD הוא בעצם האמינות של הפרוטוקול ביחס לפרוטוקולים אחרים המספר של EIGRP הוא 90 מבחינת ה-AD, דוגמא אחרת שהיא OSPF ה-AD שלו היא 110, מה שהופך את EIGRP לאמין יותר.
והעניין השני הוא ה- Metric שהוא בעצם החישוב של הפרוטוקול אל היעד, כך זה נראה בטבלת הניתוב:

האדום הוא ה- AD
הירוק הוא ה- Metric.

Router#sh ip route

Gateway of last resort is not set

     10.0.0.0/32 is subnetted, 3 subnets
D       10.1.2.1 [90/130816] via 192.168.1.1, 00:00:06, GigabitEthernet0/0
D       10.1.3.1 [90/130816] via 192.168.1.1, 00:00:06, GigabitEthernet0/0
D       10.1.1.1 [90/130816] via 192.168.1.1, 00:00:06, GigabitEthernet0/0

והחלק הפחות אהוב עליי.. :) הנוסחה לחישוב:

10^7/bandwidth+delay*256=FD

עכשיו אתם בטח שואלים מה זה FD??
אני אסביר...
כפי שהזכרתי למעלה, EIGRP יודע להחזיק 2 נתיבים אל היעד ואפילו להציג אותם בטבלת ניתוב ואפילו יותר מזה גם לעשות בינהם Load-Balance.
ולמה אני מזכיר את זה..
מהסיבה הפשוטה שמה שאנו רואים בטבלת הניתוב נקרא Successor שהוא בעצם הנתיב הטוב ביותר אל היעד- ומה זה הנתיב הטוב ביותר אל היעד, זהו בעצם ה-FD.
 וכפי שציינתי EIGRP יודע להחזיק 2 ניתובים (בעלי Metric זהה או שהוגדרו בפקודת Variance) ולכן הניתוב שלא נבחר לשמש כ- Best Route נקרא Feasible Successor.

FD- מייצג את ראשי התיבות Feasible Distance ובתרגום פשוט מה שזה אומר שהמרחק ממני עד לרשת היעד הוא בעצם מיוצג על ידי ה-FD (כולל כל הנתבים בדרך ליעד).

קיים עוד נתון אשר עוד לא דיברנו עליו והוא ה-AD:

AD- מייצג את ראשי התיבות Administrative Distance ובתרגום מה שאומר AD הוא בעצם המרחק של השכן שאליו אני מחובר אל רשת היעד.

להלן דוגמא שתעזור להמחיש את הקונספט של AD ו FD.


שימו לב שהנתב E השמאלי הוא רשת המקור, היעד שלנו הוא NET X שמקושר לנתב A.
לצורך הדוגמא נבחר את המסלול העליון.
ה-FD שלנו הוא המרחק בין נתב E לנתב A ז"א כל המסלול ולכן הוא גם נקרא Sucssesor.
ה-AD שלנו הוא המרחק בין נתב B לנתב A משמע המרחק של השכן שלנו מרשת היעד.


פרוטוקול EIGRP מחזיק במספר טבלאות ואלו שהופכות אותו להיות דומה לפרוטוקלים מסוג Link State והם:

Neighbor Table - טבלת השכנים, טבלה זו מציגה את כל השכנים המחוברים ישירות אל הנתב דוגמא להצגת השכנים ב-EIGRP בפקודה:

Router#sh ip eigrp neighbors
IP-EIGRP neighbors for process 1
H   Address                 Interface       Hold    Uptime   SRTT RTO  Q  Seq Type
                                                            (sec)                    (ms)          Cnt Num
0   192.168.1.1             Gi0/0             12    00:23:42  120   720    0      2


מה שניתן לראות בפלט מפקודה זו הוא:
1. את השכנים - בכתובת 192.168.1.1
2. האות H מייצגת את המילה Handle משמע סדר השכנים - מי עלה קודם.
3. על איזה ממשק הוא עלה.
4. Hold Time כמה זמן עד שהשכן נחשב כלא פעיל.
5. Up Time כמה זמן השכן למעלה.
6. SRTT - כמה זמן לקח לשכן להגיע ליעד ולחזור.
7. RTO - כמה זמן יש להמתין במידה ולא הגיע פקטה של Hello.
8. Q - כמה פקטות ממתינו ב-Queue.


Routing Table - הטבלה השניה היא כמובן טבלת הניתוב, טבלה זו מכילה את כל הניתובים לרשתות השונות ואת הממשקים המחוברים ישירות לנתב לדוגמא: 
Router#sh ip route

Gateway of last resort is not set

     10.0.0.0/32 is subnetted, 3 subnets
D       10.1.2.1 [90/130816] via 192.168.1.1, 00:30:12, GigabitEthernet0/0
D       10.1.3.1 [90/130816] via 192.168.1.1, 00:30:12, GigabitEthernet0/0
D       10.1.1.1 [90/130816] via 192.168.1.1, 00:30:12, GigabitEthernet0/0
     192.168.1.0/30 is subnetted, 1 subnets
C       192.168.1.0 is directly connected, GigabitEthernet0/0
שימו לב שישנה אות ליד כל ניתוב, האות D מייצגת רשת שנלמדה ע"י EIGRP והאות C מייצגת רשת שמחוברת ישירות לנתב.
 
Topology Table- הטבלה השלישית שקיימת בEIGRP היא טבלת הטופולוגיה, טבלה זו מכילה את כל הניתובים אל כל הרשתות כולל אלו שלא נכנסו לטבלת הניתוב ואלו הם...... זוכרים??

ה-Feasible Successor שהם בעצם הניתוב המשני הטוב ביותר אל היעד.

כך נראית טבלת הטופולוגיה ב EIGRP : 

Router#sh ip eigrp topology
IP-EIGRP Topology Table for AS(1)/ID(192.168.1.2)

Codes: P - Passive, A - Active, U - Update, Q - Query, R - Reply,
       r - reply Status, s - sia Status

P 10.1.2.1/32, 1 successors, FD is 130816
         via 192.168.1.1 (130816/128256), GigabitEthernet0/0
P 10.1.3.1/32, 1 successors, FD is 130816
         via 192.168.1.1 (130816/128256), GigabitEthernet0/0
P 10.1.1.1/32, 1 successors, FD is 130816
         via 192.168.1.1 (130816/128256), GigabitEthernet0/0
P 192.168.1.0/30, 1 successors, FD is 2816
         via Connected, GigabitEthernet0/0


מה שאנחנו יכולים ללמוד מהטבלה הזו בעצם זה את כל הרשתות ש EIGRP מכיר, ואם קיימים ניתובים משניים - FS.
האות P משמאל מציינת שהניתוב הוא ב- Passive מה שאומר לנו שהכל תקין, במידה והייתה מופיעה לנו האות A משמע ACTIVE וזה אומר שהניתוב לרשת נפל והנתב מנסה בצורה אקטיבית לחפש דרכים חלופיות.

מה שמביא אותנו אל ה-Packets ש- EIGRP משתמש על-מנת להקים קשרי שכנות ולשמור עליהם ועוד...
והם:

1.Hello- הקמה ותחזוקת קשרי השכנות בין 2 נתבים - עובד בכתובת מולטיקאסט 224.0.0.10 ושולח פקטות של
   Hello כברירת מחדל כל 5 שניות ו-Hold Time כל 15 שניות בקווים מהירים (מעל 1.5M).
2. Update - מייצג עדכון לגבי רשת שנוספה\הוסרה, מייצג את טבלת הניתוב.
3. Query- תהליך תשאול שכנים לגבי רשת שנפלה, במצב זה אנו נראה A בטבלת טופולגיה.
4. Reply- תהליך קבלת תשובה משכן עבור רשת שנפלה.
5. Ack- מה שהופך את EIGRP לפרוטוקול אמין בזכות ה- ACK, עבור כל פקטה ישנו ACK למעט Hello ועל ACK עצמו.

קיים מצב שבו רשת נפלה והנתב מוציא פקטה של Query ע"מ למצוא נתיב חלופי לרשת היעד, כברירת מחדל הנתב ממתין 3 דקות ע"מ לשמוע Query Reply מכל השכנים ולאחר מכן כל קשרי השכנות מתאפסים ומתחדשים.

מצב זה נקרא SIA - Stuck In Active , אפילו שהנתב קיבל Query Reply מאחד השכנים, הוא עדיין ממתין כדי לקבל תגובה מכולם ובטבלת הטופולגיה אנו נראה A על יד הניתוב עצמו.

קיימים פתרונות למצב, וזאת ע"י מניעה מהנתב להוציא Packet של Query, כיוון שאנחנו כמנהלי הרשת יודעים בדיוק לאילו ניתובים ניתן להגיע ואילו נתבים מחזיקים בכל ניתוב וניתוב (ברוב המקרים).

הפתרון הראשון לבעיה זו הוא הגדרת הנתב כ- Stub, נתב שמוגדר כ- Stub בעצם מייצג את הנתב האחרון בשרשרת והוא אינו מכיל עוד נתבים אחריו ולכן אין צורך לתשאל אותו בנוגע לניתובים חסרים.
חשוב לציין שהגדרת Stub מבוצעת בטופולוגיות של Hub-And-Spoke (ראו תמונה).

שימו לב שנתבי A ו-B הם ה-Hub Routers ונתבי C,D,E הם ה-Spoke Routers ולכן מבחינה הגיונית אין צורך לתשאל אותם לגבי רשתות.


הפתרון השני הוא ע"י הגדרת Summary-Address, מה שעושה Summary-Address הוא בעצם מפרסם Supernet אחד כלפי הנתב ששכן מולו, ומה שקורה בעצם זה שהנתב אומר אני מחזיק רק את טווח הכתובות הזה ולא שום רשת אחרת.
היתרון של Summary Address ב- EIGRP הוא שניתן להגדיר אותו על כל נתב ברשת, זאת בניגוד לOSPF שמאפשר להגדיר רק על נתבים אסטרטגיים.

הגדרת Summary Address בפקודה תחת הממשק:

Router(config-if)#ip summary-address eigrp 1 192.168.1.0 255.255.255.240

אחרי שלמדנו את הקונספט הכללי של איך EIGRP עובד נעבור לחלק הסופי של הגדרת EIGRP והוא הפעלתו על הממשק שעליו אנו רוצים שEIGRP ישלח Hello Packets בפקודה: 
מה שאנו עושים בפקודה זו זה בעצם לציין על אילו ממשקים אנו מעוניינים להפעיל את EIGRP, במקרה הזה אני מעוניין להפעילו על הממשק הספציפי שכתובתו היא 192.168.1.1 כיוון שה-WildCard שלי ממוקד ספציפית לממשק זה.

Router(config-router)#network 192.168.1.1 0.0.0.0

הערה:
כאשר אנו משתמשים בפקודת Network נשלחים פקטות באמצעות multicast לכתובת 224.0.0.10.
במצב שאנו עובדים על גבי ענן שלא מאפשר multicast לדוגמא - Frame relay ניתן להתשמש בפקודת Neighbor אשר שולחת פקטות באמצעות unicast.
כתובת 192.168.1.2 מייצגת את השכן המרוחק ואת הממשק דרכו נגיע אליו.

Router(config-router)#neighbor 192.168.1.2 gigabitEthernet 0/0
הערה:
חשוב לבטל Auto-Summary כדי שהרשתות יפורסמו עם ה-MASK שלהם ולא בצורת Classfull.


מקווה שעזרתי לכם להבין איך הפרוטוקול עובד,
אם ישנן שאלות ניתן לשלוח אליי למייל.








2 תגובות:

  1. excellent post.
    keep writing!

    השבמחק
  2. אנונימי13 ינואר, 2014

    מצוין באמת כל הכבוד ! קל להבנה פשוט ישר כח !!!

    www.netsystem.org.il ) תודה מהבעלים )

    השבמחק