# מערך שיעור: רשתות ואינטרנט<no value>

**משך:** יום לימוד מלא — 6 שעות אקדמיות (270 דקות).

**מטרת השיעור:** הסטודנטים יבנו מודל מנטלי שלם של איך מידע עובר ברשת, ויבינו את המונחים שישמשו אותם בנושא Backend ומסדי נתונים (Backend): Request, Response, Method, Status Code, Host, Port.

**בסוף השיעור הסטודנטים צריכים:**

1. להסביר את מודל Client-Server ולזהות את התפקידים בתרחיש נתון.
2. לפרק URL ולהסביר את התפקיד של IP, Port ו-DNS.
3. לתאר בסדר נכון את 8 שלבי המסע מהקלדת כתובת ועד הצגת אתר.

**דגש קריטי:** **Request/Response ו-Status Codes**. זו השפה של כל נושא Backend ומסדי נתונים. אם הסטודנטים יוצאים מהיום עם "בקשה = Method + Path, תשובה = Status + Body", הגשר ל-FastAPI כבר בנוי.

---

## מהלך השיעור

| חלק בשיעור | משך | הערות ודגשים |
|---|---|---|
| פתיחה: "מה קורה כשגולשים?" | 10 דק' | לשאול את הכיתה ולרשום תשובות. לחזור אליהן בסוף היום. |
| רשת, LAN, אינטרנט, Client/Server | 40 דק' | אנלוגיות הדואר והמסעדה. הדגמה חיה: `python -m http.server` והדפדפן. הלפטופ הוא גם Client וגם Server. |
| IP, Port, Domain, DNS | 45 דק' | `dns_lookup.py`. להדגים פורט תפוס (במק/לינוקס) ופורט שאין בו שרת. |
| הפסקה | 15 דק' | |
| פרוטוקולים: HTTP, HTTPS, TCP, UDP | 50 דק' | `raw_http.py`: לראות את הטקסט הגולמי של HTTP. טבלת Status Codes על הלוח, והיא נשארת עד סוף השבוע. |
| הפסקה | 15 דק' | |
| המסע מהדפדפן לשרת | 45 דק' | 8 השלבים על הלוח. `journey.py`. DevTools → Network → Timing. |
| תרגול + בדוק את עצמך | 50 דק' | Mini Project "מפת הרשת". סיום: לחזור לתשובות מהפתיחה ולתקן יחד. |

---

## דגשים להעברת השיעור

- **הרבה ציורים.** רשתות מובנות דרך דיאגרמות: חצים בין Client ל-Server, שכבות של פרוטוקולים. לצייר כל מושג לפני שמציגים קוד.
- **הקוד הוא חלון, לא מטרה.** אין צורך שהסטודנטים יזכרו את `socket.create_connection`. המטרה היא שיראו שהבקשה היא באמת טקסט, ושיש שלבים נפרדים.
- **להפריד בבירור בין "השרת לא קיים" ל-"השרת ענה 404".** זה בלבול נפוץ שחוזר בנושא Backend ומסדי נתונים.
- **localhost** הוא מושג קריטי לנושא Backend ומסדי נתונים. כדאי להדגים שהטלפון לא מגיע ל-`127.0.0.1` של הלפטופ.
- **Windows:** `http.server` לא תמיד נכשל על פורט כפול. להדגים את "פורט תפוס" ממחשב Mac/Linux, או להסתפק בהסבר. בנושא Backend ומסדי נתונים uvicorn יראה את השגיאה כמו שצריך.
- **אינטרנט בכיתה:** אם רשת הכיתה חוסמת אתרים כמו `httpbin.org`, אפשר להחליף לכתובת אחרת שמחזירה 404 (למשל נתיב לא קיים ב-`example.com`).
- **שאלת הראיון:** לומר במפורש שזו שאלה שנשאלת בראיונות, וזה מוטיבציה גבוהה.

---

## מושגים

| מושג | הסבר קצר |
|---|---|
| Network / LAN / Internet | מכשירים מחוברים / רשת מקומית / רשת של רשתות. |
| Router | מחבר בין ה-LAN לאינטרנט ומנתב חבילות. |
| Client / Server | יוזם בקשה / מחכה ועונה. תפקידים של תוכנות. |
| IP Address | כתובת של מכשיר ברשת. פרטית, ציבורית, או `127.0.0.1`. |
| Port | מספר שמזהה תוכנה בתוך המחשב. 80, 443, 8000. |
| Domain / DNS | שם קריא / המערכת שמתרגמת אותו ל-IP. |
| Protocol | סט כללים מוסכם לתקשורת. |
| HTTP Request | Method + Path + Headers + Body. |
| HTTP Response | Status Code + Headers + Body. |
| Status Code | 2xx הצלחה, 4xx טעות לקוח, 5xx טעות שרת. |
| HTTPS / TLS | HTTP מוצפן ומאומת בתעודה. |
| TCP / UDP | אמין ומסודר / מהיר ולא מובטח. |
| URL | Protocol + Host + Port + Path + Query. |

---

## תרגיל חשיבה

**שאלת פתיחה (תחילת חלק "המסע"):** "אתר הקורס לא נטען לי. תנו לי חמש סיבות **שונות** שיכולות לגרום לזה, ולכל אחת — איך הייתם בודקים?"

**מהלך:**

1. בקבוצות של 3, חמש דקות. כל קבוצה כותבת את הסיבות שלה.
2. אוספים על הלוח. תשובות צפויות: "אין אינטרנט", "האתר נפל", "כתבתי לא נכון את הכתובת".
3. המרצה מצייר את 8 שלבי המסע, ומבקש מהכיתה למקם כל סיבה על השלב שלה. "כתבתי לא נכון" נופל על DNS או על 404, "האתר נפל" על TCP או 500, "תעודה פגה" על TLS.
4. לשאול: "איזה שלב **חסר** לנו סיבה?" ולהשלים יחד.

**מה המרצה מראה בסוף:** טבלת "סימפטום → שלב" מתוך השיעור, ואז הדגמה של שלוש תקלות אמיתיות בדפדפן: Domain שלא קיים (שגיאת DNS), `localhost:9999` (Connection refused) ונתיב לא קיים (404). משפט סיום: "דיבאג של רשת = לשאול באיזה שלב זה נשבר."
