9.5. כתובות IP¶
כתובת חומרה מבדילה התקן מהאחרים על אותו כבל מקומי או תא רדיו. היא טובה לתפקיד זה, אך היא חסרת תועלת מעבר למקטע המקומי: מתג בבניין הסמוך אינו יכול לנתב לפיה, משום שהמנגנון הבסיסי שמאפשר למתג ללמוד כתובות MAC עובד רק בתוך מקטע אחד.
שכבת הרשת פותרת זאת באמצעות סוג שני של כתובת שאינו תלוי בכבל שאליו מחובר ההתקן. שמה של כתובת מסוג זה הוא כתובת פרוטוקול האינטרנט, או כתובת IP, והחלק של ”פרוטוקול האינטרנט“ נותן שם לקבוצת הכללים שכל מארח באינטרנט עוקב אחריהם כשהוא שולח או מעביר כתובת כזו. האינטרנט הנוכחי משתמש בשתי גרסאות של תכנית הכתובות במקביל – IPv4 (הצורה הישנה יותר, עדיין דומיננטית ברשתות קטנות) ו-IPv6 (הצורה החדשה יותר, שמחליפה אותה לאט).
9.5.1. מהי כתובת IP¶
כתובת IP היא מספר גדול דיו כדי לזהות כל התקן באינטרנט באופן ייחודי. היא נכתבת בצורה קריאה לאדם שבה משתמש שאר הפרק, אך בכותרת המנה היא רק מספר שלם בגודל קבוע.
כתובות IPv4 הן באורך 32 ביט ונכתבות כארבעה מספרים עשרוניים מופרדים בנקודות, כל מספר הוא בית אחד:
192.168.1.42 8.8.8.8 10.0.0.1
שלושים ושניים ביט מספקים בערך ארבעה מיליארד כתובות אפשריות, מה שנשמע כמו שפע כאשר IPv4 תוכנן בשנות ה-70 ולא הספיק כבר בתחילת שנות ה-2010.
כתובות IPv6 הן באורך 128 ביט ונכתבות כשמונה קבוצות של ארבע ספרות הקסדצימליות מופרדות בנקודתיים:
2001:0db8:85a3:0000:0000:8a2e:0370:7334רצפים של אפסים ניתן לקצר ל-
::, ואפסים מובילים בקבוצה ניתן להשמיט, כך שהכתובת שלמעלה נכתבת בדרך כלל2001:db8:85a3::8a2e:370:7334.
שתי משפחות הכתובות הן בכל מקרה שפות שונות; מארח IPv4 אינו יכול לשלוח ישירות מנה למארח IPv6 ללא עזרה משער. המודולים network ו-socket של המצלמה תומכים בשניהם. מדריך זה משתמש ב-IPv4 בדוגמאות משום שרוב הרשתות המקומיות שאליהן המצלמה תצטרף הן עדיין IPv4 בלבד, אך כל מה שבא בהמשך עובד בדיוק באותו אופן עבור IPv6 לאחר החלפת הכתובות.
9.5.2. למה משמשת כתובת IP¶
כתובת ה-IP אומרת לאיזה מארח באינטרנט מיועדת מנה. נתב שאינו יודע כיצד להגיע ליעד ישירות יודע שנתב אחר כלשהו כנראה יודע, ומעביר את המנה לשם. המנה מדלגת בין נתבים, כל אחד מעט קרוב יותר ליעד, עד שנתב שכן נמצא על המקטע המקומי של היעד מבצע את הקפיצה האחרונה.
התנהגות זו של קפיצה-אחר-קפיצה היא מה שגורם לאינטרנט לעבוד כרשת גדולה אחת במקום כאיים קטנים רבים. העמוד הבא מכסה כיצד נבחרות הקפיצות; עמוד זה עוסק רק בכתובת.
9.5.3. כיצד מצלמה משיגה כתובת¶
מצלמה שזה עתה הצטרפה לרשת Wi-Fi זקוקה לכתובת IP לפני שתוכל לדבר עם משהו. ישנן שתי דרכים נפוצות לכך.
הראשונה היא הקצאה אוטומטית. המצלמה מבקשת מהרשת המקומית כתובת; ההתקן שמחלק כתובות הוא הנתב – הקופסה שמחברת את הרשת המקומית לאינטרנט הרחב. ברוב הסביבות הביתיות והמשרדיות הקטנות, אותה קופסה פיזית משמשת גם כמתג שאליו מתחברים התקנים מחוטים וגם כנקודת גישה אלחוטית שאליה משתייכים התקנים אלחוטיים, כך ש“הנתב“, ”המתג“ ו“נקודת הגישה“ עשויים כולם להיות אותו פריט חומרה. הנתב מריץ שירות קטן בשם DHCP (פרוטוקול תצורת מארח דינמית), ששומר מאגר של כתובות זמינות, בוחר אחת עבור כל התקן שזה עתה הגיע, ומשכיר אותה לזמן קבוע. בעודו עוסק בכך, הנתב גם מוסר למצלמה כמה פיסות תצורה שימושיות נוספות:
הכתובת שאליה יש לשלוח תעבורה יוצאת כאשר היעד נמצא מחוץ לרשת המקומית (שער ברירת המחדל, שהוא כתובתו של הנתב עצמו); ו
הכתובות של שרת שמות (name server) אחד או יותר שהופכים שמות קריאים לאדם כמו
example.comלכתובות IP. שירות חיפוש השמות נקרא DNS, מערכת שמות הדומיין, ו-שמות ו-DNS מכסה אותו בפירוט.
כל זה קורה אוטומטית בעוד החיבור עולה. המצלמה אינה צריכה לבקש דבר מכל זה במפורש; ברגע ש-isconnected() מחזירה True בדוגמה שבעמוד הקודם, למצלמה כבר יש כתובתה, שערה ושרתי השמות שלה.
האפשרות השנייה היא תצורה סטטית. חלק מהפריסות רוצות כתובת ידועה עבור המצלמה כדי שהתקנים אחרים יוכלו להגיע אליה מבלי לחפש אותה תחילה. השיטה ipconfig() מגדירה את הכתובת, השער ושרת השמות באופן ידני:
wlan.ipconfig(addr4=("192.168.1.50/24", "192.168.1.1"))
wlan.ipconfig(dns="192.168.1.1")
תצורה סטטית היא שבירה (שני התקנים שקיבלו בטעות את אותה כתובת מתנגשים). פנה לברירת המחדל של DHCP אלא אם מופיעה סיבה ספציפית לעקוף אותה.
ברגע שלמצלמה יש כתובת IP, היא הצטרפה לאינטרנט (או לפחות לחלק של הרשת המקומית בו). התקנים אחרים יכולים כעת למען מנות אליה לפי אותה כתובת, והיא יכולה למען מנות אליהם.
9.5.4. מסכת הרשת וה-/24¶
ה-/24 בסוף הכתובת בדוגמת התצורה הסטטית שלמעלה היא מסכת הרשת. כתובת IP כשלעצמה אינה אומרת היכן מסתיימת הרשת המקומית – 192.168.1.50 יכולה להיות אחת ממאות כתובות ברשת ביתית קטנה, או אחת מאלפים ברשת גדולה יותר. מסכת הרשת אומרת כמה מהכתובת נותן שם לרשת וכמה נותן שם למארח בתוכה.
/24 משמעו ”24 הביטים הראשונים מתוך 32 נותנים שם לרשת; 8 האחרונים נותנים שם למארח“. עבור 192.168.1.50/24 זה מחלק את הכתובת ל-192.168.1 עבור הרשת ול-.50 עבור המארח, ומשאיר מקום לכ-254 התקנים על אותה רשת מקומית. /16 היה משאיר יותר ביטים עבור מחצית המארח ומכיל הרבה יותר התקנים ברשת אחת; /30 היה משאיר רק שתי כתובות מארח ומכיל חיבור נקודה-לנקודה.
מסכת הרשת נכתבת גם בדרך כלל כמספר ארבעה-בתים באותה סימון מנוקד כמו הכתובת. /24 שקול ל-255.255.255.0 – קרא כל בית כ“כל הביטים השייכים למחצית הרשת“. שתי הצורות ניתנות להחלפה; קורא ה-ipconfig() בתת-הפרק הבא במקרה מחזיר את צורת ארבעת הבתים.
מדוע החלוקה משנה בכלל – כיצד התקן משתמש במסכת הרשת כדי להחליט אם יעד נמצא ברשת המקומית או צריך לצאת דרך השער, ומדוע רוב הרשתות הביתיות נוחתות על /24 – מכוסה ב-רשתות פרטיות ו-NAT.
9.5.5. קריאת הכתובת בחזרה¶
השיטה ipconfig() ללא ארגומנטים מחזירה את התצורה הפעילה. התצוגה addr4 מחזירה את כתובת ה-IP ומסכת הרשת:
>>> wlan.ipconfig("addr4")
('192.168.1.50', '255.255.255.0')