לדלג לתוכן

Transmission Control Protocol – הבדלי גרסאות

מתוך ויקיפדיה, האנציקלופדיה החופשית
תוכן שנמחק תוכן שנוסף
Ofirt320 (שיחה | תרומות)
מ קישורים פנימיים
מ העברת תבנית:Tcp/ip שתהיה אחרי קישורים חיצוניים והערות שוליים (תג)
 
(12 גרסאות ביניים של 10 משתמשים אינן מוצגות)
שורה 1: שורה 1:
{{להשלים|כל הערך=כן|נושא=מחשוב}}
{{להשלים|כל הערך=כן|נושא=מחשוב}}
{{מפנה|[[TCP]]|מודל התקשורת של האינטרנט|TCP/IP}}
{{מפנה|[[TCP]]|מודל התקשורת של האינטרנט|TCP/IP}}
'''Transmission Control Protocol''' (ב[[ראשי תיבות]]: '''TCP'''; ב[[עברית]]: פרוטוקול בקרת שידור) הוא [[פרוטוקול תקשורת|פרוטוקול]] ב[[תקשורת נתונים]] הפועל בשכבות התעבורה של [[שכבת התעבורה של מודל ה-OSI|מודל ה-OSI]] וב[[שכבת התעבורה של מודל ה-TCP/IP|מודל ה-TCP/IP]], ומבטיח העברה אמינה של נתונים בין שתי [[צומת (רשת)|תחנות]] ב[[רשת מחשבים]] באמצעות יצירת חיבור מקושר (Connection Oriented).
{{OSI}}
{{Tcp/ip}}
'''Transmission Control Protocol''' ([[ראשי תיבות|ר"ת]] '''TCP''') הוא [[פרוטוקול תקשורת|פרוטוקול]] ב[[תקשורת נתונים]] הפועל בשכבות התעבורה של [[שכבת התעבורה של מודל ה-OSI|מודל ה-OSI]] וב[[שכבת התעבורה של מודל ה-TCP/IP|מודל ה-TCP/IP]], ומבטיח העברה אמינה של נתונים בין שתי [[צומת (רשת)|תחנות]] ב[[רשת מחשבים]] באמצעות יצירת חיבור מקושר (Connection Oriented).


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


== מנגנונים בשימוש פרוטוקול ה־TCP ==
== מנגנונים בשימוש פרוטוקול ה־TCP ==
=== הקמת קשר - לחיצת יד משולשת ===
=== הקמת קשר לחיצת יד משולשת ===
[[קובץ:Tcp normal.svg|ממוזער|ימין|יצירת חיבור TCP תקני בין אליס לשרת. שלוש החבילות המהוות את לחיצת היד המשולשת עוברות כנדרש בין הצדדים ויוצרות חיבור TCP שיכול לשמש להעברת נתונים בין השניים.]]
[[קובץ:Tcp normal.svg|ממוזער|ימין|יצירת חיבור TCP תקני בין אליס לשרת. שלוש החבילות המהוות את לחיצת היד המשולשת עוברות כנדרש בין הצדדים ויוצרות חיבור TCP שיכול לשמש להעברת נתונים בין השניים.]]
בעת הקמת הקשר בין שתי תחנות, משתמש פרוטוקול TCP ב[[לחיצת יד (תקשורת)|לחיצת יד]] בשלושה שלבים (three-way handshake):
בעת הקמת הקשר בין שתי תחנות, משתמש פרוטוקול TCP ב[[לחיצת יד (תקשורת)|לחיצת יד]] בשלושה שלבים (three-way handshake):


# SYN: תחנת המקור שולחת הודעה לפתיחת קשר (הודעה בפרוטוקול TCP בה דגל ה- SYN [[תקורה (מחשבים)|בפתיח]] נושא ערך "1").
# <tt>SYN</tt>: תחנת המקור שולחת הודעה לפתיחת קשר (הודעה בפרוטוקול TCP בה דגל ה-<tt>SYN</tt> [[תקורה (מחשבים)|בפתיח]] נושא ערך "1").
# SYN-ACK: תחנת היעד מקבלת את ההודעה ושולחת בתגובה הודעת אישור קבלה ואישור פתיחת קשר מצדה (הודעה בפרוטוקול TCP בה דגלי ה- SYN וה- ACK [[תקורה (מחשבים)|בפתיח]] נושאים ערך "1"). משקיבלה תחנת היעד הודעה זו היא יכולה כבר להתחיל לשלוח נתונים. בשליחת ACK תחנת היעד למעשה מוסרת לתחנת המקור את המספור ההתחלתי של חתיכות המידע שישלחו (Sequence number או בקיצור Seq). המספור ההתחלתי הוא מספר אקראי שמכונה Initial Sequence Number או בקיצור ISN. הסיבה לכך שהמספור לא מתחיל ב-0 אלא במספר אקראי היא חשש מערבוב שתי שיחות שנערכות במקביל וחשש מניחוש המספר על ידי גורם שלישי. בעזרת ה- ACK שהועבר לצד א, יוכלו הצדדים לתקשר.
# <tt>SYN-ACK</tt>: תחנת היעד מקבלת את ההודעה ושולחת בתגובה הודעת אישור קבלה ואישור פתיחת קשר מצדה (הודעה בפרוטוקול TCP בה דגלי ה-<tt>SYN</tt> וה-<tt>ACK</tt> [[תקורה (מחשבים)|בפתיח]] נושאים ערך "1"). משקיבלה תחנת היעד הודעה זו היא יכולה כבר להתחיל לשלוח נתונים. בשליחת <tt>ACK</tt> תחנת היעד למעשה מוסרת אישור לתחנת המקור על המספור ההתחלתי של חתיכות המידע שישלחו (Sequence number או בקיצור Seq). המספור ההתחלתי הוא מספר אקראי שמכונה Initial Sequence Number או בקיצור ISN. המספור לא מתחיל ב-0 אלא במספר אקראי עקב חשש מערבוב שתי שיחות שנערכות במקביל וחשש מניחוש המספר על ידי גורם שלישי. בעזרת ה-<tt>ACK</tt> שהועבר לצד א', יוכלו הצדדים לתקשר.
# ACK: תחנת המקור מיידעת את תחנת היעד על סיום מיסוד הקשר בהודעת ACK (הודעה בפרוטוקול TCP בה דגל ה- ACK [[תקורה (מחשבים)|בפתיח]] נושא ערך "1"). תחנת המקור מיידעת את צד ב על המספור ההתחלתי שלה.
# <tt>ACK</tt>: תחנת המקור מיידעת את תחנת היעד על סיום מיסוד הקשר בהודעת <tt>ACK</tt> (הודעה בפרוטוקול TCP בה דגל ה-<tt>ACK</tt> [[תקורה (מחשבים)|בפתיח]] נושא ערך "1"). תחנת המקור מיידעת את צד ב' על המספור ההתחלתי שלה.
'''<big>תעבורת המידע</big>'''


תעבורת המידע מתבצעת בשני שלבים שחוזרים על עצמם עד סיום העברת המידע.
===תעבורת המידע===
תעבורת המידע מתבצעת בשני שלבים שחוזרים על עצמם עד סיום העברת המידע.
# צד א' ששולח את המידע כותב את המספור של החתיכה הראשונה בחבילה (Seq) שהוא מעביר ושולח גם את מספר הבתים שיש בה (Length או בקיצור Len). למשל: Seq=1 Len=3. במקביל מפעיל צד א' [[שעון עצר]], ואם לא מתקבל אישור מהצד השני על קבלת החבילה עד פקיעת השעון הוא שולח שוב את חבילת המידע.
# צד א' ששולח את המידע כותב את המספור של החתיכה הראשונה בחבילה (Seq) שהוא מעביר ושולח גם את מספר הבתים שיש בה (Length או בקיצור Len). למשל: Seq=1 Len=3. במקביל מפעיל צד א' [[שעון עצר]], ואם לא מתקבל אישור מהצד השני על קבלת החבילה עד פקיעת השעון הוא שולח שוב את חבילת המידע.
# השלב השני הוא שליחת התגובה של צד ב'. התגובה מייצגת אישור קבלה (ACK) של החבילה הקודמת והודעה לצד א' שצד ב' מצפה בעצם לחבילה הבאה.
# השלב השני הוא שליחת התגובה של צד ב'. התגובה מייצגת אישור קבלה (<tt>ACK</tt>) של החבילה הקודמת והודעה לצד א' שצד ב' מצפה בעצם לחבילה הבאה.
#:דוגמה: אם צד א' שלח: Seq=1 Len=3, וצד ב' יגיב על קבלת החבילה: Ack=4. צד ב' מציין שהוא קיבל את החתיכה האחרונה בחבילה הקודמת שנשלחה, ומוכן לקבלת החתיכה הבאה אחריה שמספורה הוא 4.
#:דוגמה: אם צד א' שלח: Seq=1 Len=3, וצד ב' יגיב על קבלת החבילה: Ack=4. צד ב' מציין שהוא קיבל את החתיכה האחרונה בחבילה הקודמת שנשלחה, ומוכן לקבלת החתיכה הבאה אחריה שמספורה הוא 4.


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


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


=== אמינות החיבור ===
=== אמינות החיבור ===
שורה 34: שורה 32:


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


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


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


=== בקרת זרימה ===
=== בקרת זרימה ===
שורה 44: שורה 42:
מחשב המקור ממספר את החבילות במספרים סידוריים, בסדר עולה, כך שמחשב היעד יכול לעקוב אחרי הגעתן של כל החבילות ולהתריע במקרה שאחת מהן לא הגיעה, ובכך לאפשר למחשב המקור לבצע [[שידור חוזר (תקשורת מחשבים)|שידור חוזר]].
מחשב המקור ממספר את החבילות במספרים סידוריים, בסדר עולה, כך שמחשב היעד יכול לעקוב אחרי הגעתן של כל החבילות ולהתריע במקרה שאחת מהן לא הגיעה, ובכך לאפשר למחשב המקור לבצע [[שידור חוזר (תקשורת מחשבים)|שידור חוזר]].
=== בקרת גודש ===
=== בקרת גודש ===
פרוטוקול TCP משתמש בארבעה [[אלגוריתמים]] לצורך בקרת גודש: [[Slow-start]] {{אנ|Slow-start}}, [[congestion avoidance]] {{אנ| congestion avoidance}}, [[fast retransmit]] ו־fast recovery. בקרת הגודש מתבססת על משוב עקיף (implicit feedback), אשר מבוסס על ההנחה כי עיכוב בקבלת אישור על חבילה שנשלחה מעבר לזמן שהוקצב לקבלתו נובע מעומס בין שני מחשבי הקצה. הנחה זו מתקיימת לרוב ברשתות פיזיות אך מתקיימת פחות ברשתות אלחוטיות.{{הערה|שם=בונבטור| Olivier Bonaventure, ''Computer Networking :Principles, Protocols and Practice'' (The Saylor Foundation, October 30, 2011), http://www.saylor.org/courses/cs402}} עם זאת, במסגרת הרחבה לפרוטוקולים TCP ו-IP {{מימין לשמאל|ב־{{RFC|3168}}}} {{כ}}(2001), נוספה תמיכה אופציונלית ב[[בקרת גודש מפורשת]]. הדגלים <tt>CWR</tt> ו-<tt>ECE</tt> נוספו לפתיח של הודעת TCP על חשבון השדה השמור שסמוך להם.
פרוטוקול TCP משתמש בארבעה [[אלגוריתמים]] לצורך בקרת גודש: [[Slow-start]] {{אנ|Slow-start}},{{כ}} [[congestion avoidance]] {{אנ| congestion avoidance}},{{כ}} [[fast retransmit]]{{כ}} ו־fast recovery. בקרת הגודש מתבססת על משוב עקיף (implicit feedback), אשר מבוסס על ההנחה כי עיכוב בקבלת אישור על חבילה שנשלחה מעבר לזמן שהוקצב לקבלתו נובע מעומס בין שני מחשבי הקצה. הנחה זו מתקיימת לרוב ברשתות פיזיות ופחות ברשתות אלחוטיות.{{הערה|שם=בונבטור| Olivier Bonaventure, ''Computer Networking :Principles, Protocols and Practice'' (The Saylor Foundation, October 30, 2011), http://www.saylor.org/courses/cs402}} עם זאת, במסגרת הרחבה לפרוטוקולים TCP ו-IP {{מימין לשמאל|ב־{{RFC|3168}}}} {{כ}}(2001), נוספה תמיכה אופציונלית ב[[בקרת גודש מפורשת]]. הדגלים <tt>CWR</tt> ו-<tt>ECE</tt> נוספו לפתיח של הודעת TCP על חשבון השדה השמור שסמוך להם.


ניתן לסווג את האלגוריתמים למניעת גודש על פי תכונות שונות:
ניתן לסווג את האלגוריתמים למניעת גודש על פי תכונות שונות:
* אופן זיהוי הגודש ברשת - כשחלקם מבוססים על איבוד חבילות (Loss), עיכוב בקבלת חבילות או סימון מפורש של על החבילה במצבי גודש.
* אופן זיהוי הגודש ברשת כשחלקם מבוססים על איבוד חבילות (Loss), עיכוב בקבלת חבילות או סימון מפורש של על החבילה במצבי גודש.
* שינויים נדרשים לפריסת האלגוריתם
* שינויים נדרשים לפריסת האלגוריתם
* היבטים ביצועים שבהם מטפל האלגוריתם: רוחב פס (bandwidth; B), אובדן קשר (L), הגינות (F), יתרון להתקשרויות קצרות (S), התקשרויות בקצב משתנה (V) וקצב התכנסות (C)
* היבטים ביצועים שבהם מטפל האלגוריתם: רוחב פס (bandwidth; B), אובדן קשר (L), הגינות (F), יתרון להתקשרויות קצרות (S), התקשרויות בקצב משתנה (V) וקצב התכנסות (C)
* הגינות
* הגינות


{| class="wikitable sortable"
{| class="wikitable sortable"
שורה 79: שורה 77:
| שולח
| שולח
| רוחב פס גבוה
| רוחב פס גבוה
|
|
|-
|-
| BIC
| BIC
שורה 85: שורה 83:
| שולח
| שולח
| רוחב פס גבוה
| רוחב פס גבוה
|
|
| ברירת המחדל ב[[ליבת לינוקס]] בגרסאות 2.6.8 עד 2.6.18.
| ברירת המחדל ב[[ליבת לינוקס]] בגרסאות 2.6.8 עד 2.6.18.
|-
|-
| CUBIC
| CUBIC
שורה 92: שורה 90:
| שולח
| שולח
| רוחב פס גבוה
| רוחב פס גבוה
|
|
| ברירת המחדל ב[[ליבת לינוקס]] בגרסאות 2.6.19 עד 3.2.
| ברירת המחדל ב[[ליבת לינוקס]] בגרסאות 2.6.19 עד 3.2.
|-
|-
| H-TCP
| H-TCP
שורה 99: שורה 97:
| שולח
| שולח
| רוחב פס גבוה
| רוחב פס גבוה
|
|
|-
|-
| FAST
| FAST
שורה 118: שורה 116:
| שולח
| שולח
| L
| L
|
|
|-
|-
| Jersey
| Jersey
שורה 124: שורה 122:
| שולח
| שולח
| L
| L
|
|
|-
|-
|BBR{{הערה|{{Cite web|url=https://queue.acm.org/detail.cfm?id=3022184|title=BBR: Congestion-Based Congestion Control|last=|first=|date=|website=ACM Queue|publisher=|doi=10.1145/3012426.3022184|access-date=2016-12-06}}}}
|BBR{{הערה|{{Cite web|url=https://queue.acm.org/detail.cfm?id=3022184|title=BBR: Congestion-Based Congestion Control|last=|first=|date=|website=ACM Queue|publisher=|doi=10.1145/3012426.3022184|access-date=2016-12-06}}}}
שורה 173: שורה 171:
| נתב
| נתב
| הפחתת עיכוב
| הפחתת עיכוב
|
|
|-
|-
| [[ECN]]
| [[ECN]]
שורה 179: שורה 177:
| שולח, מקבל, נתב
| שולח, מקבל, נתב
| הפחתת איבוד חבילות
| הפחתת איבוד חבילות
|
|
|}
|}


שורה 186: שורה 184:


== מבנה חבילת TCP ==
== מבנה חבילת TCP ==
[[חבילת מידע|חבילת]] TCP כוללת פתיח באורך משתנה המורכב משדות קבועים בגודל 20 [[בית (מחשב)|בתים]] ושדות אופציונליים בגודל של עד 40 [[בית (מחשב)|בתים]] (בכל מקרה גודל הפתיח הוא כפולה של 32 [[סיבית|סיביות]]). לאחר הפתיח מצורפת מסגרת המידע בגודל משתנה הקטן מ-65,495 בתים. החבילה אינה כוללת סוגר.
[[חבילת מידע|חבילת]] TCP כוללת פתיח באורך משתנה המורכב משדות קבועים בגודל 20 [[בית (מחשב)|בתים]] ושדות אופציונליים בגודל של עד 40 בתים (בכל מקרה גודל הפתיח הוא כפולה של 32 [[סיבית|סיביות]]). לאחר הפתיח מצורפת מסגרת המידע בגודל משתנה הקטן מ-65,495 בתים. החבילה אינה כוללת סוגר.


=== מבנה הפתיח ===
=== מבנה הפתיח ===

{| bgcolor="#3377CF" align="center"
{| bgcolor="#3377CF" align="center"
| align="center" bgcolor="#6699EF" width="15" | 1 || align="center" bgcolor="#6699EF" width="15" | 2 || align="center" bgcolor="#6699EF" width="15" | 3 || align="center" bgcolor="#6699EF" width="15" | 4 || align="center" bgcolor="#6699EF" width="15" | 5 || align="center" bgcolor="#6699EF" width="15" | 6 || align="center" bgcolor="#6699EF" width="15" | 7 || align="center" bgcolor="#6699EF" width="15" | 8 || align="center" bgcolor="#6699EF" width="15" | 9 || align="center" bgcolor="#6699EF" width="15" | 10 || align="center" bgcolor="#6699EF" width="15" | 11 || align="center" bgcolor="#6699EF" width="15" | 12 || align="center" bgcolor="#6699EF" width="15" | 13 || align="center" bgcolor="#6699EF" width="15" | 14 || align="center" bgcolor="#6699EF" width="15" | 15 || align="center" bgcolor="#6699EF" width="15" | 16 || align="center" bgcolor="#6699EF" width="15" | 17 || align="center" bgcolor="#6699EF" width="15" | 18 || align="center" bgcolor="#6699EF" width="15" | 19 || align="center" bgcolor="#6699EF" width="15" | 20 || align="center" bgcolor="#6699EF" width="15" | 21 || align="center" bgcolor="#6699EF" width="15" | 22 || align="center" bgcolor="#6699EF" width="15" | 23 || align="center" bgcolor="#6699EF" width="15" | 24 || align="center" bgcolor="#6699EF" width="15" | 25 || align="center" bgcolor="#6699EF" width="15" | 26 || align="center" bgcolor="#6699EF" width="15" | 27 || align="center" bgcolor="#6699EF" width="15" | 28 || align="center" bgcolor="#6699EF" width="15" | 29 || align="center" bgcolor="#6699EF" width="15" | 30 || align="center" bgcolor="#6699EF" width="15" | 31 || align="center" bgcolor="#6699EF" width="15" | 32
| align="center" bgcolor="#6699EF" width="15" | 1 || align="center" bgcolor="#6699EF" width="15" | 2 || align="center" bgcolor="#6699EF" width="15" | 3 || align="center" bgcolor="#6699EF" width="15" | 4 || align="center" bgcolor="#6699EF" width="15" | 5 || align="center" bgcolor="#6699EF" width="15" | 6 || align="center" bgcolor="#6699EF" width="15" | 7 || align="center" bgcolor="#6699EF" width="15" | 8 || align="center" bgcolor="#6699EF" width="15" | 9 || align="center" bgcolor="#6699EF" width="15" | 10 || align="center" bgcolor="#6699EF" width="15" | 11 || align="center" bgcolor="#6699EF" width="15" | 12 || align="center" bgcolor="#6699EF" width="15" | 13 || align="center" bgcolor="#6699EF" width="15" | 14 || align="center" bgcolor="#6699EF" width="15" | 15 || align="center" bgcolor="#6699EF" width="15" | 16 || align="center" bgcolor="#6699EF" width="15" | 17 || align="center" bgcolor="#6699EF" width="15" | 18 || align="center" bgcolor="#6699EF" width="15" | 19 || align="center" bgcolor="#6699EF" width="15" | 20 || align="center" bgcolor="#6699EF" width="15" | 21 || align="center" bgcolor="#6699EF" width="15" | 22 || align="center" bgcolor="#6699EF" width="15" | 23 || align="center" bgcolor="#6699EF" width="15" | 24 || align="center" bgcolor="#6699EF" width="15" | 25 || align="center" bgcolor="#6699EF" width="15" | 26 || align="center" bgcolor="#6699EF" width="15" | 27 || align="center" bgcolor="#6699EF" width="15" | 28 || align="center" bgcolor="#6699EF" width="15" | 29 || align="center" bgcolor="#6699EF" width="15" | 30 || align="center" bgcolor="#6699EF" width="15" | 31 || align="center" bgcolor="#6699EF" width="15" | 32
שורה 197: שורה 194:
| align="center" bgcolor="#6699EF" colspan="32" | מספר סידורי
| align="center" bgcolor="#6699EF" colspan="32" | מספר סידורי
|-
|-
| align="center" bgcolor="#6699EF" colspan="32" | מספר אישור (ACK)
| align="center" bgcolor="#6699EF" colspan="32" | מספר אישור (<tt>ACK</tt>)
|-
|-
| align="center" bgcolor="#6699EF" colspan="4" | אורך הפתיח || align="center" bgcolor="#6699EF" colspan="4" | שמור || align="center" bgcolor="#6699EF" colspan="8" | דגלים || align="center" bgcolor="#6699EF" colspan="16" | גודל חלון השליחה
| align="center" bgcolor="#6699EF" colspan="4" | אורך הפתיח || colspan="3" align="center" bgcolor="#6699EF" | שמור
| colspan="9" |דגלים|| colspan="16" align="center" bgcolor="#6699EF" | גודל חלון השליחה
|-
|-
| align="center" bgcolor="#6699EF" colspan="16" | [[Checksum]] || align="center" bgcolor="#6699EF" colspan="16" | מיקום מידע דחוף
| align="center" bgcolor="#6699EF" colspan="16" | [[Checksum]] || align="center" bgcolor="#6699EF" colspan="16" | מיקום מידע דחוף
שורה 205: שורה 203:
| align="center" bgcolor="#6699EF" colspan="23" | אפשרויות שונות (אופציונלי) || align="center" bgcolor="#6699EF" colspan="9" | ריפוד באפסים
| align="center" bgcolor="#6699EF" colspan="23" | אפשרויות שונות (אופציונלי) || align="center" bgcolor="#6699EF" colspan="9" | ריפוד באפסים
|}
|}
* [[פורט (תקשורת)|פורט]] המקור (16 סיביות) שדה המכיל את מספר הפורט במחשב המקור.

* [[פורט (תקשורת)|פורט]] המקור (16 סיביות) - שדה המכיל את מספר הפורט במחשב המקור.
* פורט היעד (16 סיביות) שדה המכיל את מספר הפורט במחשב היעד.
* מספר סידורי (32 סיביות) יש להבחין בין שני מקרים:

*# [[דגל (מחשבים)|דגל]] <tt>SYN</tt> נושא ערך "1" (החבילה היא חלק מהקמת הקשר) המספר בשדה מכיל את מספר החבילה שממנו יתחילו למנות (המספר הסידורי של חבילת המידע הראשונה יהיה למעשה המספר הזה + 1).
* [[פורט (תקשורת)|פורט]] היעד (16 סיביות) - שדה המכיל את מספר הפורט במחשב היעד.
*# דגל <tt>SYN</tt> נושא ערך "0" (החבילה היא חלק מרצף התקשורת בין המחשבים) המספר בשדה מכיל את מספר החבילה הנוכחית ביחס לתקשורת הפתוחה בין שני המחשבים (TCP [[session]]).

* מספר אישור (32 סיביות) (<tt>ACK</tt>) שדה מכיל את המספר הסידורי של ההודעה הבאה לה מצפה התחנה ומהווה אישור קבלה על כל ההודעות בעלות מספר סידורי הקטן ממנו. המידע בשדה תקף רק כאשר דגל <tt>ACK</tt> נושא ערך "1".
* מספר סידורי (32 סיביות) - נבחין בין שני מקרים:
* היסט המידע/אורך הפתיח (4 סיביות) שדה זה מכיל את גודל הפתיח (ביחידות של 32 [[סיבית|סיביות]]) של החבילה הנוכחית שהוא גם ההיסט מתחילת החבילה עד לתחילת המידע.
*# [[דגל (מחשבים)|דגל]] <tt>SYN</tt> נושא ערך "1" (החבילה היא חלק מהקמת הקשר) - המספר בשדה מכיל את מספר החבילה שממנו יתחילו למנות (המספר הסידורי של חבילת המידע הראשונה יהיה למעשה המספר הזה + 1).
* שמור (3 סיביות) שדה השמור לשימוש עתידי (אמור להכיל אפסים).
*# [[דגל (מחשבים)|דגל]] <tt>SYN</tt> נושא ערך "0" (החבילה היא חלק מרצף התקשורת בין המחשבים) - המספר בשדה מכיל את מספר החבילה הנוכחית ביחס לתקשורת הפתוחה בין שני המחשבים (TCP [[session]]).
* דגלים (9 סיביות):

#NS – (ראשי תיבות של Nonce Sum), דגל נסיוני שנועד להגן נגד הסתרה זדונית של פקטות מהשולח.
* מספר אישור (32 סיביות) - (ACK) שדה מכיל את המספר הסידורי של ההודעה הבאה לה מצפה התחנה ומהווה אישור קבלה על כל ההודעות בעלות מספר סידורי הקטן ממנו. המידע בשדה תקף רק כאשר [[דגל (מחשבים)|דגל]] <tt>ACK</tt> נושא ערך "1".
#<tt>CWR</tt> (ראשי תיבות של Congestion Window Reduced), דגל המודיע על יכולתו של המחשב לתמוך בהודעות הנשלחות בהתאם להרחבה [[ECN]]. מחשב יעלה את הדגל לערך "1" לאחר קבלת הודעה בה דגל <tt>ECE</tt> היה פעיל.

#<tt>ECE</tt> (ראשי תיבות של ECN-Echo):
* היסט המידע / אורך הפתיח (4 סיביות) - שדה זה מכיל את גודל הפתיח (ביחידות של 32 [[סיבית|סיביות]]) של החבילה הנוכחית שהוא גם ההיסט מתחילת החבילה עד לתחילת המידע.
#* אם דגל <tt>SYN</tt> נושא ערך "1" מציין כי תקשורת ה-TCP בין שני המחשבים יכולה לעבוד בהרחבה [[ECN]].

#* אם דגל <tt>SYN</tt> נושא ערך "0" – מציין כי במהלך תקשורת TCP רגילה הגיעה חבילת IP בה נעשה שימוש בשדה ECN.
* שמור (4 סיביות) - שדה השמור לשימוש עתידי (אמור להכיל אפסים).
#<tt>URG</tt> {{כ}}(Urgent) דגל המודיע על מידע דחוף אשר מיקומו נמצא בשדה "היסט למידע דחוף".

#<tt>ACK</tt> {{כ}}(Acknowledgment) דגל הנותן תוקף למספר בשדה "מספר האישור".
* [[דגל (מחשבים)|דגלים]] (8 סיביות):
#<tt>PSH</tt> {{כ}}(Push) דגל המפעיל את פונקציית הדחיפה של הפרוטוקול.
#<tt>CWR</tt> - (ר"ת Congestion Window Reduced),דגל המודיע על יכולתו של המחשב לתמוך בהודעות הנשלחות בהתאם להרחבה [[ECN]]. מחשב יעלה את הדגל לערך "1" לאחר קבלת הודעה בה דגל <tt>ECE</tt> היה פעיל.
#<tt>RST</tt> {{כ}}(Reset) דגל המבקש את אתחול הקשר בין המחשבים.
#<tt>ECE</tt> - (ר"ת ECN-Echo):
#* אם דגל <tt>SYN</tt> נושא ערך "1" - מציין כי תקשורת ה-TCP בין שני המחשבים יכולה לעבוד בהרחבה [[ECN]].
#<tt>SYN</tt> {{כ}}(Synchronize) דגל מציין את שלב הקמת הקשר, או (בשיתוף עם דגל <tt>ECE</tt>) הודעה במסגרת הרחבה [[ECN]].
#<tt>FIN</tt> {{כ}}(Finish) דגל המציין את סיום הקשר. נשלח תאורטית פעם אחת מכל צד.
#* אם דגל <tt>SYN</tt> נושא ערך "0" - מציין כי במהלך תקשורת TCP רגילה הגיעה חבילת IP בה נעשה שימוש בשדה <tt>ECN</tt>.
* גודל חלון הקליטה (16 סיביות) מספר הבתים אותם יכול המחשב לקלוט החל ממספר ההודעה שצוין בשדה מספר האישור (<tt>ACK</tt>).
#<tt>URG</tt> - (מתוך Urgent), דגל המודיע על מידע דחוף אשר מיקומו נמצא בשדה "היסט למידע דחוף".
* סיכום ביקורת (16 סיביות) [[checksum]], מספר האימות של הפתיח וחלק מהפתיח של שכבת ה IP.
#<tt>ACK</tt> - (מתוך Acknowledgment), דגל הנותן תוקף למספר בשדה "מספר האישור".
* היסט למידע דחוף (16 סיביות) אם דגל <tt>URG</tt> נושא ערך "1", הערך בשדה זה מציין את ההיסט למיקום מידע דחוף (לרוב אינו בשימוש).
#<tt>PSH</tt> - (מתוך Push), דגל המפעיל את פונקציית הדחיפה של הפרוטוקול.
* אפשרויות שונות (0–40 [[בית (מחשב)|בתים]]) שדה אופציונלי שיכול להכיל בין היתר את גודל הסגמנט המרבי (Maximum Segment Size, [[:en:Maximum segment size|MSS]]) לשימוש בפרוטוקול. גודל השדה נקבע על פי שדה "אורך הפתיח", אם האורך המצוין אינו גדול מ-5 שדה זה כלל לא נמצא.
#<tt>RST</tt> - (מתוך Reset), דגל המבקש את אתחול הקשר בין המחשבים.
* ריפוד אפסים (0–4 בתים) שדה שתפקידו למלא את הפתיח ב-"0" על מנת להגיע לכפולה שלמה של 32 סיביות.
#<tt>SYN</tt> - (מתוך Synchronize), דגל מציין את שלב הקמת הקשר, או (בשיתוף עם דגל <tt>ECE</tt>) הודעה במסגרת הרחבה [[ECN]].
#<tt>FIN</tt> - (מתוך Finish), דגל המציין את סיום הקשר. נשלח תאורטית פעם אחת מכל צד.

* גודל חלון הקליטה (16 סיביות) - מספר הבתים אותם יכול המחשב לקלוט החל ממספר ההודעה שצוין בשדה מספר האישור (ACK).

* סיכום ביקורת (16 סיביות) - [[checksum]], מספר האימות של הפתיח וחלק מהפתיח של שכבת ה IP.

* היסט למידע דחוף (16 סיביות) - אם [[דגל (מחשבים)|דגל]] <tt>URG</tt> נושא ערך "1", הערך בשדה זה מציין את ההיסט למיקום מידע דחוף (לרוב אינו בשימוש).

* אפשרויות שונות (0–40 [[בית (מחשב)|בתים]]) - שדה אופציונלי שיכול להכיל בין היתר את גודל הסגמנט המרבי (Maximum Segment Size, [[:en:Maximum segment size|MSS]]) לשימוש בפרוטוקול. גודל השדה נקבע על פי שדה "אורך הפתיח", אם האורך המצוין אינו גדול מ-5 שדה זה כלל לא נמצא.

* ריפוד אפסים (0–4 [[בית (מחשב)|בתים]]) - שדה שתפקידו למלא את הפתיח ב-"0" על מנת להגיע לכפולה שלמה של 32 סיביות.


== ראו גם ==
== ראו גם ==
*[[מונחים ברשת מחשבים]]
* [[תקשורת מחשבים - מונחים]]
*[[Fast retransmit]] - הרחבה לפרוטוקול
* [[Fast retransmit]] הרחבה לפרוטוקול
* [[חבילת עץ חג מולד]]
* [[חבילת עץ חג המולד]]
*ראו גם [[:קטגוריה:תקנים בתקשורת מחשבים]]
* [[:קטגוריה:תקנים בתקשורת מחשבים|תקנים בתקשורת מחשבים]]
*ראו גם [[:קטגוריה:פרוטוקולי אינטרנט]]
* [[:קטגוריה:פרוטוקולי אינטרנט|פרוטוקולי אינטרנט]]
*ראו גם [[:קטגוריה:פרוטוקולי ניתוב]]
* [[:קטגוריה:פרוטוקולי ניתוב|פרוטוקולי ניתוב]]


== קישורים חיצוניים ==
== קישורים חיצוניים ==
שורה 259: שורה 246:
== הערות שוליים ==
== הערות שוליים ==
{{הערות שוליים}}
{{הערות שוליים}}

{{OSI}}

{{Tcp/ip}}


[[קטגוריה:פרוטוקולי אינטרנט]]
[[קטגוריה:פרוטוקולי אינטרנט]]

גרסה אחרונה מ־16:41, 18 במאי 2023

יש להשלים ערך זה: בערך זה חסר תוכן מהותי. ייתכן שתמצאו פירוט בדף השיחה.
הנכם מוזמנים להשלים את החלקים החסרים ולהסיר הודעה זו. שקלו ליצור כותרות לפרקים הדורשים השלמה, ולהעביר את התבנית אליהם.
יש להשלים ערך זה: בערך זה חסר תוכן מהותי. ייתכן שתמצאו פירוט בדף השיחה.
הנכם מוזמנים להשלים את החלקים החסרים ולהסיר הודעה זו. שקלו ליצור כותרות לפרקים הדורשים השלמה, ולהעביר את התבנית אליהם.
המונח "TCP" מפנה לכאן. לערך העוסק במודל התקשורת של האינטרנט, ראו TCP/IP.

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. צד א' ששולח את המידע כותב את המספור של החתיכה הראשונה בחבילה (Seq) שהוא מעביר ושולח גם את מספר הבתים שיש בה (Length או בקיצור Len). למשל: Seq=1 Len=3. במקביל מפעיל צד א' שעון עצר, ואם לא מתקבל אישור מהצד השני על קבלת החבילה עד פקיעת השעון הוא שולח שוב את חבילת המידע.
  2. השלב השני הוא שליחת התגובה של צד ב'. התגובה מייצגת אישור קבלה (ACK) של החבילה הקודמת והודעה לצד א' שצד ב' מצפה בעצם לחבילה הבאה.
    דוגמה: אם צד א' שלח: Seq=1 Len=3, וצד ב' יגיב על קבלת החבילה: Ack=4. צד ב' מציין שהוא קיבל את החתיכה האחרונה בחבילה הקודמת שנשלחה, ומוכן לקבלת החתיכה הבאה אחריה שמספורה הוא 4.

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

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

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

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

[עריכת קוד מקור | עריכה]

בניגוד לפרוטוקול 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 על חשבון השדה השמור שסמוך להם.

ניתן לסווג את האלגוריתמים למניעת גודש על פי תכונות שונות:

  • אופן זיהוי הגודש ברשת – כשחלקם מבוססים על איבוד חבילות (Loss), עיכוב בקבלת חבילות או סימון מפורש של על החבילה במצבי גודש.
  • שינויים נדרשים לפריסת האלגוריתם
  • היבטים ביצועים שבהם מטפל האלגוריתם: רוחב פס (bandwidth; B), אובדן קשר (L), הגינות (F), יתרון להתקשרויות קצרות (S), התקשרויות בקצב משתנה (V) וקצב התכנסות (C)
  • הגינות
אלגוריתמים למניעת גודש
אלגוריתם זיהוי גודש שינויים נדרשים יתרונות הגינות הערות
(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

[עריכת קוד מקור | עריכה]

חבילת 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 מיקום מידע דחוף
אפשרויות שונות (אופציונלי) ריפוד באפסים
  • פורט המקור (16 סיביות) – שדה המכיל את מספר הפורט במחשב המקור.
  • פורט היעד (16 סיביות) – שדה המכיל את מספר הפורט במחשב היעד.
  • מספר סידורי (32 סיביות) – יש להבחין בין שני מקרים:
    1. דגל SYN נושא ערך "1" (החבילה היא חלק מהקמת הקשר) – המספר בשדה מכיל את מספר החבילה שממנו יתחילו למנות (המספר הסידורי של חבילת המידע הראשונה יהיה למעשה המספר הזה + 1).
    2. דגל SYN נושא ערך "0" (החבילה היא חלק מרצף התקשורת בין המחשבים) – המספר בשדה מכיל את מספר החבילה הנוכחית ביחס לתקשורת הפתוחה בין שני המחשבים (TCP session).
  • מספר אישור (32 סיביות) – (ACK) שדה מכיל את המספר הסידורי של ההודעה הבאה לה מצפה התחנה ומהווה אישור קבלה על כל ההודעות בעלות מספר סידורי הקטן ממנו. המידע בשדה תקף רק כאשר דגל ACK נושא ערך "1".
  • היסט המידע/אורך הפתיח (4 סיביות) – שדה זה מכיל את גודל הפתיח (ביחידות של 32 סיביות) של החבילה הנוכחית שהוא גם ההיסט מתחילת החבילה עד לתחילת המידע.
  • שמור (3 סיביות) – שדה השמור לשימוש עתידי (אמור להכיל אפסים).
  • דגלים (9 סיביות):
  1. NS – (ראשי תיבות של Nonce Sum), דגל נסיוני שנועד להגן נגד הסתרה זדונית של פקטות מהשולח.
  2. CWR – (ראשי תיבות של Congestion Window Reduced), דגל המודיע על יכולתו של המחשב לתמוך בהודעות הנשלחות בהתאם להרחבה ECN. מחשב יעלה את הדגל לערך "1" לאחר קבלת הודעה בה דגל ECE היה פעיל.
  3. ECE – (ראשי תיבות של ECN-Echo):
    • אם דגל SYN נושא ערך "1" – מציין כי תקשורת ה-TCP בין שני המחשבים יכולה לעבוד בהרחבה ECN.
    • אם דגל SYN נושא ערך "0" – מציין כי במהלך תקשורת TCP רגילה הגיעה חבילת IP בה נעשה שימוש בשדה ECN.
  4. URG ‏(Urgent) – דגל המודיע על מידע דחוף אשר מיקומו נמצא בשדה "היסט למידע דחוף".
  5. ACK ‏(Acknowledgment) – דגל הנותן תוקף למספר בשדה "מספר האישור".
  6. PSH ‏(Push) – דגל המפעיל את פונקציית הדחיפה של הפרוטוקול.
  7. RST ‏(Reset) – דגל המבקש את אתחול הקשר בין המחשבים.
  8. SYN ‏(Synchronize) – דגל מציין את שלב הקמת הקשר, או (בשיתוף עם דגל ECE) הודעה במסגרת הרחבה ECN.
  9. FIN ‏(Finish) – דגל המציין את סיום הקשר. נשלח תאורטית פעם אחת מכל צד.
  • גודל חלון הקליטה (16 סיביות) – מספר הבתים אותם יכול המחשב לקלוט החל ממספר ההודעה שצוין בשדה מספר האישור (ACK).
  • סיכום ביקורת (16 סיביות) – checksum, מספר האימות של הפתיח וחלק מהפתיח של שכבת ה IP.
  • היסט למידע דחוף (16 סיביות) – אם דגל URG נושא ערך "1", הערך בשדה זה מציין את ההיסט למיקום מידע דחוף (לרוב אינו בשימוש).
  • אפשרויות שונות (0–40 בתים) – שדה אופציונלי שיכול להכיל בין היתר את גודל הסגמנט המרבי (Maximum Segment Size, MSS) לשימוש בפרוטוקול. גודל השדה נקבע על פי שדה "אורך הפתיח", אם האורך המצוין אינו גדול מ-5 שדה זה כלל לא נמצא.
  • ריפוד אפסים (0–4 בתים) – שדה שתפקידו למלא את הפתיח ב-"0" על מנת להגיע לכפולה שלמה של 32 סיביות.

קישורים חיצוניים

[עריכת קוד מקור | עריכה]
ויקישיתוף מדיה וקבצים בנושא Transmission Control Protocol בוויקישיתוף

הערות שוליים

[עריכת קוד מקור | עריכה]
  1. ^ Olivier Bonaventure, Computer Networking :Principles, Protocols and Practice (The Saylor Foundation, October 30, 2011), http://www.saylor.org/courses/cs402
  2. ^ "BBR: Congestion-Based Congestion Control". ACM Queue. doi:10.1145/3012426.3022184. נבדק ב-2016-12-06.