Стану tcp-сеансу

Книга присвячена сімейства операційних систем UNIX і містить інформацію про принципи організації, ідеології та архітектури, які об'єднують різні версії цієї операційної системи.

У книзі розглядаються: архітектура ядра UNIX (підсистеми вводу / виводу, управління пам'яттю і процесами, а також файлова підсистема), програмний інтерфейс UNIX (системні виклики і основні бібліотечні функції), призначена для користувача середовище (командний інтерпретатор shell, основні команди і утиліти) і мережна підтримка в UNIX (протоколів сімейства TCP / IP, архітектура мережевої підсистеми, програмні інтерфейси сокетов і TLI).

Для широкого кола користувачів

Книга: Операційна система UNIX

Стану TCP-сеансу

Як вже говорилося, передача даних з використанням протоколу TCP передбачає попереднє встановлення зв'язку, або створення логічного TCP-каналу. Ця попередня фаза покликана посилити надійність протоколу. В процесі цієї фази визначається початок TCP-потоків в обох напрямках, їх характеристики (наприклад, максимальний розмір вікна), в цей же час можуть бути виявлені "напівзруйновані" TCP-канали минулих сеансів передачі, некоректно закриті, наприклад, з огляду на аварійної зупинки однієї з сторін. Сторони вибирають довільні початкові порядкові номери потоків, щоб зменшити ймовірність обробки сегментів, що належать "старим" сеансів. [71]

Початкова фаза сеансу передачі отримала назву "потрійне рукостискання" (three-way handshake), яке досить точно відображає процес обміну службовими сегментами між сторонами. Цей процес є асиметричним - одна зі сторін, звана клієнтом, ініціює початок сеансу, посилаючи іншій стороні - сервера сегмент SYN. ​​[72] Як правило цей сегмент є числом службовим, тобто не містить корисних даних, його заголовок визначає номер порту і початковий порядковий номер потоку клієнт-сервер. Якщо сервер готовий прийняти дані від клієнта, він створює логічний канал (розміщуючи відповідні структури даних) і відправляє клієнту сегмент з встановленим початковим порядковим номером потоку сервер-клієнт і прапорами SYN і ACK. підтверджує отримання сегмента SYN і висловлює готовність сервера до отримання даних. Нарешті, і це третє рукостискання, клієнт відповідає сегментом з встановленим прапором ACK. який підтверджує одержання відповіді від сервера і тим самим завершальним фазу створення TCP-каналу. Процес встановлення зв'язку в TCP-сеансі представлений на рис. 6.12.

Стану tcp-сеансу

Мал. 6.12. Встановлення зв'язку, передача даних і завершення TCP-сеансу

Після цього обидві сторони починають передачу TCP-сегментів, кожен з яких містить підтвердження отриманих даних і нове значення вікна. Починаючи з підтвердженого октету, джерело може передати, не чекаючи підтвердження, кількість даних, визначених значенням вікна. Якщо відправник не одержує підтвердження на послані дані протягом певного проміжку часу, він вважає, що дані загублені, і їх передача повторюється, починаючи з останнього підтвердженого октету. Оскільки надійність передачі гарантується протоколом, для даних додатка, переданих, але не підтверджених, протокол зберігає копію, яка знищується після отримання підтвердження або знову передається при відсутності такого. Отримання дубльованих даних також підтверджується, хоча самі дані знищуються, оскільки дублювання могло бути викликано неотриманням підтвердження. Якщо одна зі сторін отримує невпорядковані дані, вони, як правило, зберігаються до отримання саме ті послідовних сегментів. Зрозуміло, отримання таких невпорядкованих даних не підтверджується, оскільки підтвердження відправляється тільки на отриманий безперервний послідовний потік октетів.

Завершення сеансу в TCP відбувається в кілька етапів. Будь-яка зі сторін може завершити передачу даних, відправивши сегмент з встановленим прапором FIN (рис. 6.12). Отримання такого сегмента підтверджується іншою стороною і еквівалентно досягненню кінця файлу при його читанні. Однак інша сторона може продовжувати передавати дані, також згодом завершивши передачу сегментом FIN. Підтвердження цього сегмента повністю руйнує канал і завершує сеанс. Для того щоб гарантувати синхронізацію завершення сеансу, сторона, що відправила підтвердження на останній сегмент FIN. повинна підтримувати сеанс досить довго, щоб мати можливість знову підтвердити повторні сегменти FIN даного сеансу в разі, коли підтвердження не було отримано іншою стороною.

На рис. 6.12 також проілюстровані стану комунікаційних вузлів TCP-каналу.

Як видно з малюнка, початковий стан вузла (сервера або клієнта) - стан CLOSED. Готовність сервера до обробки ініціюють запитів від клієнта визначається переходом його в стан LISTEN. З цього моменту сервер може приймати та обробляти ініціюють сеанс сегменти SYN. При відправленні такого сегмента клієнт переходить в стан SYN-SENT і чекає у відповідь запиту від сервера. Сервер при отриманні сегмента також відправляє сегмент SYN з підтвердженням ACK і переходить в стан SYN-RECEIVED. Підтвердження від клієнта завершує "рукостискання" і сеанс переходить в стан ESTABLISHED. Після завершення обміну даними одна зі сторін (наприклад, клієнт) відправляє сегмент FIN, переходячи при цьому в стан FIN-WAIT-1. Прийнявши цей сегмент інша сторона (наприклад, сервер) відправляє підтвердження ACK і переходить в стан CLOSE-WAIT, при цьому канал стає симплексним - передача даних можлива тільки в напрямку від сервера до клієнта. Коли клієнт отримує підтвердження він переходить в стан FIN-WAIT-2, в якому знаходиться до отримання сегмента FIN. Після підтвердження отримання цього сегмента канал остаточно руйнується.

Розшифровка станів наведена в табл. 6.5.

Таблиця 6.5. Стану TCP-сеансу

Схожі статті