איך נתב מעביר חבילת מידע - ההחלטה שקורית מיליארדי פעמים בשנייה¶
כל פעם ששולחים בקשה לאתר, החבילה שיוצאת מהמחשב שלכם לא "טסה" ישר ליעד. היא עוברת דרך שרשרת שלמה של נתבים (routers), וכל אחד מהם צריך לקבל החלטה - לאיזה כיוון להעביר את החבילה הזאת הלאה. ההחלטה הזאת קורית בכל נתב באינטרנט, מיליארדי פעמים בשנייה, וההיגיון שמאחוריה פשוט יותר משנדמה.
מה בעצם יש בכל חבילת מידע¶
כל חבילה (packet) שעוברת ברשת נושאת כותרת (header) עם מידע חיוני - כתובת IP מקור, כתובת IP יעד, ועוד כמה שדות. נתב לא מסתכל בכלל על התוכן של החבילה, רק על הכתובות בכותרת. זה בדיוק כמו דוור שלא פותח מכתבים, רק קורא את הכתובת על המעטפה ומחליט לאיזה תא דואר להעביר אותה.
טבלת ניתוב - המפה שלפיה הנתב מחליט¶
לכל נתב יש טבלת ניתוב (routing table) - רשימה של רשתות מוכרות, ולכל רשת רשום דרך איזה ממשק יציאה (interface) ולאיזה נתב הבא (next hop) צריך לשלוח חבילה שמיועדת אליה. כשחבילה מגיעה, הנתב משווה את כתובת היעד שלה מול הטבלה, ומוצא את הרשומה המתאימה ביותר.
הנקודה המעניינת היא איך "מתאימה ביותר" נקבעת. טבלת ניתוב יכולה להכיל כמה רשומות שכולן "מתאימות" מבחינה טכנית לאותה כתובת יעד, ברמות דיוק שונות. הנתב תמיד בוחר לפי כלל שנקרא התאמת הקידומת הארוכה ביותר - longest prefix match: מתוך כל הרשומות שמתאימות, נבחרת זו עם הקידומת הכי ספציפית והכי מדויקת. רשומה שמתארת רשת קטנה וממוקדת גוברת תמיד על רשומה כללית שמתארת טווח רחב יותר, כי היא נחשבת מידע מדויק יותר לגבי איפה היעד נמצא באמת.
מה קורה כשאין התאמה כלל¶
אם אף רשומה בטבלה לא תואמת את כתובת היעד, הנתב פונה לרשומת ברירת מחדל (default route), שאומרת בעצם "כל מה שאני לא מכיר, תשלח הלאה לכיוון הזה". זה בדיוק מה שקורה עם רוב התעבורה שיוצאת מרשת ביתית - הראוטר הביתי לא מכיר את כל האינטרנט, אז כל בקשה שלא מיועדת לרשת המקומית שלכם, הוא פשוט מעביר הלאה לספק האינטרנט, וזה ממשיך כך שלב אחר שלב עד שהחבילה מגיעה לרשת שכן מכירה את היעד הסופי.
ARP - איך נתב מוצא את הכתובת הפיזית בקצה האחרון¶
כתובת IP מספיקה כדי לדעת לאן לשלוח חבילה ברמת הרשת, אבל כדי באמת למסור אותה למכשיר ספציפי בתוך רשת מקומית, צריך גם כתובת פיזית (MAC address) של כרטיס הרשת. הפרוטוקול שסוגר את הפער הזה נקרא ARP, ראשי תיבות של Address Resolution Protocol - הנתב שולח שידור לרשת המקומית ששואל "מי מחזיק בכתובת IP הזאת", והמכשיר הרלוונטי עונה עם כתובת ה-MAC שלו. הנתב שומר את התשובה בזיכרון זמני (ARP cache) כדי לא לשאול שוב בכל חבילה.
TTL - למה חבילה לא מסתובבת לנצח¶
מה קורה אם יש טעות בטבלאות ניתוב, וחבילה נתקעת בלולאה בין כמה נתבים שמעבירים אותה הלוך ושוב? כדי שזה לא יקרוס את הרשת, לכל חבילה יש שדה שנקרא TTL, Time To Live - מספר שמתחיל בערך מסוים ויורד באחד בכל נתב שהחבילה עוברת דרכו. ברגע שהוא מגיע לאפס, הנתב שמחזיק בחבילה באותו רגע פשוט זורק אותה ומדווח על כך. זה מגן על הרשת מפני חבילות "רפאים" שמסתובבות לנצח בגלל תקלה בניתוב.
למה זה חשוב להבין¶
כשמפתח מבין את מנגנון הניתוב, פתאום כלים כמו traceroute, שמראים את כל הנתבים שחבילה עוברת בדרך ליעד, הופכים ממסך מספרים מבלבל לסיפור ברור - כל שורה היא נתב אחד, כל קפיצה היא החלטת ניתוב שקיבל נתב על סמך הטבלה שלו. זה בדיוק הבסיס שאנחנו בונים עליו בקורס הרשתות, מהיסודות של כתובות ועד לניתוח תעבורה אמיתית.
קורס הרשתות המלא נמצא כאן, חינם ובעברית, כולל תרגול מעשי בניתוח מסלולי רשת.
יש לכם שאלה על טבלת ניתוב או על traceroute מוזר שקיבלתם? שאלו בדיסקורד.
לסיכום¶
נתב לא "יודע" איפה כל כתובת באינטרנט נמצאת - הוא פשוט מקבל החלטה מקומית, בהתבסס על הרשומה המדויקת ביותר בטבלת הניתוב שלו, ומעביר את החבילה צעד אחד קדימה. שרשרת של החלטות מקומיות כאלה, נתב אחר נתב, היא בדיוק מה שמעביר חבילת מידע מהמחשב שלכם עד לשרת בצד השני של העולם.