פרוטוקול בקרת שידור הוא פרוטוקול חשוב מאוד בשכבת התחבורה עבור מודל OSI או TCP/IP. ישנם יתרונות רבים ב-TCP כמו:
- TCP מבצע שידור מחדש אם נתונים שנשלחו אינם מאושרים על ידי המקלט תוך זמן מה.
- TCP יוצר חיבור כלשהו לפני שליחת הנתונים. אנו קוראים לחיבור הזה כלחיצת יד תלת כיוונית.
- ל-TCP יש מנגנון בקרת גודש.
- TCP יכול לזהות שגיאות באמצעות שיטות מסוימות.
הבה נלמד בעיקר על לחיצת יד תלת כיוונית של TCP. בואו ללמוד גם על התחומים החשובים ב-Wireshark ללחיצת יד תלת כיוונית.
לחיצת יד תלת כיוונית
ישנן שלוש חילופי מסגרות המתרחשות בלחיצת יד תלת כיוונית:
המסגרת הראשונה נשלחת תמיד על ידי הלקוח לשרת. הבה נבין זאת מתרשים פשוט:
'CLIENT' 'SERVER'
מסגרת1: לקוח שולח מסגרת SYN לשרת-----------------------------------------><--------------------------------------------שרת שולח מסגרת SYN+ACK ללקוח: Frame2
מסגרת 3: הלקוח שולח מסגרת ACK לשרת ---------------------------------->
אנו יכולים לראות את שלושת המסגרות הללו ב-Wireshark. ניתן להשתמש במסנן 'tcp' ב-Wireshark כדי לראות את כל מסגרות ה-TCP. הנה צילום המסך של שלושת הפריימים:
כעת נבין את כל שלושת המסגרות לפרטים:
SYN
מסגרת זו מכילה מידע רב על היכולות של הלקוח ליידע את השרת. צילום המסך הבא מציג את כל השדות החשובים של מסגרת SYN:
להלן השדות החשובים עבור מסגרת SYN:
יציאת מקור: 50602נמל היעד: 80
מספר רצף: 0
מספר אישור: 0
אורך כותרת: 32 בתים
דגלים: 0x002 (SYN):
הכרה: לא נקבע
דחיפה: לא מוגדר
איפוס: לא מוגדר
Syn: הגדר -----> הביט הזה הוגדר בגלל שזוהי מסגרת SYN.
סנפיר: לא מוגדר
חלון: 65535
מצביע דחוף: 0
אפשרות TCP - גודל מקטע מרבי: 1460 בתים
אפשרות TCP - קנה מידה חלון: 3 (הכפל ב-8)
אפשרות TCP - SACK מותר
צפה+ACK
מסגרת זו מכילה מידע רב על היכולות של השרת ליידע את הלקוח. צילום המסך הבא מציג את כל השדות החשובים של מסגרת SYN+ACK:
מסגרת זו גם מאשרת את המסגרת SYN שנשלחת על ידי הלקוח.
להלן השדות החשובים עבור מסגרת SYN+ACK:
יציאת מקור: 80נמל יעד: 50602
מספר רצף: 0
מספר אישור: 1
אורך כותרת: 32 בתים (8)
דגלים: 0x012 (SYN, ACK)
הכרה: קבע
דחיפה: לא מוגדר
איפוס: לא מוגדר
שלו: סט
סנפיר: לא מוגדר
חלון: 29200
מצביע דחוף: 0
אפשרות TCP - גודל מקטע מרבי: 1412 בתים
אפשרות TCP - SACK מותר
אפשרות TCP - קנה מידה של חלון: 7 (כפל ב-128)
אנו יכולים לראות כי סיביות 'אישור' ו-'SYN' מוגדרות במסגרת זו. הסיבה לכך היא שהמסגרת הזו היא SYN+ACK.
ACK
מסגרת זו היא המסגרת האחרונה של לחיצת היד התלת-כיוונית וגם האישור של ה-SYN+ACK על ידי הלקוח. צילום המסך הבא מציג את כל השדות החשובים של מסגרת ACK:
להלן השדות החשובים עבור מסגרת ACK:
יציאת מקור: 50602נמל היעד: 80
מספר רצף: 1
מספר אישור: 1
אורך כותרת: 20 בתים (5)
דגלים: 0x010 (ACK)
דחוף: לא מוגדר
הכרה: קבע
דחיפה: לא מוגדר
איפוס: לא מוגדר
Syn: לא מוגדר
סנפיר: לא מוגדר
חלון: 32768
כאן, רק סיבית 'אישור' מוגדרת מכיוון שזו מסגרת ACK.
הסבר לכמה שדות נפוצים חשובים
יציאה 80 : צפינו ביציאה אחת קבועה 80 במדריך זה. זה בגלל שזו לכידת HTTP ויציאה 80 קבועה (צד השרת) לתקשורת HTTP.
מספר רצף : מספר הרצף של אותה מסגרת. סינכרון הוא המסגרת הראשונה ולכן יש לנו 0 כמספר רצף.
דגלי TCP:
הכרה – ביט זה מוגדר אם המסגרת היא ACK. דוגמה: SYN+ACK, מסגרת ACK.
SYN - ביט זה מוגדר אם המסגרת היא SYN. דוגמה: SYN.
חַלוֹן : שדה זה חולק את גודל החלון המרבי של השולח במצב קבלה. דוגמה: יש לנו גודל חלון של 65535 בתים במסגרת SYN. המשמעות היא שהמקלט יכול לקבל נתוני TCP מקסימליים של 65535 בתים בכל נקודת זמן.
SACK מותר : ביט זה מוגדר אם השליחה תומכת ב-SACK [אישור סלקטיבי].
גודל פלח מקסימלי : אנחנו יכולים לקרוא לזה גם MSS. זה מגדיר את מסגרת הנתונים המקסימלית שהשולח יכול לקבל. דוגמה: אנו מקבלים MSS כ-1460 בתים במסגרת SYN.
סיכום
למדנו על לחיצת היד התלת-כיוונית של TCP וכל השדות השימושיים עבור מסגרות SYN, SYN+ACK ו-ACK. אם אתה רוצה ללמוד עוד על TCP, אתה יכול לעקוב אחר קישור RFC זה https://tools.ietf.org/html/rfc793 .