Структура протоколу ТСР, його формат і призначення полів
На транспортному рівні в Інтернеті застосовуються два основні протоколи - орієнтований на з'єднання протокол TCP і не вимагає з'єднань протокол UDP.
Протокол TCP (протокол управління переда-чий) був спеціально розроблений для надання надійного наскрізного байтового потоку в ненадійною мережі. Додатки, які покладаються на транспортний рівень в питанні надійності доставки даних, використовують протокол TCP. Дані в цьому випадку доставляються через мережу в правильному порядку. TCP - байт - потоковий двонаправлений протокол, орієнтований на з'єднання.
При розробці протоколу TCP основна увага приділялася його здатності адаптуватися до властивостей об'єднаної мережі і стійкості по відношенню до різних типів відмов.
Кожна машина, що підтримує протокол TCP, володіє транспортної сутністю TCP, що є або призначеним для користувача процесом, або частиною ядра системи, що управляє TCP-потоками і інтерфейсами з IP-рівнем. TCP-сутність приймає від локальних процесів призначені для користувача потоки даних, розбиває їх на шматки, не перевищують 64 Кбайт (на практиці зазвичай близько 1500 байт), і посилає їх у вигляді окремих IP-дейтаграм. Коли IP-дейтаграми з TCP-даними прибувають на машину, вони передаються ТСР - сутності, яка відновлює вихідний потік байтів.
Рівень IP не гарантує правильної доставки дейтаграм, тому саме TCP доводиться стежити за закінченими інтервалами очікування і займатися повторною пакетів, відновлювати повідомлення з прибулих не в тому порядку дейтаграм. Таким чином, протокол TCP повинен забезпечити надійність, бажану багатьма користувачами і не надається протоколом IP.
Незважаючи на гадану простоту, ТСР протокол досить складний і повинен вирішувати такі основні проблеми:
-відновлювати порядок сегментів;
-прибирати дублікати сегментів, в якому б вигляді (фрагментація) вони не надходили;
-визначати розумну затримку для підтверджень в отриманні сегмента;
-встановлювати і розривати з'єднання надійно;
При TCP обмін даними відбувається у вигляді сегментів. Сегмент складається з фіксованого 20-байтового заголовка, за яким можуть слідувати байти даних. Сегменти можуть і не містити даних. Такі сегменти часто застосовуються для передачі підтверджень і керуючих повідомлень.
Розмір сегментів визначається програмним забезпеченням TCP і обмежений двома межами. По-перше, кожен сегмент, включаючи TCP-заголовок, повинен примі-тися в 65 535-байтовое поле корисного навантаження IP-пакета. По-друге, в кожній мережі є максимальна одиниця передачі (MTU), і кожен сегмент повинен поміщатися в MTU.
При фрагментації кожен новий сегмент отримує свій IP-заголовок (20 байт), що збільшує накладні витрати.
-Поле «Порядковий номер» ідентифікує байт в потоці даних від відправляє TCP до приймаючого TCP. TCP нумерує кожен байт номером послідовності.
-Поле «Номер підтвердження» - це наступний номер послідовності, який очікує отримати відправник підтвердження. Це номер послідовності плюс 1 останнього успішно прийнятого байта даних.
-Поле «Довжина TCP-заголовка» означає розмір TCP-заголовка в 32-розрядних словах.
-Неиспользуемое зарезервоване 6-бітове поле. Повинно бути заповнене нулями.
За нею йдуть шість 1-бітових прапорів:
-Біт URG встановлюється в 1 у разі використання поля Покажчик на термінові дані, що містить зсув в байтах від поточного порядкового номера байта до місця розташування термінових даних. Таким чином, в протоколі TCP реалізуються переривають повідомлення.
-Біт АСК. будучи встановлений в 1, означає, що поле «Номер підтвердження» містить осмислені дані. В іншому випадку даний сегмент не містить підтвердження і поле «Номер підтвердження» просто ігнорується;
-Біт PSH є прапором PUSH, за допомогою якого відправник просить одержувача доставити дані з додатком відразу після отримання пакету, а не зберігати його в буфері, поки буфер і не наповниться, що одержувач може робити заради більшої ефективності;
-Біт RST використовується для скидання стану з'єднання, яке через збій хоста або з іншої причини потрапило в тупикову ситуацію. Крім того, він використовується для відмови від невірного сегмента або від спроби створити з'єднання. Якщо ви отримали сегмент з встановленим бітом RST, це означає наявність якоїсь проблеми;
-Біт SYN застосовується для установки з'єднання.
-Біт FIN використовується для розриву з'єднання. Він вказує, що у відправника більше немає даних для передачі. Однак навіть закривши з'єднання, процес може продовжувати отримувати дані невизначено довго. У сегментів з битами FIN і SYN є порядкові номери, що гарантує правильний порядок їх виконання.
Управління потоком в протоколі TCP здійснюється за допомогою ковзаючи-ного вікна змінного розміру.
-Поле «Розмір вікна» повідомляє, скільки байтів може бути послано після отримав підтвердження байта (скільки ще байт може прийняти одержувач).
-Поле «Контрольна сума» покликане підвищити надійність. Воно містить контрольну суму заголовка, даних і псевдо- заголовка.
-Поле «Покажчик на термінові дані» використовується спільно з керуючим бітом URG. Число, що поміщається в це поле, вказує на кінець термінових даних. Термінові дані передаються позачергово.
-Поле «Параметри» надає додаткові можливості, що не покриваються стандартним заголовком. Один з найбільш важливих параметрів дозволяє кожному хосту вказати максимальний розмір поля корисного навантаження, який він може прийняти. Якщо параметри займають не повністю 32 бітове поле то залишок заповнюється нулями. Ця дія називається вирівнюванням.