Смешали TCP — почему появился стандарт RFC 9293

Новый стандарт объединил в себе большинство изменений в спецификации протокола. Сегодня поговорим о том, что включили в обновленный документ.

/ Unsplash.com / Mike Petrucci/ Unsplash.com / Mike Petrucci

Слишком много дополнений

Стек протоколов TCP/IP был разработан около пятидесяти лет назад. Документ зарегистрировали как RFC 675. Далее его несколько раз редактировали. По итогу в 1981 году появились RFC 791 (Internet Protocol) и RFC 793 (Transmission Control Protocol).

Спецификацию TCP постепенно дополняли — например, алгоритмами контроля перегрузки. База осталась прежней, но современный протокол во многом отличается от своей первой версии. Даже аббревиатура TCP сегодня расшифровывается иначе. Теперь это Transmission Control Protocol вместо Transmission Control Program.

Изменения в спецификацию вносили в формате новых RFC, поскольку эти документы нельзя править после публикации. И число изменений, накопившихся за прошедшие годы, начало доставлять определённые неудобства. Разработчикам встраиваемых систем приходилось сверяться с десятками документов. Так, пользователь Hacker News отметил, что «перекопал» порядка двадцати RFC, когда разрабатывал аппаратную платформу.

Инженеры IETF начали переписывать стандарт TCP в формате единого документа, добавляя в него исправления, еще в 2013 году. Наконец, после десятков ревизий, в августе этого года они опубликовали финальную версию — RFC 9293.

Что включили в новый RFC

В новый «запрос на изменение» вошли только обратно совместимые дополнения. Например, в обновленную спецификацию включили RFC 1323, который увеличивает производительность передачи данных на каналах с большой задержкой. В список также попали уточнения из информационного RFC 6691. Он описывает оптимальные значения параметра Maximum Segment Size (MSS), который определяет максимальный размер блока данных для пакета.

В прошлом разработчики сталкивались с так называемым «синдромом бестолкового окна». Он возникает, когда сервер не успевает обрабатывать все поступающие данные и просит клиентов посылать информацию меньшими блоками (как бы уменьшая окно). Окно бестолковое, потому что пересылаемые блоки перестают вмещать даже заголовки пакетов, что делает процесс трансляции данных совершенно неэффективным. Для управления пакетами был принят RFC 1122, который теперь часть RFC 9293.

В состав нового документа вошли и другие RFC, хотя он получился не исчерпывающим. Ряд необязательных алгоритмов (например, для контроля перегрузки) все же не стали частью спецификации.

/ Unsplash.com / RhondaK Native Florida Folk Artist/ Unsplash.com / RhondaK Native Florida Folk Artist

Стоит заметить, что ситуация, когда один стандарт RFC заменяет собой другой, выпущенный много лет раньше, вполне обычная. Буквально в июле вместо RFC 6486 был принят RFC 9286. Он посвящен имплементации специализированной инфраструктуры открытых ключей (RPKI). Поэтому вероятно, что стандарт RFC 9293 тоже устареет. Ему на смену придет дополненный «запрос на изменение» или совершенно новый протокол. Хотя эта перспектива и выглядит крайне маловероятной в обозримом будущем.

Дополнительное чтение о протоколах в нашем блоге на Хабре:

© Habrahabr.ru