Я експериментував з параметрами TCP в Linux (з ядром 3,5). В основному щодо цього зв’язку:
Сервер: Гігабітна висхідна лінія в центрі обробки даних, фактична пропускна здатність (за рахунок спільних посилань) становить близько 70 Мб / с при тестуванні з іншого центру обробки даних.
Клієнт: Гігабітний локальний ланцюг, підключений до волокна 200 Мбіт. Отримання тестового файлу фактично досягає 20 Мб / с.
Затримка: близько 50 м в обидва кінці.
Віддалений сервер використовується як сервер файлів для файлів в діапазоні від 10 до 100 Мб. Я помітив, що на використання initcwnd 10 на час передачі цих файлів сильно впливає повільний старт TCP, для завантаження 10 Мб (3,5 максимальна швидкість досягнуто: 3,3 Мб / с) потрібно 3,5 секунди, тому що він починається повільно, а потім наростає. закінчується до досягнення максимальної швидкості. Моя мета - налаштувати мінімальний час завантаження цих файлів (тому не найвища пропускна здатність або найменша затримка в обидва кінці, я готовий пожертвувати обома, якщо це зменшує фактичний час, необхідний для завантаження файлу)
Тому я спробував простий розрахунок, щоб визначити, яким повинен бути ідеальний initcwnd, ігноруючи будь-які інші зв’язки та можливий вплив на інших. Продукт із затримкою пропускної здатності становить 200 Мбіт / с * 50 мс = 10 Мбіт або 1,310,720 байт. Зважаючи на те, що initcwnd встановлений в одиницях MSS і якщо припустити, що MSS становить близько 1400 байт, для цього знадобиться встановити: 1.310.720 / 1400 = 936
Це значення дуже далеке від типового (10 * MSS в Linux, 64kb в Windows), тому не здається гарною ідеєю встановити його так. Які очікувані недоліки конфігурації цього типу? Наприклад:
- Чи вплине це на інших користувачів тієї ж мережі?
- Чи може це створити неприйнятні перевантаження для інших з'єднань?
- Затоплення маршрутизаторів-буферів десь на шляху?
- Збільшити вплив невеликої кількості пакетних втрат?
70 MB/s
а не мегабіти? Просто шукаю роз'яснення.