רשתות ואינטרנט: Client-Server, כתובות, פרוטוקולים והמסע של בקשה

מטרות השיעור
  • להסביר מהי רשת מחשבים ולמה מחברים מחשבים זה לזה
  • להבחין בין LAN לבין האינטרנט, ולהבין את תפקיד הראוטר
  • להסביר מהי כתובת IP, ולהבחין בין IP ציבורי, פרטי ו-localhost
  • להסביר מהו Port ולמה צריך אותו בנוסף ל-IP
  • להסביר מהו Protocol ולמה רשת לא יכולה לעבוד בלעדיו
  • לתאר את המבנה של HTTP Request ושל HTTP Response
  • לפרק URL לחלקיו — Protocol, Domain, Port, Path, Query
  • לתאר בסדר הנכון את 8 השלבים מהקלדת כתובת ועד הצגת האתר

מה בשיעור

השיעור הזה בנוי מכמה פרקים קצרים, באותו סדר כמו במצגת:

  1. פרק ראשון — רשת מחשבים, LAN, אינטרנט, Client ו-Server
  2. פרק שני — כתובת IP, Port, Domain ו-DNS
  3. פרק שלישי — Request, Response ופרוטוקולים: HTTP, HTTPS, TCP ו-UDP
  4. פרק רביעי — מה קורה מהרגע שמקלידים כתובת ועד שהאתר מוצג

פרק ראשון: רשת מחשבים, LAN, אינטרנט, Client ו-Server

מה נלמד?

  • מהי רשת מחשבים (Computer Network).
  • LAN (רשת מקומית) מול Internet (האינטרנט).
  • ראוטר (Router), המכשיר שמחבר בין רשתות.
  • מודל Client-Server, הבסיס לכל אתר, אפליקציה ושרת שנבנה בנושא Backend ומסדי נתונים.

למה צריך את זה?

כל אפליקציה מודרנית מדברת עם הרשת: וואטסאפ, אתרים, משחקים, ובנושא Backend ומסדי נתונים גם השרת שאתם תכתבו. מפתחי Backend כותבים בדיוק את צד ה-Server. מפתחי Frontend כותבים את צד ה-Client. בלי להבין את המודל הזה אי אפשר להבין מה הקוד שלכם עושה.

הסבר מהבסיס

מהי רשת?

רשת מחשבים היא שני מכשירים או יותר שמחוברים כך שיוכלו להעביר מידע ביניהם. החיבור יכול להיות בכבל (Ethernet), באוויר (Wi-Fi), או בסיבים אופטיים.

למה מחברים מחשבים?

  • שיתוף מידע — הודעות, קבצים, אתרים.
  • שיתוף משאבים — מדפסת אחת לכל המשרד, חיבור אינטרנט אחד לכל הבית.
  • חלוקת עבודה — המידע שמור במקום אחד (שרת), וכולם ניגשים אליו.

LAN — Local Area Network

LAN היא רשת מקומית: המכשירים בבית, במשרד או בכיתה. בבית שלכם ה-LAN כולל את המחשב, הטלפון, הטלוויזיה החכמה והמדפסת, כולם מחוברים לאותו ראוטר.

  • כל המכשירים ב-LAN יכולים לדבר זה עם זה ישירות, בלי לצאת לאינטרנט.
  • מהירה מאוד ובשליטה שלכם.

Internet — רשת של רשתות

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

Router — השער בין הרשתות

ה-Router (נתב) הוא המכשיר שמחבר את ה-LAN שלכם לאינטרנט. הוא יודע אם חבילת מידע צריכה להישאר בבית (למשל מהמחשב למדפסת) או לצאת החוצה (למשל לאתר).

          Your home (LAN)
   ┌──────────────────────────┐
   │ Laptop   Phone   Printer │
   │    \       |       /     │
   │         Router ──────────┼───► ISP ───► Internet ───► Google's network
   └──────────────────────────┘                           (another LAN)
אנלוגיה: מערכת דואר

LAN היא דירה עם כמה דיירים, שמעבירים פתקים ביד זה לזה. Router הוא תיבת הדואר בכניסה לבניין: מכתב לשכנים מהדירה נשאר בפנים, מכתב לעיר אחרת יוצא לדואר. האינטרנט הוא כל מערך הדואר העולמי: סניפים, משאיות, מטוסים, שמחברים את כל הבניינים בעולם.

מודל Client-Server

