Transmission Control Protocol
מתוך ויקיפדיה, האנציקלופדיה החופשית
| ערך זה זקוק לעריכה, על מנת שיתאים לסגנון המקובל בוויקיפדיה. הסיבה שניתנה לכך היא שיש טעויות פיסוק, ניסוח לא אנציקלופדי, קישורים פנימיים חסרים. אם אתם סבורים כי אין בדף בעיה, ניתן לציין זאת בדף השיחה שלו. |
| HTTP, SMTP, FTP, IRC, SNMP, SSH ... | Application |
| SSH ... | Presentation |
| Session | |
| TCP, UDP, SCTP, RTP, DCCP ... | Transport |
| IPv4, IPv6, ICMP, RIP, IPX ... | Network |
| Ethernet, Token ring, FDDI, ARP ... | Data Link |
| 802.11 WiFi ... | Physical |
| Application | HTTP, SMTP, FTP, SSH, IRC, SNMP, SIP ... |
| Transport | TCP, UDP, SCTP, RTP, DCCP, ICMP ... |
| Network | IPv4, IPv6, ICMP, ARP, IPX ... |
| Physical | Ethernet, 802.11 WiFi, Token ring, FDDI, ARP ... |
Transmission Control Protocol (בראשי תיבות TCP) הוא פרוטוקול תלוי חיבור (connection oriented), הפועל בשכבת התעבורה של מודל הOSI ובשכבת התעבורה של מודל הTCP/IP, ומבטיח העברה אמינה של הנתונים בין שתי תחנות ברשת מחשבים.
TCP הוא חלק מחבילת הפרוטוקולים TCP/IP, והוא עושה שימוש בפרוטוקול הIP לצורך העברת הנתונים. TCP פועל על הנתונים שהועברו באמצעות IP, מוודא את נכונותם, ומאשר את קבלת הנתונים במלואם, או מבקש שליחה מחדש של נתונים שלא הגיעו בצורה תקינה.
תוכן עניינים |
[עריכה] מנגנונים בשימוש פרוטוקול ה־TCP
[עריכה] לחיצת יד תלת כיוונית
TCP הוא פרוטוקול תלוי חיבור, לכן לפני העברת הנתונים TCP משתמש בשיטה שנקראת "לחיצת יד תלת כיוונית" על מנת לוודא שניתן להעביר נתונים בין המקור ליעד. שיטה זו מתחילה בשליחת הודעת פתיחת קשר קבועה מראש מהמקור, אל היעד (כיוון אחד), מחשב היעד מקבל את ההודעה, מבין שמחשב המקור רוצה להעביר אליו נתונים, ושולח הודעת אישור (Ack). כאשר מחשב המקור מקבל את התשובה, הוא יודע כבר שניתן להעביר נתונים הלוך ושוב בין שני המחשבים, אבל מחשב היעד עדיין לא יודע שהודעתו התקבלה. לכן שולח מחשב המקור הודעת אישור אל היעד (Ack), כדי להודיע לו שניתן להעביר נתונים ביניהם, ואפשר להתחיל להעביר את הנתונים האמיתיים (כיוון שלישי). מחשב המקור יתחיל להעביר את הנתונים מייד לאחר מכן. לכל לחיצת יד יש מספר יחודי (SN = Sequence Number).
[עריכה] Checksum ואישורים
TCP מוודא את אמינות הנתונים בעזרת מערכת שנקראת Checksum, כלומר, מחשב המקור מפעיל פונקציה קבועה על הנתונים הנשלחים, הפונקציה הזו יוצרת מספר, בהתאם לנתונים והוא נשלח כחלק מהפתיח (header) של חבילת ה-TCP. מחשב היעד מקבל את החבילה, ומפעיל עליה את אותה הפונקציה, לאחר שגם הוא מקבל מספר הוא משווה אותו עם המספר שנשלח אליו ממחשב המקור, אם המספרים שווים - מחשב היעד שולח אישור למקור, והעברת הנתונים ממשיכה. אם המספרים שונים, מחשב היעד שולח למחשב המקור בקשה להעברה חוזרת של הנתונים. מנגנון זה מאפשר לפרוטוקול ה-TCP לא רק לוודא את אמינות הנתונים, אלא גם לאשר קבלה של כל הנתונים שנשלחו. המחשב השולח מחוייב לשמור את החבילות היוצאות עד קבלת אישור מהלקוח.
מנגנון האישור שתואר למעלה מגדיל במידה רבה את כמות הנתונים הנשלחים, מכיוון שעל כל חבילה יש צורך לשלוח אישור. כדי למנוע "בזבוז" של רוחב הפס TCP משתמש ב"חלונות" (sliding windows). גודל החלון קובע את מספר חבילות הנתונים שנשלחות על ידי המקור עד שנדרש אישור של היעד. בתחילת כל התקשרות מוגדר גודל החלון ל1, כך שעל כל חבילה שנשלחת על ידי המקור מחזיר היעד אישור. מחשב המקור ממספר את החבילות במספרים סידוריים, בסדר עולה, כך שמחשב היעד יכול לעקוב אחרי הגעתן של כל החבילות, ולהתריע במקרה שאחת מהן לא הגיעה. בהמשך, גודל החלון יגדל ככל שהתקשורת אמינה יותר, וכך ישלחו מספר חבילות מהמקור לפני שיידרש אישור מהיעד, זאת על מנת לחסוך ברוחב הפס.
[עריכה] מפתחים
TCP משתמש ב"מִפְתַחים" (port) שונים על מנת להבדיל בין שירותי רשת שונים. שרת המשתמש ב-TCP מגדיר מפתח (port) ברירת מחדל עבור כל סוג שירות רשת שהוא מספק (לדוגמה - HTTP יהיה מוגדר בדרך כלל למפתח מספר 80), כל לקוח יפנה למפתח ידוע מראש זה, לאחר פניה ראשונית זו השרת יקצה מפתח ספציפי, והמשך השיחה יעבור על המפתח החדש . כך יכול השרת להבדיל בין התקשרויות שנועדו לשירותים שונים (למשל FTP ו HTTP). בנוסף, כל מחשב הפונה לשרת, מקצה מפתח מסוים להתקשרות, כך יכול המחשב להבדיל בין תשובות משרתים שונים. תהליך קבלת המפתח לשיחה מתבצע כחלק מ"לחיצת היד".
[עריכה] מבנה חבילת TCP
חבילת TCP כוללת פתיח (header) ונתונים, אך אינה כוללת סוגר (trailer).
[עריכה] מבנה הפתיח
16 הסיביות הראשונות מכילות מידע אודות מספר המפתח (port) במחשב המקור. מספר המפתח יכול לנוע בין 1 ל 65535.
16 הסיביות הבאות מכילות מידע אודות מספר המפתח (port) במחשב היעד.
32 הסיביות הבאות מכילות את מספרה הסידורי של החבילה.
32 הסיביות הבאות מכילות את מספר האישור, המספר הסידורי של החבילה הבאה שהיעד מצפה לקבל.
4 הסיביות הבאות מגדירות את אורך הפתיח של החבילה הנוכחית, ביחידות של 32 סיביות.
6 הסיביות הבאות שמורות, ולמעשה לא נעשה בהן שימוש.
6 הסיביות הבאות משמשות להגדרות שונות, כמו למשל, העברת האסימון ב"לחיצת היד התלת כיוונית".
16 הסיביות הבאות מגדירות את גודל החלון בתקשורת הנוכחית.
16 הסיביות הבאות מכילות את ה-checksum, מספר האימות, של הפתיח והנתונים.
16 הסיביות הבאות מהוות סמן לסוף נתוני החובה בפתיח.
בהמשך יכולות להתווסף אופציות שונות, הקשורות לאופי התקשורת, ובמידה ואפשרויות אלו לא מכילות כפולה של 32 סיביות הפתיח מרופד באפסים, ע"מ להגיע לכפולה של 32 סיביות
ע"מ לעשות את הדברים ברורים יותר, מוצג כאן מבנה הפתיח בצורה גרפית -
| 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 | סמן סיום | ||||||||||||||||||||||||||||||
| אפשרויות שונות (אופציונלי) | ריפוד באפסים | ||||||||||||||||||||||||||||||

