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

מקווה שעזרתי






אבי



26 בפבר׳ 2010

שלושת השכבות הראשונות במודל ה-OSI



שלום לכולם,
במאמר זה נכיר את 3 השכבות העיקריות בהן נעסוק והן שכבת עורק הנתונים (Data Link Layer),
שכבת הרשת (Network Layer) והשכבה האחרונה בה נעסוק היא שכבת התעבורה (Transport Layer).
כאשר אנחנו מדברים על מודל השכבות, אנו מדברים על השילוב בין הרמות השונות של העברת המידע.
כל שכבה במודל ה-OSI (Open System Interconnection) מבצעת אריזה\פתיחה של המידע בהתאם לכיוון העברת ה-DATA, מהלקוח לשרת ולהפך.
כאשר אנחנו מדברים על השכבה השניה במודל ה-OSI העברת המידע בין השכבה השניה ולבין השכבה השלישית מתבצעת באמצעות פרוטוקול שנקרא ARP ובכך נוצר הקשר בין שכבת עורק הנתונים לשכבת הרשת,
נאמר שבעת ביצוע פניה למחשב מסויים ברשת מבצע פרוטוקול ה-ARP "צעקה" ברשת עבור כתובת ה-MAC של אותו התקן אליו אנו מבקשים להגיע, אותו התקן אשר מחזיק בכתובת עונה בתגובה לקריאה ה-ARP ע"י העברת כתובת ה-MAC וה-IP המשויכת לאותו התקן.
בקצרה על כתובת ה-MAC ,היא כתובת פיסית הצרובה על גבי כל ציוד אלקטרוני ובכך מאפשרת לנו לזהות את הרכיב, כתובת ה-MAC מתחלקת לשני חלקים, החלק הראשון מייצג את החברה לה שייך המוצר (כל חברה מקבלת טווח כתובות MAC בו היא יכולה להשתמש) והחלק השני מייצג את כתובת הרכיב עצמו (לכן הוא חייב להיות ייחודי) ובאופן עקרוני לא ניתן לשנות אותה (כך המוצר יוצא מהמפעל). להלן דוגמא לכתובת MAC :00:1c:25:bc:21:60 ניתן לזהות כי כרטיס הרשת במקרה הזה שייך לחברת אינטל.
נמשיך...כפי שהזכרנו קודם לכן, כל שכבה מקושרת לזו שמעליה ולזו שמתחתיה וכך מתבצעת העברת בקשה לשכבה השלישית (Network Layer) אשר שואלת מהי כתובת ה-IP (ראה מאמר כתובת IP) של אותו התקן ובכך על-ידי קישור ה-MAC ADDRESS לכתובת ה-IP מתאפשרת העברת הנתונים לשכבה השלישית
חשוב לציין ששכבת עורק הנתונים עוסקת במעבר הנתונים באותה הרשת באמצעות Frames ולכן בשכבה שניה אנו נשתמש בציוד מסוג מתג (Switch) ומגבר (Repeater).
שכבת הרשת (Network) עוסקת באופן מעבר הנתונים בין סגמנטים (רשתות) שונות, בשכבה זו אנו משתמשים בציוד כגון נתב (Router) על מנת להעביר את המנות (Packets) ליעדן.
כאשר אנחנו מעוניינים להעביר מידע בין רשתות כתובת ה-MAC אינה מספקת, על-מנת להגיע להתקן מסויים אשר נמצא ברשת אחרת יש צורך לדעת מהי הרשת הלוגית בה הוא נמצא, חשוב לציין כי כתובות הרשת הינם משוייכות רק לרשת הפנימית וברגע שאנחנו מעוניינים להעביר מידע אל מחוץ לרשת אין חשיבות לכתובת ה-MAC, לעומת זאת כן חשובה לנו כתובת ה-IP של היעד אליו אנו מעוניינים להגיע, כל חבילת מידע אשר יוצאת מהרשת מכילה מספר שדות אשר מגדירים מספר גורמים מאוד חשובים בעת העברת הפקטה (באגה המקצועית) לדוגמא: כתובת IP של היעד והמקור,כמה זמן הפקטה יכולה "להשאר בחיים" (TTL) זהו מנגנון למניעת Loops, כתובת ה-MAC של המקור וכתובת ה-MAC של שער ברירת המחדל (Default Gateway), אני יודע שאמרתי שלכתובת ה-MAC אין חשיבות בעת יציאה מהרשת וזה נכון אבל על מנת להגיע לרשת אחרת אנו חייבית להגיע אל שער ברירת המחדל שלנו (Default Gateway) ומשם להיות מנותבים אל היעד- אזי מרגע הגעת הפקטה אל ה- Default Gateway אין חשיבות לכתובת ה-MAC מבחינתנו.


לדוגמא IP Header:



השכבה הרביעית היא שכבת התעבורה (Transport Layer) לשכבה זו יש 2 תפקידים עיקריים,
והם: טיפול בבקרת האיכות של המידע המועבר מהשכבות העליונות או התחתונות, שכבה זו מבצעת מספור של חבילת הנתונים המגיעה ומוודאות תקינות ולאחר מכן מעבירה אתה לשכבות הבאה, שכבה 3 ו-4 פועלות בשיתוף פעולה באמצעות פרוטוקולים כדוגמת פרוטוקול הנפוץ TCP/IP שבו IP שייך לשכבה שלישית ו-TCP שייך לשכבה רביעית ואחראי על אמינות המידע, או כדוגמת IPX/SPX שבו IPX שייך לכתובות הלוגיות (ניתן להשוות לכתובת IP) וה-SPX שייך לשכבה 4 ומספק את אמינות המידע.
תפקידה השני של שכבת התעבורה הוא להוסיף את מספר היציאה (Port), מחשב אשר מבצע מספר משימות במקביל מול הרשת חייב לתייג לעצמו דרך איזו יציאה הוא הפעיל את השירות על מנת שידע לאיזו יציאה לחזור, ניתן דוגמה של מחשב אשר יוצא לאינטרנט באמצעות הדפדפן ופותח מספר דפי אינטרנט במקביל, בתהליך זה המחשב מייצר לעצמו פורט אקראי אשר באמצעותו הוא יודע להיכן להחזיר את הבקשה, לדוגמא 3652 (פורטים 1-1024 שמורים ולא ניתן להשתמש בהם) , את הבקשה הוא מפנה אל האתר המבוקש בפורט הגלישה ב-HTTP שהוא מספר 80, חשוב לציין את פורט היעד אנו לא יכולים לשנות. בכך נוצר מצב כאשר דף האינטרנט חוזר אלינו למסך הוא חוזר בפורט שממנו הוא יצא ובכך אנחנו מבצעים הפרדה בין החלונות השונים של הדפדפן.

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