כמעט כל התקשורת ברשת בנויה לפי מודל אחד:

  • Client (לקוח) — התוכנה שיוזמת ושולחת בקשה. “תן לי את דף הבית”, “שמור את ההודעה הזו”.
  • Server (שרת) — התוכנה שמחכה לבקשות, מטפלת בהן ומחזירה תשובה.
ClientServer
מי יוזם?הואמחכה שיפנו אליו
כמה?הרבה לקוחותבדרך כלל שרת אחד (או כמה) משרת את כולם
דוגמאותדפדפן, אפליקציית מובייל, curlשרת אתרים, שרת Database, שרת דואר
זמן ריצהעולה כשצריך ונסגררץ כל הזמן (24/7)

חשוב מאוד: Client ו-Server הם תפקידים של תוכנות, לא סוגי מחשבים. אותו לפטופ יכול להריץ דפדפן (Client) ובמקביל שרת FastAPI (Server). בנושא Backend ומסדי נתונים זה בדיוק מה שתעשו: השרת והלקוח ירוצו על אותו מחשב.

אנלוגיה: מסעדה

Client הוא הסועד: מזמין (בקשה) ומקבל מנה (תשובה). Server הוא המטבח: מחכה להזמנות, מכין ומחזיר. מטבח אחד משרת הרבה סועדים, והוא פתוח גם כשאף אחד לא מזמין.

בקשה ותשובה — דוגמה

כשגולשים לאתר, הדפדפן הוא ה-Client והאתר הוא ה-Server:

Browser (Client)                  Server (example.com)
   │                                   │
   │ ──── Request: GET /  ──────────►  │
   │                                   │  finds the page
   │ ◄──── Response: 200 + HTML  ────  │
   ▼                                   │
shows the page
  1. הדפדפן יוזם — שולח בקשה: “תן לי את הדף הראשי”.
  2. השרת, שכל הזמן מחכה לבקשות, מוצא את הדף.
  3. השרת מחזיר תשובה: קוד הצלחה (200) ואת תוכן הדף.
  4. הדפדפן מציג את מה שקיבל.

אותו דפוס בדיוק חוזר בכל אפליקציה: וואטסאפ שולח הודעה לשרת, אפליקציית מזג אוויר מבקשת תחזית, ובהמשך הקורס — שרת שאתם תכתבו יקבל בקשות ויחזיר תשובות.

טעות נפוצה

הטעות: “Server זה מחשב ענק בחדר ממוזג”, ולכן “אי אפשר להריץ שרת על לפטופ”.

  • Server הוא תוכנה שמחכה לבקשות — לא סוג מיוחד של מחשב.
  • כל לפטופ יכול להריץ תוכנת שרת. בהמשך הקורס תריצו שרת על המחשב שלכם.
  • אותו מחשב יכול להיות Client ו-Server בו בזמן: הדפדפן שלכם (Client) יכול לפנות לשרת שרץ על אותו לפטופ.
  • בחדרי שרתים פשוט מריצים הרבה תוכנות שרת כאלה, על מחשבים חזקים שפועלים כל הזמן.

טעות שנייה: לחשוב שאתר “יושב בדפדפן”. הדפדפן רק מבקש ומציג. האתר, כלומר הקבצים והלוגיקה, יושב על השרת.

סיכום

  • רשת = מכשירים מחוברים שמעבירים מידע. LAN = רשת מקומית. האינטרנט = רשת של רשתות.
  • Router מחבר את ה-LAN לאינטרנט ומחליט מה נשאר בפנים ומה יוצא.
  • Client יוזם בקשה. Server מחכה, מטפל ומחזיר תשובה.
  • Client ו-Server הם תפקידים של תוכנות. אותו מחשב, ואפילו אותה תוכנה, יכולים למלא את שניהם.
  • כל גלישה היא Request מה-Client ו-Response מה-Server.

דוקומנטציה רשמית

פרק שני: כתובת IP, Port, Domain ו-DNS

מה נלמד?

שלוש שאלות שכל הודעה ברשת צריכה לענות עליהן:

  1. לאיזה מחשב? — IP Address.
  2. לאיזו תוכנה במחשב הזה? — Port.
  3. איך אני יודע את הכתובת אם אני זוכר רק שם? — Domain ו-DNS.

