Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lektsiya_6.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
187.16 Кб
Скачать

Сегменти

На транспортному рівні TCP групує кілька байтів в пакет, званий сегментом. TCP додає заголовок до кожного сегмента (з метою контролю) і доставляє сегмент на IP-рівень для передачі. Сегмент інкапсулюється і передається в IP-дейтаграми. Сегменти можуть бути отримані випадковим чином, втрачені або спотворені і пошкоджені. Всі ці сегменти обробляються TCP і передаються процесу на стороні прийому, який не підозрює про ці дії. Рис. 5.3. показує, як сегменти з байтів переносяться в буфера.

Рис. 5.3.  TCP сегменти

Зауважимо, що сегменти можуть відрізнятися розміром. Реально сегменти переносять сотні, якщо не тисячі байт. TCP пропонує повне дуплексне обслуговування, де дані можуть рухатися в обох напрямах одночасно. Кожен TCP тому має буфер прийому і передачі і посилає сегменти в обидва напрямки. TCP, на відміну від UDP, – протокол, орієнтований на з'єднання. Коли процес на стороні посилає і приймає дані від іншого процесу на стороні B, необхідно провести наступні дії:

1. TCP на стороні інформує TCP на стороні B і отримує підтвердження від сторони В. 2. TCP боку і сторони TCP B обмінюються даними в обох напрямках. 3. Після того як у обох процесів не залишається більше даних для передачі і буфери порожні, обидва TCP знищують буфери.

Зауважимо, що це не фізичне, а віртуальне з'єднання. TCP-сегмент інкапсулюється в IP-дейтаграму і може посилати дані в будь-якому порядку або втратити їх, або спотворити, або передати повторно. Кожна дейтаграма може використовувати різний шлях для досягнення пункту призначення. Фізичного з'єднання не відбувається. TCP створює середовище, орієнтовану на потік у кожному напрямку, в якій він бере відповідальність за доставку байтів в заданому порядку на іншу сторону.TCP – достовірний транспортний протокол. Він використовує механізм підтвердження для перевірки збереження і нормальності прибувають даних.

Нумерація байтів

Хоча програмне забезпечення TCP зберігає трасу передачі сегмента, який посланий чи отриманий, він не має поля, в якому зазначено значення номера сегмента. Замість цього є два поля – порядковий номер байта і номер байта підтвердження. Ці два поля посилаються на номер байта, а не на номер сегмента.

TCP нумерує всі байти даних, які передаються в з'єднанні. Нумерація залежить від кожного напрямку. Коли TCP отримує байти даних від процесу і накопичує їх у буферах передачі, він нумерує їх. Нумерація не обов'язково починається від 0 – вона починається з випадкового числа. TCP генерує випадковий номер між 0 і 2 ^ 32-1 для номера першого байта. Наприклад, якщо випадає випадковий номер 1057 і всього надсилається 6000 байт, байти нумеруються від 1057 до 7056. Після того як байти пронумеровані, TCP призначає порядковий номер для кожного сегмента, який надсилається. Порядковий номер для кожного сегмента – це номер першого байта, який переноситься в цьому сегменті.

Приклад 1

Уявімо собі, що TCP-з'єднання передає файл об'ємом 6000 байт. Перший байт пронумерований 10010. Яким буде порядковий номер для кожного сегмента, якщо дані посилаються на п'яти сегментах, в перших чотирьох сегментах переноситься 1000 байт, а в останньому – 2000 байт?

Розв’язання Нижченаведене показує порядкові номери всіх сегментів:

Номер підтвердження

TCP забезпечує дуплексний зв'язок. Коли з'єднання встановлено, обидві сторони можуть передавати і приймати дані одночасно. Кожна сторона нумерує байти, зазвичай з різними початковими номерами. Порядковий номер у кожному напрямку показує перший байт, який переноситься в сегменті. Кожна сторона використовує номер підтвердження, щоб підтвердити отримані їй байти. Однак номер підтвердження визначає номер наступного байта, який кожна сторона очікує отримати. Крім того, номер підтвердження є інтегральним – це означає, що сторона прийняла номер останнього байта, що він отриманий коректно, додає до нього 1 і встановлює цю суму як номер підтвердження. Термін "інтегральна" тут означає, що якщо сторона використовує 5643 як номер підтвердження, вона отримала всі байти, починаючи з 5642 і нижче. Зауважимо, що це не означає, що сторона отримала 5642 байта, тому що перший байт може не мати початкового номера 0.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]