
הטקסט המלא של הדקות הראשונות בהרצאה «מספרי פורטים והבדלים בין TCP / UDP» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
מה העניינים? היום נדבר על TCP ועל UDP, שני הפרוטוקולים הכל כך קריטיים בכל מה שקשור לתעבורת נתונים.
היום אנחנו נסתכל עליהם ככה ממעוף הציפור, נסתכל מלמעלה ונדבר על הדברים הבאים. נדבר על מספרי פורטים של TCP ו-UDP. רבים הפעמים שאני שומע אנשים משוחחים על מספרי פורטים ואומרים, כן, אני פתחתי פורטי בנתב, יש לי פורטים של TCP, וכל מיני דברים מהסוג הזה, ולעיתים אני חש שלא תמיד הדוברים אכן יודעים
על מה בדיוק הם שחים. ולכן היום, גבירותיי ורבותיי, מאזינים יקרים, מה שאני רוצה לעשות זה להסיר את המסתורין מהעניין הזה של מספרי הפורטים של TCP ו-UDP, ולהסביר פעם אחת ולתמיד למה הם משמשים, למה צריך אותם, ומה עושים איתם, ואיך משתמשים בהם, ומי משתמש בהם, וכל מה שקשור למספרי פורטים.
ובמסגרת של מספרי פורטים, אנחנו כבר עוסקים בהם נדבר על מספרי הפורטים הידועים. ניקח כמה דקות ונסתכל איזה מספרי פורטים ידועים בעולם ורשומים ואיך הם רשומים ודברים מהסוג הזה.
ואנחנו נסכם בכמה דקות של דיבורים על ההבדלים בין TCP ל-UDP. למה בכלל יש לנו שני פרוטוקולים בשכבה 4? למה יש לנו שני מנגנונים לאריזה של מידע?
ומה ההבדל ביניהם? ומתי תוכנה תשתמש במנגנון אחד ומתי היא תשתמש במנגנון שני, ולמה.
אז חיגרו חגורות, אנחנו מתחילים. אז מה הם מספרי פורטים? בשביל להסביר את העניין הזה אנחנו צריכים קודם כל להסביר שני דברים, אנחנו צריכים להסביר שני דברים אחרים.
אחד מהם הוא המונח "לקוח", והשני המונח "שרת". אחרי שנבין מה זה לקוח ומה זה שרת בהקשר של מספרי פורטים, יהיה לנו יותר קל להמשיך הלאה.
בואו נתחיל דווקא מהצד של השרת. אז מה זה שרת? מי יודע? ובכן, שרת זה קודם כל מחשב. מכונה, מחשב, יש לו מעבד, יש לו ר"מ, יש לו זיכרון, יש לו כוננים קשיחים, יש לו כל מה שיש לכל מחשב רגיל, לפעמים אולי קצת יותר מאשר מה שיש למחשב רגיל,
כי שרתים בכל זאת עובדים 24 שעות ונותנים שירות להרבה מאוד לקוחות, אבל בעיקרון, מאחורי הקלעים, מה שעומד מאחורי המילה שרת זה בסופו של דבר מחשב, והמחשב הזה במידה והוא מחובר לרשת מקבל כתובת IP. והנה השרת שלנו מקבל את 12.30.31,
זה הכתובת שלו. עכשיו, המחשב הזה שהוא מחשב רגיל לכל דבר או מחשב לכל דבר מפעיל תוכנות שהן תוכנות שרת, תוכנות סרוור.
וכל העניין בשרתים זה בעצם התוכנה שאותה הם מריצים. אז השרת שלנו יכול להפעיל תוכנה שהיא Web Server, כלומר תוכנה שנותנת שירות לאתרי אינטרנט, ושם מוחסנים אתרי אינטרנט, תוכנת שרת של שרת קבצים, למשל כמו FTP Server, כלומר שאני יכול להעלות קבצים לשרת או להוריד
קבצים מהשרת, והתוכנה שמנהלת לי את זה היא תוכנת שרת של FTP, או, אם אתם אוהבים קצת גיימינג וכאלה, שרת, למשל, של משחק כמו Counter Strike, שבו השרת, המחשב, מריץ או מפעיל את העולם שבו כל האקשן הזה של העיריות מתרחש.
אז זה צד אחד. בואו נסתכל שנייה על הצד השני, הצד של הלקוח. אז מה זה לקוח? לקוח זה מחשב, בדיוק כמו כל מחשב אחר.
מחשב שאם הוא מחובר לרשת מקבל כתובת IP. הנה, 64.001. ומה מייחד את הלקוח שלנו? מה ההבדל בינו לבין השרת? נכון מאוד, מה שמבדיל בינו לבין השרת, ניחשתם?
זה התוכנות שאותנו מריץ. אם שרת מריץ תוכנות שרת, לקוח מריץ תוכנות לקוח. ומהי תוכנת לקוח שיודעת לדבר עם אתר אינטרנט?
לקוח אינטרנט. ויש הרבה כאלה, Chrome, Explorer, Firefox, Opera, Safari ועוד רבים אחרים.
אלה הן תוכנות לקוח שיודעות לקבל מידע משרת אינטרנט. ולמשל, יש להם, אם אני רוצה לעלות או להוריד קבצים משרת FTP, אני צריך תוכנת לקוח FTP. ויש כאלה רבות, למשל, אותה קומנדה אחת שאני מחבב שהיא יודעת לדבר עם תוכנת השרת FTP שנקראת פייל זילה לצורך העניין או לקוח של
counter strike שאני מתקין את counter strike אצלי על המחשב ואני רוצה להתחבר לשרת אז אני משתמש בלקוח counter strike שיודע לדבר עם השרת שבונה את העולם אז אם הבנו את ההבדל בין לקוח לבין שרת ואת המשמעות של שני המושגים האלה אנחנו יכולים עכשיו להתחיל לדבר על מספרי הפורטים בואו נעשה את זה בואו נגיד שC1 רוצה לשלוח מידע,
הנה, אנחנו פשוט נצייר את זה ככה, דאטה של C1 לשרת שלנו כאן, ולקבל ממנו דף אינטרנט. ובאותו זמן, C3 רוצה לשלוח מידע לשרת שלנו, הנה המידע של C3, דאטה, C3, אל אותו מכונה, אל אותו מחשב, ולקבל ממנו קבצים של שרת ה-FTP שלו.
אז שני המחשבים האלה יפעילו את האפליקציות לקוח שלהם, נכון? דפדפן Chrome או Total Commander, ייצרו את המידע שלהם, את הדאטה שלהם כאן בשכבות העליונות של ה-OSI, ויורידו את זה לשכבת ההעברה.
ובשכבת ההעברה, כפי שאתם זוכרים, יש לנו שני פרוטוקולים שיודעים להעביר קבצים. אחד הוא ה-TCP והשני הוא ה-UDP. ה-TCP משמש לתקשורת אמינה וה-UDP משמש לתקשורת בזמן אמת, ומכיוון שאנו רוצים כאן לקבל מידע משרתים כמו דף אינטרנט וקבצים של FTP, התוכנות שלנו,
תוכנות הלקוח שלנו יבחרו להשתמש בפרוטוקול tcp כיוון שפרוטוקול tcp הוא אמין ואנו זקוקים במקרה הזה לתעבורה אמינה. יפה.
אז עכשיו הם יבחרו ב-tcp והמידע ירד לשכבות התחתונות של ה-OSI, יקבל את כתובת ה-IP בשכבה 3, ה-IP של המחשב שלנו. שני המחשבים האלה יקבלו את אותו, שני המחשבים האלה ישלחו מידע אל אותה כתובת IP ל-12.30.31 וגם זה ילך ל-12.30.31, הרי השרת ווב שלי נמצא שם והשרת FTP שלי נמצא שם, אז אני צריך לשלוח את המידע לשם.
והמידע הזה יצא ברשת ויגיע אל השרת שלנו. ועכשיו השרת שלנו ייקח אותו ויפתח אותו ויעביר אותו ויבדוק שאכן זה מיועד ל-IP שלו וזה יגיע לשכבה 4 ב-TCP, ואז הוא יצטרך לשאול את עצמו שאלה כזאת.
הוא יגיד, היי, יש לי פה מידע מ-C1, לאיזה שרת המידע הזה מיועד? האם הוא מיועד לשרת הווב שלי?
האם הוא מיועד לשרת ה-FTP שלי, או שמא הוא מיועד לשרת ה-Counter-Strike שלי? ואומר באותו רגע לעצמו, כן, יש לי גם מידע מ-C3, מחשב שקוראים לו C3 שלח לי מידע, וגם פה אני צריך לדעת האם המידע הזה מיועד ל-Web Server שלי, או ל-FTP Server שלי, או ל-Counter-Strike Server שלי. הרי אני מריץ שלושה שרתים שונים,
איך אני אדע לאיזה תוכנת שרת אני צריך להעביר את המידע הזה, ולאיזה תוכנת שרת אני צריך להעביר את המידע הזה? שאלה טובה. אז מי יכול לנחש את התשובה?
התשובה היא כמובן מספר רפורטים וזה בדיוק השימוש של מספר רפורטים. הסיבה שיש לנו מספר רפורטים היא כדי שאני אוכל לסמן את המידע שמיועד ל-Web כמידע שמיועד ל-Web ואני אוכל לסמן מידע שמיועד ל-FTP כמידע שמיועד לשרת FTP וכדי שאני אוכל לסמן כל חתיכת מידע עבור האפליקציה שאליה היא נועדה.
אז איך עושים את זה? עושים את זה באמצעות מספר. שרת ה-Web, כאשר הפעלנו אותו, קם והכריז למחשב ואמר, היי, אני רוצה שהמספר שלי יהיה 80. ולכן, כאשר מישהו רוצה לשלוח אליי מידע, נגיד C1 רוצה לשלוח אליי מידע, הוא צריך להוסיף בסגמנט של ה-TCP, פה בשכבה 4 של ה-OSI, הוא צריך להוסיף גם את
המספר 80 לסגמנט המידע שלו, כדי שהמחשב המקבל, כדי ש-12, 3031 ידע שהדאטה של C1 מיועד לשרת ה-Web שלו, שרת ה-Web שמקשיב בפורט 80. ואילו תוכנת ה-FTP, כשהפעלנו אותה, אז היא ניכסה לעצמה את פורט 21. ושרת ה-FTP אומר, היי, אני רוצה את 21. וכשמישהו שולח
מידע, כשמישהו רוצה שירות ממני, מישהו רוצה שירות משרת ה-FTP ממני, שישלח בבקשה את המידע לפורט 21. וכך כשהוא יגיע ל-12.30.31, 12.30.31 ידע לנתב את המידע הזה לשרת הזה.
ו-counter strike שהפעלנו אותו, קם ואמר, אני אוהב מספרים גדולים, אני רוצה את 27,001. אני לא בטוח שזה המספר האמיתי של התוכנה counter strike, אבל אני די בטוח שזה בסביבה שם.
ולכן, כאשר המחשבים ירצו לפנות אל השרת CounterStrike ולהצטרף לעולם שאני יוצר, הם יצטרכו להפנות את הבקשה שלהם ל-2701 שזה אני.
וכך באמצעות מספרי פורטים אנחנו יכולים לזהות את האפליקציות השונות בצד השרת. ויש עוד המון אפליקציות. יש לנו למשל DNS, ו-DNS יקבל את 53. ויש לנו למשל גם, אני יודע מה, SSH שיקבל את 22.
ו-telnet שיקבל את 21 ואת IMAP לדואר שיקבל את 143 אם אני לא טועה ועוד רבים ורבים אחרים וכל מה שראינו עד עכשיו זה בעצם רק חצי מהסיפור.
כי למספרי פורטים יש גם את הצד השני של המטבע אם תרצו, את הצד השני של הסיפור. עד עכשיו דיברנו על מספרים שמזהים שרתים. ומה עם מספרים שמזהים תוכנות של לקוחות?
אהה, מספרי פורטים משמשים גם לזיהוי התוכנה של הלקוח. ישב פה מישהו ב-C1, פתח דפדפן, פתח חלון בדפדפן ושלח בקשה ל-123031 לקבל דף אינטרנט.
ברגע שהוא פתח את החלון הזה בדפדפן, הדפדפן שלו הגריל מספר פורט משלו, נגיד 1027, ואמר אוקיי, המספר שלי זה 1027, זה החלון, חלון דפדפן, ולמה זה חשוב? זה חשוב כי כשמיסטר סרבר פה ירצה להחזיר לי תשובה, אז כל מיני מידעים יכולים להגיע למחשב C1 ב-64001,
אבל רק המידע שמיועד לפורט 1027 יגיע לחלון בדפדפן שביקש את הבקשה מהשרת ווב שיושב ב-123031. ובואו נגיד שכאן הבחור שיושב על C3 ופתח FTP, הלקוח FTP שלו הגריל את 2032 בתור פורט פנוי לצורך התעבורה הזאת, ולכן כאשר שרת הקבצים שלנו כאן, ה-FTP סרבר שלנו כאן, ירצה להחזיר תשובה חזרה למחשב שיושב ב-6402,
הוא ישלח את התשובה ללקוח ה-FTP שמחכה לה במספר 2032, ורק הלקוח ב-2032 יקבל את המידע הזה. אז אני מקווה שעכשיו הבהרתי מהם מספרי פורטים ולמה הם משמשים.
מספרי פורטים ידועים, ממש ממש בקצרה. הבעיה היא כזאת, יש לנו כאן שרת, נכון, שמפעיל תוכנות שרת, למשל תוכנת Web שמקשיבה לפורט 80, כשהפעלתי את התוכנת Web היא בחרה את פורט 80 להיות זה שמסמן אותה, ותוכנת FTP שברגע שאני הפעלתי אותה היא בחרה את פורט 21, בתוכנת CounterStrike שברגע שהפעלתי אותה
היא בחרה את 27001. וכל התוכנות האלה עובדות פה על השרת ומחכות שלקוחות יפנו אליהם. והנה כאן יש לנו לקוח שפותח דף דפן, נגיד ב... אני יודע מה, כרום מקורים, כרום, ועכשיו הוא רוצה לקבל את דף האינטרנט שיושב בשרת הזה.
איך הכרום יודע שהשרת אינטרנט מחכה במספר 80? איך הוא יכול לדעת את זה? הרי אין לו שום דרך לדעת את זה.
בואו נגיד שאני רוצה לכאן ב-C1 לפתוח לקוח FTP. איך הלקוח FTP יודע שהוא צריך לסמן את המידע שהוא רוצה לשלוח לשרת במספר 21 כדי שהתוכנה, שהשרת המתאים יקבל אותה? בדיוק בשביל זה, גבירותיי ורבותיי, יש לנו את מספרי הפורטים הידועים.
בואו פשוט אני אראה לכם אותם פה באינטרנט. הנה, יש לי כאן. ויקיפדיה List of TCP and UDP Port Numbers אז תכירו את הארגון IANA, אינטרנט Assigned Numbers Authority שהוא אחראי על ניהול כל העניינים האלה של מספרי פורטים בין השאר.
ואיינה חילק את 65,536 הפורטים האפשריים לשלוש קבוצות, והקבוצה הראשונה נקראת Well-Known Ports או פורטים ידועים, והיא משתרעת ממספרי הפורטים 0 עד 1023. ואלה רבותיי הם כמו מספרי ברזל, פשוט הקצינו לאפליקציות את המספרים שלהם, שרתים קיבלו את המספרים שלהם והם נמצאים ברשימה