למה צריך את זה?

  • בנושא Backend ומסדי נתונים תריצו שרת על http://127.0.0.1:8000. היום תבינו כל חלק בכתובת הזו.
  • שגיאה כמו Address already in use (הפורט תפוס) או Name or service not known (DNS נכשל) היא שגרה בעבודת Backend.
  • כשמחברים אפליקציה ל-Database, צריך לתת לה Host ו-Port.

הסבר מהבסיס

IP Address — כתובת המחשב

IP (Internet Protocol Address) היא כתובת מספרית שמזהה מכשיר ברשת. בלי כתובת, אי אפשר לשלוח אליו מידע, בדיוק כמו מכתב בלי כתובת.

הפורמט הנפוץ, IPv4, הוא ארבעה מספרים בין 0 ל-255, מופרדים בנקודות:

192.168.1.23
 │   │  │  │
 └───┴──┴──┴── four numbers, each 0–255

יש גם IPv6, פורמט חדש וארוך יותר (2001:db8::1), שנוצר כי לא נשארו מספיק כתובות IPv4 לכל המכשירים בעולם. העיקרון זהה.

שלושה סוגי כתובות שחשוב להכיר

סוגדוגמהמה זה
Private IP (פרטית)192.168.x.x, 10.x.x.xכתובת בתוך ה-LAN. הראוטר נותן אותה. אותה כתובת יכולה להופיע באלפי בתים שונים.
Public IP (ציבורית)84.229.15.7הכתובת של הבית/המשרד באינטרנט. כל המכשירים בבית יוצאים החוצה דרכה, דרך הראוטר.
localhost / Loopback127.0.0.1“המחשב הזה עצמו”. מידע שנשלח לשם לא יוצא בכלל מהמחשב.
אנלוגיה: בניין משרדים

Public IP = כתובת הבניין ברחוב (“הרצל 10”). Private IP = מספר המשרד בתוך הבניין (“חדר 23”). בכל בניין יש “חדר 23”, ולכן זה לא מספיק מבחוץ, אבל בפנים זה מזהה מדויק. localhost = “החדר שלי”: כשאני שולח לשם, אני שולח לעצמי.

Port — הדלת לתוכנה הנכונה

כתובת IP מביאה את המידע למחשב. אבל במחשב רצות הרבה תוכנות שמשתמשות ברשת: דפדפן, Spotify, Zoom, שרת שכתבתם. איך המידע מגיע לתוכנה הנכונה?

Port (פורט) הוא מספר בין 0 ל-65535 שמזהה תוכנה מסוימת על המחשב. שרת “מאזין” (Listens) על פורט מסוים, וכל בקשה שמגיעה לפורט הזה מועברת אליו.

IP   = which building    →  192.168.1.23
Port = which apartment   →  8000
Full address             →  192.168.1.23:8000

פורטים מוכרים (Well-known Ports):

Portשימוש
80HTTP — אתרים (לא מוצפן)
443HTTPS — אתרים (מוצפן)
22SSH — התחברות מרחוק לשרת
5432PostgreSQL — Database
8000 / 8080נפוצים לשרתי פיתוח (כמו שלנו בנושא Backend ומסדי נתונים)

כלל חשוב: על כל פורט (בכל כתובת) רק תוכנה אחת יכולה להאזין בכל רגע.

Domain ו-DNS — שמות במקום מספרים

בני אדם לא זוכרים 142.250.75.14. אנחנו זוכרים google.com.

  • Domain (שם מתחם) הוא שם קריא שמייצג כתובת: google.com, ynet.co.il.
  • DNS (Domain Name System) הוא “ספר הטלפונים של האינטרנט”: מערכת עולמית של שרתים שמתרגמת Domain לכתובת IP.

מבנה של Domain (קוראים מימין לשמאל, מהכללי לספציפי):

   www   .   ynet   .   co   .   il
    │         │          │        │
subdomain   name      second    TLD (top-level domain: country/type)

מה קורה בתרגום DNS (בקצרה):

  1. המחשב בודק אם הוא כבר יודע את התשובה (Cache, זיכרון מטמון של תשובות קודמות).
  2. אם לא, הוא שואל את שרת ה-DNS שהוגדר לו (בדרך כלל של ספקית האינטרנט, או 8.8.8.8 של Google).
  3. שרת ה-DNS מוצא את התשובה (אם צריך, שואל שרתים אחרים בהיררכיה) ומחזיר כתובת IP.
  4. רק אחרי זה המחשב שולח את הבקשה עצמה לכתובת שהתקבלה.

DNS Lookup — צעד אחר צעד

You type:     example.com
     │  "What is the IP of example.com?"
     ▼
