כאשר הוא משמש כחלק מחבילת הפרוטוקוליםTCP/IP עושה הפרוטוקול שימוש בפרוטוקול ה-IP לצורך העברת הנתונים. TCP מעביר את הנתונים שהועברו באמצעות IP, מוודא את נכונותם, ומאשר את קבלת הנתונים במלואם או מבקש שליחה מחדש של נתונים שלא הגיעו בצורה תקינה.
יצירת חיבור TCP תקני בין אליס לשרת. שלוש החבילות המהוות את לחיצת היד המשולשת עוברות כנדרש בין הצדדים ויוצרות חיבור TCP שיכול לשמש להעברת נתונים בין השניים.
בעת הקמת הקשר בין שתי תחנות, משתמש פרוטוקול TCP בלחיצת יד בשלושה שלבים (three-way handshake):
SYN: תחנת המקור שולחת הודעה לפתיחת קשר (הודעה בפרוטוקול TCP בה דגל ה-SYNבפתיח נושא ערך "1").
SYN-ACK: תחנת היעד מקבלת את ההודעה ושולחת בתגובה הודעת אישור קבלה ואישור פתיחת קשר מצדה (הודעה בפרוטוקול TCP בה דגלי ה-SYN וה-ACKבפתיח נושאים ערך "1"). משקיבלה תחנת היעד הודעה זו היא יכולה כבר להתחיל לשלוח נתונים. בשליחתACK תחנת היעד למעשה מוסרת אישור לתחנת המקור על המספור ההתחלתי של חתיכות המידע שישלחו (Sequence number או בקיצור Seq). המספור ההתחלתי הוא מספר אקראי שמכונה Initial Sequence Number או בקיצור ISN. המספור לא מתחיל ב-0 אלא במספר אקראי עקב חשש מערבוב שתי שיחות שנערכות במקביל וחשש מניחוש המספר על ידי גורם שלישי. בעזרת ה-ACK שהועבר לצד א', יוכלו הצדדים לתקשר.
ACK: תחנת המקור מיידעת את תחנת היעד על סיום מיסוד הקשר בהודעתACK (הודעה בפרוטוקול TCP בה דגל ה-ACKבפתיח נושא ערך "1"). תחנת המקור מיידעת את צד ב' על המספור ההתחלתי שלה.
תעבורת המידע מתבצעת בשני שלבים שחוזרים על עצמם עד סיום העברת המידע.
צד א' ששולח את המידע כותב את המספור של החתיכה הראשונה בחבילה (Seq) שהוא מעביר ושולח גם את מספר הבתים שיש בה (Length או בקיצור Len). למשל: Seq=1 Len=3. במקביל מפעיל צד א'שעון עצר, ואם לא מתקבל אישור מהצד השני על קבלת החבילה עד פקיעת השעון הוא שולח שוב את חבילת המידע.
השלב השני הוא שליחת התגובה של צד ב'. התגובה מייצגת אישור קבלה (ACK) של החבילה הקודמת והודעה לצד א' שצד ב' מצפה בעצם לחבילה הבאה.
דוגמה: אם צד א' שלח: Seq=1 Len=3, וצד ב' יגיב על קבלת החבילה: Ack=4. צד ב' מציין שהוא קיבל את החתיכה האחרונה בחבילה הקודמת שנשלחה, ומוכן לקבלת החתיכה הבאה אחריה שמספורה הוא 4.
סגירת קשר מתבצעת באופן עצמאי כאשר כל צד מעביר חבילתFIN, והצד השני מאשר. לאחר אישור חבילתFIN לא יקבל הצד שאישר את החבילה חבילות נוספות. מכיוון ששני הצדדים צריכים לבקש את ניתוק הקשר (ולאשר אותו) ניתן לאפשר חיבור "חצי פתוח" אם רק אחד הצדדים סגר את הקשר.
לרוב מתבצעת סגירת הקשר על ידי לחיצת יד משולשת באמצעות שליחת ההודעות הבאה:
FIN-ACK: תחנת המקור מיידעת שהיא מעוניינת בסגירת הקשר ושולחת הודעתACK על ההודעה האחרונה שהתקבלה והודעת ניתוק (הודעה בפרוטוקול TCP בה דגלי ה-ACK וה-FIN נושאים ערך "1").
FIN-ACK: הודעה זהה מתחנת היעד המאשרת את קבלת בקשת הניתוק ומבקשת לנתק את הקשר גם כן (מנקודה זו לא מועברים עוד נתונים בין התחנות).
ACK: הודעה מצד תחנת המקור המאשרת את סגירת הקשר. (הודעה מסוג כזה לא נחשבת לחבילה הנושאת מידע)
בניגוד לפרוטוקולUDP שפועל גם הוא בשכבת התעבורה אבל דואג רק לריבוב ולא להעברה אמינה של הנתונים, פרוטוקול TCP דואג לשניהם מסיבה זו הוא גם יותר מורכב, יותר ארוך ומתאים להעברת סוגי מידע שונים שהאמינות אצלם יותר חשובה. בדיקת אמינות הנתונים נעשה באמצעות חישובChecksum (בדרך כלל באמצעותCRC). מחשב המקור מחשב פונקציה על המידע הנשלח ומוסיף אותו כחלק מהפתיח שלחבילת ה-TCP. כאשר מחשב היעד מקבל את החבילה הוא משווה את תוכן הפתיח עם תוצאת חישוב חדשה של הפונקציה שהוא מבצע. לאחר אימות הנתונים שולח מחשב היעד אישור למקור על מנת להודיע לו שהחבילה הגיעה באופן תקין. אם הנתונים הגיעו בצורה לא תקינה מבקש מחשב היעד שידור חוזר של החבילה. מאחר שמחשב המקור שומר עותק של הנתונים עד לקבלת אישור ההגעה שלהם מאפשר מנגנון לאשר קבלה של כל הנתונים שנשלחו. אם מחשב המקור לא מקבל את האישור הוא מבצעשידור חוזר.
לצורך בקרת הזרימה משתמש פרוטוקול ה-TCP ב"חלונות הזזה" (sliding windows) גודל החלון משתנה באופן דינמי במהלך התקשורת, כך שיתאים לרוחב הפס, וכן לכמות המידע שהיעד מסוגל לעבד.מחשב המקור ממספר את החבילות במספרים סידוריים, בסדר עולה, כך שמחשב היעד יכול לעקוב אחרי הגעתן של כל החבילות ולהתריע במקרה שאחת מהן לא הגיעה, ובכך לאפשר למחשב המקור לבצעשידור חוזר.
פרוטוקול TCP משתמש בארבעהאלגוריתמים לצורך בקרת גודש:Slow-start(אנ'),congestion avoidance(אנ'),fast retransmit ו־fast recovery. בקרת הגודש מתבססת על משוב עקיף (implicit feedback), אשר מבוסס על ההנחה כי עיכוב בקבלת אישור על חבילה שנשלחה מעבר לזמן שהוקצב לקבלתו נובע מעומס בין שני מחשבי הקצה. הנחה זו מתקיימת לרוב ברשתות פיזיות ופחות ברשתות אלחוטיות.[1] עם זאת, במסגרת הרחבה לפרוטוקולים TCP ו-IPב־RFC 3168 (2001)[2], נוספה תמיכה אופציונלית בבקרת גודש מפורשת. הדגליםCWR ו-ECE נוספו לפתיח של הודעת TCP על חשבון השדה השמור שסמוך להם.
ניתן לסווג את האלגוריתמים למניעת גודש על פי תכונות שונות:
אופן זיהוי הגודש ברשת – כשחלקם מבוססים על איבוד חבילות (Loss), עיכוב בקבלת חבילות או סימון מפורש של על החבילה במצבי גודש.
שינויים נדרשים לפריסת האלגוריתם
היבטים ביצועים שבהם מטפל האלגוריתם: רוחב פס (bandwidth; B), אובדן קשר (L), הגינות (F), יתרון להתקשרויות קצרות (S), התקשרויות בקצב משתנה (V) וקצב התכנסות (C)
הגינות
אלגוריתמים למניעת גודש
אלגוריתם
זיהוי גודש
שינויים נדרשים
יתרונות
הגינות
הערות
(New)Reno
איבוד חבילות
-
-
עיכוב
Vegas
עיכוב
שולח
הפחתת איבוד חבילות
יחסי
הגדלה הדרגתית של חלון הגודש (congestion window), מדידה של זמן השליחה לכל החבילות לצורך קביעת זמן הפקיעה לשליחה מחדש (timeout)
על מנת לאפשר לשירותי רשת שונים לעבור בין שני מחשבים על גבי אותו קו תקשורת משתמש הפרוטוקול בפורטים על מנת להבחין בין שירותי רשת שונים. מחשב המקור מקצה פורט עבור השיחה ושולח את חבילת המידע לפורט ידוע ביעד. זיהוי החבילה נעשה באמצעות ארבעת הפרמטרים (מחשב שולח, פורט שליחה, מחשב מקבל, פורט קבלה).
חבילת TCP כוללת פתיח באורך משתנה המורכב משדות קבועים בגודל 20בתים ושדות אופציונליים בגודל של עד 40 בתים (בכל מקרה גודל הפתיח הוא כפולה של 32סיביות). לאחר הפתיח מצורפת מסגרת המידע בגודל משתנה הקטן מ-65,495 בתים. החבילה אינה כוללת סוגר.
פורט המקור (16 סיביות) – שדה המכיל את מספר הפורט במחשב המקור.
פורט היעד (16 סיביות) – שדה המכיל את מספר הפורט במחשב היעד.
מספר סידורי (32 סיביות) – יש להבחין בין שני מקרים:
דגלSYN נושא ערך "1" (החבילה היא חלק מהקמת הקשר) – המספר בשדה מכיל את מספר החבילה שממנו יתחילו למנות (המספר הסידורי של חבילת המידע הראשונה יהיה למעשה המספר הזה + 1).
דגלSYN נושא ערך "0" (החבילה היא חלק מרצף התקשורת בין המחשבים) – המספר בשדה מכיל את מספר החבילה הנוכחית ביחס לתקשורת הפתוחה בין שני המחשבים (TCPsession).
מספר אישור (32 סיביות) – (ACK) שדה מכיל את המספר הסידורי של ההודעה הבאה לה מצפה התחנה ומהווה אישור קבלה על כל ההודעות בעלות מספר סידורי הקטן ממנו. המידע בשדה תקף רק כאשר דגלACK נושא ערך "1".
היסט המידע/אורך הפתיח (4 סיביות) – שדה זה מכיל את גודל הפתיח (ביחידות של 32סיביות) של החבילה הנוכחית שהוא גם ההיסט מתחילת החבילה עד לתחילת המידע.
שמור (3 סיביות) – שדה השמור לשימוש עתידי (אמור להכיל אפסים).
דגלים (9 סיביות):
NS – (ראשי תיבות של Nonce Sum), דגל נסיוני שנועד להגן נגד הסתרה זדונית של פקטות מהשולח.
CWR – (ראשי תיבות של Congestion Window Reduced), דגל המודיע על יכולתו של המחשב לתמוך בהודעות הנשלחות בהתאם להרחבהECN. מחשב יעלה את הדגל לערך "1" לאחר קבלת הודעה בה דגלECE היה פעיל.
ECE – (ראשי תיבות של ECN-Echo):
אם דגלSYN נושא ערך "1" – מציין כי תקשורת ה-TCP בין שני המחשבים יכולה לעבוד בהרחבהECN.
אם דגלSYN נושא ערך "0" – מציין כי במהלך תקשורת TCP רגילה הגיעה חבילת IP בה נעשה שימוש בשדה ECN.
URG (Urgent) – דגל המודיע על מידע דחוף אשר מיקומו נמצא בשדה "היסט למידע דחוף".
ACK (Acknowledgment) – דגל הנותן תוקף למספר בשדה "מספר האישור".
PSH (Push) – דגל המפעיל את פונקציית הדחיפה של הפרוטוקול.
RST (Reset) – דגל המבקש את אתחול הקשר בין המחשבים.
SYN (Synchronize) – דגל מציין את שלב הקמת הקשר, או (בשיתוף עם דגלECE) הודעה במסגרת הרחבהECN.
FIN (Finish) – דגל המציין את סיום הקשר. נשלח תאורטית פעם אחת מכל צד.
גודל חלון הקליטה (16 סיביות) – מספר הבתים אותם יכול המחשב לקלוט החל ממספר ההודעה שצוין בשדה מספר האישור (ACK).
סיכום ביקורת (16 סיביות) –checksum, מספר האימות של הפתיח וחלק מהפתיח של שכבת ה IP.
היסט למידע דחוף (16 סיביות) – אם דגלURG נושא ערך "1", הערך בשדה זה מציין את ההיסט למיקום מידע דחוף (לרוב אינו בשימוש).
אפשרויות שונות (0–40בתים) – שדה אופציונלי שיכול להכיל בין היתר את גודל הסגמנט המרבי (Maximum Segment Size,MSS) לשימוש בפרוטוקול. גודל השדה נקבע על פי שדה "אורך הפתיח", אם האורך המצוין אינו גדול מ-5 שדה זה כלל לא נמצא.
ריפוד אפסים (0–4 בתים) – שדה שתפקידו למלא את הפתיח ב-"0" על מנת להגיע לכפולה שלמה של 32 סיביות.
^Olivier Bonaventure,Computer Networking :Principles, Protocols and Practice (The Saylor Foundation, October 30, 2011),http://www.saylor.org/courses/cs402