Summary

  • Авторы RFC 914 считали, что один символ Telnet занимает пакет TCP/IP длиной 41 байт. Для линии 1200 бод они оценивали передачу примерно в 0,3 секунды, а полезную скорость для одиночных символов — примерно в 30 бод при оговорённых в документе условиях.
  • Thinwire I сокращал пример до 17 байт, Thinwire II — до 13. Thinwire III переносил сетевые и транспортные функции на шлюз и давал расчётную среднюю полезную скорость около 900 бод. Экономия в канале меняла распределение работы.

Человек хотел отправить букву, а протокол выписывал ей целый переезд. Именно так выглядела задача, которую Дэвид Фарбер, Гэри Делп и Томас Конте разобрали в сентябре 1984 года. Персональные машины за 3–10 тысяч долларов можно было разместить в кабинете или дома. Выделенная линия на 56 килобод обходилась дорого и появлялась не сразу; телефонные модемы на 1200 и 2400 бод были доступнее. Выход в сеть казался близким. Стоило нажать клавишу, как один байт содержимого отправлялся в сопровождении ещё сорока байтов TCP/IP. У транспорта был удивительный багаж для такого маленького пассажира.

В документе о Thinwire приведён расчёт: минимальный 41-байтовый пакет Telnet занимает на линии 1200 бод около 0,3 секунды. Если отправлять по одному символу, полезная скорость соответствует примерно 30 бод. Авторы считали, что ограничивает только сама линия, и принимали её за синхронную. Прерывания, вычисления и формирование кадров могли добавить к времени ещё 10–50%. Локальное отображение набранного текста и редактирование строки облегчали часть задач. Приложению, которому требовалась передача каждого символа, приходилось платить полную цену.

Первый вариант, Thinwire I, был похож на правку старого листа. Передающая и принимающая стороны хранили предыдущий пакет, а следующий сообщал, в каких местах и сколько байтов заменить. В типичном примере вместо 41 байта уходило 17; расчётная полезная скорость повышалась до 70 бод. Память об одном пакете помогала, пока новые пакеты были на него похожи. Если по линии перемежались разные классы трафика, общий образец терял сходство с очередным пакетом. Экономия оказывалась скромной именно там, где работа становилась разнообразнее.

Thinwire II заводил отдельный образец для каждого TCP-соединения. Битовая карта помечала изменившиеся поля заголовка, а короткие приращения заменяли повторяющиеся длинные значения. В примере 41 байт превращался в 13, что авторы переводили примерно в 95 полезных бод для одиночных символов. Но на компьютере требовалась память для нескольких образцов, на шлюзе — таблицы соединений. Если две копии истории расходились, поток останавливался. Нужны были надёжный последовательный канал и периодические полные пакеты для восстановления согласованности. Неизвестный компрессору протокол пересылался без сокращения.

Проводу стало легче потому, что два устройства взяли на себя обязанность помнить одно и то же.

Третий вариант менял не упаковку, а исполнителя. В Thinwire III центральный шлюз открывал для персонального компьютера TCP- и UDP-соединения с Интернетом. Между компьютером и шлюзом шёл один надёжный последовательный поток с несколькими логическими каналами данных и команд. Авторы оценивали среднюю полезную скорость примерно в 900 бод. Шлюз становился агентом машины при выходящих соединениях. Компьютер мог заранее организовать пассивное открытие на шлюзе для своего сервиса, но произвольное входящее соединение уже не попадало к нему как к полноценному узлу Интернета. Тонкий провод выигрывал, а посредник получал важную роль.

Карточка RFC Editor сегодня называет документ историческим. Три идеи предлагались для обсуждения, а приведённые скорости были проектными оценками. В этом и ценность текста: перед инженером лежали три честно различающихся счёта. Можно сэкономить немного байтов, можно оплачивать большую экономию общей памятью, можно передать сетевую работу шлюзу. Вопрос о клавише быстро становился вопросом о том, кому доверен выход в сеть.