Transmission Control Protocol

Incomplete-document-purple.svgיש להשלים ערך זה: בערך זה חסר תוכן מהותי. ייתכן שתמצאו פירוט בדף השיחה.
הנכם מוזמנים להשלים את החלקים החסרים ולהסיר הודעה זו. שקלו ליצור כותרות לפרקים הדורשים השלמה, ולהעביר את התבנית אליהם.
Disambig RTL.svg המונח "TCP" מפנה לכאן. לערך העוסק במודל התקשורת של האינטרנט, ראו TCP/IP.
פרוטוקולים במודל TCP/IP
שכבת יישום
HTTP, SMTP, FTP, DNS, DHCP, SSH, RTP, RTSP, IRC, SNMP, SIP, IMAP4, MIME, TELNET, RPC, SOAP, LDAP ...
שכבת תעבורה
TCP, UDP, SCTP, DCCP ...
שכבת רשת
IP, IPv4, IPv6, ICMP, IPX, IGMP ...
שכבת קשר
Ethernet, 10BASE-T, 802.11 WiFi, Token ring, FDDI, ARP...

Transmission Control Protocol (ר"ת TCP) הוא פרוטוקול בתקשורת נתונים הפועל בשכבות התעבורה של מודל ה-OSI ובמודל ה-TCP/IP, ומבטיח העברה אמינה של נתונים בין שתי תחנות ברשת מחשבים באמצעות יצירת חיבור מקושר (Connection Oriented).

כאשר הוא משמש כחלק מחבילת הפרוטוקולים TCP/IP עושה הפרוטוקול שימוש בפרוטוקול ה-IP לצורך העברת הנתונים. TCP מעביר את הנתונים שהועברו באמצעות IP, מוודא את נכונותם, ומאשר את קבלת הנתונים במלואם או מבקש שליחה מחדש של נתונים שלא הגיעו בצורה תקינה.

מנגנונים בשימוש פרוטוקול ה־TCP

הקמת קשר - לחיצת יד משולשת

יצירת חיבור TCP תקני בין אליס לשרת. שלוש החבילות המהוות את לחיצת היד המשולשת עוברות כנדרש בין הצדדים ויוצרות חיבור TCP שיכול לשמש להעברת נתונים בין השניים.

בעת הקמת הקשר בין שתי תחנות, משתמש פרוטוקול TCP בלחיצת יד בשלושה שלבים (three-way handshake):

  1. SYN: תחנת המקור שולחת הודעה לפתיחת קשר (הודעה בפרוטוקול TCP בה דגל ה- SYN בפתיח נושא ערך "1").
  2. SYN-ACK: תחנת היעד מקבלת את ההודעה ושולחת בתגובה הודעת אישור קבלה ואישור פתיחת קשר מצדה (הודעה בפרוטוקול TCP בה דגלי ה- SYN וה- ACK בפתיח נושאים ערך "1"). משקיבלה תחנת היעד הודעה זו היא יכולה כבר להתחיל לשלוח נתונים. בשליחת ACK הצד השני למעשה אומר לצד א את המספור ההתחלתי של חתיכות המידע שישלחו (Sequence number או בקיצור Seq) המספור ההתחלתי הוא מספר אקראי שמכונה Initial Sequence Number או בקיצור ISN. הסיבה לכך שהמספור לא מתחיל ב-0 אלא במספר אקראי היא חשש מערבוב שתי שיחות שנערכות במקביל וחשש מניחוש המספר על ידי גורם שלישי. בעזרת ה- ACK שהועבר לצד א, יוכלו הצדדים לתקשר.
  3. ACK: תחנת המקור מיידעת את תחנת היעד על סיום מיסוד הקשר בהודעת ACK (הודעה בפרוטוקול TCP בה דגל ה- ACK בפתיח נושא ערך "1"). תחנת המקור מיידעת את צד ב על המספור ההתחלתי שלה.

תעבורת המידע

תעבורת המידע מתבצעת בשני שלבים שחוזרים על עצמם עד סיום העברת המידע.

  1. צד א ששולח את המידע כותב את המספור של החתיכה הראשונה בחבילה שהוא מעביר ושולח גם את מספר החתיכות שיש בחבילה שהוא מעביר, כלומר Length או בקיצור Len. למשל: Seq=1 Len=3. במקביל מפעיל צד א שעון עצר. אם הוא מקבל תגובה תוך זמן מסוים שהוא הזמן שנחוץ לשליחת תגובה הוא יודע שהכל יתקבל ושאפשר להמשיך הלאה. כאשר מתרחש מצב שבו הוא אינו מקבל תגובה בזמן שנדרש הוא שולח את חבילת המידע שוב.
  2. השלב השני הוא שליחת התגובה של צד ב. התגובה מייצגת אישור קבלה של החבילה הקודמת והודעה לצד א שצד ב מצפה בעצם לחבילה הבאה. אישור הקבלה הוא בעצם ACK. אם לדוגמה: צד א שלח: Seq=1 Len=3, וצד ב קיבל את החבילה, צד ב יגיב בצורה כזאת: Ack=4. צד ב בעצם מציין שהוא קיבל את החתיכה האחרונה בחבילה הקודמת שנשלחה שהיא בעצם חתיכה 3. הוא מודיע שקיבל אותה ואומר שהוא מוכן לקבלת החתיכה הבאה אחריה שמספורה הוא 4. כשצד א מקבל תגובה כזאת הוא יודע שהכל יתקבל כמו שצריך ואין צורך לשלוח את ההודעה שוב.

סגירת קשר

סגירת קשר מתבצעת באופן עצמאי כאשר כל צד מעביר חבילת FIN, והצד השני מאשר. לאחר אישור חבילת FIN לא יקבל הצד שאישר את החבילה חבילות נוספות. מכיוון ששני הצדדים צריכים לבקש את ניתוק הקשר (ולאשר אותו) ניתן לאפשר חיבור "חצי פתוח" אם רק אחד הצדדים סגר את הקשר.

לרוב מתבצעת סגירת הקשר על ידי לחיצת יד משולשת באמצעות שליחת ההודעות הבאה:

  1. FIN-ACK: תחנת המקור מיידעת שהיא מעוניינת בסגירת הקשר ושולחת הודעת ACK על ההודעה האחרונה שהתקבלה והודעת ניתוק ( הודעה בפרוטוקול TCP בה דגלי ה- ACK וה- FIN נושאים ערך "1").
  2. FIN-ACK: הודעה זהה מתחנת היעד המאשרת את קבלת בקשת הניתוק ומבקשת לנתק את הקשר גם כן (מנקודה זו לא מועברים עוד נתונים בין התחנות).
  3. ACK: הודעה מצד תחנת המקור המאשרת את סגירת הקשר. (הודעה מסוג כזה לא נחשבת לחבילה הנושאת מידע)

אמינות החיבור

בניגוד לפרוטוקול UDP שפועל גם הוא בשכבת התעבורה אבל דואג רק לריבוב ולא להעברה אמינה של הנתונים, פרוטוקול TCP דואג לשניהם מסיבה זו הוא גם יותר מורכב, יותר ארוך ומתאים להעברת סוגי מידע שונים שהאמינות אצלם יותר חשובה. בדיקת אמינות הנתונים נעשה באמצעות חישוב Checksum (בדרך כלל באמצעות CRC). מחשב המקור מחשב פונקציה על המידע הנשלח ומוסיף אותו כחלק מהפתיח של חבילת ה-TCP. כאשר מחשב היעד מקבל את החבילה הוא משווה את תוכן הפתיח עם תוצאת חישוב חדשה של הפונקציה שהוא מבצע. לאחר אימות הנתונים שולח מחשב היעד אישור למקור על מנת להודיע לו שהחבילה הגיעה באופן תקין. אם הנתונים הגיעו בצורה לא תקינה מבקש מחשב היעד שידור חוזר של החבילה. מאחר שמחשב המקור שומר עותק של הנתונים עד לקבלת אישור ההגעה שלהם מאפשר מנגנון לאשר קבלה של כל הנתונים שנשלחו. אם מחשב המקור לא מקבל את האישור הוא מבצע שידור חוזר.

בטיחות והצפנה

יש ל - TCP אפשרות להשתמש בפרוטוקול הצפנה, Secure Sockets Layer - SSL הוא יושב בין ה-TCP לאפליקציה והוא החלק התחתון של האפליקציה.

הוא דואג שכאשר האפליקציה נותנת מידע הוא עובר דרך ה -SSL והוא מצפין את המידע ומבטיח על ידי חתימה אלקטרונית שהמידע לא שונה בדרך ומספק זיהוי קצה.

לדוגמה: חיבור לבנק, אנו רוצים לדעת שאכן התחברנו לבנק ולא למתחזה. נושא זה בולט בתחום אבטחת המידע והעיסוק בו בעולם רב.

בקרת זרימה

לצורך בקרת הזרימה משתמש פרוטוקול ה-TCP ב"חלונות הזזה" (sliding windows) גודל החלון משתנה באופן דינמי במהלך התקשורת, כך שיתאים לרוחב הפס, וכן לכמות המידע שהיעד מסוגל לעבד. מחשב המקור ממספר את החבילות במספרים סידוריים, בסדר עולה, כך שמחשב היעד יכול לעקוב אחרי הגעתן של כל החבילות ולהתריע במקרה שאחת מהן לא הגיעה, ובכך לאפשר למחשב המקור לבצע שידור חוזר.

בקרת גודש

פרוטוקול TCP משתמש בארבעה אלגוריתמים לצורך בקרת גודש: Slow-start (אנ'), congestion avoidance (אנ'), fast retransmit ו־fast recovery (אנ'). בקרת הגודש מתבססת על משוב עקיף (implicit feedback), אשר מבוסס על ההנחה כי עיכוב בקבלת אישור על חבילה שנשלחה מעבר לזמן שהוקצב לקבלתו נובע מדחיסות בנתיב בין שני מחשבי הקצה. הנחה זו מתקיימת לרוב ברשתות פיזיות אך מתקיימת פחות ברשתות אלחוטיות.[1] עם זאת, במסגרת הרחבה לפרוטוקולים TCP ו-IP ב־RFC 3168 (2001), נוספה תמיכה אופציונלית ב בקרת גודש ישירה (אנ'). הדגלים CWR ו-ECE נוספו לפתיח של הודעת TCP על חשבון השדה השמור שסמוך להם.

פורטים

על מנת לאפשר לשירותי רשת שונים לעבור בין שני מחשבים על גבי אותו קו תקשורת משתמש הפרוטוקול בפורטים על מנת להבחין בין שירותי רשת שונים. מחשב המקור מקצה פורט עבור השיחה ושולח את חבילת המידע לפורט ידוע ביעד. זיהוי החבילה נעשה באמצעות ארבעת הפרמטרים (מחשב שולח, פורט שליחה, מחשב מקבל, פורט קבלה).