DNS server:   93.184.215.14
     │
     ▼
Browser connects to 93.184.215.14:443
  1. מקלידים שם — example.com.
  2. המחשב שואל שרת DNS: “מה ה-IP של השם הזה?” (קודם הוא בודק אם התשובה כבר שמורה אצלו מהפעם הקודמת — Cache).
  3. מתקבלת כתובת IP.
  4. רק עכשיו הדפדפן מתחבר — ל-IP ול-Port (443 ל-HTTPS).

כמה תשובות לדוגמה:

google.com              ->  142.250.75.14
localhost               ->  127.0.0.1
no-such-domain-123.com  ->  lookup failed
  • localhost תמיד מתורגם ל-127.0.0.1 — המחשב עצמו.
  • שם שלא קיים — DNS לא מוצא לו כתובת, והדפדפן מציג שגיאה עוד לפני שניסה להתחבר.

טעות נפוצה

הטעות: להריץ שרת שני על פורט שכבר תפוס.

Program A listens on port 8000   -> OK
Program B tries port 8000        -> ERROR

Address already in use

למה? רק תוכנה אחת יכולה להאזין על פורט בכל רגע. התוכנה הראשונה “תפסה” את 8000.

התיקון: לעצור את התוכנה הראשונה, או להפעיל את השנייה על פורט אחר, למשל 8001.

במיוחד בנושא Backend

“סגרתי את חלון ה-Terminal אבל השרת עדיין תופס את הפורט”: לפעמים התהליך ממשיך לרוץ ברקע. מוצאים אותו (Get-Process python / ps aux | grep python) ועוצרים לפי PID, בדיוק כמו שלמדנו בנושא המחשב ומערכת ההפעלה.

טעות שנייה: לבלבל בין localhost לבין ה-IP ב-LAN. 127.0.0.1 נגיש רק מאותו מחשב. אם חבר ינסה לגלוש מהטלפון שלו ל-127.0.0.1:8000, הוא יגיע לטלפון של עצמו.

סיכום

  • IP מזהה מחשב ברשת. פרטית (192.168.x.x) בתוך ה-LAN, ציבורית באינטרנט.
  • 127.0.0.1 / localhost = המחשב הזה עצמו. לא נגיש ממחשבים אחרים.
  • Port מזהה תוכנה בתוך המחשב. רק תוכנה אחת מאזינה על כל פורט. 80 = HTTP, 443 = HTTPS.
  • Domain הוא שם קריא. DNS מתרגם אותו ל-IP לפני שליחת הבקשה.
  • כתובת מלאה: protocol://host:port/path, למשל http://127.0.0.1:8000/students.

דוקומנטציה רשמית

פרק שלישי: Request, Response ופרוטוקולים: HTTP, HTTPS, TCP ו-UDP

מה נלמד?

  • מהו Protocol (פרוטוקול).
  • Request ו-Response: מה נשלח ומה חוזר.
  • HTTP ו-HTTPS: השפה של האינטרנט.
  • TCP ו-UDP: איך המידע עצמו מועבר.

למה צריך את זה?

כל השבוע הרביעי בנוי על HTTP: תכתבו שרת שמקבל Requests ומחזיר Responses, ותבחרו Method (GET/POST/PUT/DELETE) ו-Status Code (200, 404…). היום רואים איך זה נראה “מבפנים”. כשתבינו את זה, FastAPI ייראה כמו קיצור דרך, ולא כמו קסם.

הסבר מהבסיס

מהו Protocol?

Protocol הוא סט כללים מוסכם לתקשורת: מה שולחים, באיזה סדר, באיזה פורמט, ומה עונים. אם שני צדדים לא מדברים באותו פרוטוקול, הם לא מבינים זה את זה, גם אם החיבור עצמו תקין.

אנלוגיה: שיחת טלפון

שיחת טלפון היא “פרוטוקול”: מתקשרים, הצד השני עונה “הלו”, אומרים מי מדבר, מעבירים את המסר, ונפרדים ב"ביי". אם מישהו עונה ומתחיל לדבר בשפה שאתם לא מכירים, החיבור עובד, אבל התקשורת לא.

ברשת יש שכבות של פרוטוקולים, וכל שכבה מטפלת בבעיה אחרת:

HTTP / HTTPS   ← WHAT we say      (application: "give me /index.html")
TCP  / UDP     ← HOW it travels   (transport: reliable or fast)
IP             ← WHERE it goes    (addressing: 93.184.215.14)
Wi-Fi/Ethernet ← the physical link

