ти максимального розміру поля даних IP-пакета. В іншому випадку довелося б виконувати фрагментацію, тобто ділити сегмент на кілька частин, для того, щоб він вмістився у IP-пакет.
Аналогічні проблеми вирішуються і на мережевому рівні. Для того, щоб уникнути фрагментації, повинен бути обраний відповідний максимальний розмір IP-пакета. Однак при цьому повинні бути прийняті до уваги максимальні розміри поля даних кадрів (MTU) всіх протоколів канального рівня, що використовуються в мережі. Максимальний розмір сегмента не повинен перевищувати мінімальне значення на множині всіх MTU складовою мережі.
У протоколі TCP також, як і в UDP, для зв'язку з прикладними процесами використовуються порти. Номери портам присвоюються аналогічним чином: є стандартні, зарезервовані номери (наприклад, номер 21 закріплений за сервісом FTP, 23 - за telnet), а менш відомі програми користуються довільно обраними локальними номерами.
Однак у протоколі TCP порти використовуються трохи іншим способом. Для організації надійної передачі даних передбачається встановлення логічного з'єднання між двома прикладними процесами. В рамках з'єднання здійснюється обов'язкове підтвердження правильності прийому для всіх переданих повідомлень, і при необхідності виконується повторна передача. З'єднання в TCP дозволяє вести передачу даних одночасно в обидва боки, тобто полнодуплексную передачу.
З'єднання в протоколі TCP ідентифікується парою повних адрес обох взаємодіючих процесів (кінцевих точок). Адреса кожної з кінцевих точок включає IP-адресу (номер мережі і номер комп'ютера) і номер порту. Одна оконечная точка може брати участь у кількох з'єднаннях.
При встановленні з'єднання одна зі сторін є ініціатором. Вона посилає запит до протоколу TCP на відкриття порту для передачі (active open).
Після відкриття порту протокол TCP на стороні процесу-ініціатора надсилає запит процесу, з яким потрібно встановити з'єднання.
Протокол TCP на приймальній стороні відкриває порт для прийому даних (passive open) і повертає квитанцію, що підтверджує прийом запиту.
Для того щоб передача могла вестися в обидві сторони, протокол на приймальній стороні також відкриває порт для передачі (active port) і також передає запит до протилежної сторони.
Сторона-ініціатор відкриває порт для прийому і повертає квитанцію. З'єднання вважається встановленим. Далі відбувається обмін даними в рамках даного з'єднання.
Повідомлення протоколу TCP називаються сегментами і складаються з заголовка і блока даних.
Порт джерела (SOURS PORT) займає 2 байта, ідентифікує процес-відправник;
Порт призначення (DESTINATION PORT) займає 2 байта, ідентифікує процес-одержувач;
Послідовний номер (SEQUENCE NUMBER) займає 4 байта, вказує номер байта, який визначає зміщення сегмента щодо потоку даних, що відправляються;
Підтверджений номер (ACKNOWLEDGEMENT NUMBER) займає 4 байта, містить максимальний номер байта в отриманому сегменті, збільшений на одиницю; саме це значення використовується як квитанції;
Довжина заголовка (HLEN) займає 4 біта, вказує довжину заголовка сегмента TCP, виміряну в 32-бітових словах. Довжина заголовка не фіксована і може змінюватися залежно від значень, що встановлюються в поле Опції;
Резерв (RESERVED) займає 6 бітів, поле зарезервовано для подальшого використання;
Кодові біти (CODE BITS) займають 6 бітів, містять службову інформацію про тип даного сегмента, що задається установкою в одиницю відповідних біт цього поля: - термінове повідомлення;- Квитанція на прийнятий сегмент;- Запит на відправку повідомлення без очікування заповнення буфера;- Запит на відновлення з'єднання;- Повідомлення використовується для синхронізації лічильників переданих даних при встановленні з'єднання;- Ознака досягнення передавальної стороною останнього байта в потоці переданих даних.
Вікно (WINDOW) займає 2 байта, містить оголошується значення розміру вікна в байтах;
Контрольна сума (CHECKSUM) займає 2 байта, розраховується по сегменту;
Покажчик терміновості (URGENT POINTER) займає 2 байта, використовується спільно з кодовим бітом URG, вказує на кінець даних, які необхідно терміново прийняти, незважаючи на переповнення буфера;
Опції (OPTIONS) - це поле має змінну довжину і може бути взагалі відсутнім, максимальна величина поля 3 байта; використовується для вирішення допоміжних завдань, наприклад, при виборі максимального розміру сегмента;
Заповнювач (PADDING) може мати змінну довжину, являє собою фіктивне п...