9.1. מדוע רשתות¶
שליטה בחומרה העניקה למצלמה דרכים לדבר עם התקן אחר מסוים על חוט אחר מסוים. UART בין המצלמה ללוח נלווה יחיד. I2C בין המצלמה לחיישנים התלויים על אותו אפיק קצר. CAN בין קבוצה קטנה של מודולים החולקים אפיק חסון אחד. כל מקרה עוקב אחר אותה צורה: שני צדדים (או קבוצה קטנה וידועה), מדיום משותף אחד, הסכמה ביניהם לגבי משמעות הבייטים על אותו מדיום.
9.1.1. הצורה הזו מפסיקה להתרחב¶
התבנית מנקודה לנקודה עובדת כל עוד שני הקצוות סמוכים, שני הקצוות ידועים מראש, והסקריפט יכול לבחור על איזה חוט הוא מדבר. ברגע שאחד מהאילוצים האלה נשבר, החיווט מפסיק להספיק.
מקבילים רבים. רשת של חמישים מצלמות המדווחות לשרת אחד אינה יכולה להיות מחווטת אחד-לאחד; אין מספיק יציאות UART בשרת, והכבלים יהיו בלתי אפשריים להנחה.
מקבילים שאינם על אותו חוט. מצלמה במפעל ולוח בקרה במשרד בצדו השני של העיר אינם יכולים לחלוק כבל טורי. חייב להתקיים מסלול כלשהו ביניהם דרך כל תשתית שכבר רצה בין שני הבניינים.
מקבילים שאינם ידועים מראש. מצלמה שמפרסמת את תוצאותיה לענן אינה בוחרת באיזה שרת היא מדברת בתרשים החיווט; כתובת הענן היא משהו שהסקריפט מחפש בזמן ריצה ומנתב אליו נתונים.
תוכניות רבות על חוט אחד. מחשב נייד כיום מריץ דפדפן, אפליקציית צ’אט, שיחת וידאו וגיבוי, כולם מדברים דרך אותו ממשק רשת באותו הזמן. החוט אינו יכול להיות ”בבעלות“ של שיחה אחת כפי שזה ב-UART.
כל אחד מהכשלים האלה הוא סוג שונה של בעיית כתובת. פתרון כולם יחד דורש יותר מחוט וקצב בָּאוּד (baud rate).
9.1.2. מהי רשת¶
רשת היא התשתית המאפשרת לכל אחד מתוך מספר גדול של מחשבים להחליף הודעות עם כל מחשב אחר, מבלי שכל זוג יצטרך קישור ייעודי משלו. שלוש תכונות הופכות רשת למשהו יותר מכבל טורי גדול:
מדיום משותף. התקנים רבים מתחברים לאותו כבל, מתג או ערוץ רדיו. הם מתחלפים בתורות או מבצעים ריבוב כך שיותר משיחה אחת יכולה להיכנס לאותו קישור פיזי.
כתובות לוגיות. לכל התקן יש מספר המזהה אותו באופן בלתי תלוי בכבל שאליו הוא מחובר. שליחת הודעה פירושה כתיבת המספר הזה על ההודעה, ולא חיבור חוט מסוים.
ניתוב. כאשר השולח והמקבל אינם על אותו מקטע מקומי, התשתית שביניהם נושאת את ההודעה דילוג אחר דילוג. נקודות הקצה אינן מכירות את המסלול; הן רק מכירות זו את כתובתה של זו.
מחשב נייד ברשת ה-Wi-Fi של המשרד המגיע לשרת במרכז נתונים מרוחק משתמש בכל השלוש. קישור ה-Wi-Fi הוא מדיום רדיו משותף; למחשב הנייד ולשרת יש כל אחד כתובת לוגית משלו; ההודעה משחילה את דרכה דרך כל תשתית שעומדת בין השניים, מועברת דילוג אחד בכל פעם. המשתמש לוחץ על קישור, המחשב הנייד שולח חבילה, והרשת מטפלת בשאר.
9.1.3. ומה לגבי המצלמה?¶
המצלמה ממלאת בדיוק את אותו תפקיד ברשת כמו המחשב הנייד. היא קולטת כתובת לוגית כשהיא מצטרפת לרשת, מכתובת הודעות יוצאות לכתובות הלוגיות של התקנים אחרים, ומניחה לתשתית לנתב אותן.
מה שמשתנה מפרקי שליטה בחומרה הוא הממשק. במקום לפתוח מופע UART ולכתוב אליו בייטים, הסקריפט פותח socket וכותב אליו בייטים. ה-socket הוא נקודת קצה אל תוך הרשת, באותו אופן שבו מופע UART הוא נקודת קצה אל תוך חוט. החלקים שבין ה-socket לחוט – פריימים, חבילות, טבלאות ניתוב, מתגים, רדיו – כולם יושבים מתחת והם ברובם בלתי נראים לקוד ה-Python.
העמודים שלפנינו מפרטים את החלקים האלה, שכבה אחר שכבה, כך שההפשטה ”פתח socket ושלח בייטים“ מרגישה בלתי נמנעת במקום קסם.