Request ו-Response

כל תקשורת HTTP היא זוג:

  • Request (בקשה) — ה-Client שולח: מה הוא רוצה ואיפה.
  • Response (תשובה) — ה-Server מחזיר: האם הצליח, והתוכן.

זה תמיד ה-Client שמתחיל. שרת HTTP לא שולח כלום מיוזמתו.

HTTP — HyperText Transfer Protocol

HTTP הוא פרוטוקול טקסטואלי: הבקשה והתשובה הן ממש טקסט שאפשר לקרוא.

מבנה Request:

GET /index.html HTTP/1.1          ← request line: METHOD  PATH  VERSION
Host: example.com                 ← headers: extra info, "Name: value"
User-Agent: Mozilla/5.0
Accept: text/html
                                  ← empty line = end of headers
(body — empty for GET)            ← body: data we send (used in POST/PUT)
חלקהסבר
Methodמה רוצים לעשות. GET = לקבל. POST = ליצור. PUT = לעדכן. DELETE = למחוק.
Pathאיזה משאב: /, /students, /students/7.
Headersמידע נלווה: לאיזה אתר (Host), מי שולח, איזה פורמט מקבלים.
Bodyהמידע עצמו, למשל פרטי סטודנט חדש ב-POST.

מבנה Response:

HTTP/1.1 200 OK                   ← status line: VERSION  STATUS CODE  REASON
Content-Type: text/html           ← headers
Content-Length: 1256
                                  ← empty line
<!doctype html><html>...          ← body: the content itself

Status Codes (קודי מצב), לפי הספרה הראשונה:

טווחמשמעותדוגמאות
2xxהצלחה200 OK, 201 Created
3xxהפניה למקום אחר301 Moved Permanently
4xxהלקוח טעה400 Bad Request, 404 Not Found
5xxהשרת נכשל500 Internal Server Error

HTTPS — HTTP מאובטח

ב-HTTP רגיל, הטקסט עובר ברשת גלוי. כל מי שיושב בדרך (למשל ב-Wi-Fi ציבורי) יכול לקרוא סיסמאות ומספרי כרטיס אשראי.

HTTPS = HTTP + הצפנה (בעזרת פרוטוקול בשם TLS). הוא מוסיף שני דברים:

  1. הצפנה — רק השרת והלקוח יכולים לקרוא את התוכן.
  2. אימות זהות — תעודה דיגיטלית (Certificate) מוכיחה שאתם באמת מדברים עם bank.co.il ולא עם מתחזה.

ה-HTTP עצמו בתוך ההצפנה זהה לגמרי. פורט: HTTP = 80, HTTPS = 443. סמל המנעול 🔒 בדפדפן אומר שהחיבור הוא HTTPS.

TCP ו-UDP — איך המידע נוסע

מידע ברשת מחולק לחבילות (Packets) קטנות. ה-IP מביא כל חבילה לכתובת הנכונה, אבל חבילות יכולות ללכת לאיבוד או להגיע בסדר הפוך. כאן נכנסים TCP ו-UDP:

TCPUDP
אמינותמובטחת: חבילה שאבדה נשלחת שובלא מובטחת: מה שאבד, אבד
סדרמגיע בסדר הנכוןיכול להגיע בסדר אחר
חיבורפותח חיבור לפני השליחה (Handshake)שולח מיד, בלי חיבור
מהירותאיטי יותר (בגלל הבדיקות)מהיר
שימושיםאתרים (HTTP/HTTPS), מייל, העברת קבצים, Databaseשיחות וידאו, משחקים אונליין, DNS, סטרימינג חי
אנלוגיה

TCP = דואר רשום: יש אישור מסירה, ואם המכתב אבד, שולחים שוב. אמין אבל לוקח זמן. UDP = לצעוק הודעה במגפון: מהיר, אבל אם מישהו לא שמע מילה, אף אחד לא חוזר עליה. בשיחת וידאו עדיף לאבד פריים אחד מאשר שהשיחה תיתקע כדי לשלוח אותו שוב.

HTTP רץ מעל TCP. כשהדפדפן מבקש דף, קודם נפתח חיבור TCP לשרת (בפורט 80 או 443), ורק אז נשלח טקסט ה-Request בתוכו.

קודי תשובה נפוצים

