9.2. פרוטוקולים שכבתיים¶
שליחת פריים מהמצלמה לשרת בעיר אחרת פירושה פתרון של כמה בעיות בבת אחת. האות החשמלי חייב לעבור את החוט הראשון. הבייטים שעל החוט הזה צריכים למצוא את דרכם דרך מתג מקומי. הרשת המקומית צריכה למסור את ההודעה הלאה לכל מה שעומד בינה לבין שאר האינטרנט. החבילות ששורדות את המסע צריכות להירכב מחדש בסדר הנכון. המקבל צריך לדעת לאיזו מבין תוכניותיו למסור אותן. והבייטים עצמם צריכים לשאת משמעות ששני הקצוות מסכימים עליה.
ניסיון לפתור את כל זה בבלוק קוד אחד יהיה בלתי ניתן לניהול. התשובה הסטנדרטית היא לפצל את המשימה לשכבות. כל שכבה פותרת בעיה אחת מוגדרת היטב וחושפת שירות פשוט לשכבה שמעליה. תוכנית מדברת תמיד רק עם השכבה שישירות מתחתיה; השכבות שמתחת לזו בלתי נראות.
כל שכבה של מחסנית רשת פותרת בעיה אחת ומוסרת הפשטה נקייה כלפי מעלה לשכבה הבאה.¶
9.2.1. חמש השכבות¶
השמות שלהלן הם אלה שבהם משתמש שאר החלק הזה. הם מגיעים מהמודל הסטנדרטי שסביבו תוכננו הרשתות. הגבולות המדויקים בין השכבות מטושטשים לעיתים, אך התפקיד שכל אחת ממלאת יציב.
שכבה פיזית. מעבירה ביטים בין שני התקנים על אותו חוט או רדיו. רמות מתח, פולסי אור, אפנון RF. תפקיד המצלמה כאן הוא בעיקר לחבר את הכבל הנכון או להצטרף לרשת האלחוטית הנכונה; הסיליקון עושה את השאר.
שכבת קישור. מעבירה פריימים (חתיכות קטנות של בייטים) בין שני התקנים החולקים מקטע מקומי. מוסיפה כתובות חומרה כך שניתן לכוון כל פריים אל שכן מסוים אחד. Ethernet ו-Wi-Fi הן שתי טכנולוגיות הקישור שהמצלמה פוגשת בפועל.
שכבת רשת. מעבירה חבילות בין כל שני התקנים באינטרנט, לא רק על אותו מקטע מקומי. מוסיפה כתובת ברמת התוכנה המזהה מארח באופן בלתי תלוי בכבל שאליו הוא מחובר, ומנגנון ניתוב שמדלג חבילה ממקטע מקומי אחד למשנהו עד שהיא מגיעה. זו השכבה הראשונה שבה קוד ה-Python של המצלמה מתחיל להשמיע משהו.
שכבת תעבורה. יושבת מעל החבילות ומציעה מסירה בין תוכניות על שני מארחים, לא רק בין המארחים עצמם. שני סוגים נפוצים: האחד מוסר זרם בייטים מחובר ומסודר (סוס העבודה עבור רוב התעבורה), והשני מוסר הודעות עצמאיות הנעות באופן בלתי תלוי זו בזו (משמש כאשר תקורה נמוכה חשובה יותר מאשר ערובות). מוסיפה מספרי פורט כך שתוכניות מרובות על אותו מארח יכולות לנהל שיחות במקביל.
שכבת אפליקציה. כל מה שמעל התעבורה: הפרוטוקולים שמעניקים לבייטים משמעות. אלה שדפדפן אינטרנט מדבר בהם כדי לטעון דפים – ואלה שמאחורי כמעט כל שירות אינטרנט אחר שהקורא כבר משתמש בו מדי יום – שוכנים כאן. המדריך מכסה את התעבורה לעומק; השכבה הזו מקבלת חלק המשך משלה.
9.2.2. כיצד השכבות נערמות בזמן ריצה¶
כשהמצלמה שולחת בייטים על פני הרשת, כל שכבה מוסיפה כותרת משלה לפני הנתונים, כמו קינון מעטפה בתוך מעטפה אחרת:
הבייטים של האפליקציה נכנסים ראשונים.
שכבת התעבורה עוטפת אותם בכותרת קטנה האומרת לאיזו תוכנית הם שייכים (מספר הפורט).
שכבת הרשת עוטפת את זה בכותרת האומרת לאיזה מארח הם מיועדים (הכתובת ברמת התוכנה).
שכבת הקישור עוטפת את זה בכותרת האומרת לאיזה התקן על המקטע המקומי למסור אותם בהמשך (כתובת החומרה).
השכבה הפיזית הופכת את כל החבילה לביטים על חוט.
בקצה השני, כל שכבה מקלפת את הכותרת שלה ומוסרת את השאר כלפי מעלה. האפליקציה המקבלת מקבלת את הבייטים שלה בחזרה מבלי לדעת ששכבות הרשת, הקישור והפיזית אי פעם היו קיימות.
קינון זה הוא הסיבה שהמדריך מתקדם מלמטה למעלה. הבנת מה שהשכבה שמתחת עושה גורמת לשכבה שמעליה להרגיש בלתי נמנעת. שתי השכבות התחתונות מכוסות בעמוד אחד כל אחת מכיוון שכמעט אין מה להגדיר מ-Python. מהשכבה רשת ומעלה, הקצב מאט ככל שתפקידו של Python גדל.