28 בפבר׳ 2010

IP Subnetting

(ניתן ללחוץ על התמונה להגדלה)


שלום לכולם,
במאמר זה אני רוצה להתייחס לכל נושא כתובות ה-IP בגרסה 4 הידוע כ- IPv4.
כאשר אנחנו מסתכלים על כתובת IP אנו יכולים להבחין שהכתובת מחולקת ל4 אוקטטות (מקטעים) ומופרדת ע"י נקודות.
כפי שציינו במאמר הקודם בנוגע לכתובות IP אמרנו שמקומם במודל ה-OSI הוא בשכבה השלישית ותפקידו העיקרי הוא לתת מספר יחודי לרכיב (מחשב,נתב,רכזת וכו'..) ברשת (הרי שכל מכשיר המשתמש בפרוטוקול ה-TCP/IP צריך כתובת IP).

כתובת ה-IP בנויה מ32 ביטים, וניתן לכתוב אותה בשתי צורות, האחרת עשרונית והשניה בינארית.
ניתן דוגמא לכתובת IP בצורה עשרונית:
192.168.0.1

כעת ניתן לפרק את הכתובת העשרונית הרשומה למעלה למספרים בינאריים,

* מספר בינארי הוא בעצם 0 ו-1 כאשר מופיעה הספרה 1 משמע אנו לא יכולים לבצע שינוי והספרה 0 משמע ניתן לשנות את ה-subnet.
לכל ספרה בינארית יש משמעות למיקום שלה על גבי הרצף המספרי, כמו כן, ניתן לבצע חזקה על כל ספרה בהתאם למיקומה לדוגמא:

0^2=0

1^2=2

2^2=4

3^2=8

4^2=16

5^2=32

6^2=64

7^2=128

אם נתבונן כעת בצורה בינארית על כתובת ה-IP הרשומה למעלה נוכל לומר שהצורה הבינארית של כתובת ה-IP שרשמנו למעלה היא:
11000000.10101000.00000000.00000001

למה זה ככה?

כדי להגיע ל-192 (המספר שקיים באוקטטה הראשונה) אנו נזדקק ל-2 הביטים האחרונים שהם 128+64 וביחד יוצא לנו 192 - כך הגענו לספרה 192.

כדי להגיע ל-168 (הספרה מהאוקטטה השניה) אנו נצטרך ללקט ביטים בהתאם למיקום שלהם מבלי לעבור את המספר שאנו צריכים, אזי כדי להגיע ל168 אנו צריכים 128 ולאחר מכן 32 ולבסוף אנו מוסיפים 8 (שזה הביט הרביעי) וכך קיבלנו 168.
האוקטט השלישי אינו מכיל מספרים ולכן אנו נשאיר אותו מאופס.

והאוקטט האחרון מכיל את הספרה 1 ולכן אנו נשתמש בביט הראשון אשר מכיל את הספרה 1 .

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

עשרוני לבינארי:

172.30.0.5


10.10.10.8

212.235.222.1

16.7.5.3

בינארי לעשרוני (בדקו את עצמכם באמצעות מחשבון):

00001101

11101100

00001111

10110011

אחרי שהבנו איך כתובת IP בנויה, נבין כעת את סוגי הקלאסים השונים ונבין מה זה כתובת IP פרטית ומה זו כתובת IP ציבורית,
למה אנחנו צריכים כתובות ציבוריות ופרטיות בכלל?
אז ככה...
בתחילת דרכו של האינטרנט בארגון IANA (ארגון האחראי על הקצאת כתובות IP) לא חשבו שיהיה צורך לשמר כתובות IP ולכן חילקו קבוצות גדולות של כתובות ללא הבחנה לכל דורש. ניתן לומר שכל חברה שרצתה Pool כתובות קיבלה והרבה.
לאחר תקופה מסויימת הבינו שעם קצב התפתחות הטכנולוגיה כאשר כמעט לכל מכשיר יהיה צורך בהקצאת כתובת IP,
חובה שתהיה שיטה אשר תפריד את הכתובות הפנים ארגוניות מאלו שמשתמשים בהן באינטרנט וכך תאפשר לחברות לצאת לאינטרנט עם כתובת אחת ובכך יחסכו כתובות ה-IP המבוזבזות.
ולכן הומצאה השיטה להפרדת כתובות שנקראת NAT (שעליה נדבר בפוסט הבא) אבל הנושא שלנו כרגע הוא כתובות ציבוריות ופרטיות..

החלוקה מתבצעת כך:

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

10.0.0.0-10.255.255.255

169.254.0.0-169.254.255.255 - טווח כתובות שמור למיקרוסופט.

172.16.0.0-172.31.255.255

192.168.0.0-192.168.255.255

אלו הכתובות שהוקצו לשימוש האינטרנט ואלו ה-Classes:

Class A: 0-127.0.0.0
Class B: 128.0.0.0-191.0.0.0
Class C: 192.0.0.0-223.0.0.0

קיימים גם קלאס D ו- E כאשר קלאס D משמש ל Multicast וקלאס E שמור ואינו בשימוש.
את הקלאס קובע האוקטט הראשון בשורת כתובת ה-IP לדוגמא אם כתובת ה-IP שלנו מתחילה ב 192 אזי היא שייכת ל-Class C וזאת עפ"י הטבלה שמעל, אם כתובת ה-IP שלנו היא מתחילה ב- 172 אזי הכתובת משוייכת ל-Class B וכך הלאה לגבי Class A.
ועכשיו כשאנחנו יודעים כיצד בנויה כתובת IP וכיצד להמיר בין עשרוני ובינארי ולהיפך ואת סוגי הקלאסים השונים נתחיל להבין מה זה Subnetting.
ישנן המון שיטות ללימוד Subnetting, אני אשתדל להביא במאמר זה את השיטה הנוחה והפשוטה ביותר.
אז מה זה Subnetting?

כאשר יש לנו רשת אחת גדולה שאנחנו רוצים לחלקה לסגמנטים במטרה להפריד בין המחלקות השונות או כשיש לנו אתרים שונים המחוברים בחיבור VPN ואנחנו רוצים להפריד בין הרשתות אנו מבצעים Subnetting.
אז רגע לפני שאנחנו מגיעים לחלוקה עצמה נעצור שניה ונבין מה זה Subnet...
כאשר אנחנו מבצעים פקודה ב-Windows שנקראת IPCONFIG או IFCONFIG בלינוקס אנחנו מקבלים את הפלט הבא:



Connection-specific DNS Suffix...:
IPv4 Address.................................192.168.2.53
Subnet Mask...................................255.255.255.0
Default Gateway.............................192.168.2.1



הפלט הבא מציג לנו את כתובת ה-IP שדיברנו עליה קודם לכן, מציג לנו את מסכת המשנה (Subnet Mask) ואת שער ברירת המחדל (Default Gateway) ומה אומר כל דבר?
כפי שציינתי, את כתובת ה-IP כבר הכרנו קודם לכן..
מסכת המשנה (Subnet Mask) משמשת אותנו לזיהוי הרשת.
שזה אומר שכתובת ה-IP מתחלקת ל-2 חלקים והם: Host ID ו- Network ID .
עכשיו איך אנחנו יודעים לזהות מהו ה- Net ID ומהו ה- Host ID זאת על-פי ה SM (Subnet Mask).
נחזור רגע להסבר למעלה בנוגע להמרות מעשרוני לבינארי ונפרק את ה-SM לבינארי אזי מה יוצא לנו?

בדוגמא שלמעלה יש לנו כתובת IP השייכת ל-Class C וזאת כיוון שהכתובת היא 192.168.2.53 וכפי שציינו במידה והאוקטטה הראשונה מתחילה בין הספרות 192-223 אזי כתובת ה-IP שלנו משוייכת ל-Class C.
עכשיו בואו נפרק את ה-SM שלנו מעשרוני לבינארי:

מבחינתנו בכל אוקטטה שיש בה את הספרה 255 אנחנו נמקם 8 ביטים של 1, מה שעוד אומר שאנחנו לא יכולים לשנות אותה לטובת הרחבה או הקטנה הרשת.

0 255 255 255
11111111.11111111.11111111.00000000

אחרי שהמרנו את ה-SM לבינארי כעת מה שנותר לנו הוא להבין מה הוא ה-Net ID ומהו ה-Host ID,
אם אנחנו מסתכלים על ה-SM אנחנו יכולים לומר שבכל חלק שרשום 1 מתחתיו הוא הוא Net ID ובכל מה שרשום 0 הוא ה- Host ID, שימו לב שרק עם ה-Host ID ניתן "לשחק" ולבצע שינויים במבנה הרשת.

בואו ניתן דוגמא כעת ל-SM השייך ל- Class B :

0 0 255 255
11111111.11111111.00000000.00000000


דוגמא כעת ל-SM השייך ל- Class A :

0 0 0 255
11111111.00000000.00000000.00000000

הגענו לחלק של חלוקת הרשת למקטעים (Subnets),
השיטה הפשוטה והקלה ביותר לדעתי כדי להגיע למצב שבו אנחנו נוכל לקחת רשת מקלאס C ולפרק אותה לתתי רשתות היא ככה, בואו ניקח דוגמה שבה אנחנו מעוניינים ב 5 רשתות אנחנו צריכים להסתכל על המצב בצורה כזו שיש לנו מצב מובנה שאותו אנחנו לא יכולים לשנות, לצורך העניין אם נתנו לנו לחלק רשת קלאס C זאת אומרת שיש לנו SM של 255.255.255.0 מה שאומר שבשלושת האוקטטות הראשונות אנחנו לא יכולים לגעת (כמו שאמרנו ב-1ים אנחנו לא יכולים "לשחק" – רק מה שיש תחתיו 0) אז כרגע לטובת הדוגמא נאמר שאנחנו מעוניינים ב 5 תתי רשתות נוספים- איך עושים את זה?

בשיטה שלי- אני שואל את עצמי כמה ביטים אני צריך כדי להגיע ל-5 רשתות ואז אני פשוט משנן בראש את החזקות שלמדנו קודם... הנה תזכורת :

0^2=0

1^2=2

2^2=4

3^2=8

4^2=16

5^2=32

6^2=64

7^2=128

אז אם אני מסתכל על הטבלה של החזקות – אני יכול לומר שכדי להגיע ל-5 רשתות אני חייב לא פחות מ-3 ביטים כיוון ש 3^2=8 ואז אני פשוט "גונב" 3 ביטים מהחלק שאמור להיות ה-NET ID בואו נראה את זה מוחשי..

בדוגמא אנחנו רואים את ה- Class C לפני שחילקנו את הרשת :

0 255 255 255
11111111.11111111.11111111.00000000

פה אנחנו יכולים לראות לאחר החלוקה ואת ה-SM החדש שלנו:

224 255 255 255
11111111.11111111.11111111.11100000

עכשיו אתם שואלים איך הגענו ל 224? שאלה טובה...

מה שעשיתי בעצם זה לחבר את כל הספרות שיש לנו תחת ה-1ים.. ובצורה נוחה משמאל לימין עשיתי את הפעולה הבאה:
128+64+32=224

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

0 2 4 8 16 32 64 128

נמשיך את התרגיל, מה שנותר לנו לאחר "שגנבנו" 3 ביטים זה להסתכל על ה-Host ID החדש שנוצר לנו ולעשות חזקה בהתאם למספר הביטים שנשארו , במקרה הזה אני יודע שנותרו לי 5 ביטים (5 אפסים- הם מסמלים את ה-Host ID) ואני פשוט עושה חזקה של 5^2=32.
מה שאני מבין מהחישוב הזה – חילקתי את הרשת ל- 5 תתי רשתות, כאשר בכל רשת ישנם 32 מחשבים.

חוק חשוב מאוד שצריך לקחת בחשבון זה שאנחנו לא יכולים להשתמש ב-IP הראשון והאחרון וזאת מכיוון שה-IP הראשון מסמל את כתובת הרשת וה- IP האחרון מסמל לנו את כתובת ה- Broadcast.

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

אז אמרנו שכתובת ה-IP שלי היא 192.168.2.0 :
נתחיל לפרק את הכתובות :

192.168.2.1-31
192.168.2.33-63
192.168.2.65-95
192.168.97.127
192.168.2.129+159

שימו לב שהקפיצות בוצעו בכל פעם ב-32 כתובות ושהורדתי את את ה-IP הראשון והאחרון בכל קפיצה.

לתרגול הנה עוד כמה דוגמאות שתוכלו לתרגל:
קחו את הרשתות הבאות וחלקו אותם למקטעים בהתאם:

192.168.5.0 – חלקו ל-10 תתי רשתות, מהי הכתובת הראשונה והאחרונה בכל רשת?

172.30.0.0 – חלקו את הרשת ל 30 תתי רשתות כשבכל רשת יהיו לכם 30 מחשבים.


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

1. כתובת IP חייבת להיות ייחודית ברשת.

2. כל המחשבים חייבים להיות באותו Network ID במידה והם לא נמצאים באותו Net ID חובה לערב נתב אשר יקשר בין הרשתות השונות.

3. אסור שה-Net ID יתחיל ב-0.

4. אסור שה- Net ID יתחיל ב-127 - שמור ל- localhost.

5.חייב שה- Default Gateway יהיה באותו Network ID כמו המחשבים אותם הוא אמור לשרת.

6.ללא DG המחשבים ברשת הפנימית לא יוכלו לתקשר עם מחשבים ברשתות אחרות.


אם יש לכם הארות, הערות וכל דבר שעולה לכם בראש,
תרגישו חופשי לכתוב לי ל- ciscobloger@gmail.com

מקווה שעזרתי






אבי



11 תגובות:

  1. אחד המאמרים המושקעים לסאבנטינג, נכנס אצלי למועדפים :)

    השבמחק
  2. אנונימי06 מרץ, 2010

    אבי יא גאון, תמשיך להשקיע ולעזור למנהלי רשת החדשים במשק, בקידום שלי נארגן לך PORSHE אחת לבחירה אצלנו בחברה' :)

    השבמחק
  3. במידה ואני רוצה 5 רשתות שבכל רשת יהיו לא פחות מ300 HOSTS ? אני מבין שאני צריך לעבוד עם CLASS אחר
    שמאפשר יותר הוסטים
    אתה יכול להראות איך אתה פותר שאלה כזו ?

    השבמחק
  4. על מנת שנוכל להכיל רשת עם 300 מחשבים יש צורך "לגנוב" 9 ביטים לטובת העניין,
    תמיד צריך להסתכל במה אנחנו מעוניינים - ביותר מחשבים או יותר רשתות.
    9 ביטים יתנו לנו 510 מחשבים בעלי כתובת שמישה מכאן ניתן לומר שכתובת ה-IP של הרשת תהיה 192.168.0.0 עם מסכת משנה של 255.255.254.0 וכך אנחנו משיגים 128 רשתות עם 510 מחשבים לכל רשת.

    השבמחק
  5. אבי,
    מאמר מצויין. תודה רבה.
    אבקש רק אם תוכל לרשום פה גם את הפתרון של הדוגמאות שהשארת בסוף, כדי שנוכל לבדוק את עצמנו.

    השבמחק
  6. היי אנונימי,
    בנוגע לפתרון הראשון, במידה ואנו רוצים לחלק את הרשת 192.168.5.0 אנו אמורים לגנוב לא פחות מ-4 ביטים מה-Host ID ולכן ה- Subnet Mask החדש שלנו יהיה 255.255.255.240 כיוון שלקחתי 4 ביטים.
    במצב זה יוצא לנו יותר מ10 תתי רשתות, 16 ליתר דיוק וכל רשת תכיל 14 מחשבים כאשר הכתובת הראשונה אם נתחיל מ- 192.168.5.0-15 כאשר כתובת הרשת היא 192.168.5.0 וכתובת ה-Broadcast היא 15.
    הטווח הבא יכיל את הכתובות 192.168.5.16-31 כאשר כתובת הרשת היא 192.168.5.16 וכתובת ה- Broadcast היא 31.
    וכך הלאה..
    כמובן שהקפיצות ברשתות הם 4^2 כיוון שלאחר שגנבנו 4 ביטים מההוסט ID נותרו לנו 4.

    מקווה שעניתי.
    אבי

    השבמחק
  7. אנונימי14 אוגוסט, 2011

    רק /31

    השבמחק
  8. אנונימי28 ינואר, 2013

    תודה כל כך הרבה שיטות מייאשות והסבר אחד ברור סוף כל סוף!

    השבמחק
  9. אחלה מאמר. תודה רבה.
    רציתי לשאול לגבי הדוגמא השנייה של החלוקת רשתות.
    כאשר אתה ב class B.
    יצא לי sm חדש שהוא 255.255.248.0
    אבל כתבת שם שאתה רוצה שבכל רשת יהיו 30 מחשבים.
    לפי החישוב יוצא הרבה יותר. איך עושים את ההגבלה הזאת ל30 מחשבים בדיוק?
    שוב תודה!

    השבמחק
  10. אחלה מאמי אחר תודה רבה.
    רק שאלה אחת לגבי החלוקת רשתות ב class B
    הSM החדש שיצא לי הוא 255.255.248.0. ורצית שיהיו רק 30 מחשבים בכל רשת. אבל יוצא לי הרבה יותר.
    אפשר לדעת איך עושים את ההגבלה לבדיוק 30 מחשבים בכל רשת למרות שיש מקום ליותר?
    תודה.

    השבמחק
  11. וואוו איזה מאמר מושקע!

    השבמחק