כל HTTP Response מתחיל ב-Status Code — מספר של שלוש ספרות שאומר מה קרה. הספרה הראשונה אומרת את ה"משפחה":

קודמשמעותדוגמה
200 OKהבקשה הצליחההדף נטען
301הכתובת עברה למקום אחראתר שעבר לכתובת חדשה
404 Not Foundהנתיב לא קייםטעות בכתובת
500 Internal Server Errorשגיאה בצד השרתקוד השרת קרס
  • 2xx — הצלחה. 3xx — הפניה. 4xx — טעות של ה-Client. 5xx — טעות של ה-Server.

טעות נפוצה

הטעות: לחשוב ש-404 אומר “האינטרנט לא עובד” או “השרת נפל”.

  • 404 היא תשובה תקינה מהשרת: “קיבלתי את הבקשה, אבל אין לי משאב בנתיב הזה”. השרת עובד מצוין. הבעיה בבקשה, כלומר בנתיב.
  • אם השרת לא זמין בכלל, לא מקבלים שום Status Code. מקבלים שגיאת חיבור, כמו Connection refused או timed out.
  • 500 = השרת קיבל את הבקשה וקרס בזמן הטיפול. בנושא Backend, כשתראו 500, הבאג אצלכם בקוד השרת.
מה קיבלתםאיפה הבעיה
200אין בעיה
404הנתיב לא נכון (צד Client)
500באג בקוד השרת (צד Server)
Connection refusedאין שרת שמאזין בכתובת/פורט הזה

טעות שנייה: לחשוב ש-HTTPS “מסתיר” את האתר שאליו גולשים. ההצפנה מגינה על התוכן — סיסמאות, טפסים, הדף עצמו — אבל ה-Domain שאליו מתחברים עדיין גלוי ברשת.

סיכום

  • Protocol = כללים מוסכמים לתקשורת. יש שכבות: HTTP (מה אומרים), TCP/UDP (איך זה נוסע), IP (לאן).
  • HTTP Request = Method + Path + Headers + Body. HTTP Response = Status Code + Headers + Body.
  • Status Codes: 2xx הצלחה, 4xx טעות של הלקוח, 5xx טעות של השרת.
  • HTTPS = HTTP + הצפנה ואימות זהות (TLS). פורט 443.
  • TCP אמין ומסודר (אתרים, קבצים). UDP מהיר ולא מובטח (וידאו, משחקים, DNS).

דוקומנטציה רשמית

פרק רביעי: מה קורה מהרגע שמקלידים כתובת ועד שהאתר מוצג

מה נלמד?

זו שאלת ראיון קלאסית: “מה קורה כשמקלידים https://www.example.com/about בדפדפן ולוחצים Enter?” בשיעור הזה נבנה תשובה מלאה, שלב אחר שלב, ונחבר את כל המושגים מהיום: URL, DNS, IP, Port, TCP, HTTPS, Request, Response.

למה צריך את זה?

  • זו השאלה הנפוצה ביותר בראיונות Junior. היא בודקת אם אתם רואים את “התמונה הגדולה”.
  • כשאתר “לא עובד”, מי שמכיר את השלבים יודע איפה לחפש: DNS? חיבור? שרת? תוכן?
  • בנושא Backend ומסדי נתונים אתם תכתבו את שלב 6, העיבוד בשרת. טוב להבין מה קורה לפניו ואחריו.

הסבר מהבסיס

שלב 0 — פירוק ה-URL

URL (Uniform Resource Locator) הוא “הכתובת המלאה” של משאב באינטרנט:

https://www.example.com:443/about?lang=he
└─┬─┘   └──────┬──────┘ └┬┘ └─┬─┘ └──┬──┘
protocol     domain     port  path   query
חלקמשמעות
Protocol (Scheme)https: באיזה פרוטוקול לדבר.
Domain (Host)www.example.com: לאיזה שרת. יתורגם ל-IP.
Port443: בדרך כלל לא כותבים אותו. https = 443, http = 80.
Path/about: איזה משאב בתוך השרת.
Query?lang=he: פרמטרים נוספים, בפורמט key=value. כמה פרמטרים מחברים עם &.

שמונת השלבים

1. הדפדפן מפרק את ה-URL — מבין שהפרוטוקול הוא HTTPS (ולכן פורט 443), שה-Domain הוא www.example.com ושהנתיב הוא /about.

