
הטקסט המלא של הדקות הראשונות בהרצאה «הסבר על מודל TCP/IP הסבר על TCP - לחיצת יד משולשת» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
שלום לכולם, בהרצאה הזו אנחנו רוצים להבין ממה מורכב פרוטוקול TCP, ממה הוא בנוי אז יש לנו פה תקשורת דו-כיוונית מקליינט לסרבר וחזרה האפליקציות מדברות ביניהן בשפה שלהם, בפרוטוקול שלהם זה הפרוטוקולים התקניים שקיימים, FTP, HTTP וכשרוצים לשדר משהו, מעבירים את זה למערכת
ההפעלה היא מחלקת את כל המידע ל-1500 בייט, למנות קטנות ומדביקה פורטים חוץ מלהדביק פורטים היא יכולה לוודא הגעה היא יכולה להיות ערבה לזה שהמידע הגיע בשלמותו לצד השני והיא יכולה סתם לשדר אותו בלי לוודא שום דבר תלוי מה אנחנו מבקשים אז tcp מוודא הגעה UDP לא מוודא הגעה UDP רק שולח את המידע דרך אגב השלב הבא יהיה
להדביק כתובת IP ולהעביר את זה לשכבה הפיזית אבל על זה נדבר בהרצאות הבאות עכשיו אני רוצה להתרכז באיך tcp מוודא הגעה לצד השני השלב הראשון זה תחילת סנכרון קליינט שולח לשרת פקט שבו הוא אומר אני רוצה להתחיל איתך שיחה מסודרת ובתוך הפקט הזה הוא שם דגל פלג שנקרא סין מדליק ביט מסוים שאומר אני רוצה להתחיל להסתנכרן איתך אני רוצה להתחיל שיחה מסודרת ועל הדרך הוא גם מודיע לו מאיזה מספר נתחיל את
הספירה אנחנו סופרים את הבייטים של הדאטה של הנתונים שהעברנו לצד השני כמובן שהרעיון המרכזי זה לקבל אישורי הגעה של הפאקטים שלנו מהצד השני ואם לא נקבל את אישורי הגעה האלו נשלח את הפאקטים שוב ושוב עד שבשלב מסוים מערכת ההפעלה מתייאשת ואז מודיעה לאפליקציה שהיא לא הצליחה אבל לפני שהיא תתייאש היא תנסה לשלוח שוב ושוב עד שהיא לא תקבל אישור הגעה מהצד השני של הפאקט
וזה בניגוד ל UDP שפעם אחת שולח את הפאקט והוא לא יודע אם הוא הגיע לצד השני או לא הגיע לצד השני והוא לא משדר אותו מחדש וזה ההבדל הגדול בין TCP ל UDP ש- TCP מנסה לשלוח שוב ושוב ושוב עד שהוא לא יקבל אישור הגעה ו- UDP לא עושה זאת UDP שולח רק פעם אחת וזהו אין לו מושג אם זה הגיע לצד השני או לא אבל לפני שמתחילים
להעביר את המידע עצמו מתחילים מזה שעושים את הסנכרון הראשוני הזה של שלושה פאקטים של לחיצת יד משולשת שבהם אנחנו בכלל סוגרים בינינו מאיזה מספר נתחיל את הספירה ונראה בכלל שהצד השני מוכן לענות לי ככה מתחיל הסנכרון בינינו ורק אחרי זה עובר המידע תכלס כרגע אנחנו בשלב של לחיצת יד משולשת של תחילת סנכרון תוך כדי ההודעה על זה
שאני רוצה להתחיל להעביר את המידע מול פורט מסוים, אני גם אומר לו מאיזה מספר אני רוצה להתחיל את הספירה בצד שלי, מאיזה מספר אקראי הולכת להיות הספירה בצד שלי.
חשוב לשים לב שקליינט סופר מאיזשהו מספר אקראי, מתחיל את הספירה מאיזשהו מספר אקראי את הבתים שהוא הולך להעביר, וגם שרת מתחיל את הספירה מאיזשהו מספר אקראי את הבתים שהוא הולך להעביר.
תוכנת ווייר שארק מאוד עוזרת לנו ויודעת לזהות את המספר הזה ובתצוגה של ווייר שארק הוא יציג לי את זה בצורה נוחה כאילו זה בית ראשון כאילו זה בית שני למרות שבפועל המספר שמה שונה האמת אם תסתכלו טוב טוב כשנגיע לווייר שארק תראו גם את המספר האמיתי וגם את המספר היחסי אבל אני מעכשיו לא אדבר על המספר האמיתי
אני אדבר איתכם רק על המספר היחסי הזה אנחנו סופרים מאפס שיהיה לנו נוח אבל מאחורי הקלעים הספירה לא מתחילה לא מאפס ולא מאחד אלא מאיזשהו מספר אקראי גם קליינט וגם שרת מתחילים ספירה מאיזשהו מספר גדול אקראי המטרה זה לזהות את הפאקטים שבטעות נכנסו לנו לתוך הסשן לתוך השיחה פאקטים שייכים במקור לשיחה קודמת שהייתה על אותו פורט והתעכבו בדרך ופתאום
הגיעו לתוך השיחה שלנו איך ניזהה שזה לא הפאקט האמיתי אלא פאקט משיחה קודמת על ידי זה שיהיה לו מספר סידורי לא נכון לדוגמה התחלתי לספור את הפאקטים ממספר 1842 ופתאום מגיע לצד השני פאקט מספר מיליון 20 אז הוא יודע שהמספר הזה מיליון ו20 לא קשור לשיחה הנוכחית כי בשיחה הנוכחית מספור אחר לגמרי אז הוא זורק את הפאקט הזה לזבל
כי הפאקטים חייבים להגיע לפי הסדר וכל פעם שמגיע הפאקט הוא מאשר לי אותו וברגע שהוא מאשר לי אותו אני מוחק אותו מהבאפר שיש לי זאת אומרת האפליקציה נתנה לי מידע להעביר שמתי אותו באיזה באפר וכל פעם שאני מקבל אישור מהצד השני אני מוחק את זה מהבאפר ומפנה מקום בזיכרון לעוד מידע מהאפליקציה.
כל פעם אני מקבל ממנה צ'אנקים כאלו של מידע שצריך לשלוח, שם את זה בבאפר, מחלק למנות של 1,500 בתים, ממספר אותם, מחכה לאישורים, איך שיש אישור, מוחק מהבאפר, מנקה את הזיכרון שלי ומוכן להמשך העבודה.
השרת עונה לקליינט חזרה אך הוא מדליק את הדגל של אק שזה אישור acknowledge וגם מדליק את הדגל של סין כי גם השרת רוצה להסתנכרן מול הקליינט וכמו שאמרנו גם השרת מעביר לקליינט מאיזה מספר הוא מתחיל את הספירת הבתים שלו את ספירת הפאקטים שלו זה הולך להיות כמובן מספר אקראי שממנו השרת יתחיל לספור והפאקט השלישי שהקליינט אומר
לו אק אני מוכן להסתנכרן מולך אז שלושת פאקטים הראשונים מקימים לנו את הסנכרון הזה, מקימים לנו את ה-session כאשר הם גם בוחרים את המספר שממנו נתחיל לספור את הפאקטים, יותר נכון את הבתים של המידע שהולכים להעביר ואז מתחילים להעביר את הדאטה, את הדאטה, את הנתונים עצמם כמו HTTP GET, מעבירים מידע הלוך וחזור ביקשתי דף קיבלתי