
- •Лекція 6. Протоколи транспортного рівня: tcp, udp, стек протоколів tcp/ip. Управління tcp з’єднанням.
- •Сегменти
- •Нумерація байтів
- •Управління потоком
- •Протокол "ковзного вікна"
- •Вікно приймача
- •Ковзне вікно передавача
- •Синдром, створюваний передавачем
- •Алгоритм Нагла (Nagle's algorithm)
- •Синдром, створюваний приймачем
- •Спотворений сегмент
- •Втрата підтвердження
- •Таймеры tcp
- •Обчислення rtt
- •Обчислення rtt з урахуванням повторної передачі
- •Час наполегливості
- •Черговий таймер
Таймеры tcp
TCP використовує чотири таймери, які показані на рис. 5.13.
Рис. 5.13. TCP-таймери
Таймер повторної передачі
Щоб контролювати втрати або видалення сегментів, TCP застосовує таймер, який контролює час повторної передачі і час очікування підтвердження сегмента. Коли TCP посилає сегмент, він запускає таймер повторної передачі для цього конкретного сегмента. При цьому можуть виникнути дві ситуації:
1. Якщо підтвердження отримано для цього конкретного сегмента перш, ніж закінчиться контрольний час, то таймер стирається.
2. Якщо контрольний час таймера закінчиться перш, ніж прийде підтвердження, сегмент ретранслюється, і таймер включиться повторно.
Обчислення часу повторної передачі
TCP – протокол транспортного рівня, кожне з'єднання пов'язує два протоколи TCP, які можуть працювати в одній фізичній мережі або працювати з іншою мережею, можливо, навіть розміщеної на іншому боці земної кулі. Іншими словами, кожне з'єднання створює свій шлях, довжина якого може повністю відрізнятися від іншого шляху, створеного іншим з'єднанням. Це означає, що TCP не може використовувати один і той же час повторної передачі для всіх з'єднань. Вибір фіксованого часу повторної передачі для всіх з'єднань може в результаті привести до серйозних наслідків. Якщо час повторення передачі не відповідає часу для досягнення сегментом пункту призначення і підтвердження за певний час не досягне вихідного пункту, то це може призвести до повторної передачі сегмента, який ще в дорозі. З іншого боку, якщо час повторення більше, ніж необхідно для короткого шляху, це може призвести до затримки прикладних програм. Навіть для одиночного з'єднання час повторення передачі не повинно бути фіксованим. З'єднання може послати сегменти і отримувати підтвердження швидше в період відсутності трафіку, ніж у періоди перевантаження. TCP застосовує динамічний час повторення, яке відрізняється для кожного з'єднання і яке може змінюватися протягом одного і того ж з'єднання. Час повторної передачі може бути виконане динамічно на базі часу передачі "туди і назад" (round-trip time – RTT). З цією метою використовується кілька формул. Найбільш загальна формула для обчислення часу повторення передачі є подвійне RTT:
Час повторення передачі = 2 x RTT.
Обчислення rtt
Тепер питання: як обчислити саме RTT? RTT теж обчислюється динамічно. Є два методи. Перший метод – TCP використовує опцію мітки часу, коли при посилці сегмента і його підтвердженні зазначається час відправлення. При другому методі TCP посилає сегмент, запускає таймер і чекає підтвердження. Це вимір часу між посланим сегментом і отриманим підтвердженням дає значення RTT. Значення RTT використовується в обчисленнях часу повторення передачі - у відповідності з наступною формулою:
RTT = a x попереднє RTT + (1 - a) – поточне RTT.
Значення "a" зазвичай дорівнює 90 відсоткам. Це означає, що нове RTT – це 90 відсотків попереднього значення RTT плюс 10 відсотків значення поточного RTT. Наприклад, якщо попереднє RTT 250 мікросекунд, і TCP приймає в цей момент сегмент, підтверджений через 70 мкс, значення нового RTT і час повторної передачі одно:
RTT = 90% x 250 + 10% x 70 = 232 мкс.
Час повторної передачі = 2 x 232 = 464 мкс.