2. DNS Lookup — שם ‏←‏ כתובת IP. הדפדפן צריך IP, לא שם. הוא בודק לפי הסדר: Cache של הדפדפן, Cache של מערכת ההפעלה, ואם אין תשובה — שואל את שרת ה-DNS. מתקבל למשל 93.184.215.14.

3. חיבור TCP — Three-Way Handshake. הדפדפן פותח חיבור TCP לכתובת 93.184.215.14:443. החיבור נפתח ב"לחיצת יד" של שלוש הודעות:

Client ──── SYN ────────►  Server     "Can we talk?"
Client ◄─── SYN-ACK ─────  Server     "Yes, can you hear me?"
Client ──── ACK ────────►  Server     "Yes. Let's start."

4. TLS Handshake — הצפנה. כי זה HTTPS: השרת שולח תעודה (Certificate), הדפדפן בודק שהיא אמיתית ושייכת ל-www.example.com, ושני הצדדים מסכימים על מפתח הצפנה. מכאן הכול מוצפן. (ב-http:// אין את השלב הזה.)

5. שליחת HTTP Request:

GET /about?lang=he HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 ...
Accept: text/html

6. השרת מעבד את הבקשה. תוכנת השרת מקבלת את הבקשה, מבינה מה ביקשו (GET /about), ומכינה תשובה. לפעמים זה רק קובץ קבוע, ולפעמים הרבה עבודה: הרצת קוד, שאילתה ל-Database, בניית HTML. זה החלק שתכתבו בנושא Backend ומסדי נתונים.

7. השרת שולח HTTP Response:

HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8

<!doctype html><html> ... <link href="/style.css"> <img src="/logo.png"> ...

8. הדפדפן מציג (Rendering). הדפדפן קורא את ה-HTML ובונה ממנו את הדף. כשהוא נתקל בקבצים נוספים (CSS, תמונות, JavaScript), הוא שולח עוד Requests, אחד לכל קובץ, וחוזר על שלבים 5–7. דף ממוצע מבצע עשרות בקשות! (חיבור ה-TCP וההצפנה כבר קיימים, ולכן בדרך כלל לא חוזרים על שלבים 2–4.)

אנלוגיה: הזמנת משלוח
  1. אתם יודעים שרוצים “פיצה מהמסעדה ההיא” (URL). 2. מחפשים באפליקציה את הכתובת שלה (DNS). 3. מתקשרים והיא עונה (TCP Handshake). 4. מוודאים שזו באמת המסעדה ולא מתחזה, ומדברים בקוד סודי (TLS). 5. מזמינים (Request). 6. המטבח מכין, אולי מוציא מצרכים מהמחסן (עיבוד + Database). 7. השליח מביא את המנה (Response). 8. אתם פורסים ומגישים, ומגלים שחסרים רטבים, אז מזמינים עוד (בקשות CSS ותמונות).

כמה זמן לוקח כל שלב

כל המסע הזה לוקח בדרך כלל פחות משנייה. מדידה לדוגמה של בקשה אחת:

Step 2 - DNS: example.com -> 93.184.215.14 | ms: 21
Step 3 - TCP connected to 93.184.215.14 443 | ms: 64
Step 4 - TLS version: TLSv1.3 | ms: 71
Steps 5-7 - first line: HTTP/1.1 200 OK | ms: 66

את אותם זמנים אפשר לראות בכל דפדפן: F12 ‏←‏ לשונית Network ‏←‏ לחיצה על בקשה ‏←‏ Timing. המרצה יציג את זה על המסך. שם רואים גם כמה בקשות דף אחד שולח — לפעמים עשרות.

טעות נפוצה

הטעות: לדלג על DNS או לשים אותו אחרי החיבור (“הדפדפן מתחבר ל-google.com”). אי אפשר להתחבר לשם. חיבור TCP דורש IP, ולכן DNS תמיד קודם.

טעות שנייה: לחשוב שכל הדף מגיע בבקשה אחת. ה-HTML מגיע ראשון, ומתוכו הדפדפן מגלה עוד עשרות קבצים ומבקש כל אחד בנפרד. בלשונית Network ב-DevTools רואים את זה מיד.

טעות שלישית — אבחון לא נכון של תקלה:

הסימפטוםהשלב שנכשל
“DNS_PROBE_FINISHED_NXDOMAIN” / “server IP address could not be found”2 — DNS: אין Domain כזה, או בעיית DNS
“Connection refused” / “timed out”3 — אין שרת שמאזין, או שהשרת לא נגיש
“Your connection is not private”4 — בעיית תעודה ב-TLS
דף “404 Not Found”6–7 — השרת עובד, אבל הנתיב לא קיים
דף “500 Internal Server Error”6 — קוד השרת קרס

סיכום

  • URL = Protocol + Domain + Port + Path + Query.
  • הסדר: פירוק URL ‏←‏ DNS ‏←‏ TCP Handshake ‏←‏ TLS ‏←‏ HTTP Request ‏←‏ עיבוד בשרת ‏←‏ HTTP Response ‏←‏ Rendering.
  • DNS תמיד לפני החיבור, כי מתחברים ל-IP ולא לשם.
  • דף אחד = עשרות Requests: HTML ראשון, ואחריו CSS, תמונות ו-JS.
  • כל סוג תקלה שייך לשלב מסוים, וכך מאבחנים.

דוקומנטציה רשמית

תרגול

שאלות הבנה על החומר של השיעור — בלי קוד.

תרגיל 1: Client או Server?

בכל תרחיש — מי ה-Client ומי ה-Server?

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

תרגיל 2: IP, Port ו-DNS

  1. מה מזהה כתובת IP, ומה מזהה Port?
  2. מה המשמעות של הכתובת 127.0.0.1:8000?
  3. חבר מנסה לפתוח בטלפון שלו את 127.0.0.1:8000 כדי לראות שרת שרץ אצלכם. למה זה לא יעבוד?
הצג פתרון
  1. IP מזהה מחשב ברשת (איזה בניין). Port מזהה תוכנה בתוך המחשב (איזו דירה).
  2. 127.0.0.1 הוא localhost — המחשב עצמו. 8000 הוא הפורט שעליו התוכנה מאזינה. ביחד: התוכנה שמאזינה על פורט 8000 במחשב הזה.
  3. בטלפון של החבר, 127.0.0.1 הוא הטלפון של עצמו — לא המחשב שלכם. localhost נגיש רק מאותו מחשב.

תרגיל 3: פירוק URL

פרקו את הכתובת לחלקיה — Protocol, Domain, Port, Path ו-Query:

https://shop.example.com:443/cart?coupon=SALE10

ומה יהיה הפורט אם לא כתוב בכתובת :443?

הצג פתרון
חלקערך
Protocolhttps
Domainshop.example.com
Port443
Path/cart
Querycoupon=SALE10

כשהפורט לא כתוב, הדפדפן משתמש בפורט ברירת המחדל של הפרוטוקול: 443 ל-HTTPS (ו-80 ל-HTTP).

תרגיל 4: קודי תשובה

מה אומר כל אחד מהקודים, ואצל מי הבעיה — ה-Client או ה-Server?

200   301   404   500

ומה יקבל הדפדפן אם השרת בכלל לא רץ?

הצג פתרון
קודמשמעותאיפה הבעיה
200הבקשה הצליחהאין בעיה
301הכתובת עברה למקום אחראין בעיה — הפניה
404הנתיב לא נמצאאצל ה-Client — כתובת שגויה
500שגיאה בקוד השרתאצל ה-Server

אם השרת לא רץ בכלל — לא חוזר שום Status Code. מקבלים שגיאת חיבור, כמו Connection refused או timed out.

תרגיל 5: המסע של בקשה

סדרו את השלבים לפי הסדר — ממה שקורה מהקלדת כתובת ועד שהאתר מוצג:

  • (א) חיבור TCP — לחיצת יד משולשת
  • (ב) DNS — תרגום השם לכתובת IP
  • (ג) הדפדפן מציג את הדף (Rendering)
  • (ד) שליחת HTTP Request
  • (ה) הקמת הצפנה (TLS)
  • (ו) פירוק ה-URL
  • (ז) השרת מחזיר HTTP Response

ולמה DNS חייב לבוא לפני חיבור ה-TCP?

הצג פתרון

הסדר: (ו), (ב), (א), (ה), (ד), (ז), (ג)

  1. פירוק ה-URL.
  2. DNS — שם ‏←‏ כתובת IP.
  3. חיבור TCP (SYN, SYN-ACK, ACK).
  4. TLS — הצפנה (בגלל HTTPS).
  5. HTTP Request.
  6. (השרת מעבד את הבקשה.)
  7. HTTP Response.
  8. Rendering — והדפדפן מבקש עוד קבצים (CSS, תמונות).

DNS בא קודם כי חיבור TCP דורש כתובת IP — אי אפשר להתחבר לשם.