|
|
הקדמה
מבנה חבילת UDP
דרך הפעולה של UDP
|
הקדמה
|
UDP מספק
את אותו שירות בלתי מהימן וחסר קישור שמספק IP. הוא אינו מוסיף דבר מלבד
מספרי הפורטים, ו- checksum. ה- checksum מבטיח שחבילות שנתוניהן הושחתו או
שונו לא יטופלו. UDP לא מודיע על כך שחבילות אבדו, או על כל בעיה אחרת
בתקשורת. לכן, אפליקציה שבוחרת להשתמש ב- UDP כפרוטוקול התעבורה שלה, צריכה
לדאוג בעצמה למהימנות התקשורת, ולהבטיח שבעיות בתקשורת, כמו כפילות נתונים או
אובדן נתונים, יטופלו כהלכה.
|
חבילת UDP כוללת את פתיח ה-UDP ואת הנתונים. הפתיח כולל 4 שדות בלבד -
פורט המקור, פורט היעד, אורך החבילה, ושדה checksum.
|
0....... |
8....... |
16...... |
24...... |
|
|
|
- אורך ההודעה
כולל את אורך הפתיח. שדה זה יהיה
תמיד גדול או שווה ל- 8 בתים, כיוון שאורך הפתיח עצמו הוא 8 בתים.
- checksum
checksum של UDP מחושב על ההודעה כולה.
גם שדה זה הוא אופציונלי, ואם אינו בשימוש, ערכו הוא אפס. עם זאת, כיוון שה-
checksum שמספק פרוטוקול IP הוא על פתיח ה- IP בלבד, ולא על הנתונים, שימוש
ב- checksum של UDP הוא הדרך היחידה להבטיח את שלמות הנתונים, וכדאי להשתמש
בו.
ערך
ה- checksum של UDP מחושב לא רק על הפתיח ועל
הנתונים. לשם חישוב הערך, UDP מייצר "פתיח מדומה" (pseudu-header), ומוסיף
אותו להודעת ה-UDP לפני חישוב ה-checksum. הפתיח המדומה אינו משודר בפועל
יחד עם חבילת ה-UDP, ואינו משמש לשום מטרה מלבד חישוב ה- checksum. מטרתו
של הפתיח המדומה היא להבטיח שההודעה אכן הגיעה ליעדה הנכון. הסיבה לכך
היא שפתיח ה-UDP אינו מזהה את מחשב היעד עצמו, אלא רק את הפורט על המחשב.
רק שכבת ה-IP מזהה את מחשב היעד, על פי כתובתו. לכן, הפתיח המדומה כולל
את כתובת המקור וכתובת היעד, שנלקחים משכבת ה- IP. כאשר ההודעה מגיעה
ליעדה, על המחשב המקבל להוציא את השדות האלה מפתיח ה- IP, ליצר פתיח מדומה
משלו, וליצר checksum על ההודעה כולה, כולל הפתיח המדומה. בנוסף לכתובות
ה-IP של המקור והיעד, הפתיח המדומה כולל גם שדה המציין את אורך הודעת ה-
UDP, ומספר המציין את הפרוטוקול (UDP, שמספרו 17). המקום הריק שנשאר ממולא
באפסים.
|
|
דרך הפעולה של UDP
|
כפי שצוין, UDP הוא פרוטוקול של שכבת התעבורה, הנמצאת מעל שכבת האינטרנט במודל השכבות. הודעת ה-UDP כולה, כולל הפתיח, עוברת אינקפסולציה של IP לפני שליחתה ברשת.
כלומר, הודעת ה-UDP ולכה היא למעשה שדה הנתונים של חבילה ה- IP. חבילת ה- IP, בתורה, עוברת אינקפסולציה של שכבת ממשק הרשת.
|
תהליך האינקספולציה, במקרה זה, אומר ש- UDP מוסיף פתיח לנתונים שהמשתמש (לרוב, אפליקציה כלשהי) שולח, ומעביר את ההודעה ל-IP. IP מוסיף פתיח IP להודעה שקיבל מ-UDP, ומעביר את החבילה לשכבת ממשק הרשת. שכבה זו מוסיפה את הפתיח המתאים, לפי סוג הרשת הפיזית שאליה מקושר המחשב, ושולחת את החבילה.
|
|
כאשר החבילה מגיעה למחשב היעד, היא עוברת את התהליך ההפוך: החבילה מתקבלת על ידי שכבת ממשק הרשת, ה"מקלפת" ממנה את פתיח הרשת; משם עוברת החבילה לשכבת ה- IP, שמקלפת את פתיח ה- IP, ולפי הפרוטוקול שמצוין שם יודעת להעביר את החבילה ל-UDP. UDP, בתורו, מקלף את פתיח ה-UDP, ולפי הפרוט שמצוין שם, יודע לאיזו אפליקציה להעביר את הנתונים.
|
מודל השכבות קובע אי תלות בין השכבות השונות. אבל, כפי שראינו, UDP מסתמך על כתובות ה-IP לחישוב ה- UDP checksum. כדי לדעת מהי כתובת ה-IP של המקור, על שכבת ה-UDP לתקשר עם שכבת ה-IP. שכבת ה-UDP לא יכולה לדעת מה תהיה כתובת המקור של החבילה, כיוון שזו תלויה בממשק הרשת דרכו תבחר שכבת ה-IP לשלוח את החבילה (כיוון שכפי שראינו, למחשב אחד יכולים להיות כמה ממשקי רשת). אינטראקציה זו בין UDP ל- IP אמנם עומדת בסתירה להפרדה העומדת בבסיס מודל השכבות, אך משיקולים פרקטיים, החליטו הוגי הפרוטוקול להעלים מכך עין.
|
ראינו קודם ש-UDP מבחין בין מקורות ויעדים שונים על
גבי אותו מחשב, על ידי שימוש בפורטים. אפליקציה המעונינת לשלוח נתונים ברשת,
מספקת לשכבת ה-UDP את מספר הפורט שלה, ואת מספר הפורט איתו היא מעונינת
לתקשר, במחשב המרוחק. UDP מקבל נתונים מאפליקציות רבות, שלכל אחת מהן מספר
פורט שונה, ומעביר אותם בנפרד לשכבת ה- IP. בכיוון ההפוך, שכבת ה-IP מעבירה
את ההודעות הנכנסות לשכבת ה-UDP, שמחלקת אותן לאפליקציות המתאימות, לפי מספרי
פורט היעד המצוינים בהן. כך, שכבת ה- UDP משמשת למעשה כמרבב (multiplexor),
המאחד זרמים נפרדים של הודעות מאפליקציות שונות לזרם אחד ויחיד העובר לשכבת
ה- IP, וכמפרד (de-multiplexor), המפריד בין ההודעות המגיעות משכבת ה-IP
לזרמים שונים, לפי מספרי הפורט אליהן מיועדות ההודעות השונות. |
כאשר אפליקציה מעונינת לתקשר עם אפליקציה אחרת,
במחשב מרוחק, עליה לדעת מה מספר הפורט עליו יושבת האפליקציה המבוקשת. לכן,
ישנה רשימה של פורטים מוגדרים מראש, שהאפליקציה יודעת מהם. למשל, בקשת
DNS
תשלח לפורט 53, ואילו הודעת tftp תשלח לפורט 69. |
|
|