Transmission Control Protocol
מתוך ויקיפדיה, האנציקלופדיה החופשית
ערך זה זקוק לעריכה, על מנת שיתאים לסגנון המקובל בוויקיפדיה. הסיבה שניתנה לכך היא שיש טעויות פיסוק, ניסוח לא אנציקלופדי, קישורים פנימיים חסרים. אם אתם סבורים כי אין בדף בעיה, ניתן לציין זאת בדף השיחה שלו. |
HTTP, SMTP, FTP, IRC, SNMP ... | Application |
MIME, ASCII, Unicode ... | Presentation |
ASP, PPTP, SSH, NFS, RPC, DNS, SSL ... | Session |
TCP, UDP, SCTP, RTP, DCCP ... | Transport |
IPv4, IPv6, ICMP, RIP, IPX ... | Network |
Ethernet, Token ring, FDDI ... | Data Link |
802.11x WiFi, 10Base-T, Blue Tooth, DSL ... | Physical |
Application | HTTP, SMTP, FTP, DNS, DHCP, SSH, IRC, SNMP, SIP, IMAP4, MIME • TELNET, RPC, SOAP ... |
Transport | TCP, UDP, SCTP, RTP, DCCP, ICMP ... |
Network | IPv4, IPv6, ARP, IPX ... |
Physical | Ethernet, 802.11 WiFi, Token ring, FDDI ... |
Transmission Control Protocol (בראשי תיבות TCP) הוא פרוטוקול תלוי חיבור (connection oriented), הפועל בשכבת התעבורה של מודל הOSI ובשכבת התעבורה של מודל הTCP/IP, ומבטיח העברה אמינה של הנתונים בין שתי תחנות ברשת מחשבים.
TCP הוא חלק מחבילת הפרוטוקולים TCP/IP, והוא עושה שימוש בפרוטוקול הIP לצורך העברת הנתונים. TCP פועל על הנתונים שהועברו באמצעות IP, מוודא את נכונותם, ומאשר את קבלת הנתונים במלואם, או מבקש שליחה מחדש של נתונים שלא הגיעו בצורה תקינה.
תוכן עניינים |
[עריכה] מנגנונים בשימוש פרוטוקול ה־TCP
[עריכה] הקמת קשר - לחיצת יד תלת כיוונית
TCP הוא פרוטוקול תלוי חיבור, לכן לפני העברת הנתונים TCP משתמש בשיטה שנקראת "לחיצת יד תלת כיוונית" (Hand Shaking) על מנת לוודא שניתן להעביר נתונים בין המקור ליעד. שיטה זו מתחילה בשליחת הודעת פתיחת קשר קבועה מראש מהמקור, אל היעד (כיוון אחד) (SYN). מחשב היעד מקבל את ההודעה, מבין שמחשב המקור רוצה להעביר אליו נתונים, ושולח הודעת אישור (SYN-ACK). כאשר מחשב המקור מקבל את התשובה, הוא יודע כבר שניתן להעביר נתונים הלוך ושוב בין שני המחשבים, אבל מחשב היעד עדיין לא יודע שהודעתו התקבלה. לכן שולח מחשב המקור הודעת אישור אל היעד (ACK), כדי להודיע לו שניתן להעביר נתונים ביניהם, ואפשר להתחיל להעביר את הנתונים האמיתיים (כיוון שלישי). מחשב המקור יתחיל להעביר את הנתונים יחד עם ה-Ack האחרון. לכל לחיצת יד יש מספר יחודי (SN = Sequence Number).
[עריכה] Checksum ואישורים
TCP מוודא את אמינות הנתונים בעזרת מנגנון שנקרא Checksum, כלומר, מחשב המקור מפעיל פונקציה קבועה על הנתונים הנשלחים, הפונקציה הזו יוצרת מספר, בהתאם לנתונים והוא נשלח כחלק מהפתיח (header) של חבילת ה-TCP. מחשב היעד מקבל את החבילה, ומפעיל עליה את אותה הפונקציה, לאחר שגם הוא מקבל מספר הוא משווה אותו עם המספר שנשלח אליו ממחשב המקור, אם המספרים שווים - מחשב היעד שולח אישור למקור, והעברת הנתונים ממשיכה. אם המספרים שונים, מחשב היעד שולח למחשב המקור בקשה להעברה חוזרת של הנתונים. מנגנון זה מאפשר לפרוטוקול ה-TCP לא רק לוודא את אמינות הנתונים, אלא גם לאשר קבלה של כל הנתונים שנשלחו. המחשב השולח מחוייב לשמור את החבילות היוצאות עד קבלת אישור מהלקוח. אחת הפונקציות הנפוצות לחישוב Checksum היא CRC.
מנגנון האישור שתואר לעיל עלול להאט מאוד את התקשורת במקרה של חיבור המסוגל להעביר כמות גדולה של מידע, אך בעל זמן תגובה גדול. המקרה הקלאסי בו תיווצר בעיה הוא של שימוש בחיבור לוויני, בו לוקח לכל חבילה קרוב לחצי שנייה לנוע מהמקור ליעד. במקרה כזה, אם השולח יחכה לאישור לפני שליחת חבילת המידע הבאה, לא יהיה אפשרי לשלוח חבילות בקצב המהיר מחבילה בשנייה. כדי למנוע "בזבוז" של רוחב הפס TCP משתמש ב"חלונות" (sliding windows). גודל החלון קובע את כמות המידע שנשלח על ידי המקור עד שנדרש אישור של היעד. היעד יכול אז לשלוח אישור יחיד על מספר חבילות מידע. גודל החלון משתנה באופן דינמי במהלך התקשורת, כך שיתאים לרוחב הפס, וכן לכמות המידע שהיעד מסוגל לעבד. מחשב המקור ממספר את החבילות במספרים סידוריים, בסדר עולה, כך שמחשב היעד יכול לעקוב אחרי הגעתן של כל החבילות, ולהתריע במקרה שאחת מהן לא הגיעה.
[עריכה] מפתחים
TCP משתמש ב"מִפְתַחים" (port) שונים על מנת להבדיל בין שירותי רשת שונים. שרת המשתמש ב-TCP מגדיר מפתח (port) ברירת מחדל עבור כל סוג שירות רשת שהוא מספק (לדוגמה - HTTP יהיה מוגדר בדרך כלל למפתח מספר 80), כל לקוח יפנה למפתח ידוע מראש זה, לאחר פניה ראשונית זו השרת יקצה מפתח ספציפי, והמשך השיחה יעבור על המפתח החדש . כך יכול השרת להבדיל בין התקשרויות שנועדו לשירותים שונים (למשל FTP ו HTTP). בנוסף, כל מחשב הפונה לשרת, מקצה מפתח מסוים להתקשרות, כך יכול המחשב להבדיל בין תשובות משרתים שונים. תהליך קבלת המפתח לשיחה מתבצע כחלק מ"לחיצת היד".
[עריכה] סגירת קשר
סגירת קשר מתבצעת לרוב על ידי לחיצת יד מרובעת, כאשר כל צד סוגר את הקשר באופן עצמאי. כאשר אחד הצדדים רוצה לסגור את הקשר הוא מעביר חבילת FIN, והצד השני מאשר, ואז כיוון שהצד השני אמור לסגור את הקשר, גם הוא שולח חבילת FIN, ואז הצד הראשון מאשר. חיבור יכול להיות "חצי פתוח" אם רק אחד הצדדים סגר את הקשר והשני לא.
ניתן לסגור קשר גם על ידי לחיצת יד משולשת, כאשר הצד שלא יזם את סגירת הקשר מעביר את ה-ACK ואת הFIN בבת אחת. זוהי השיטה הנפוצה ביותר.
לבסוף ייתכן ששני הצדדים יבקשו לסגור את הקשר באופן מסונכרן על ידי שליחת ACK בו זמני.
[עריכה] מבנה חבילת TCP
חבילת TCP כוללת פתיח (header) ונתונים, אך אינה כוללת סוגר (trailer).
[עריכה] מבנה הפתיח
16 הסיביות הראשונות מכילות מידע אודות מספר המפתח (port) במחשב המקור. מספר המפתח יכול לנוע בין 1 ל 65535.
16 הסיביות הבאות מכילות מידע אודות מספר המפתח (port) במחשב היעד.
32 הסיביות הבאות מכילות את מספרה הסידורי של החבילה.
32 הסיביות הבאות מכילות את מספר האישור, המספר הסידורי של החבילה הבאה שהיעד מצפה לקבל.
4 הסיביות הבאות מגדירות את אורך הפתיח של החבילה הנוכחית, ביחידות של 32 סיביות.
6 הסיביות הבאות שמורות, ולמעשה לא נעשה בהן שימוש.
6 הסיביות הבאות משמשות לסימונים שונים, כמו למשל, סימון ה-SYN ב-"לחיצת היד התלת כיוונית". כל סיבית מקבלת ערך של 1 או 0, אינדיקציה לאם הסימון דלוק או מכובה.
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 | מיקום מידע דחוף | ||||||||||||||||||||||||||||||
אפשרויות שונות (אופציונלי) | ריפוד באפסים |
[עריכה] קישורים חיצוניים
http://www.ietf.org/rfc/rfc793.txt - הגדרת התקינה של פרוטוקול TCP