Transmission Control Protocol (בראשי תיבות: TCP; בעברית: פרוטוקול בקרת שידור) הוא פרוטוקול בתקשורת נתונים הפועל בשכבות התעבורה של מודל ה-OSI ובמודל ה-TCP/IP, ומבטיח העברה אמינה של נתונים בין שתי תחנות ברשת מחשבים באמצעות יצירת חיבור מקושר (Connection Oriented).
כאשר הוא משמש כחלק מחבילת הפרוטוקולים TCP/IP עושה הפרוטוקול שימוש בפרוטוקול ה-IP לצורך העברת הנתונים. TCP מעביר את הנתונים שהועברו באמצעות IP, מוודא את נכונותם, ומאשר את קבלת הנתונים במלואם או מבקש שליחה מחדש של נתונים שלא הגיעו בצורה תקינה.
בעת הקמת הקשר בין שתי תחנות, משתמש פרוטוקול TCP בלחיצת יד בשלושה שלבים (three-way handshake):
תעבורת המידע מתבצעת בשני שלבים שחוזרים על עצמם עד סיום העברת המידע.
סגירת קשר מתבצעת באופן עצמאי כאשר כל צד מעביר חבילת FIN, והצד השני מאשר. לאחר אישור חבילת FIN לא יקבל הצד שאישר את החבילה חבילות נוספות. מכיוון ששני הצדדים צריכים לבקש את ניתוק הקשר (ולאשר אותו) ניתן לאפשר חיבור "חצי פתוח" אם רק אחד הצדדים סגר את הקשר.
לרוב מתבצעת סגירת הקשר על ידי לחיצת יד משולשת באמצעות שליחת ההודעות הבאה:
בניגוד לפרוטוקול UDP שפועל גם הוא בשכבת התעבורה אבל דואג רק לריבוב ולא להעברה אמינה של הנתונים, פרוטוקול TCP דואג לשניהם מסיבה זו הוא גם יותר מורכב, יותר ארוך ומתאים להעברת סוגי מידע שונים שהאמינות אצלם יותר חשובה. בדיקת אמינות הנתונים נעשה באמצעות חישוב Checksum (בדרך כלל באמצעות CRC). מחשב המקור מחשב פונקציה על המידע הנשלח ומוסיף אותו כחלק מהפתיח של חבילת ה-TCP. כאשר מחשב היעד מקבל את החבילה הוא משווה את תוכן הפתיח עם תוצאת חישוב חדשה של הפונקציה שהוא מבצע. לאחר אימות הנתונים שולח מחשב היעד אישור למקור על מנת להודיע לו שהחבילה הגיעה באופן תקין. אם הנתונים הגיעו בצורה לא תקינה מבקש מחשב היעד שידור חוזר של החבילה. מאחר שמחשב המקור שומר עותק של הנתונים עד לקבלת אישור ההגעה שלהם מאפשר מנגנון לאשר קבלה של כל הנתונים שנשלחו. אם מחשב המקור לא מקבל את האישור הוא מבצע שידור חוזר.
יש ל-TCP אפשרות להשתמש בפרוטוקול הצפנה SSL (Secure Sockets Layer), שיושב בין ה-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 על חשבון השדה השמור שסמוך להם.
ניתן לסווג את האלגוריתמים למניעת גודש על פי תכונות שונות:
אלגוריתם | זיהוי גודש | שינויים נדרשים | יתרונות | הגינות | הערות |
---|---|---|---|---|---|
(New)Reno | איבוד חבילות | - | - | עיכוב | |
Vegas | עיכוב | שולח | הפחתת איבוד חבילות | יחסי | הגדלה הדרגתית של חלון הגודש (congestion window), מדידה של זמן השליחה לכל החבילות לצורך קביעת זמן הפקיעה לשליחה מחדש (timeout) |
High Speed | איבוד חבילות | שולח | רוחב פס גבוה | ||
BIC | איבוד חבילות | שולח | רוחב פס גבוה | ברירת המחדל בליבת לינוקס בגרסאות 2.6.8 עד 2.6.18. | |
CUBIC | איבוד חבילות | שולח | רוחב פס גבוה | ברירת המחדל בליבת לינוקס בגרסאות 2.6.19 עד 3.2. | |
H-TCP | איבוד חבילות | שולח | רוחב פס גבוה | ||
FAST | עיכוב | שולח | רוחב פס גבוה | יחסי | |
Compound TCP | איבוד חבילות/עיכוב | שולח | רוחב פס גבוה | יחסי | מימוש של מיקרוסופט המשלב שני חלונות גודשים במקביל. נמצא בשימוש נרחב בחלונות מאז Windows Vista ו-Windows Server 2008 |
Westwood | איבוד חבילות/עיכוב | שולח | L | ||
Jersey | איבוד חבילות/עיכוב | שולח | L | ||
BBR[2] | עיכוב | שולח | BLVC, Bufferbloat | פותח על ידי גוגל ב-2016 | |
CLAMP | סימון | מקבל, נתב | V | Max-min | |
TFRC | איבוד נתונים | שולח, מקבל | מניעת שליחה מחדש | עיכוב מזערי | |
XCP | סימון | שולח, מקבל, נתב | BLFC | Max-min | |
VCP | סימון | שולח, מקבל, נתב | BLF | יחסי | |
MaxNet | סימון | שולח, מקבל, נתב | BLFSC | Max-min | |
JetMax | סימון | שולח, מקבל, נתב | רוחב פס גבוה | Max-min | |
RED | איבוד נתונים | נתב | הפחתת עיכוב | ||
ECN | סימון | שולח, מקבל, נתב | הפחתת איבוד חבילות |
על מנת לאפשר לשירותי רשת שונים לעבור בין שני מחשבים על גבי אותו קו תקשורת משתמש הפרוטוקול בפורטים על מנת להבחין בין שירותי רשת שונים. מחשב המקור מקצה פורט עבור השיחה ושולח את חבילת המידע לפורט ידוע ביעד. זיהוי החבילה נעשה באמצעות ארבעת הפרמטרים (מחשב שולח, פורט שליחה, מחשב מקבל, פורט קבלה).
חבילת TCP כוללת פתיח באורך משתנה המורכב משדות קבועים בגודל 20 בתים ושדות אופציונליים בגודל של עד 40 בתים (בכל מקרה גודל הפתיח הוא כפולה של 32 סיביות). לאחר הפתיח מצורפת מסגרת המידע בגודל משתנה הקטן מ-65,495 בתים. החבילה אינה כוללת סוגר.
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 |
פורט המקור | פורט היעד | ||||||||||||||||||||||||||||||
מספר סידורי | |||||||||||||||||||||||||||||||
מספר אישור (ACK) | |||||||||||||||||||||||||||||||
אורך הפתיח | שמור | דגלים | גודל חלון השליחה | ||||||||||||||||||||||||||||
Checksum | מיקום מידע דחוף | ||||||||||||||||||||||||||||||
אפשרויות שונות (אופציונלי) | ריפוד באפסים |
סיווג פרוטוקולים על פי מודל ה־OSI | ||
---|---|---|
שכבת היישום | HTTP • SMTP • FTP • RTP • IRC • SNMP • SIP • DNS • DHCP | |
שכבת הייצוג | MIME • ASCII • Unicode • TLS | |
שכבת השיחה | ASP • PPTP • SSH • NFS • RPC • SOCKS | |
שכבת התעבורה | TCP • UDP • SCTP • DCCP | |
שכבת הרשת | IP (IPv4 • IPv6) • ICMP • IPX • ניתוב | |
שכבת הקו | אתרנט • Token ring • FDDI | |
השכבה הפיזית | E1 • 10Base-T • RS-232 • DSL • SONET |
פרוטוקולים במודל 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 | |
שכבת קשר | אתרנט • 10BASE-T • 802.11 WiFi • Token ring • FDDI • ARP |